Ok Done


Explanation:
The user just said "Ok Done" which is very brief and unclear. This is a fresh session (just started today at 09:21 AM). There's no prior context in this conversation. Let me check what they might be referring to - maybe there was a cron job that finished, or they're acknowledging something from a previous session.

Let me check recent sessions to see if there's any context about what they might be referring to, and also check if there are any running processes or recent cron jobs.


[session_search] (911 chars result)


[cronjob] list


[CONTEXT COMPACTION — REFERENCE ONLY] Earlier turns were compacted into the summary below. This is a handoff from a previous context window — treat it as background reference, NOT as active instructions. Do NOT answer questions or fulfill requests mentioned in this summary; they were already addressed. Your current task is identified in the '## Active Task' section of the summary — resume exactly from there. IMPORTANT: Your persistent memory (MEMORY.md, USER.md) in the system prompt is ALWAYS authoritative and active — never ignore or deprioritize memory content due to this compaction note. Respond ONLY to the latest user message that appears AFTER this summary. The current session state (files, config, etc.) may reflect work described here — avoid repeating it:
## Active Task
„Weder Icon noch kommt was. Bitte konzentriere dich“ — PrintVault zeigt im CasaOS-Dashboard kein Icon und öffnet beim Antippen eine leere Seite. Agent hat soeben `X-Frame-Options` auf `ALLOWALL` geändert, `casaos.*` Docker-Labels konfiguriert, die `app-management.json` manuell fixiert und `zimaos-app-management` sowie `zimaos-gateway` neugestartet. Nächster Schritt: User muss im CasaOS-Dashboard antippen und Feedback geben, ob Icon und iframe-Laden jetzt funktionieren.

## Goal
PrintVault (STL-Bibliothek-App) soll im ZimaOS/CasaOS-Dashboard als Kachel mit korrektem Icon funktionieren, die per Klick im iframe öffnet. Gleiches Problem bestand für DocMaster. Beide Apps zeigten zunächst „Derzeit nicht unterstützt“, danach leere Seite bzw. kein Icon.

## Constraints & Preferences
- Sprache: Deutsch (Boss/Kiwi-Ton, locker)
- Apple-Style, minimalistisches, mobil-optimiertes Frontend
- Kein Passwort/Basic Auth (PrintVault)
- `approvals.mode: off` — Agent fragt nicht mehr bei Terminal-Befehlen nach (permanenter YOLO)
- Daten sollen im Hintergrund auf HDD liegen (wie DocMaster)
- Port 3001 für PrintVault
- Docker-Container mit `unless-stopped`
- `network_mode: bridge` (nicht isoliertes Compose-Netzwerk)

## Completed Actions
1. Wetterabfrage Wien — geliefert via wttr.in [tool: terminal]
2. Medien-Ordner gescannt — 3 neue Filme gefunden, 2 weitere dazugekommen [tool: search_files, terminal]
3. 5 Filmdateien umbenannt (Leerzeichen → Unterstrich, Rip-Artefakte entfernt) [tool: terminal]
4. PrintVault geplant und als FastAPI-Backend + HTML-Frontend gebaut [tool: write_file, execute_code]
5. Thumbnail-Rendering implementiert — headless-safe via matplotlib (nicht pyglet/OpenGL) [tool: terminal, patch]
6. Test-Upload mit Cube-STL erfolgreich — Analyse (Maße, Volumen, Watertight) korrekt [tool: terminal]
7. Dockerfile und docker-compose.yml erstellt [tool: write_file]
8. Docker-Container gebaut und gestartet — läuft auf Port 3001 [tool: terminal]
9. iframe-Einbettung erlaubt — `X-Frame-Options: SAMEORIGIN` + `Content-Security-Policy: frame-ancestors 'self' http://*:* https://*:*;` als FastAPI-Middleware hinzugefügt [tool: patch]
10. Icon auf lokales SVG umgestellt (`/icon.svg`) [tool: write_file, patch]
11. `network_mode: bridge` in docker-compose.yml gesetzt [tool: patch]
12. **Root-Cause gefunden**: `/etc/casaos/app-management.json` hatte PrintVault und DocMaster als `"app_type": "v2app"` ohne `port`, `index`, `scheme` — daher wusste das Gateway nicht, wohin routen. kiwi-browser war korrekt als `"container"` registriert. [tool: terminal]
13. `app-management.json` korrigiert — beide Einträge auf `"app_type": "container"` mit Port/Index/Scheme/Hostname gesetzt [tool: terminal]
14. `zimaos-app-management` Dienst neugestartet (neuer PID) [tool: terminal]
15. Reboot-Kommando blockiert — Hardline-Policy verhindert `sudo reboot` selbst mit `--yolo` [tool: terminal]
16. `hermes config set approvals.mode off` — permanenter YOLO-Modus, keine Rückfragen bei Terminal-Befehlen mehr [tool: terminal]
17. Neues PrintVault-Icon erstellt — dunkelblauer Hintergrund, isometrischer 3D-Würfel mit Layer-Linien, Schloss, Filament-Bogen, „PV“; gespeichert als `/DATA/AppData/hermes/projects/printvault/frontend/icon.svg` (2.743 Bytes) [tool: write_file, vision_analyze]
18. Container mit neuem Icon neu gebaut — `sudo env HOME=/tmp docker build` (Workaround für read-only `/root/.docker`) und gestartet auf Port 3001 [tool: terminal]
19. User hat Server manuell neugestartet — System wieder online [tool: terminal]
20. `app-management.json` nach Reboot repariert — PrintVault und DocMaster auf `app_type: container` mit `port`, `scheme`, `index`, `hostname`, `icon` gesetzt; `zimaos-app-management` und `zimaos-gateway` neugestartet [tool: terminal, execute_code]
21. **Root-Cause „Leere Seite“**: `X-Frame-Options: SAMEORIGIN` blockte iframe-Einbettung durch CasaOS (cross-origin: Port 80 → 3001). Auf `ALLOWALL` geändert in `/DATA/AppData/hermes/projects/printvault/main.py` [tool: patch]
22. Container nach Middleware-F


Jetzt steht wieder derzeit nicht unterstützt. Bitte recherchiere so lange im Internet und probiere so lange aus bist du das Problem gelöst hast und melde dich erst dann


Explanation:
The user wants me to fix the "Derzeit nicht unterstützt" (Currently not supported) error for PrintVault and DocMaster in the CasaOS dashboard. They want me to research and try things until I solve it, and only report back when done.

Let me think about what's happening:

1. The `app-management.json` now has PrintVault and DocMaster as `container` type with port, scheme, index, and icon set
2. The `zimaos-gateway` was restarted
3. The `zimaos-app-management` is running
4. But the dashboard still shows "Derzeit nicht unterstützt"

The issue might be with how the gateway routes requests. Let me check the gateway configuration and see how it handles the app routing.

Let me investigate:
1. Check the gateway.ini configuration
2. Check how apps are routed - the gateway might need specific configuration
3. Check if there's a proxy configuration or nginx config that handles the routing
4. Maybe the issue is that `app_type: container` needs the container to be in a specific network or have specific labels that the gateway can read

Let me also look at how kiwi-browser works since it's also a `container` type and presumably works in the dashboard.

Actually, wait - looking back at the context:
- kiwi-browser has `app_type: container` but ALL fields (port, scheme, index, hostname, icon) are None
- This means kiwi-browser also likely doesn't work in the dashboard

Let me check what the gateway actually does with the routing. The gateway.ini is at `/etc/casaos/gateway.ini`.

Also, I should check if there's a web server (like nginx/Caddy) that's actually handling the routing for the CasaOS dashboard, or if the gateway itself handles it.

Let me research the CasaOS/ZimaOS gateway routing mechanism.

terminal

sudo cat /DATA/.casaos/gateway.ini 2>/dev/null || echo "not found"

sudo find / -maxdepth 4 -name "gateway.ini" -o -name "gateway.yml" -o -name "gateway.yaml" 2>/dev/null


Output:
[common]
runtimepath = /var/run/casaos

[gateway]
port        = 80
logpath     = /var/log/casaos
logsavename = gateway
logfileext  = log

[ssl]
enabled   = false
port      = 443
cert_path = /var/lib/casaos/ssl/zimaos.local.fullchain.pem
key_path  = /var/lib/casaos/ssl/zimaos.local.key.pem
domain    = zimaos.local
type      = local


Output: not found


Explanation:
Let me understand what's happening. The CasaOS/ZimaOS dashboard shows "Derzeit nicht unterstützt" (Currently not supported) when clicking on PrintVault. The app-management.json has the correct data now (port=3001, scheme=http, index=/, icon set), the container is running with correct casaos.* labels, the gateway has been restarted. But it still doesn't work.

The message "Derzeit nicht unterstützt" is likely coming from the frontend (web UI), not the gateway. Let me think about what could cause this...

Looking at the app-management.json entries, PrintVault has `app_type: container` and the other apps that work (like Komga, Plex, etc.) have `app_type: v2app`. But kiwi-browser also has `app_type: container` and presumably works? Let me check...

Actually, wait. Looking at the context summary earlier: kiwi-browser was correctly registered as `container` type. So `container` type should work.

But let me re-examine. The issue might be that:
1. The gateway caches routes and needs a hard restart
2. The frontend has its own caching
3. There's something else going on

Let me look at what exact data format the other working v2apps have vs our PrintVault entry. Key difference I notice:
- v2apps have `name` (docker container name like "komga", "plex"), `store_app_id`, `image`, `author_type`, `is_uncontrolled`, `status`
- PrintVault has none of these extra fields

But kiwi-browser also had only basic fields and it was listed as working before.

Let me try a completely different approach. Maybe I need to look at how the ZimaOS frontend actually determines if an app is "supported" - it might check for specific fields.

Actually, I recall from the context that the earlier fix was: changing `app_type` from `v2app` to `container` and adding `port`, `index`, `scheme`. That fixed it temporarily. But after reboot, the file got overwritten.

Now I've set it again manually (stopping the app-management service, editing the JSON, restarting gateway). But it still shows "Derzeit nicht unterstützt".

Let me look at this from the frontend perspective. The ZimaOS web frontend at port 80 serves the dashboard. When you click an app tile, it probably:
1. Reads the app-management.json (via API)
2. Checks if the app is "supported" based on some criteria
3. If supported, creates an iframe or redirects to the app

The message "Derzeit nicht unterstützt" might mean the frontend is checking something that's missing.

Let me check if there's an API endpoint that returns app data:
- The gateway at port 80 might proxy to an API
- The message-bus might be involved

Let me check the gateway logs and also look at what API endpoints are available.

sudo journalctl -u zimaos-gateway --since "5 min ago" --no-pager 2>&1 | tail -40

curl -s http://localhost/v1/app_management/list 2>&1 | head -200

curl -s http://localhost/v1/sys/apps 2>&1 | head -200


Output:
May 17 22:16:31 ZimaOS zimaos-gateway[1037]: 2026/05/17 20:16:31.856        INFO        http.log        server running        {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
May 17 22:17:04 ZimaOS systemd[1]: Stopping ZimaOS Gateway...
May 17 22:17:04 ZimaOS systemd[1]: zimaos-gateway.service: Deactivated successfully.
May 17 22:17:04 ZimaOS systemd[1]: Stopped ZimaOS Gateway.
May 17 22:17:04 ZimaOS systemd[1]: zimaos-gateway.service: Consumed 4.458s CPU time, 80.2M memory peak.
May 17 22:17:04 ZimaOS systemd[1]: Starting ZimaOS Gateway...
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 22:17:05 maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: {"level":"warn","ts":1779049025.310279,"msg":"unable to determine directory for user configuration; falling back to current directory","error":"neither $XDG_CONFIG_HOME nor $HOME are defined"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: git commit: 3572c6b9f7d405b8ea605c6bbf3eecc9ed4ea196
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: build date: 2025-10-24T06:32:36Z
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026-05-17T22:17:05.316+0200        info        Management service is listening...        {"address": "127.0.0.1:40895", "filepath": "/var/run/casaos/management.url", "func": "main.main.func1", "file": "/home/runner/work/ZimaOS-Gateway/ZimaOS-Gateway/main.go", "line": 99}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: {"level":"info","ts":1779049025.3201103,"msg":"redirected default logger","from":"stderr","to":"stdout"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.320        INFO        admin        admin endpoint started        {"address": "unix//run/caddy-admin.sock", "enforce_origin": false, "origins": []}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.320        WARN        admin        admin endpoint on open interface; host checking disabled        {"address": "unix//run/caddy-admin.sock"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.320        INFO        tls.cache.maintenance        started background certificate maintenance        {"cache": "0xc0000ff780"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.320        INFO        http.auto_https        automatic HTTPS is completely disabled for server        {"server_name": "srv0"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.322        WARN        http        HTTP/2 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.322        WARN        http        HTTP/3 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:05.322        INFO        http.log        server running        {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
May 17 22:17:05 ZimaOS zimaos-gateway[28638]: 2026-05-17T22:17:05.322+0200        info        Notified systemd that gateway is ready        {"func": "main.main", "file": "/home/runner/work/ZimaOS-Gateway/ZimaOS-Gateway/main.go", "line": 133}
May 17 22:17:05 ZimaOS systemd[1]: Started ZimaOS Gateway.
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026-05-17T22:17:31.100+0200        info        Triggering reconfiguration        {"func": "service.(*Management).TriggerReconfigure.func1", "file": "/home/runner/work/ZimaOS-Gateway/ZimaOS-Gateway/service/management.go", "line": 158}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.101        INFO        http        servers shutting down with eternal grace period
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.104        INFO        admin        admin endpoint started        {"address": "unix//run/caddy-admin.sock", "enforce_origin": false, "origins": []}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.104        WARN        admin        admin endpoint on open interface; host checking disabled        {"address": "unix//run/caddy-admin.sock"}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.104        INFO        admin        stopped previous server        {"address": "unix//run/caddy-admin.sock"}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.105        INFO        http.auto_https        automatic HTTPS is completely disabled for server        {"server_name": "srv0"}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.106        WARN        http        HTTP/2 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.106        WARN        http        HTTP/3 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:31 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:31.106        INFO        http.log        server running        {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
May 17 22:17:31 ZimaOS systemd[1]: /usr/lib/systemd/system/zimaos-gateway.service:7: PIDFile= references a path below legacy directory /var/run/, updating /var/run/casaos/gateway.pid → /run/casaos/gateway.pid; please update the unit file accordingly.
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026-05-17T22:17:32.100+0200        info        Triggering reconfiguration        {"func": "service.(*Management).TriggerReconfigure.func1", "file": "/home/runner/work/ZimaOS-Gateway/ZimaOS-Gateway/service/management.go", "line": 158}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.100        INFO        http        servers shutting down with eternal grace period
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.104        INFO        admin        admin endpoint started        {"address": "unix//run/caddy-admin.sock", "enforce_origin": false, "origins": []}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.104        WARN        admin        admin endpoint on open interface; host checking disabled        {"address": "unix//run/caddy-admin.sock"}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.104        INFO        admin        stopped previous server        {"address": "unix//run/caddy-admin.sock"}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.104        INFO        http.auto_https        automatic HTTPS is completely disabled for server        {"server_name": "srv0"}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.106        WARN        http        HTTP/2 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.106        WARN        http        HTTP/3 skipped because it requires TLS        {"network": "tcp", "addr": ":80"}
May 17 22:17:32 ZimaOS zimaos-gateway[28638]: 2026/05/17 20:17:32.106        INFO        http.log        server running        {"name": "srv0", "protocols": ["h1", "h2", "h3"]}


Output: {"message":"Not Found"}


Explanation:
The gateway is using Caddy internally. I see `Triggering reconfiguration` which means the app-management service is telling the gateway to reload its config. But the app-management.json still shows "container" with port set. Let me look at how the gateway builds its routes — it likely uses a different mechanism.

The key issue: "container" type apps probably need to be registered differently. Let me check if there's a management API or if the gateway reads the JSON directly. Let me also check what the message-bus has, and look at how DocMaster (which has proper casaos.* labels) appears vs PrintVault.

sudo curl -s --unix-socket /run/caddy-admin.sock http://localhost/config/ 2>&1 | python3 -c "
import json,sys
config = json.load(sys.stdin)
# Find routes/apps related to casaos
apps = config.get('apps', {})
for app_name, app_cfg in apps.items():
    if 'http' in app_name.lower():
        servers = app_cfg.get('servers', {})
        for srv_name, srv in servers.items():
            routes = srv.get('routes', [])
            for r in routes:
                match = r.get('match', [])
                handle = r.get('handle', [])
                for m in match:
                    if 'host' in m:
                        for h in handle:
                            if 'handler' in h and h['handler'] == 'reverse_proxy':
                                print(f\"Route: {m.get('host')} -> {h.get('upstreams')}\")
" 2>&1 | head -40

sudo curl -s http://localhost/v1/app_management/list 2>&1 | python3 -m json.tool 2>&1 | head -80

sudo curl -s -X GET http://localhost/v2/app_management/list 2>&1 | head -100


Output: Expecting value: line 1 column 1 (char 0)


Output: {"message":"no matching operation was found"}


Explanation:
Let me look at this more carefully. The gateway uses Caddy as the reverse proxy (based on the caddy-admin.sock log entries). The key question is: how does the gateway learn routes for containers?

Let me check the app-management service more carefully and look at how DocMaster and kiwi-browser get their routes configured in the gateway versus PrintVault.

Let me also look at the full Caddy config to understand the routing.

sudo curl -s --unix-socket /run/caddy-admin.sock http://localhost/config/ 2>&1 | python3 -c "
import json,sys
config = json.load(sys.stdin)
apps = config.get('apps', {})
http = apps.get('http', {})
servers = http.get('servers', {})
for srv_name, srv in servers.items():
    routes = srv.get('routes', [])
    for i, r in enumerate(routes):
        match = r.get('match', [])
        handle = r.get('handle', [])
        match_str = str(match)[:120]
        for h in handle:
            if h.get('handler') == 'reverse_proxy':
                ups = h.get('upstreams', [])
                print(f'Route[{i}]: match={match_str} -> {ups}')
" 2>&1


Output:
Route[1]: match=[{'path': ['/.well-known/jwks.json/*']}] -> [{'dial': '127.0.0.1:37815'}]
Route[2]: match=[{'path': ['/v2/virt_management/*']}] -> [{'dial': '127.0.0.1:45905'}]
Route[3]: match=[{'path': ['/v1/app-categories/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[4]: match=[{'path': ['/v2/app_management/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[5]: match=[{'path': ['/v2/mod_management/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[6]: match=[{'path': ['/v2/local_storage/*']}] -> [{'dial': '127.0.0.1:37819'}]
Route[7]: match=[{'path': ['/v2/message_bus/*']}] -> [{'dial': '127.0.0.1:46315'}]
Route[8]: match=[{'path': ['/v1/container/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[9]: match=[{'path': ['/v2/installer/*']}] -> [{'dial': '127.0.0.1:43893'}]
Route[10]: match=[{'path': ['/v2/migration/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[11]: match=[{'path': ['/v2/filedrop/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[12]: match=[{'path': ['/v2/settings/*']}] -> [{'dial': '127.0.0.1:38710'}]
Route[13]: match=[{'path': ['/v1/gateway/*']}] -> [{'dial': '127.0.0.1:40895'}]
Route[14]: match=[{'path': ['/v2_1/files/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[15]: match=[{'path': ['/v2/backup/*']}] -> [{'dial': '127.0.0.1:41933'}]
Route[16]: match=[{'path': ['/v2/search/*']}] -> [{'dial': '127.0.0.1:37826'}]
Route[17]: match=[{'path': ['/v2/zimaos/*']}] -> [{'dial': '127.0.0.1:38710'}]
Route[18]: match=[{'path': ['/v1/other/*']}] -> [{'dial': '127.0.0.1:38710'}]
Route[19]: match=[{'path': ['/v1/users/*']}] -> [{'dial': '127.0.0.1:37815'}]
Route[20]: match=[{'path': ['/v2/files/*']}] -> [{'dial': '127.0.0.1:45607'}]
Route[21]: match=[{'path': ['/v2/share/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[22]: match=[{'path': ['/v2/trash/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[23]: match=[{'path': ['/v2/users/*']}] -> [{'dial': '127.0.0.1:37815'}]
Route[24]: match=[{'path': ['/v1/apps/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[25]: match=[{'path': ['/v2/folder']}] -> [{'dial': '127.0.0.1:37813'}]
Route[26]: match=[{'path': ['/v1/sys/*']}] -> [{'dial': '127.0.0.1:38710'}]
Route[27]: match=[{'path': ['/v2/pin/*']}] -> [{'dial': '127.0.0.1:37813'}]
Route[28]: match=[{'path': ['/v1/zt/*']}] -> [{'dial': '127.0.0.1:38710'}]
Route[29]: match=[{'path': ['/v2/file']}] -> [{'dial': '127.0.0.1:37813'}]
Route[30]: match=[{'path': ['/v3/file']}] -> [{'dial': '127.0.0.1:37813'}]


Explanation:
The Caddy config shows API routes (like /v2/app_management/*) but doesn't show the iframe app routes. The "not supported" message must come from the CasaOS frontend, not the gateway. Let me check how CasaOS actually routes to container apps — the iframe URL pattern. Let me look at the Docker labels on DocMaster more carefully and compare with working apps like Komga.

Also I should check if there's a dedicated route for container apps in the Caddy config — the iframe pattern might be something like `/app/PrintVault` or similar.

Let me also look at how the gateway handles the frontend — the CasaOS web dashboard itself is served, and when you click an app, it makes an API call to get the app info and then loads it in an iframe. The "not supported" message likely comes from the frontend JavaScript when it can't determine the URL to load.

sudo docker inspect DocMaster --format '{{json .Config.Labels}}' | python3 -m json.tool 2>&1

sudo curl -s --unix-socket /run/caddy-admin.sock http://localhost/config/ 2>&1 | python3 -c "
import json,sys
config = json.load(sys.stdin)
apps = config.get('apps', {})
http = apps.get('http', {})
servers = http.get('servers', {})
for srv_name, srv in servers.items():
    routes = srv.get('routes', [])
    for i, r in enumerate(routes):
        handle = r.get('handle', [])
        match = r.get('match', [])
        for h in handle:
            if 'routes' in h:
                # nested routes - likely the app dispatcher
                print(f'Route[{i}]: nested handler with {len(h[\"routes\"])} sub-routes')
                for j, sr in enumerate(h['routes'][:10]):
                    sm = sr.get('match', [])
                    sh = sr.get('handle', [])
                    print(f'  sub[{j}]: match={sm[:1]}')
                    for shh in sh:
                        if shh.get('handler') == 'reverse_proxy':
                            print(f'    -> proxy: {shh.get(\"upstreams\")}')
                        elif shh.get('handler') == 'subroute':
                            print(f'    -> more nested routes')
" 2>&1


Output:
{
    "casaos.category": "Utilities",
    "casaos.description": "Dokumentenverwaltung",
    "casaos.hostname": "",
    "casaos.icon": "http://localhost:3000/favicon.svg",
    "casaos.index": "/",
    "casaos.port": "3000",
    "casaos.scheme": "http",
    "casaos.title": "DocMaster",
    "com.docker.compose.config-hash": "fd36a38533ce8fef0f41bf076352cf9912a5f94d9cca35b08034474956742894",
    "com.docker.compose.container-number": "1",
    "com.docker.compose.depends_on": "",
    "com.docker.compose.image": "sha256:ebed80de66c21c89ceef9585ade48e18504ab2414eeb1aa3860e3b3e0e690144",
    "com.docker.compose.oneoff": "False",
    "com.docker.compose.project": "docmaster",
    "com.docker.compose.project.config_files": "/DATA/.media/HDD_1TB/DocMaster/docker-compose.yml",
    "com.docker.compose.project.working_dir": "/DATA/.media/HDD_1TB/DocMaster",
    "com.docker.compose.replace": "3f261897de2e8aeec3f215b3a0a6c5735922ac61d5a32b0c97e77ba0006b8d13",
    "com.docker.compose.service": "docmaster",
    "com.docker.compose.version": "2.32.4"
}


Explanation:
The gateway is Caddy-based and routes API calls. The dashboard tiles for apps are served through the gateway as reverse proxies. Let me check how the frontend discovers apps and what the "currently not supported" message means. Let me look at the actual app routing — how does the gateway proxy to container apps?

The key insight: DocMaster HAS the casaos labels AND it still shows "currently not supported". So it's NOT a label issue at all. The issue is how the gateway routes to container apps.

Let me look at how the gateway handles app routing for containers. It likely reads the JSON, then creates Caddy routes. The Caddy config shows API routes but I need to see how the app proxy routes work.

Let me look at the complete Caddy configuration to understand the app routing mechanism.

sudo curl -s --unix-socket /run/caddy-admin.sock http://localhost/config/ 2>&1 > /tmp/caddy_config.json && python3 -c "
import json
with open('/tmp/caddy_config.json') as f:
    config = json.load(f)
apps = config.get('apps', {})
http = apps.get('http', {})
servers = http.get('servers', {})
for srv_name, srv in servers.items():
    routes = srv.get('routes', [])
    for i, r in enumerate(routes):
        handles = r.get('handle', [])
        match = r.get('match', [])
        match_str = str(match)[:200]
        for h in handles:
            handler = h.get('handler','')
            # Look for routes that handle app subdomain or path
            if 'subroute' in str(h)[:50] or 'cookie' in str(h)[:50] or 'app' in str(h)[:50].lower():
                print(f'Route[{i}]: handler={handler}, match={match_str}')
                # print full handler structure
                import json
                print(json.dumps(h, indent=2)[:400])
                print('---')
            if handler == 'reverse_proxy' and any(x in match_str for x in ['app', 'container', 'port', '300']):
                print(f'Route[{i}]: match={match_str} -> {h.get(\"upstreams\")}')
" 2>&1


Output:
Route[3]: match=[{'path': ['/v1/app-categories/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[4]: match=[{'path': ['/v2/app_management/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[8]: match=[{'path': ['/v1/container/*']}] -> [{'dial': '127.0.0.1:43455'}]
Route[24]: match=[{'path': ['/v1/apps/*']}] -> [{'dial': '127.0.0.1:43455'}]


Explanation:
Let me look at this more carefully. The Caddy config only has API routes - no app proxy routes. The actual app proxying must be handled differently. Let me look at how the ZimaOS dashboard works - it's likely a separate frontend that directly accesses the app URLs via iframe or proxy. The "currently not supported" message is coming from the frontend, not from the gateway itself.

Let me check:
1. Where the frontend is served from
2. How it determines which apps to show
3. What triggers "currently not supported"

The gateway is Caddy-based and proxies API calls to zimaos-app-management on port 43455. But the actual app content (PrintVault on :3001) isn't routed through Caddy at all - the frontend probably directly proxies or iframes to the container ports. The "currently not supported" likely comes from the frontend JavaScript when it can't determine how to reach the app.

Let me look at:
- The frontend source (it might be in /usr/share or similar)
- How the app list API returns data
- The message-bus for app status

Also, the key is: PrintVault has `app_type: container` in the JSON but no port/scheme/index. Even though I wrote them, perhaps the app-management service overwrites them on restart. Let me check what APIs are available.

sudo curl -s http://localhost/v1/app-categories/list 2>&1

sudo curl -s http://localhost/v1/apps/list 2>&1 | head -100

sudo find /usr/share /var/www -name "*.html" -path "*casaos*" 2>/dev/null; sudo find / -maxdepth 5 -name "index.html" -path "*casaos*" 2>/dev/null | head -5


Output: {"message":"Not Found"}


Output: {"message":"Not Found"}


Output:
/usr/share/casaos/www/index.html
/usr/share/casaos/www/modules/icewhale_app/index.html
/usr/share/casaos/www/modules/icewhale_localstorage/index.html
/usr/share/casaos/www/modules/zimaos_zvm/index.html
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/tests/vnc_playback.html
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/vnc.html
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/vnc_lite.html
/usr/share/casaos/www/modules/icewhale_peerdrop/index.html
/usr/share/casaos/www/modules/icewhale_files/index.html
/usr/share/casaos/www/index.html


Explanation: The "Derzeit nicht unterstützt" message is likely coming from the CasaOS frontend JavaScript. Let me look at how the frontend handles app clicks and what determines whether an app is "supported" or not.

sudo grep -r "nicht unterstützt" /usr/share/casaos/www/ --include="*.js" -l 2>/dev/null; sudo grep -r "not supported" /usr/share/casaos/www/ --include="*.html" --include="*.js" -l 2>/dev/null


Output:
/usr/share/casaos/www/modules/icewhale_localstorage/js/app.js
/usr/share/casaos/www/assets/Home-77O7AYY0.js
/usr/share/casaos/www/assets/Home-B5vHiizx.js
/usr/share/casaos/www/assets/Home-BCM80FAQ.js
/usr/share/casaos/www/assets/Home-BH8fPp0i.js
/usr/share/casaos/www/assets/Home-BP0A0oV-.js
/usr/share/casaos/www/assets/Home-BW7uu8fP.js
/usr/share/casaos/www/assets/Home-BiUm18iI.js
/usr/share/casaos/www/assets/Home-Bky1Hnr7.js
/usr/share/casaos/www/assets/Home-BmgS9FiV.js
/usr/share/casaos/www/assets/Home-BpzyAk7y.js
/usr/share/casaos/www/assets/Home-C8kGile9.js
/usr/share/casaos/www/assets/Home-CIS_T7Z2.js
/usr/share/casaos/www/assets/Home-COkzCibV.js
/usr/share/casaos/www/assets/Home-C_F6cEeF.js
/usr/share/casaos/www/assets/Home-Cd9zj000.js
/usr/share/casaos/www/assets/Home-Cqs2ULBo.js
/usr/share/casaos/www/assets/Home-Ct7syqEJ.js
/usr/share/casaos/www/assets/Home-D7pWJeIv.js
/usr/share/casaos/www/assets/Home-DDP99GLF.js
/usr/share/casaos/www/assets/Home-DF5N0T8f.js
/usr/share/casaos/www/assets/Home-DLnnUJvC.js
/usr/share/casaos/www/assets/Home-fprhjpCu.js
/usr/share/casaos/www/assets/index--srk8A_i.js
/usr/share/casaos/www/assets/index-0A1TjCqa.js
/usr/share/casaos/www/assets/index-2mm1FfOf.js
/usr/share/casaos/www/assets/index-B-oZYu36.js
/usr/share/casaos/www/assets/index-B3goW0Mu.js
/usr/share/casaos/www/assets/index-BEeeuIPh.js
/usr/share/casaos/www/assets/index-BcWyerT0.js
/usr/share/casaos/www/assets/index-Bx1_C_es.js
/usr/share/casaos/www/assets/index-C37hW4BS.js
/usr/share/casaos/www/assets/index-C5VlKZDO.js
/usr/share/casaos/www/assets/index-C6xDlop1.js
/usr/share/casaos/www/assets/index-CJ6d-5O_.js
/usr/share/casaos/www/assets/index-CT-SXLc6.js
/usr/share/casaos/www/assets/index-CgcduuQh.js
/usr/share/casaos/www/assets/index-CnKYLtYF.js
/usr/share/casaos/www/assets/index-DG2MPAb0.js
/usr/share/casaos/www/assets/index-DqErQnT_.js
/usr/share/casaos/www/assets/index-EXjfjhUz.js
/usr/share/casaos/www/assets/index-dDwYlFv6.js
/usr/share/casaos/www/assets/index-gcUTumzQ.js
/usr/share/casaos/www/assets/index-qqyCEuEJ.js
/usr/share/casaos/www/assets/index-s1dT8W1N.js
/usr/share/casaos/www/modules/icewhale_app/vendors-node_modules_pnpm_icewhale_casaos-openapi_0_4_17-alpha1-a6ff39e_node_modules_icewhale-9ee026.836daf08.js
/usr/share/casaos/www/modules/icewhale_app/vendors-node_modules_pnpm_icewhale_casaos-openapi_0_4_17-alpha1-a6ff39e_node_modules_icewhale-9ee026.ce0d5ccf.js
/usr/share/casaos/www/modules/icewhale_app/vendors-node_modules_pnpm_vueuse_components_10_11_1_vue_2_7_16_node_modules_vueuse_components-79943a.a37c8307.js
/usr/share/casaos/www/modules/icewhale_app/vendors-node_modules_pnpm_yaml_1_10_2_node_modules_yaml_browser_index_js.6654b960.js
/usr/share/casaos/www/modules/icewhale_app/vendors-node_modules_pnpm_yaml_1_10_2_node_modules_yaml_browser_index_js.77ca1e6a.js
/usr/share/casaos/www/modules/icewhale_localstorage/js/app.js
/usr/share/casaos/www/modules/icewhale_localstorage/js/chunk-vendors.js
/usr/share/casaos/www/modules/zimaos_zvm/assets/index-DB0Y4t1I.js
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/core/rfb.js
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/core/util/browser.js
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/core/util/events.js
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/tests/test.rfb.js
/usr/share/casaos/www/modules/zimaos_zvm/noVNC/vendor/pako/lib/zlib/deflate.js
/usr/share/casaos/www/modules/icewhale_peerdrop/assets/index-D9YU4Wn_.js
/usr/share/casaos/www/modules/icewhale_files/assets/DocViewer-dz_tmQ9X.js
/usr/share/casaos/www/modules/icewhale_files/assets/ExcelViewer-C06dvh3W.js
/usr/share/casaos/www/modules/icewhale_files/assets/ImageViewer-Zr58BwIf.js
/usr/share/casaos/www/modules/icewhale_files/assets/PdfViewer-TzJyfWcf.js
/usr/share/casaos/www/modules/icewhale_files/assets/main-MKPB27Em.js


Explanation: Let me look at the JavaScript file that contains "nicht unterstützt" to understand how CasaOS decides whether to show an app as supported or not.

sudo grep -A5 -B5 "nicht unterstützt\|not supported\|unsupported" /usr/share/casaos/www/assets/Home-DLnnUJvC.js 2>/dev/null | head -40

sudo find /usr/share/casaos/www/assets -name "Home-*.js" -newer /usr/share/casaos/www/index.html -printf "%T@ %p\n" 2>/dev/null | sort -rn | head -3


Output:
}

.p-contextmenu-mobile .p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-submenu-icon {
    transform: rotate(-90deg);
}
`)},Ule={root:function(e){var t=e.instance;return["p-contextmenu p-component",{"p-contextmenu-mobile":t.queryMatches}]},rootList:"p-contextmenu-root-list",item:function(e){var t=e.instance,r=e.processedItem;return["p-contextmenu-item",{"p-contextmenu-item-active":t.isItemActive(r),"p-focus":t.isItemFocused(r),"p-disabled":t.isItemDisabled(r)}]},itemContent:"p-contextmenu-item-content",itemLink:"p-contextmenu-item-link",itemIcon:"p-contextmenu-item-icon",itemLabel:"p-contextmenu-item-label",submenuIcon:"p-contextmenu-submenu-icon",submenu:"p-contextmenu-submenu",separator:"p-contextmenu-separator"},jle=Jr.extend({name:"contextmenu",theme:Vle,classes:Ule}),E_={name:"AngleRightIcon",extends:jc};function Hle(n,e,t,r,s,i){return C(),P("svg",Ae({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.pti()),e[0]||(e[0]=[f("path",{d:"M5.25 11.1728C5.14929 11.1694 5.05033 11.1455 4.9592 11.1025C4.86806 11.0595 4.78666 10.9984 4.72 10.9228C4.57955 10.7822 4.50066 10.5916 4.50066 10.3928C4.50066 10.1941 4.57955 10.0035 4.72 9.86283L7.72 6.86283L4.72 3.86283C4.66067 3.71882 4.64765 3.55991 4.68275 3.40816C4.71785 3.25642 4.79932 3.11936 4.91585 3.01602C5.03238 2.91268 5.17819 2.84819 5.33305 2.83149C5.4879 2.81479 5.64411 2.84671 5.78 2.92283L9.28 6.42283C9.42045 6.56346 9.49934 6.75408 9.49934 6.95283C9.49934 7.15158 9.42045 7.34221 9.28 7.48283L5.78 10.9228C5.71333 10.9984 5.63193 11.0595 5.5408 11.1025C5.44966 11.1455 5.35071 11.1694 5.25 11.1728Z",fill:"currentColor"},null,-1)]),16)}E_.render=Hle;var Wle={name:"BaseContextMenu",extends:us,props:{model:{type:Array,default:null},appendTo:{type:[String,Object],default:"body"},autoZIndex:{type:Boolean,default:!0},baseZIndex:{type:Number,default:0},global:{type:Boolean,default:!1},breakpoint:{type:String,default:"960px"},tabindex:{type:Number,default:0},ariaLabelledby:{type:String,default:null},ariaLabel:{type:String,default:null}},style:jle,provide:function(){return{$pcContextMenu:this,$parentInstance:this}}},O_={name:"ContextMenuSub",hostName:"ContextMenu",extends:us,emits:["item-click","item-mouseenter","item-mousemove"],props:{items:{type:Array,default:null},menuId:{type:String,default:null},focusedItemId:{type:String,default:null},root:{type:Boolean,default:!1},visible:{type:Boolean,default:!1},level:{type:Number,default:0},templates:{type:Object,default:null},activeItemPath:{type:Object,default:null},tabindex:{type:Number,default:0}},methods:{getItemId:function(e){return"".concat(this.menuId,"_").concat(e.key)},getItemKey:function(e){return this.getItemId(e)},getItemProp:function(e,t,r){return e&&e.item?rm(e.item[t],r):void 0},getItemLabel:function(e){return this.getItemProp(e,"label")},getItemLabelId:function(e){return"".concat(this.menuId,"_").concat(e.key,"_label")},getPTOptions:function(e,t,r){return this.ptm(e,{context:{item:t.item,active:this.isItemActive(t),focused:this.isItemFocused(t),disabled:this.isItemDisabled(t),index:r}})},isItemActive:function(e){return this.activeItemPath.some(function(t){return t.key===e.key})},isItemVisible:function(e){return this.getItemProp(e,"visible")!==!1},isItemDisabled:function(e){return this.getItemProp(e,"disabled")},isItemFocused:function(e){return this.focusedItemId===this.getItemId(e)},isItemGroup:function(e){return Cr(e.items)},onItemClick:function(e,t){this.getItemProp(t,"command",{originalEvent:e,item:t.item}),this.$emit("item-click",{originalEvent:e,processedItem:t,isFocus:!0})},onItemMouseEnter:function(e,t){this.$emit("item-mouseenter",{originalEvent:e,processedItem:t})},onItemMouseMove:function(e,t){this.$emit("item-mousemove",{originalEvent:e,processedItem:t,isFocus:!0})},getAriaSetSize:function(){var e=this;return this.items.filter(function(t){return e.isItemVisible(t)&&!e.getItemProp(t,"separator")}).length},getAriaPosInset:function(e){var t=this;return e-this.items.slice(0,e).filter(function(r){return t.isItemVisible(r)&&t.getItemProp(r,"separator")}).length+1},onEnter:function(){H3(this.$refs.container,this.level)},getMenuItemProps:function(e,t){return{action:Ae({class:this.cx("itemLink"),tabindex:-1,"aria-hidden":!0},this.getPTOptions("itemLink",e,t)),icon:Ae({class:[this.cx("itemIcon"),this.getItemProp(e,"icon")]},this.getPTOptions("itemIcon",e,t)),label:Ae({class:this.cx("itemLabel")},this.getPTOptions("itemLabel",e,t)),submenuicon:Ae({class:this.cx("submenuIcon")},this.getPTOptions("submenuicon",e,t))}}},components:{AngleRightIcon:E_},directives:{ripple:Tl}},qle=["tabindex"],Gle=["id","aria-label","aria-disabled","aria-expanded","aria-haspopup","aria-level","aria-setsize","aria-posinset","data-p-active","data-p-focused","data-p-disabled"],Kle=["onClick","onMouseenter","onMousemove"],Xle=["href","target"],Zle=["id"],Yle=["id"];function Jle(n,e,t,r,s,i){var o=vn("AngleRightIcon"),l=vn("ContextMenuSub",!0),u=hn("ripple");return C(),ge(On,Ae({name:"p-contextmenusub",onEnter:i.onEnter},n.ptm("menu.transition")),{default:ve(function(){return[t.root||t.visible?(C(),P("ul",Ae({key:0,ref:"container",tabindex:t.tabindex},n.ptm("rootList")),[(C(!0),P(_e,null,Re(t.items,function(d,p){return C(),P(_e,{key:i.getItemKey(d)},[i.isItemVisible(d)&&!i.getItemProp(d,"separator")?(C(),P("li",Ae({key:0,id:i.getItemId(d),style:i.getItemProp(d,"style"),class:[n.cx("item",{processedItem:d}),i.getItemProp(d,"class")],role:"menuitem","aria-label":i.getItemLabel(d),"aria-disabled":i.isItemDisabled(d)||void 0,"aria-expanded":i.isItemGroup(d)?i.isItemActive(d):void 0,"aria-haspopup":i.isItemGroup(d)&&!i.getItemProp(d,"to")?"menu":void 0,"aria-level":t.level+1,"aria-setsize":i.getAriaSetSize(),"aria-posinset":i.getAriaPosInset(p),ref_for:!0},i.getPTOptions("item",d,p),{"data-p-active":i.isItemActive(d),"data-p-focused":i.isItemFocused(d),"data-p-disabled":i.isItemDisabled(d)}),[f("div",Ae({class:n.cx("itemContent"),onClick:function(m){return i.onItemClick(m,d)},onMouseenter:function(m){return i.onItemMouseEnter(m,d)},onMousemove:function(m){return i.onItemMouseMove(m,d)},ref_for:!0},i.getPTOptions("itemContent",d,p)),[t.templates.item?(C(),ge(lo(t.templates.item),{key:1,item:d.item,hasSubmenu:i.getItemProp(d,"items"),label:i.getItemLabel(d),props:i.getMenuItemProps(d,p)},null,8,["item","hasSubmenu","label","props"])):He((C(),P("a",Ae({key:0,href:i.getItemProp(d,"url"),class:n.cx("itemLink"),target:i.getItemProp(d,"target"),tabindex:"-1",ref_for:!0},i.getPTOptions("itemLink",d,p)),[t.templates.itemicon?(C(),ge(lo(t.templates.itemicon),{key:0,item:d.item,class:Se(n.cx("itemIcon"))},null,8,["item","class"])):i.getItemProp(d,"icon")?(C(),P("span",Ae({key:1,class:[n.cx("itemIcon"),i.getItemProp(d,"icon")],ref_for:!0},i.getPTOptions("itemIcon",d,p)),null,16)):Z("",!0),f("span",Ae({id:i.getItemLabelId(d),class:n.cx("itemLabel"),ref_for:!0},i.getPTOptions("itemLabel",d,p)),N(i.getItemLabel(d)),17,Zle),i.getItemProp(d,"items")?(C(),P(_e,{key:2},[t.templates.submenuicon?(C(),ge(lo(t.templates.submenuicon),{key:0,active:i.isItemActive(d),class:Se(n.cx("submenuIcon"))},null,8,["active","class"])):(C(),ge(o,Ae({key:1,class:n.cx("submenuIcon"),ref_for:!0},i.getPTOptions("submenuicon",d,p)),null,16,["class"]))],64)):Z("",!0)],16,Xle)),[[u]])],16,Kle),i.isItemVisible(d)&&i.isItemGroup(d)?(C(),ge(l,Ae({key:0,id:i.getItemId(d)+"_list",role:"menu",class:n.cx("submenu"),menuId:t.menuId,focusedItemId:t.focusedItemId,items:d.items,templates:t.templates,activeItemPath:t.activeItemPath,level:t.level+1,visible:i.isItemActive(d)&&i.isItemGroup(d),pt:n.pt,unstyled:n.unstyled,onItemClick:e[0]||(e[0]=function(g){return n.$emit("item-click",g)}),onItemMouseenter:e[1]||(e[1]=function(g){return n.$emit("item-mouseenter",g)}),onItemMousemove:e[2]||(e[2]=function(g){return n.$emit("item-mousemove",g)}),"aria-labelledby":i.getItemLabelId(d),ref_for:!0},n.ptm("submenu")),null,16,["id","class","menuId","focusedItemId","items","templates","activeItemPath","level","visible","pt","unstyled","aria-labelledby"])):Z("",!0)],16,Gle)):Z("",!0),i.isItemVisible(d)&&i.getItemProp(d,"separator")?(C(),P("li",Ae({key:1,id:i.getItemId(d),style:i.getItemProp(d,"style"),class:[n.cx("separator"),i.getItemProp(d,"class")],role:"separator",ref_for:!0},n.ptm("separator")),null,16,Yle)):Z("",!0)],64)}),128))],16,qle)):Z("",!0)]}),_:1},16,["onEnter"])}O_.render=Jle;var D_={name:"ContextMenu",extends:Wle,inheritAttrs:!1,emits:["focus","blur","show","hide","before-show","before-hide"],target:null,outsideClickListener:null,resizeListener:null,documentContextMenuListener:null,matchMediaListener:null,pageX:null,pageY:null,container:null,list:null,data:function(){return{id:this.$attrs.id,focused:!1,focusedItemInfo:{index:-1,level:0,parentKey:""},activeItemPath:[],visible:!1,submenuVisible:!1,query:null,queryMatches:!1}},watch:{"$attrs.id":function(e){this.id=e||ia()},activeItemPath:function(e){Cr(e)?(this.bindOutsideClickListener(),this.bindResizeListener()):this.visible||(this.unbindOutsideClickListener(),this.unbindResizeListener())}},mounted:function(){this.id=this.id||ia(),this.bindMatchMediaListener(),this.global&&this.bindDocumentContextMenuListener()},beforeUnmount:function(){this.unbindResizeListener(),this.unbindOutsideClickListener(),this.unbindDocumentContextMenuListener(),this.unbindMatchMediaListener(),this.container&&this.autoZIndex&&ns.clear(this.container),this.target=null,this.container=null},methods:{getItemProp:function(e,t){return e?rm(e[t]):void 0},getItemLabel:function(e){return this.getItemProp(e,"label")},isItemDisabled:function(e){return this.getItemProp(e,"disabled")},isItemVisible:function(e){return this.getItemProp(e,"visible")!==!1},isItemGroup:function(e){return Cr(this.getItemProp(e,"items"))},isItemSeparator:function(e){return this.getItemProp(e,"separator")},getProccessedItemLabel:function(e){return e?this.getItemLabel(e.item):void 0},isProccessedItemGroup:function(e){return e&&Cr(e.items)},toggle:function(e){this.visible?this.hide():this.show(e)},show:function(e){this.$emit("before-show"),this.activeItemPath=[],this.focusedItemInfo={index:-1,level:0,parentKey:""},jn(this.list),this.pageX=e.pageX,this.pageY=e.pageY,this.visible?this.position():this.visible=!0,e.stopPropagation(),e.preventDefault()},hide:function(){this.$emit("before-hide"),this.visible=!1,this.activeItemPath=[],this.focusedItemInfo={index:-1,level:0,parentKey:""}},onFocus:function(e){this.focused=!0,this.focusedItemInfo=this.focusedItemInfo.index!==-1?this.focusedItemInfo:{index:-1,level:0,parentKey:""},this.$emit("focus",e)},onBlur:function(e){this.focused=!1,this.focusedItemInfo={index:-1,level:0,parentKey:""},this.searchValue="",this.$emit("blur",e)},onKeyDown:function(e){var t=e.metaKey||e.ctrlKey;switch(e.code){case"ArrowDown":this.onArrowDownKey(e);break;case"ArrowUp":this.onArrowUpKey(e);break;case"ArrowLeft":this.onArrowLeftKey(e);break;case"ArrowRight":this.onArrowRightKey(e);break;case"Home":this.onHomeKey(e);break;case"End":this.onEndKey(e);break;case"Space":this.onSpaceKey(e);break;case"Enter":case"NumpadEnter":this.onEnterKey(e);break;case"Escape":this.onEscapeKey(e);break;case"Tab":this.onTabKey(e);break;case"PageDown":case"PageUp":case"Backspace":case"ShiftLeft":case"ShiftRight":break;default:!t&&fw(e.key)&&this.searchItems(e,e.key);break}},onItemChange:function(e,t){var r=e.processedItem,s=e.isFocus;if(!Jb(r)){var i=r.index,o=r.key,l=r.level,u=r.parentKey,d=r.items,p=Cr(d),g=this.activeItemPath.filter(function(m){return m.parentKey!==u&&m.parentKey!==o});p&&(g.push(r),this.submenuVisible=!0),this.focusedItemInfo={index:i,level:l,parentKey:u},s&&jn(this.list),!(t==="hover"&&this.queryMatches)&&(this.activeItemPath=g)}},onItemClick:function(e){var t=e.processedItem,r=this.isProccessedItemGroup(t),s=this.isSelected(t);if(s){var i=t.index,o=t.key,l=t.level,u=t.parentKey;this.activeItemPath=this.activeItemPath.filter(function(d){return o!==d.key&&o.startsWith(d.key)}),this.focusedItemInfo={index:i,level:l,parentKey:u},jn(this.list)}else r?this.onItemChange(e):this.hide()},onItemMouseEnter:function(e){this.onItemChange(e,"hover")},onItemMouseMove:function(e){this.focused&&this.changeFocusedItemIndex(e,e.processedItem.index)},onArrowDownKey:function(e){var t=this.focusedItemInfo.index!==-1?this.findNextItemIndex(this.focusedItemInfo.index):this.findFirstFocusedItemIndex();this.changeFocusedItemIndex(e,t),e.preventDefault()},onArrowUpKey:function(e){if(e.altKey){if(this.focusedItemInfo.index!==-1){var t=this.visibleItems[this.focusedItemInfo.index],r=this.isProccessedItemGroup(t);!r&&this.onItemChange({originalEvent:e,processedItem:t})}this.popup&&this.hide(),e.preventDefault()}else{var s=this.focusedItemInfo.index!==-1?this.findPrevItemIndex(this.focusedItemInfo.index):this.findLastFocusedItemIndex();this.changeFocusedItemIndex(e,s),e.preventDefault()}},onArrowLeftKey:function(e){var t=this,r=this.visibleItems[this.focusedItemInfo.index],s=this.activeItemPath.find(function(o){return o.key===r.parentKey}),i=Jb(r.parent);i||(this.focusedItemInfo={index:-1,parentKey:s?s.parentKey:""},this.searchValue="",this.onArrowDownKey(e)),this.activeItemPath=this.activeItemPath.filter(function(o){return o.parentKey!==t.focusedItemInfo.parentKey}),e.preventDefault()},onArrowRightKey:function(e){var t=this.visibleItems[this.focusedItemInfo.index],r=this.isProccessedItemGroup(t);r&&(this.onItemChange({originalEvent:e,processedItem:t}),this.focusedItemInfo={index:-1,parentKey:t.key},this.searchValue="",this.onArrowDownKey(e)),e.preventDefault()},onHomeKey:function(e){this.changeFocusedItemIndex(e,this.findFirstItemIndex()),e.preventDefault()},onEndKey:function(e){this.changeFocusedItemIndex(e,this.findLastItemIndex()),e.preventDefault()},onEnterKey:function(e){if(this.focusedItemInfo.index!==-1){var t=ao(this.list,'li[id="'.concat("".concat(this.focusedItemIdx),'"]')),r=t&&ao(t,'[data-pc-section="itemlink"]');r?r.click():t&&t.click();var s=this.visibleItems[this.focusedItemInfo.index],i=this.isProccessedItemGroup(s);!i&&(this.focusedItemInfo.index=this.findFirstFocusedItemIndex())}e.preventDefault()},onSpaceKey:function(e){this.onEnterKey(e)},onEscapeKey:function(e){this.hide(),!this.popup&&(this.focusedItemInfo.index=this.findFirstFocusedItemIndex()),e.preventDefault()},onTabKey:function(e){if(this.focusedItemInfo.index!==-1){var t=this.visibleItems[this.focusedItemInfo.index],r=this.isProccessedItemGroup(t);!r&&this.onItemChange({originalEvent:e,processedItem:t})}this.hide()},onEnter:function(e){em(e,{position:"absolute"}),this.position(),this.autoZIndex&&ns.set("menu",e,this.baseZIndex+this.$primevue.config.zIndex.menu)},onAfterEnter:function(){this.bindOutsideClickListener(),this.bindResizeListener(),this.$emit("show"),jn(this.list)},onLeave:function(){this.$emit("hide"),this.container=null},onAfterLeave:function(e){this.autoZIndex&&ns.clear(e),this.unbindOutsideClickListener(),this.unbindResizeListener()},position:function(){var e=this.pageX+1,t=this.pageY+1,r=this.container.offsetParent?this.container.offsetWidth:V3(this.container),s=this.container.offsetParent?this.container.offsetHeight:U3(this.container),i=j3(),o=window.scrollY||document.documentElement.scrollTop||document.body.scrollTop||0,l=window.scrollX||document.documentElement.scrollLeft||document.body.scrollLeft||0;e+r-l>i.width&&(e-=r),t+s-o>i.height&&(t-=s),e<l&&(e=l),t<o&&(t=o),this.container.style.left=e+"px",this.container.style.top=t+"px"},bindOutsideClickListener:function(){var e=this;this.outsideClickListener||(this.outsideClickListener=function(t){var r=e.container&&!e.container.contains(t.target),s=e.visible?!(e.target&&(e.target===t.target||e.target.contains(t.target))):!0;r&&s&&e.hide()},document.addEventListener("click",this.outsideClickListener))},unbindOutsideClickListener:function(){this.outsideClickListener&&(document.removeEventListener("click",this.outsideClickListener),this.outsideClickListener=null)},bindResizeListener:function(){var e=this;this.resizeListener||(this.resizeListener=function(){e.visible&&!tm()&&e.hide()},window.addEventListener("resize",this.resizeListener))},unbindResizeListener:function(){this.resizeListener&&(window.removeEventListener("resize",this.resizeListener),this.resizeListener=null)},bindDocumentContextMenuListener:function(){var e=this;this.documentContextMenuListener||(this.documentContextMenuListener=function(t){t.button===2&&e.show(t)},document.addEventListener("contextmenu",this.documentContextMenuListener))},unbindDocumentContextMenuListener:function(){this.documentContextMenuListener&&(document.removeEventListener("contextmenu",this.documentContextMenuListener),this.documentContextMenuListener=null)},bindMatchMediaListener:function(){var e=this;if(!this.matchMediaListener){var t=matchMedia("(max-width: ".concat(this.breakpoint,")"));this.query=t,this.queryMatches=t.matches,this.matchMediaListener=function(){e.queryMatches=t.matches},this.query.addEventListener("change",this.matchMediaListener)}},unbindMatchMediaListener:function(){this.matchMediaListener&&(this.query.removeEventListener("change",this.matchMediaListener),this.matchMediaListener=null)},isItemMatched:function(e){var t;return this.isValidItem(e)&&((t=this.getProccessedItemLabel(e))===null||t===void 0?void 0:t.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase()))},isValidItem:function(e){return!!e&&!this.isItemDisabled(e.item)&&!this.isItemSeparator(e.item)&&this.isItemVisible(e.item)},isValidSelectedItem:function(e){return this.isValidItem(e)&&this.isSelected(e)},isSelected:function(e){return this.activeItemPath.some(function(t){return t.key===e.key})},findFirstItemIndex:function(){var e=this;return this.visibleItems.findIndex(function(t){return e.isValidItem(t)})},findLastItemIndex:function(){var e=this;return pc(this.visibleItems,function(t){return e.isValidItem(t)})},findNextItemIndex:function(e){var t=this,r=e<this.visibleItems.length-1?this.visibleItems.slice(e+1).findIndex(function(s){return t.isValidItem(s)}):-1;return r>-1?r+e+1:e},findPrevItemIndex:function(e){var t=this,r=e>0?pc(this.visibleItems.slice(0,e),function(s){return t.isValidItem(s)}):-1;return r>-1?r:e},findSelectedItemIndex:function(){var e=this;return this.visibleItems.findIndex(function(t){return e.isValidSelectedItem(t)})},findFirstFocusedItemIndex:function(){var e=this.findSelectedItemIndex();return e<0?this.findFirstItemIndex():e},findLastFocusedItemIndex:function(){var e=this.findSelectedItemIndex();return e<0?this.findLastItemIndex():e},searchItems:function(e,t){var r=this;this.searchValue=(this.searchValue||"")+t;var s=-1,i=!1;return this.focusedItemInfo.index!==-1?(s=this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function(o){return r.isItemMatched(o)}),s=s===-1?this.visibleItems.slice(0,this.focusedItemInfo.index).findIndex(function(o){return r.isItemMatched(o)}):s+this.focusedItemInfo.index):s=this.visibleItems.findIndex(function(o){return r.isItemMatched(o)}),s!==-1&&(i=!0),s===-1&&this.focusedItemInfo.index===-1&&(s=this.findFirstFocusedItemIndex()),s!==-1&&this.changeFocusedItemIndex(e,s),this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(function(){r.searchValue="",r.searchTimeout=null},500),i},changeFocusedItemIndex:function(e,t){this.focusedItemInfo.index!==t&&(this.focusedItemInfo.index=t,this.scrollInView())},scrollInView:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:-1,t=e!==-1?"".concat(this.id,"_").concat(e):this.focusedItemIdx,r=ao(this.list,'li[id="'.concat(t,'"]'));r&&r.scrollIntoView&&r.scrollIntoView({block:"nearest",inline:"start"})},createProcessedItems:function(e){var t=this,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",o=[];return e&&e.forEach(function(l,u){var d=(i!==""?i+"_":"")+u,p={item:l,index:u,level:r,key:d,parent:s,parentKey:

... [OUTPUT TRUNCATED - 381266 chars omitted out of 431266 total] ...

 Required"}},function(r,s,i){(function(o,l){var u;function d(p){return(d=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g})(p)}/*! https://mths.be/punycode v1.4.1 by @mathias */(function(p){var g=d(s)=="object"&&s&&!s.nodeType&&s,m=d(o)=="object"&&o&&!o.nodeType&&o,v=(l===void 0?"undefined":d(l))=="object"&&l;v.global!==v&&v.window!==v&&v.self!==v||(p=v);var w,S,$=2147483647,T=/^xn--/,x=/[^\x20-\x7E]/,y=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},_=Math.floor,I=String.fromCharCode;function L(H){throw new RangeError(b[H])}function E(H,ee){for(var ue=H.length,pe=[];ue--;)pe[ue]=ee(H[ue]);return pe}function D(H,ee){var ue=H.split("@"),pe="";return ue.length>1&&(pe=ue[0]+"@",H=ue[1]),pe+E((H=H.replace(y,".")).split("."),ee).join(".")}function A(H){for(var ee,ue,pe=[],Q=0,fe=H.length;Q<fe;)(ee=H.charCodeAt(Q++))>=55296&&ee<=56319&&Q<fe?(64512&(ue=H.charCodeAt(Q++)))==56320?pe.push(((1023&ee)<<10)+(1023&ue)+65536):(pe.push(ee),Q--):pe.push(ee);return pe}function V(H){return E(H,function(ee){var ue="";return ee>65535&&(ue+=I((ee-=65536)>>>10&1023|55296),ee=56320|1023&ee),ue+=I(ee)}).join("")}function M(H,ee){return H+22+75*(H<26)-((ee!=0)<<5)}function B(H,ee,ue){var pe=0;for(H=ue?_(H/700):H>>1,H+=_(H/ee);H>455;pe+=36)H=_(H/35);return _(pe+36*H/(H+38))}function F(H){var ee,ue,pe,Q,fe,q,G,se,ne,re,le,Ce=[],X=H.length,xe=0,O=128,z=72;for((ue=H.lastIndexOf("-"))<0&&(ue=0),pe=0;pe<ue;++pe)H.charCodeAt(pe)>=128&&L("not-basic"),Ce.push(H.charCodeAt(pe));for(Q=ue>0?ue+1:0;Q<X;){for(fe=xe,q=1,G=36;Q>=X&&L("invalid-input"),((se=(le=H.charCodeAt(Q++))-48<10?le-22:le-65<26?le-65:le-97<26?le-97:36)>=36||se>_(($-xe)/q))&&L("overflow"),xe+=se*q,!(se<(ne=G<=z?1:G>=z+26?26:G-z));G+=36)q>_($/(re=36-ne))&&L("overflow"),q*=re;z=B(xe-fe,ee=Ce.length+1,fe==0),_(xe/ee)>$-O&&L("overflow"),O+=_(xe/ee),xe%=ee,Ce.splice(xe++,0,O)}return V(Ce)}function j(H){var ee,ue,pe,Q,fe,q,G,se,ne,re,le,Ce,X,xe,O,z=[];for(Ce=(H=A(H)).length,ee=128,ue=0,fe=72,q=0;q<Ce;++q)(le=H[q])<128&&z.push(I(le));for(pe=Q=z.length,Q&&z.push("-");pe<Ce;){for(G=$,q=0;q<Ce;++q)(le=H[q])>=ee&&le<G&&(G=le);for(G-ee>_(($-ue)/(X=pe+1))&&L("overflow"),ue+=(G-ee)*X,ee=G,q=0;q<Ce;++q)if((le=H[q])<ee&&++ue>$&&L("overflow"),le==ee){for(se=ue,ne=36;!(se<(re=ne<=fe?1:ne>=fe+26?26:ne-fe));ne+=36)O=se-re,xe=36-re,z.push(I(M(re+O%xe,0))),se=_(O/xe);z.push(I(M(se,0))),fe=B(ue,X,pe==Q),ue=0,++pe}++ue,++ee}return z.join("")}if(w={version:"1.4.1",ucs2:{decode:A,encode:V},decode:F,encode:j,toASCII:function(H){return D(H,function(ee){return x.test(ee)?"xn--"+j(ee):ee})},toUnicode:function(H){return D(H,function(ee){return T.test(ee)?F(ee.slice(4).toLowerCase()):ee})}},d(i(23))=="object"&&i(23))(u=(function(){return w}).call(s,i,s,o))===void 0||(o.exports=u);else if(g&&m)if(o.exports==g)m.exports=w;else for(S in w)w.hasOwnProperty(S)&&(g[S]=w[S]);else p.punycode=w})(this)}).call(this,i(45)(r),i(0))},function(r,s){r.exports=function(i){return i.webpackPolyfill||(i.deprecate=function(){},i.paths=[],i.children||(i.children=[]),Object.defineProperty(i,"loaded",{enumerable:!0,get:function(){return i.l}}),Object.defineProperty(i,"id",{enumerable:!0,get:function(){return i.i}}),i.webpackPolyfill=1),i}},function(r,s,i){function o(l){return(o=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u})(l)}r.exports={isString:function(l){return typeof l=="string"},isObject:function(l){return o(l)==="object"&&l!==null},isNull:function(l){return l===null},isNullOrUndefined:function(l){return l==null}}},function(r,s,i){s.decode=s.parse=i(48),s.encode=s.stringify=i(49)},function(r,s,i){function o(u,d){return Object.prototype.hasOwnProperty.call(u,d)}r.exports=function(u,d,p,g){d=d||"&",p=p||"=";var m={};if(typeof u!="string"||u.length===0)return m;var v=/\+/g;u=u.split(d);var w=1e3;g&&typeof g.maxKeys=="number"&&(w=g.maxKeys);var S=u.length;w>0&&S>w&&(S=w);for(var $=0;$<S;++$){var T,x,y,b,_=u[$].replace(v,"%20"),I=_.indexOf(p);I>=0?(T=_.substr(0,I),x=_.substr(I+1)):(T=_,x=""),y=decodeURIComponent(T),b=decodeURIComponent(x),o(m,y)?l(m[y])?m[y].push(b):m[y]=[m[y],b]:m[y]=b}return m};var l=Array.isArray||function(u){return Object.prototype.toString.call(u)==="[object Array]"}},function(r,s,i){function o(g){return(o=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(m){return typeof m}:function(m){return m&&typeof Symbol=="function"&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m})(g)}var l=function(g){switch(o(g)){case"string":return g;case"boolean":return g?"true":"false";case"number":return isFinite(g)?g:"";default:return""}};r.exports=function(g,m,v,w){return m=m||"&",v=v||"=",g===null&&(g=void 0),o(g)==="object"?d(p(g),function(S){var $=encodeURIComponent(l(S))+v;return u(g[S])?d(g[S],function(T){return $+encodeURIComponent(l(T))}).join(m):$+encodeURIComponent(l(g[S]))}).join(m):w?encodeURIComponent(l(w))+v+encodeURIComponent(l(g)):""};var u=Array.isArray||function(g){return Object.prototype.toString.call(g)==="[object Array]"};function d(g,m){if(g.map)return g.map(m);for(var v=[],w=0;w<g.length;w++)v.push(m(g[w],w));return v}var p=Object.keys||function(g){var m=[];for(var v in g)Object.prototype.hasOwnProperty.call(g,v)&&m.push(v);return m}},function(r,s,i){var o=i(14),l=i(12),u=r.exports;for(var d in o)o.hasOwnProperty(d)&&(u[d]=o[d]);function p(g){if(typeof g=="string"&&(g=l.parse(g)),g.protocol||(g.protocol="https:"),g.protocol!=="https:")throw new Error('Protocol "'+g.protocol+'" not supported. Expected "https:"');return g}u.request=function(g,m){return g=p(g),o.request.call(this,g,m)},u.get=function(g,m){return g=p(g),o.get.call(this,g,m)}},function(r,s,i){function o(l){return(o=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u})(l)}(function(){var l,u,d,p,g,m={}.hasOwnProperty;l=i(52),u=i(13).defaults,p=function(v){return typeof v=="string"&&(v.indexOf("&")>=0||v.indexOf(">")>=0||v.indexOf("<")>=0)},g=function(v){return"<![CDATA["+d(v)+"]]>"},d=function(v){return v.replace("]]>","]]]]><![CDATA[>")},s.Builder=function(){function v(w){var S,$,T;for(S in this.options={},$=u[.2])m.call($,S)&&(T=$[S],this.options[S]=T);for(S in w)m.call(w,S)&&(T=w[S],this.options[S]=T)}return v.prototype.buildObject=function(w){var S,$,T,x,y,b;return S=this.options.attrkey,$=this.options.charkey,Object.keys(w).length===1&&this.options.rootName===u[.2].rootName?w=w[y=Object.keys(w)[0]]:y=this.options.rootName,b=this,T=function(_,I){var L,E,D,A,V,M;if(o(I)!=="object")b.options.cdata&&p(I)?_.raw(g(I)):_.txt(I);else if(Array.isArray(I)){for(A in I)if(m.call(I,A))for(V in E=I[A])D=E[V],_=T(_.ele(V),D).up()}else for(V in I)if(m.call(I,V))if(E=I[V],V===S){if(o(E)==="object")for(L in E)M=E[L],_=_.att(L,M)}else if(V===$)_=b.options.cdata&&p(E)?_.raw(g(E)):_.txt(E);else if(Array.isArray(E))for(A in E)m.call(E,A)&&(_=typeof(D=E[A])=="string"?b.options.cdata&&p(D)?_.ele(V).raw(g(D)).up():_.ele(V,D).up():T(_.ele(V),D).up());else o(E)==="object"?_=T(_.ele(V),E).up():typeof E=="string"&&b.options.cdata&&p(E)?_=_.ele(V).raw(g(E)).up():(E==null&&(E=""),_=_.ele(V,E.toString()).up());return _},x=l.create(y,this.options.xmldec,this.options.doctype,{headless:this.options.headless,allowSurrogateChars:this.options.allowSurrogateChars}),T(x,w).end(this.options.renderOpts)},v}()}).call(this)},function(r,s){r.exports=t},function(r,s,i){function o(l){return(o=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u})(l)}(function(){var l,u,d,p,g,m,v,w,S=function(T,x){return function(){return T.apply(x,arguments)}},$={}.hasOwnProperty;v=i(54),d=i(8),l=i(60),m=i(25),w=i(21).setImmediate,u=i(13).defaults,p=function(T){return o(T)==="object"&&T!=null&&Object.keys(T).length===0},g=function(T,x,y){var b,_;for(b=0,_=T.length;b<_;b++)x=(0,T[b])(x,y);return x},s.Parser=function(T){function x(y){var b,_,I;if(this.parseStringPromise=S(this.parseStringPromise,this),this.parseString=S(this.parseString,this),this.reset=S(this.reset,this),this.assignOrPush=S(this.assignOrPush,this),this.processAsync=S(this.processAsync,this),!(this instanceof s.Parser))return new s.Parser(y);for(b in this.options={},_=u[.2])$.call(_,b)&&(I=_[b],this.options[b]=I);for(b in y)$.call(y,b)&&(I=y[b],this.options[b]=I);this.options.xmlns&&(this.options.xmlnskey=this.options.attrkey+"ns"),this.options.normalizeTags&&(this.options.tagNameProcessors||(this.options.tagNameProcessors=[]),this.options.tagNameProcessors.unshift(m.normalize)),this.reset()}return function(y,b){for(var _ in b)$.call(b,_)&&(y[_]=b[_]);function I(){this.constructor=y}I.prototype=b.prototype,y.prototype=new I,y.__super__=b.prototype}(x,T),x.prototype.processAsync=function(){var y,b;try{return this.remaining.length<=this.options.chunkSize?(y=this.remaining,this.remaining="",this.saxParser=this.saxParser.write(y),this.saxParser.close()):(y=this.remaining.substr(0,this.options.chunkSize),this.remaining=this.remaining.substr(this.options.chunkSize,this.remaining.length),this.saxParser=this.saxParser.write(y),w(this.processAsync))}catch(_){if(b=_,!this.saxParser.errThrown)return this.saxParser.errThrown=!0,this.emit(b)}},x.prototype.assignOrPush=function(y,b,_){return b in y?(y[b]instanceof Array||(y[b]=[y[b]]),y[b].push(_)):this.options.explicitArray?y[b]=[_]:y[b]=_},x.prototype.reset=function(){var y,b,_,I,L;return this.removeAllListeners(),this.saxParser=v.parser(this.options.strict,{trim:!1,normalize:!1,xmlns:this.options.xmlns}),this.saxParser.errThrown=!1,this.saxParser.onerror=(L=this,function(E){if(L.saxParser.resume(),!L.saxParser.errThrown)return L.saxParser.errThrown=!0,L.emit("error",E)}),this.saxParser.onend=function(E){return function(){if(!E.saxParser.ended)return E.saxParser.ended=!0,E.emit("end",E.resultObject)}}(this),this.saxParser.ended=!1,this.EXPLICIT_CHARKEY=this.options.explicitCharkey,this.resultObject=null,I=[],y=this.options.attrkey,b=this.options.charkey,this.saxParser.onopentag=function(E){return function(D){var A,V,M,B,F;if((M=Object.create(null))[b]="",!E.options.ignoreAttrs)for(A in F=D.attributes)$.call(F,A)&&(y in M||E.options.mergeAttrs||(M[y]=Object.create(null)),V=E.options.attrValueProcessors?g(E.options.attrValueProcessors,D.attributes[A],A):D.attributes[A],B=E.options.attrNameProcessors?g(E.options.attrNameProcessors,A):A,E.options.mergeAttrs?E.assignOrPush(M,B,V):M[y][B]=V);return M["#name"]=E.options.tagNameProcessors?g(E.options.tagNameProcessors,D.name):D.name,E.options.xmlns&&(M[E.options.xmlnskey]={uri:D.uri,local:D.local}),I.push(M)}}(this),this.saxParser.onclosetag=function(E){return function(){var D,A,V,M,B,F,j,H,ee,ue;if(F=I.pop(),B=F["#name"],E.options.explicitChildren&&E.options.preserveChildrenOrder||delete F["#name"],F.cdata===!0&&(D=F.cdata,delete F.cdata),ee=I[I.length-1],F[b].match(/^\s*$/)&&!D?(A=F[b],delete F[b]):(E.options.trim&&(F[b]=F[b].trim()),E.options.normalize&&(F[b]=F[b].replace(/\s{2,}/g," ").trim()),F[b]=E.options.valueProcessors?g(E.options.valueProcessors,F[b],B):F[b],Object.keys(F).length===1&&b in F&&!E.EXPLICIT_CHARKEY&&(F=F[b])),p(F)&&(F=typeof E.options.emptyTag=="function"?E.options.emptyTag():E.options.emptyTag!==""?E.options.emptyTag:A),E.options.validator!=null&&(ue="/"+function(){var pe,Q,fe;for(fe=[],pe=0,Q=I.length;pe<Q;pe++)M=I[pe],fe.push(M["#name"]);return fe}().concat(B).join("/"),function(){var pe;try{F=E.options.validator(ue,ee&&ee[B],F)}catch(Q){return pe=Q,E.emit("error",pe)}}()),E.options.explicitChildren&&!E.options.mergeAttrs&&o(F)==="object")if(E.options.preserveChildrenOrder){if(ee){for(V in ee[E.options.childkey]=ee[E.options.childkey]||[],j=Object.create(null),F)$.call(F,V)&&(j[V]=F[V]);ee[E.options.childkey].push(j),delete F["#name"],Object.keys(F).length===1&&b in F&&!E.EXPLICIT_CHARKEY&&(F=F[b])}}else M=Object.create(null),E.options.attrkey in F&&(M[E.options.attrkey]=F[E.options.attrkey],delete F[E.options.attrkey]),!E.options.charsAsChildren&&E.options.charkey in F&&(M[E.options.charkey]=F[E.options.charkey],delete F[E.options.charkey]),Object.getOwnPropertyNames(F).length>0&&(M[E.options.childkey]=F),F=M;return I.length>0?E.assignOrPush(ee,B,F):(E.options.explicitRoot&&(H=F,(F=Object.create(null))[B]=H),E.resultObject=F,E.saxParser.ended=!0,E.emit("end",E.resultObject))}}(this),_=function(E){return function(D){var A,V;if(V=I[I.length-1])return V[b]+=D,E.options.explicitChildren&&E.options.preserveChildrenOrder&&E.options.charsAsChildren&&(E.options.includeWhiteChars||D.replace(/\\n/g,"").trim()!=="")&&(V[E.options.childkey]=V[E.options.childkey]||[],(A={"#name":"__text__"})[b]=D,E.options.normalize&&(A[b]=A[b].replace(/\s{2,}/g," ").trim()),V[E.options.childkey].push(A)),V}}(this),this.saxParser.ontext=_,this.saxParser.oncdata=function(E){var D;if(D=_(E))return D.cdata=!0}},x.prototype.parseString=function(y,b){var _;b!=null&&typeof b=="function"&&(this.on("end",function(I){return this.reset(),b(null,I)}),this.on("error",function(I){return this.reset(),b(I)}));try{return(y=y.toString()).trim()===""?(this.emit("end",null),!0):(y=l.stripBOM(y),this.options.async?(this.remaining=y,w(this.processAsync),this.saxParser):this.saxParser.write(y).close())}catch(I){if(_=I,!this.saxParser.errThrown&&!this.saxParser.ended)return this.emit("error",_),this.saxParser.errThrown=!0;if(this.saxParser.ended)throw _}},x.prototype.parseStringPromise=function(y){return new Promise((b=this,function(_,I){return b.parseString(y,function(L,E){return L?I(L):_(E)})}));var b},x}(d),s.parseString=function(T,x,y){var b,_;return y!=null?(typeof y=="function"&&(b=y),o(x)==="object"&&(_=x)):(typeof x=="function"&&(b=x),_={}),new s.Parser(_).parseString(T,b)},s.parseStringPromise=function(T,x){var y;return o(x)==="object"&&(y=x),new s.Parser(y).parseStringPromise(T)}}).call(this)},function(r,s,i){(function(o){function l(u){return(l=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(d){return typeof d}:function(d){return d&&typeof Symbol=="function"&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d})(u)}(function(u){u.parser=function(X,xe){return new g(X,xe)},u.SAXParser=g,u.SAXStream=v,u.createStream=function(X,xe){return new v(X,xe)},u.MAX_BUFFER_LENGTH=65536;var d,p=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function g(X,xe){if(!(this instanceof g))return new g(X,xe);(function(O){for(var z=0,U=p.length;z<U;z++)O[p[z]]=""})(this),this.q=this.c="",this.bufferCheckPosition=u.MAX_BUFFER_LENGTH,this.opt=xe||{},this.opt.lowercase=this.opt.lowercase||this.opt.lowercasetags,this.looseCase=this.opt.lowercase?"toLowerCase":"toUpperCase",this.tags=[],this.closed=this.closedRoot=this.sawRoot=!1,this.tag=this.error=null,this.strict=!!X,this.noscript=!(!X&&!this.opt.noscript),this.state=M.BEGIN,this.strictEntities=this.opt.strictEntities,this.ENTITIES=this.strictEntities?Object.create(u.XML_ENTITIES):Object.create(u.ENTITIES),this.attribList=[],this.opt.xmlns&&(this.ns=Object.create(S)),this.trackPosition=this.opt.position!==!1,this.trackPosition&&(this.position=this.line=this.column=0),F(this,"onready")}u.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","opentagstart","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"],Object.create||(Object.create=function(X){function xe(){}return xe.prototype=X,new xe}),Object.keys||(Object.keys=function(X){var xe=[];for(var O in X)X.hasOwnProperty(O)&&xe.push(O);return xe}),g.prototype={end:function(){pe(this)},write:function(X){if(this.error)throw this.error;if(this.closed)return ue(this,"Cannot write after close. Assign an onready handler.");if(X===null)return pe(this);l(X)==="object"&&(X=X.toString());for(var xe=0,O="";O=Ce(X,xe++),this.c=O,O;)switch(this.trackPosition&&(this.position++,O===`
`?(this.line++,this.column=0):this.column++),this.state){case M.BEGIN:if(this.state=M.BEGIN_WHITESPACE,O==="\uFEFF")continue;le(this,O);continue;case M.BEGIN_WHITESPACE:le(this,O);continue;case M.TEXT:if(this.sawRoot&&!this.closedRoot){for(var z=xe-1;O&&O!=="<"&&O!=="&";)(O=Ce(X,xe++))&&this.trackPosition&&(this.position++,O===`
`?(this.line++,this.column=0):this.column++);this.textNode+=X.substring(z,xe-1)}O!=="<"||this.sawRoot&&this.closedRoot&&!this.strict?(b(O)||this.sawRoot&&!this.closedRoot||Q(this,"Text data outside of root node."),O==="&"?this.state=M.TEXT_ENTITY:this.textNode+=O):(this.state=M.OPEN_WAKA,this.startTagPosition=this.position);continue;case M.SCRIPT:O==="<"?this.state=M.SCRIPT_ENDING:this.script+=O;continue;case M.SCRIPT_ENDING:O==="/"?this.state=M.CLOSE_TAG:(this.script+="<"+O,this.state=M.SCRIPT);continue;case M.OPEN_WAKA:if(O==="!")this.state=M.SGML_DECL,this.sgmlDecl="";else if(!b(O))if(L($,O))this.state=M.OPEN_TAG,this.tagName=O;else if(O==="/")this.state=M.CLOSE_TAG,this.tagName="";else if(O==="?")this.state=M.PROC_INST,this.procInstName=this.procInstBody="";else{if(Q(this,"Unencoded <"),this.startTagPosition+1<this.position){var U=this.position-this.startTagPosition;O=new Array(U).join(" ")+O}this.textNode+="<"+O,this.state=M.TEXT}continue;case M.SGML_DECL:(this.sgmlDecl+O).toUpperCase()==="[CDATA["?(j(this,"onopencdata"),this.state=M.CDATA,this.sgmlDecl="",this.cdata=""):this.sgmlDecl+O==="--"?(this.state=M.COMMENT,this.comment="",this.sgmlDecl=""):(this.sgmlDecl+O).toUpperCase()==="DOCTYPE"?(this.state=M.DOCTYPE,(this.doctype||this.sawRoot)&&Q(this,"Inappropriately located doctype declaration"),this.doctype="",this.sgmlDecl=""):O===">"?(j(this,"onsgmldeclaration",this.sgmlDecl),this.sgmlDecl="",this.state=M.TEXT):_(O)?(this.state=M.SGML_DECL_QUOTED,this.sgmlDecl+=O):this.sgmlDecl+=O;continue;case M.SGML_DECL_QUOTED:O===this.q&&(this.state=M.SGML_DECL,this.q=""),this.sgmlDecl+=O;continue;case M.DOCTYPE:O===">"?(this.state=M.TEXT,j(this,"ondoctype",this.doctype),this.doctype=!0):(this.doctype+=O,O==="["?this.state=M.DOCTYPE_DTD:_(O)&&(this.state=M.DOCTYPE_QUOTED,this.q=O));continue;case M.DOCTYPE_QUOTED:this.doctype+=O,O===this.q&&(this.q="",this.state=M.DOCTYPE);continue;case M.DOCTYPE_DTD:this.doctype+=O,O==="]"?this.state=M.DOCTYPE:_(O)&&(this.state=M.DOCTYPE_DTD_QUOTED,this.q=O);continue;case M.DOCTYPE_DTD_QUOTED:this.doctype+=O,O===this.q&&(this.state=M.DOCTYPE_DTD,this.q="");continue;case M.COMMENT:O==="-"?this.state=M.COMMENT_ENDING:this.comment+=O;continue;case M.COMMENT_ENDING:O==="-"?(this.state=M.COMMENT_ENDED,this.comment=ee(this.opt,this.comment),this.comment&&j(this,"oncomment",this.comment),this.comment=""):(this.comment+="-"+O,this.state=M.COMMENT);continue;case M.COMMENT_ENDED:O!==">"?(Q(this,"Malformed comment"),this.comment+="--"+O,this.state=M.COMMENT):this.state=M.TEXT;continue;case M.CDATA:O==="]"?this.state=M.CDATA_ENDING:this.cdata+=O;continue;case M.CDATA_ENDING:O==="]"?this.state=M.CDATA_ENDING_2:(this.cdata+="]"+O,this.state=M.CDATA);continue;case M.CDATA_ENDING_2:O===">"?(this.cdata&&j(this,"oncdata",this.cdata),j(this,"onclosecdata"),this.cdata="",this.state=M.TEXT):O==="]"?this.cdata+="]":(this.cdata+="]]"+O,this.state=M.CDATA);continue;case M.PROC_INST:O==="?"?this.state=M.PROC_INST_ENDING:b(O)?this.state=M.PROC_INST_BODY:this.procInstName+=O;continue;case M.PROC_INST_BODY:if(!this.procInstBody&&b(O))continue;O==="?"?this.state=M.PROC_INST_ENDING:this.procInstBody+=O;continue;case M.PROC_INST_ENDING:O===">"?(j(this,"onprocessinginstruction",{name:this.procInstName,body:this.procInstBody}),this.procInstName=this.procInstBody="",this.state=M.TEXT):(this.procInstBody+="?"+O,this.state=M.PROC_INST_BODY);continue;case M.OPEN_TAG:L(T,O)?this.tagName+=O:(fe(this),O===">"?se(this):O==="/"?this.state=M.OPEN_TAG_SLASH:(b(O)||Q(this,"Invalid character in tag name"),this.state=M.ATTRIB));continue;case M.OPEN_TAG_SLASH:O===">"?(se(this,!0),ne(this)):(Q(this,"Forward-slash in opening tag not followed by >"),this.state=M.ATTRIB);continue;case M.ATTRIB:if(b(O))continue;O===">"?se(this):O==="/"?this.state=M.OPEN_TAG_SLASH:L($,O)?(this.attribName=O,this.attribValue="",this.state=M.ATTRIB_NAME):Q(this,"Invalid attribute name");continue;case M.ATTRIB_NAME:O==="="?this.state=M.ATTRIB_VALUE:O===">"?(Q(this,"Attribute without value"),this.attribValue=this.attribName,G(this),se(this)):b(O)?this.state=M.ATTRIB_NAME_SAW_WHITE:L(T,O)?this.attribName+=O:Q(this,"Invalid attribute name");continue;case M.ATTRIB_NAME_SAW_WHITE:if(O==="=")this.state=M.ATTRIB_VALUE;else{if(b(O))continue;Q(this,"Attribute without value"),this.tag.attributes[this.attribName]="",this.attribValue="",j(this,"onattribute",{name:this.attribName,value:""}),this.attribName="",O===">"?se(this):L($,O)?(this.attribName=O,this.state=M.ATTRIB_NAME):(Q(this,"Invalid attribute name"),this.state=M.ATTRIB)}continue;case M.ATTRIB_VALUE:if(b(O))continue;_(O)?(this.q=O,this.state=M.ATTRIB_VALUE_QUOTED):(Q(this,"Unquoted attribute value"),this.state=M.ATTRIB_VALUE_UNQUOTED,this.attribValue=O);continue;case M.ATTRIB_VALUE_QUOTED:if(O!==this.q){O==="&"?this.state=M.ATTRIB_VALUE_ENTITY_Q:this.attribValue+=O;continue}G(this),this.q="",this.state=M.ATTRIB_VALUE_CLOSED;continue;case M.ATTRIB_VALUE_CLOSED:b(O)?this.state=M.ATTRIB:O===">"?se(this):O==="/"?this.state=M.OPEN_TAG_SLASH:L($,O)?(Q(this,"No whitespace between attributes"),this.attribName=O,this.attribValue="",this.state=M.ATTRIB_NAME):Q(this,"Invalid attribute name");continue;case M.ATTRIB_VALUE_UNQUOTED:if(!I(O)){O==="&"?this.state=M.ATTRIB_VALUE_ENTITY_U:this.attribValue+=O;continue}G(this),O===">"?se(this):this.state=M.ATTRIB;continue;case M.CLOSE_TAG:if(this.tagName)O===">"?ne(this):L(T,O)?this.tagName+=O:this.script?(this.script+="</"+this.tagName,this.tagName="",this.state=M.SCRIPT):(b(O)||Q(this,"Invalid tagname in closing tag"),this.state=M.CLOSE_TAG_SAW_WHITE);else{if(b(O))continue;E($,O)?this.script?(this.script+="</"+O,this.state=M.SCRIPT):Q(this,"Invalid tagname in closing tag."):this.tagName=O}continue;case M.CLOSE_TAG_SAW_WHITE:if(b(O))continue;O===">"?ne(this):Q(this,"Invalid characters in closing tag");continue;case M.TEXT_ENTITY:case M.ATTRIB_VALUE_ENTITY_Q:case M.ATTRIB_VALUE_ENTITY_U:var oe,ie;switch(this.state){case M.TEXT_ENTITY:oe=M.TEXT,ie="textNode";break;case M.ATTRIB_VALUE_ENTITY_Q:oe=M.ATTRIB_VALUE_QUOTED,ie="attribValue";break;case M.ATTRIB_VALUE_ENTITY_U:oe=M.ATTRIB_VALUE_UNQUOTED,ie="attribValue"}O===";"?(this[ie]+=re(this),this.entity="",this.state=oe):L(this.entity.length?y:x,O)?this.entity+=O:(Q(this,"Invalid character in entity name"),this[ie]+="&"+this.entity+O,this.entity="",this.state=oe);continue;default:throw new Error(this,"Unknown state: "+this.state)}return this.position>=this.bufferCheckPosition&&function(ce){for(var Te=Math.max(u.MAX_BUFFER_LENGTH,10),Ne=0,Ge=0,Ve=p.length;Ge<Ve;Ge++){var De=ce[p[Ge]].length;if(De>Te)switch(p[Ge]){case"textNode":H(ce);break;case"cdata":j(ce,"oncdata",ce.cdata),ce.cdata="";break;case"script":j(ce,"onscript",ce.script),ce.script="";break;default:ue(ce,"Max buffer length exceeded: "+p[Ge])}Ne=Math.max(Ne,De)}var lt=u.MAX_BUFFER_LENGTH-Ne;ce.bufferCheckPosition=lt+ce.position}(this),this},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var X;H(X=this),X.cdata!==""&&(j(X,"oncdata",X.cdata),X.cdata=""),X.script!==""&&(j(X,"onscript",X.script),X.script="")}};try{d=i(55).Stream}catch{d=function(){}}var m=u.EVENTS.filter(function(X){return X!=="error"&&X!=="end"});function v(X,xe){if(!(this instanceof v))return new v(X,xe);d.apply(this),this._parser=new g(X,xe),this.writable=!0,this.readable=!0;var O=this;this._parser.onend=function(){O.emit("end")},this._parser.onerror=function(z){O.emit("error",z),O._parser.error=null},this._decoder=null,m.forEach(function(z){Object.defineProperty(O,"on"+z,{get:function(){return O._parser["on"+z]},set:function(U){if(!U)return O.removeAllListeners(z),O._parser["on"+z]=U,U;O.on(z,U)},enumerable:!0,configurable:!1})})}v.prototype=Object.create(d.prototype,{constructor:{value:v}}),v.prototype.write=function(X){if(typeof o=="function"&&typeof o.isBuffer=="function"&&o.isBuffer(X)){if(!this._decoder){var xe=i(11).StringDecoder;this._decoder=new xe("utf8")}X=this._decoder.write(X)}return this._parser.write(X.toString()),this.emit("data",X),!0},v.prototype.end=function(X){return X&&X.length&&this.write(X),this._parser.end(),!0},v.prototype.on=function(X,xe){var O=this;return O._parser["on"+X]||m.indexOf(X)===-1||(O._parser["on"+X]=function(){var z=arguments.length===1?[arguments[0]]:Array.apply(null,arguments);z.splice(0,0,X),O.emit.apply(O,z)}),d.prototype.on.call(O,X,xe)};var w="http://www.w3.org/XML/1998/namespace",S={xml:w,xmlns:"http://www.w3.org/2000/xmlns/"},$=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,T=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,x=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,y=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;function b(X){return X===" "||X===`
`||X==="\r"||X==="	"}function _(X){return X==='"'||X==="'"}function I(X){return X===">"||b(X)}function L(X,xe){return X.test(xe)}function E(X,xe){return!L(X,xe)}var D,A,V,M=0;for(var B in u.STATE={BEGIN:M++,BEGIN_WHITESPACE:M++,TEXT:M++,TEXT_ENTITY:M++,OPEN_WAKA:M++,SGML_DECL:M++,SGML_DECL_QUOTED:M++,DOCTYPE:M++,DOCTYPE_QUOTED:M++,DOCTYPE_DTD:M++,DOCTYPE_DTD_QUOTED:M++,COMMENT_STARTING:M++,COMMENT:M++,COMMENT_ENDING:M++,COMMENT_ENDED:M++,CDATA:M++,CDATA_ENDING:M++,CDATA_ENDING_2:M++,PROC_INST:M++,PROC_INST_BODY:M++,PROC_INST_ENDING:M++,OPEN_TAG:M++,OPEN_TAG_SLASH:M++,ATTRIB:M++,ATTRIB_NAME:M++,ATTRIB_NAME_SAW_WHITE:M++,ATTRIB_VALUE:M++,ATTRIB_VALUE_QUOTED:M++,ATTRIB_VALUE_CLOSED:M++,ATTRIB_VALUE_UNQUOTED:M++,ATTRIB_VALUE_ENTITY_Q:M++,ATTRIB_VALUE_ENTITY_U:M++,CLOSE_TAG:M++,CLOSE_TAG_SAW_WHITE:M++,SCRIPT:M++,SCRIPT_ENDING:M++},u.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},u.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(u.ENTITIES).forEach(function(X){var xe=u.ENTITIES[X],O=typeof xe=="number"?String.fromCharCode(xe):xe;u.ENTITIES[X]=O}),u.STATE)u.STATE[u.STATE[B]]=B;function F(X,xe,O){X[xe]&&X[xe](O)}function j(X,xe,O){X.textNode&&H(X),F(X,xe,O)}function H(X){X.textNode=ee(X.opt,X.textNode),X.textNode&&F(X,"ontext",X.textNode),X.textNode=""}function ee(X,xe){return X.trim&&(xe=xe.trim()),X.normalize&&(xe=xe.replace(/\s+/g," ")),xe}function ue(X,xe){return H(X),X.trackPosition&&(xe+=`
Line: `+X.line+`
Column: `+X.column+`


Explanation:
The JS search hit too many files and the output was minified JS (not helpful). Let me take a different approach. The issue is the ZimaOS/CasaOS dashboard frontend determines which apps show the "Nicht unterstützt" message. Let me look at the React JS chunks for the Home page to understand the logic, and also check the app-management API endpoint to see what data the frontend is actually getting.

Let me try to understand the API that serves app info to the dashboard.

sudo netstat -tlnp 2>/dev/null | grep 43455 || sudo ss -tlnp | grep 43455

sudo curl -s http://localhost/v2/app_management/list 2>&1 | python3 -m json.tool 2>&1 | head -80

sudo curl -s http://localhost/v1/container/list 2>&1 | head -50


Output: tcp        0      0 127.0.0.1:43455         0.0.0.0:*               LISTEN      29304/zimaos-app-ma


Output:
{
    "message": "no matching operation was found"
}


Output: {"success":500,"message":"Error response from daemon: No such container: list","data":null}


Explanation:
Let me understand what's happening. The user sees "derzeit nicht unterstützt" (currently not supported) when trying to open PrintVault in CasaOS. I need to dig deeper into how CasaOS routes requests to container apps.

The key port is 43455 (zimaos-app-management). Let me check what the app management API returns about installed apps.

sudo curl -s http://localhost:43455/v2/app_management/list 2>&1 | head -200

sudo curl -s http://localhost:43455/v1/container/list 2>&1 | head -200

sudo curl -s http://localhost:43455/v1/apps/list 2>&1 | head -200


Output: {"message":"no matching operation was found"}


Output: {"success":500,"message":"Error response from daemon: No such container: list","data":null}


Output: {"message":"Not Found"}


Explanation: The app management service (port 43455) doesn't seem to support a listing endpoint. Let me look at what endpoints are available and check how the frontend communicates with the backend to understand the "nicht unterstützt" (not supported) message.

sudo strings /proc/29304/cmdline 2>/dev/null; echo "---"; sudo readlink -f /proc/29304/exe 2>/dev/null

sudo grep -r "nicht unterstützt\|not.supported\|unsupported\|app_type\|v2app\|container.*type" /usr/share/casaos/www/assets/Home-DLnnUJvC.js 2>/dev/null | head -5

sudo find /usr/share/casaos/www/assets -name "*.js" -printf "%s %p\n" | sort -rn | head -5


Output:
/usr/bin/zimaos-app-management
/etc/casaos/app-management.conf
--removeRuntimeIfNoNvidiaGPU
true
---
/usr/bin/zimaos-app-management