From cb2a0e6d84db31ec8da77c1e9984fe1078dc5629 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Tue, 8 Sep 2026 07:36:39 +0000 Subject: [PATCH] runtime: publish NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3 --- ...0908-A-STAGINGEDGE-FRONTEND-FORENSIC3.json | 38 +++++++++++ ...60908-A-STAGINGEDGE-FRONTEND-FORENSIC3.txt | 63 ++++++++++++++++++ runtime/latest.json | 16 ++--- runtime/latest.txt | 64 ++++++++++--------- 4 files changed, 142 insertions(+), 39 deletions(-) create mode 100644 runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.json create mode 100644 runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.txt diff --git a/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.json b/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.json new file mode 100644 index 00000000..2ae5fb16 --- /dev/null +++ b/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "newfi-staging-upstream-tls-frontend-forensic-readonly", + "started_at_utc": "2026-09-08T07:36:02Z", + "finished_at_utc": "2026-09-08T07:36:39Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "45b9f9814c0bff698962bcdd4c06d06953e5ec76ec01c8f56e680c51218c4047", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "1997b836a531166d14298c77a514de124631aa8c239a2ef9b74202fb2bf9a4ff", + "sanitized_output_sha256": "24bb5f3b58f9b3919ef16ca69845f204063a88ea8ab583d4e12ed0445d64f801", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "FORENSIC3_BEGIN=true\nCOMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3\nMODE=read-only\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nPRIOR_FORENSIC2_GATE=PASS\nPRIOR_FORENSIC2_HISTORY_SHA256=ca4539996dc20a97e98687e1c0721f53b03e9c9e0c9e68fc62d4686081053271\nPUBLIC_DNS_PTR={\"PTR\":{\"err\":\"\",\"rc\":0,\"values\":[]},\"chat.gram1.ru\":{\"A\":[\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"git.gram1.ru\":{\"A\":[\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"groups.chat.gram1.ru\":{\"A\":[\"chat.gram1.ru.\",\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"newfi-staging.gram1.ru\":{\"A\":[],\"err\":\"\",\"rc\":0},\"share.chat.gram1.ru\":{\"A\":[\"chat.gram1.ru.\",\"185.225.35.6\"],\"err\":\"\",\"rc\":0}}\nPUBLIC_CERT_GIT_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\\nnotBefore=Aug 17 02:03:29 2026 GMT\\nnotAfter=Nov 15 02:03:28 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:git-read.gram1.ru, DNS:git.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_GIT_GRAM1_RU={\"err\":\"\",\"headers\":[\"Server: nginx/1.28.3 (Ubuntu)\"],\"http\":\"200\",\"rc\":0}\nPUBLIC_CERT_CHAT_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=chat.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE2\\nserial=05CCB33370771F433AE4E9AD47F2DB574672\\nnotBefore=Aug 17 02:54:43 2026 GMT\\nnotAfter=Nov 15 02:54:42 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_CHAT_GRAM1_RU={\"err\":\"\",\"headers\":[\"Server: nginx/1.28.3 (Ubuntu)\",\"location: /login\"],\"http\":\"302\",\"rc\":0}\nPUBLIC_CERT_NEWFI_STAGING_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=chat.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE2\\nserial=05CCB33370771F433AE4E9AD47F2DB574672\\nnotBefore=Aug 17 02:54:43 2026 GMT\\nnotAfter=Nov 15 02:54:42 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_NEWFI_STAGING_GRAM1_RU={\"err\":\"curl: (60) SSL: no alternative certificate subject name matches target hostname 'newfi-staging.gram1.ru'\\nMore details here: https://curl.se/docs/sslcerts.html\\n\\ncurl failed to verify the legitimacy of the server and therefore could not\\nestablish a secure connection to it. To learn more about this situation and\\nhow to fix it, please visit the webpage mentioned above.\\n\",\"headers\":[],\"http\":\"000\",\"rc\":60}\nCLUSTER_VM_CT_INVENTORY={\"err\":\"\",\"rc\":0,\"rows\":[{\"name\":\"dns1\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":110},{\"name\":\"dns2\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":111},{\"name\":\"unbound1\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":112},{\"name\":\"unbound2\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":113},{\"name\":\"edge-vm\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":130},{\"name\":\"snikket\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":150},{\"name\":\"forum-prod\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":160},{\"name\":\"core-apps\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":170},{\"name\":\"monitoring\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":171},{\"name\":\"homelab-ops-worker\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":190},{\"name\":\"newfi-prod\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":210},{\"name\":\"newfi-staging\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":211},{\"name\":\"edge-cold-standby\",\"node\":\"pve02\",\"status\":\"stopped\",\"template\":0,\"type\":\"qemu\",\"vmid\":9130}]}\nPVE01_DEFAULT_ROUTE={\"err\":\"\",\"gateway\":\"[PRIVATE_IP]\",\"line\":\"default via [PRIVATE_IP] dev vmbr0 proto kernel onlink\",\"rc\":0}\nPVE01_GATEWAY_NEIGHBOR={\"err\":\"\",\"out\":\"[PRIVATE_IP] dev vmbr0 lladdr d6:9c:53:00:2c:c3 REACHABLE\",\"rc\":0}\nGATEWAY_BASIC_PORTS={\"22\":{\"open\":false,\"rc\":124},\"443\":{\"open\":false,\"rc\":124},\"80\":{\"open\":false,\"rc\":124},\"8443\":{\"open\":false,\"rc\":124}}\nGATEWAY_SSH_KEYSCAN={\"err\":\"\",\"out\":\"\",\"rc\":1}\nGATEWAY_HTTP_HEAD={\"err\":\"curl: (28) Connection timed out after 5002 milliseconds\\n\",\"out\":\"\",\"rc\":28}\nGATEWAY_HTTPS_HEAD={\"err\":\"curl: (28) Connection timed out after 5001 milliseconds\\n\",\"out\":\"\",\"rc\":28}\nEDGE_PRIVATE_IP_DISCOVERY={\"ips\":[\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\"],\"rc\":0,\"selected\":null}\nEDGE_WEB_LISTENER_OWNERSHIP={\"err\":\"\",\"out\":\"--- SS_WEB ---\\nState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess \\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=16),(\\\"nginx\\\",pid=2180089,fd=16),(\\\"nginx\\\",pid=2180083,fd=16),(\\\"nginx\\\",pid=2180082,fd=16),(\\\"nginx\\\",pid=3096,fd=16))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=15),(\\\"nginx\\\",pid=2180089,fd=15),(\\\"nginx\\\",pid=2180083,fd=15),(\\\"nginx\\\",pid=2180082,fd=15),(\\\"nginx\\\",pid=3096,fd=15))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=14),(\\\"nginx\\\",pid=2180089,fd=14),(\\\"nginx\\\",pid=2180083,fd=14),(\\\"nginx\\\",pid=2180082,fd=14),(\\\"nginx\\\",pid=3096,fd=14))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=7),(\\\"nginx\\\",pid=2180089,fd=7),(\\\"nginx\\\",pid=2180083,fd=7),(\\\"nginx\\\",pid=2180082,fd=7),(\\\"nginx\\\",pid=3096,fd=7)) \\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=13),(\\\"nginx\\\",pid=2180089,fd=13),(\\\"nginx\\\",pid=2180083,fd=13),(\\\"nginx\\\",pid=2180082,fd=13),(\\\"nginx\\\",pid=3096,fd=13))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=12),(\\\"nginx\\\",pid=2180089,fd=12),(\\\"nginx\\\",pid=2180083,fd=12),(\\\"nginx\\\",pid=2180082,fd=12),(\\\"nginx\\\",pid=3096,fd=12))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=11),(\\\"nginx\\\",pid=2180089,fd=11),(\\\"nginx\\\",pid=2180083,fd=11),(\\\"nginx\\\",pid=2180082,fd=11),(\\\"nginx\\\",pid=3096,fd=11))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=6),(\\\"nginx\\\",pid=2180089,fd=6),(\\\"nginx\\\",pid=2180083,fd=6),(\\\"nginx\\\",pid=2180082,fd=6),(\\\"nginx\\\",pid=3096,fd=6)) \\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=19),(\\\"nginx\\\",pid=2180089,fd=19),(\\\"nginx\\\",pid=2180083,fd=19),(\\\"nginx\\\",pid=2180082,fd=19),(\\\"nginx\\\",pid=3096,fd=19))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=18),(\\\"nginx\\\",pid=2180089,fd=18),(\\\"nginx\\\",pid=2180083,fd=18),(\\\"nginx\\\",pid=2180082,fd=18),(\\\"nginx\\\",pid=3096,fd=18))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=17),(\\\"nginx\\\",pid=2180089,fd=17),(\\\"nginx\\\",pid=2180083,fd=17),(\\\"nginx\\\",pid=2180082,fd=17),(\\\"nginx\\\",pid=3096,fd=17))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=8),(\\\"nginx\\\",pid=2180089,fd=8),(\\\"nginx\\\",pid=2180083,fd=8),(\\\"nginx\\\",pid=2180082,fd=8),(\\\"nginx\\\",pid=3096,fd=8)) \\nLISTEN 0 511 [::]:443 [::]:* users:((\\\"nginx\\\",pid=2180110,fd=10),(\\\"nginx\\\",pid=2180089,fd=10),(\\\"nginx\\\",pid=2180083,fd=10),(\\\"nginx\\\",pid=2180082,fd=10),(\\\"nginx\\\",pid=3096,fd=10))\\nLISTEN 0 511 [::]:80 [::]:* users:((\\\"nginx\\\",pid=2180110,fd=9),(\\\"nginx\\\",pid=2180089,fd=9),(\\\"nginx\\\",pid=2180083,fd=9),(\\\"nginx\\\",pid=2180082,fd=9),(\\\"nginx\\\",pid=3096,fd=9)) \\n--- PROCESS_TREE_NGINX ---\\n 1920 1674 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\\n 2031 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 2375 -container-ip [PRIVATE_IP] -container-port 2375 -use-listen-fd\\n 2107 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8081 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 2160 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 7422 -container-ip [PRIVATE_IP] -container-port 7422 -use-listen-fd\\n 2180 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8088 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 2201 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 12345 -container-ip [PRIVATE_IP] -container-port 12345 -use-listen-fd\\n 2213 1920 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\\n 2223 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3100 -container-ip [PRIVATE_IP] -container-port 3100 -use-listen-fd\\n 2332 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9999 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 3096 3095 root nginx nginx: master process nginx -e stderr\\n1948449 3096 root nginx nginx: worker process is shutting down\\n2180082 3096 root nginx nginx: worker process\\n2180083 3096 root nginx nginx: worker process\\n2180089 3096 root nginx nginx: worker process\\n2180110 3096 root nginx nginx: worker process\\n2183049 722 root bash /bin/bash -lc echo '--- SS_WEB ---' ss -ltnp | awk 'NR==1 || $4 ~ /:(80|81|443)$/' echo '--- PROCESS_TREE_NGINX ---' ps -eo pid,ppid,user,comm,args | grep -E '[n]ginx|[d]ocker-proxy|[h]aproxy|[c]addy|[t]raefik' echo '--- NPMPLUS_MODE ---' docker inspect npmplus --format '{{.HostConfig.NetworkMode}}' echo '--- NPMPLUS_IMAGE ---' docker inspect npmplus --format '{{.Config.Image}} {{.Image}}' echo '--- NPMPLUS_NGINX_VERSION ---' docker exec npmplus /usr/local/nginx/sbin/nginx -v 2>&1 \\n2631782 1 root sudo sudo bash -lc set -euo pipefail; IDS=\\\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\\\"; B=\\\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\\\"; install -d -m 700 \\\"$B\\\"; python3 -c \\\"import sqlite3; s=sqlite3.connect(\\\\\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\\\\\",uri=True); d=sqlite3.connect(\\\\\\\"$B/database.sqlite.before\\\\\\\"); s.backup(d); d.close(); s.close()\\\"; chmod 600 \\\"$B/database.sqlite.before\\\"; for id in $IDS; do [ ! -e \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" ] || cp -a \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" \\\"$B/$id.conf.before\\\"; done; docker exec npmplus grep -q \\\"is_deleted: 1\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"Delete Nginx Config\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"internalNginx.reload\\\" /app/internal/proxy-host.js; C=\\\"/data${B#/opt/npmplus}\\\"; printf \\\"%s\\\\n\\\" \\\"import internalProxyHost from \\\\\\\"/app/internal/proxy-host.js\\\\\\\";\\\" \\\"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\\\" \\\"const access={can:async()=>({permission_visibility:\\\\\\\"all\\\\\\\"}),token=;\\\" \\\"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\\\\\"DELETED=\\\\\\\"+id+\\\\\\\":\\\\\\\"+ok); }\\\" > \\\"$B/delete-stale.mjs\\\"; chmod 644 \\\"$B/delete-stale.mjs\\\"; docker exec -u 0 npmplus node --check \\\"$C/delete-stale.mjs\\\"; echo \\\"BACKUP=$B\\\"; docker exec -u 0 npmplus node \\\"$C/delete-stale.mjs\\\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\\n2631784 2631782 root bash bash -lc set -euo pipefail; IDS=\\\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\\\"; B=\\\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\\\"; install -d -m 700 \\\"$B\\\"; python3 -c \\\"import sqlite3; s=sqlite3.connect(\\\\\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\\\\\",uri=True); d=sqlite3.connect(\\\\\\\"$B/database.sqlite.before\\\\\\\"); s.backup(d); d.close(); s.close()\\\"; chmod 600 \\\"$B/database.sqlite.before\\\"; for id in $IDS; do [ ! -e \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" ] || cp -a \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" \\\"$B/$id.conf.before\\\"; done; docker exec npmplus grep -q \\\"is_deleted: 1\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"Delete Nginx Config\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"internalNginx.reload\\\" /app/internal/proxy-host.js; C=\\\"/data${B#/opt/npmplus}\\\"; printf \\\"%s\\\\n\\\" \\\"import internalProxyHost from \\\\\\\"/app/internal/proxy-host.js\\\\\\\";\\\" \\\"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\\\" \\\"const access={can:async()=>({permission_visibility:\\\\\\\"all\\\\\\\"}),token=;\\\" \\\"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\\\\\"DELETED=\\\\\\\"+id+\\\\\\\":\\\\\\\"+ok); }\\\" > \\\"$B/delete-stale.mjs\\\"; chmod 644 \\\"$B/delete-stale.mjs\\\"; docker exec -u 0 npmplus node --check \\\"$C/delete-stale.mjs\\\"; echo \\\"BACKUP=$B\\\"; docker exec -u 0 npmplus node \\\"$C/delete-stale.mjs\\\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\\n--- NPMPLUS_MODE ---\\nhost\\n--- NPMPLUS_IMAGE ---\\ndocker.io/zoeyvid/npmplus:2026-06-17-b1 sha256:058637924fae1dbf161d1d78c84b738d86804e9a0ddad66cf7c87cbe33337834\\n--- NPMPLUS_NGINX_VERSION ---\\nnginx version: nginx/1.31.2 (NPMplus)\",\"rc\":0}\nFOCUSED_FRONTEND_REFERENCES={\"err\":\"\",\"out\":\"[{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":951,\\\"text\\\":\\\"URL=https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":1967,\\\"text\\\":\\\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2418,\\\"text\\\":\\\"from=\\\\\\\"[PRIVATE_IP]\\\\\\\",command=\\\\\\\"...\\\\\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2454,\\\"text\\\":\\\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2803,\\\"text\\\":\\\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2832,\\\"text\\\":\\\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":4810,\\\"text\\\":\\\"- likely frontend/cache;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":5436,\\\"text\\\":\\\"- \\\\u043a\\\\u0442\\\\u043e \\\\u043e\\\\u0442\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0435\\\\u0442 \\\\u0437\\\\u0430 reverse proxy;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":6683,\\\"text\\\":\\\"| Core | Gitea | https://git.gram1.ru | public | Git |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7096,\\\"text\\\":\\\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7161,\\\"text\\\":\\\"| 257 | `### NAT / port forwarding` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7455,\\\"text\\\":\\\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7540,\\\"text\\\":\\\"- `https://git.gram1.ru`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8263,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8552,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8620,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8631,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8653,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8702,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9006,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9062,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9305,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9319,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9870,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10101,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10113,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10629,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10722,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":11033,\\\"text\\\":\\\"\\\\u0410 \\\\u0441\\\\u0430\\\\u043c\\\\u0430\\\\u044f \\\\u043a\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0447\\\\u043d\\\\u0430\\\\u044f VM130 edge-vm \\\\u043d\\\\u0430\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u0442\\\\u0441\\\\u044f \\\\u043d\\\\u0430 pve03 \\\\u0438 \\\\u0434\\\\u0435\\\\u0440\\\\u0436\\\\u0438\\\\u0442 reverse proxy, monitoring, backup automation \\\\u0438 Docker application host. \\\\u041f\\\\u0440\\\\u0438 \\\\u044d\\\\u0442\\\\u043e\\\\u043c pve03 \\\\u2014 \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u0439 \\\\u043e\\\\u0433\\\\u0440\\\\u0430\\\\u043d\\\\u0438\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0439 \\\\u043f\\\\u043e \\\\u0434\\\\u0438\\\\u0441\\\\u043a\\\\u0443: local-lvm \\\\u0443\\\\u0436\\\\u0435 \\\\u0431\\\\u044b\\\\u043b \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u043c constrained, \\\\u043f\\\\u043e\\\\u0442\\\\u043e\\\\u043c\\\\u0443 \\\\u0447\\\\u0442\\\\u043e VM130 \\\\u0438\\\\u043c\\\\u0435\\\\u0435\\\\u0442 96G OS + 150G media/data, \\\\u0430 pve03 staging \\\\u0434\\\\u043e\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u043b \\\\u0434\\\\u043e 77% \\\\u043f\\\\u0440\\\\u0438 WARN 80%. \\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":11044,\\\"text\\\":\\\"4. \\\\u0415\\\\u0441\\\\u043b\\\\u0438 \\\\u043d\\\\u0435 \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043d\\\\u043e\\\\u0441\\\\u0438\\\\u0442\\\\u044c \\\\u0441\\\\u0435\\\\u0439\\\\u0447\\\\u0430\\\\u0441, \\\\u0442\\\\u043e \\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u043c\\\\u0443\\\\u043c \\\\u0441\\\\u0434\\\\u0435\\\\u043b\\\\u0430\\\\u0442\\\\u044c **cold standby edge-vm** \\\\u043d\\\\u0430 pve01 \\\\u0438\\\\u043b\\\\u0438 pve02: \\\\u0432\\\\u043e\\\\u0441\\\\u0441\\\\u0442\\\\u0430\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f \\\\u0438\\\\u0437 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e backup, \\\\u0432\\\\u044b\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f, \\\\u0441 \\\\u043f\\\\u043e\\\\u043d\\\\u044f\\\\u0442\\\\u043d\\\\u044b\\\\u043c runbook \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u0438\\\\u044f IP/NPMplus/router port forward.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md\\\",\\\"line\\\":22,\\\"text\\\":\\\"| Gitea | https://git.gram1.ru | 185 | 89 | 105 | EVIDENCE_FOUND_REVIEW |\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":315,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":604,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":672,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":683,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":705,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":754,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1058,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1114,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1357,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1371,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1922,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2153,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2165,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2515,\\\"text\\\":\\\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2561,\\\"text\\\":\\\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2872,\\\"text\\\":\\\"- Primary domain: chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2873,\\\"text\\\":\\\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2902,\\\"text\\\":\\\"- chat.gram1.ru public A is 185.225.35.6; groups.chat.gram1.ru and share.chat.gram1.ru continue through chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2905,\\\"text\\\":\\\"- VM150 Internet default path is via [PRIVATE_IP] and verified public egress is 185.225.35.6.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2906,\\\"text\\\":\\\"- Effective coturn external address uses 185.225.35.6 and no longer advertises 95.84.154.183.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2912,\\\"text\\\":\\\"- Public DNS observed at release: 185.225.35.6; DNS was not changed during forum cutover.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":1831,\\\"text\\\":\\\"URL=https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":2847,\\\"text\\\":\\\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3298,\\\"text\\\":\\\"from=\\\\\\\"[PRIVATE_IP]\\\\\\\",command=\\\\\\\"...\\\\\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3334,\\\"text\\\":\\\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3683,\\\"text\\\":\\\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3712,\\\"text\\\":\\\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":5690,\\\"text\\\":\\\"- likely frontend/cache;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":6316,\\\"text\\\":\\\"- \\\\u043a\\\\u0442\\\\u043e \\\\u043e\\\\u0442\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0435\\\\u0442 \\\\u0437\\\\u0430 reverse proxy;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":7563,\\\"text\\\":\\\"| Core | Gitea | https://git.gram1.ru | public | Git |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":7976,\\\"text\\\":\\\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8041,\\\"text\\\":\\\"| 257 | `### NAT / port forwarding` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8335,\\\"text\\\":\\\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8420,\\\"text\\\":\\\"- `https://git.gram1.ru`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9143,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9432,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9500,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9511,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9533,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9582,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9886,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9942,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10185,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10199,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10750,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10981,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10993,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11509,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11602,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11913,\\\"text\\\":\\\"\\\\u0410 \\\\u0441\\\\u0430\\\\u043c\\\\u0430\\\\u044f \\\\u043a\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0447\\\\u043d\\\\u0430\\\\u044f VM130 edge-vm \\\\u043d\\\\u0430\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u0442\\\\u0441\\\\u044f \\\\u043d\\\\u0430 pve03 \\\\u0438 \\\\u0434\\\\u0435\\\\u0440\\\\u0436\\\\u0438\\\\u0442 reverse proxy, monitoring, backup automation \\\\u0438 Docker application host. \\\\u041f\\\\u0440\\\\u0438 \\\\u044d\\\\u0442\\\\u043e\\\\u043c pve03 \\\\u2014 \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u0439 \\\\u043e\\\\u0433\\\\u0440\\\\u0430\\\\u043d\\\\u0438\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0439 \\\\u043f\\\\u043e \\\\u0434\\\\u0438\\\\u0441\\\\u043a\\\\u0443: local-lvm \\\\u0443\\\\u0436\\\\u0435 \\\\u0431\\\\u044b\\\\u043b \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u043c constrained, \\\\u043f\\\\u043e\\\\u0442\\\\u043e\\\\u043c\\\\u0443 \\\\u0447\\\\u0442\\\\u043e VM130 \\\\u0438\\\\u043c\\\\u0435\\\\u0435\\\\u0442 96G OS + 150G media/data, \\\\u0430 pve03 staging \\\\u0434\\\\u043e\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u043b \\\\u0434\\\\u043e 77% \\\\u043f\\\\u0440\\\\u0438 WARN 80%. \\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11924,\\\"text\\\":\\\"4. \\\\u0415\\\\u0441\\\\u043b\\\\u0438 \\\\u043d\\\\u0435 \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043d\\\\u043e\\\\u0441\\\\u0438\\\\u0442\\\\u044c \\\\u0441\\\\u0435\\\\u0439\\\\u0447\\\\u0430\\\\u0441, \\\\u0442\\\\u043e \\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u043c\\\\u0443\\\\u043c \\\\u0441\\\\u0434\\\\u0435\\\\u043b\\\\u0430\\\\u0442\\\\u044c **cold standby edge-vm** \\\\u043d\\\\u0430 pve01 \\\\u0438\\\\u043b\\\\u0438 pve02: \\\\u0432\\\\u043e\\\\u0441\\\\u0441\\\\u0442\\\\u0430\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f \\\\u0438\\\\u0437 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e backup, \\\\u0432\\\\u044b\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f, \\\\u0441 \\\\u043f\\\\u043e\\\\u043d\\\\u044f\\\\u0442\\\\u043d\\\\u044b\\\\u043c runbook \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u0438\\\\u044f IP/NPMplus/router port forward.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":211,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":304,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":1730,\\\"text\\\":\\\"- public_dns_root: 185.225.35.6\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":1731,\\\"text\\\":\\\"- public_dns_www: 185.225.35.6\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":2603,\\\"text\\\":\\\"2026-09-03 KOW_EXTERNAL_PUBLIC_FRONT_SERVER_VERSION_DISCLOSURE OPEN public_response_Server_nginx_1_28_3_Ubuntu direct_NPMplus_Server_absent identify_external_reverse_proxy_before_mutation\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3035,\\\"text\\\":\\\"CERT38_NARROW_MIGRATION_20260904 | CLOSED_COMMITTED_PASS | Cert38 meta/runtime credential migrated to verified narrow gram1 token; stock npm-38 renewal dry-run succeeded for chat.gram1.ru, groups.chat.gram1.ru and share.chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3100,\\\"text\\\":\\\"EDGE01_SSH_HOSTKEY_UNKNOWN_20260904 | OPEN | Strict SSH to 185.225.35.6 stopped before authentication because no pinned ED25519 host key exists for the IP; no remote state changed and no unverified key was accepted.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3112,\\\"text\\\":\\\"PUBLIC_SERVER_VERSION_HARDENING_RUNTIME_MISMATCH_20260904 | CLOSED_PARTIAL_BLOCKED_EXTERNAL_INGRESS | VM130 NPMplus now has server_tokens off on all 13 public manual vhosts and direct-edge responses expose no Server header; public nginx/1.28.3 (Ubuntu) is emitted by EDGE01 185.225.35.6. kingofwolk.ru proves EDGE01 supports per-vhost server_tokens off, but external mutation is blocked until an authorized EDGE01 management credential is restored.\\\"},{\\\"path\\\":\\\"/root/finish_skladchik_cr_2026_0010_v2.sh\\\",\\\"line\\\":20,\\\"text\\\":\\\"API=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\"},{\\\"path\\\":\\\"/root/774c_dockge_agent_capability_inspect.sh\\\",\\\"line\\\":70,\\\"text\\\":\\\" for f in /app/package.json /app/backend/package.json /app/frontend/package.json; do\\\"},{\\\"path\\\":\\\"/root/771h_crowdsec_capi_register_correct_sequence.sh\\\",\\\"line\\\":453,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\\\",\\\"line\\\":64,\\\"text\\\":\\\"export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\\\",\\\"line\\\":314,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771w_pve01_netbird_ssh_egress_crowdsec_capi.sh\\\",\\\"line\\\":586,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/HOMELAB_READONLY_SERVICE_CENSUS_20260816T065015Z.txt\\\",\\\"line\\\":4306,\\\"text\\\":\\\" \\\\\\\"out-data\\\\\\\" : \\\\\\\"GUEST_BEGIN|host=forum-prod|utc=2026-08-16T06:50:56Z\\\\\\\\nPRETTY_NAME=\\\\\\\\\\\\\\\"Debian GNU/Linux 12 (bookworm)\\\\\\\\\\\\\\\"\\\\\\\\nVERSION_ID=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\\\\\nID=debian\\\\\\\\n\\\\\\\\n--- GUEST_DF ---\\\\\\\\nFilesystem Type Size Used Avail Use% Mounted on\\\\\\\\nudev devtmpfs 3.9G 0 3.9G 0% /dev\\\\\\\\ntmpfs tmpfs 796M 512K 795M 1% /run\\\\\\\\n/dev/sda1 ext4 197G 15G 175G 8% /\\\\\\\\ntmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm\\\\\\\\ntmpfs tmpfs 5.0M 0 5.0M 0% /run/lock\\\\\\\\n/dev/sda15 vfat 124M 12M 112M 10% /boot/efi\\\\\\\\n\\\\\\\\n--- GUEST_FAILED_UNITS ---\\\\\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\\\\\n0 loaded units listed.\\\\\\\\n\\\\\\\\n--- GUEST_RUNNING_SERVICES ---\\\\\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\\\\\nchrony.service loaded active running chrony, an NTP client/server\\\\\\\\ncron.service loaded active running Regular background program processing daemon\\\\\\\\ndbus.service loaded active running D-Bus System Message Bus\\\\\\\\ngetty@tty1.service loaded active running Getty on tty1\\\\\\\\nmariadb.service loaded active running MariaDB 10.11.18 database server\\\\\\\\nnginx.service loaded active running A high \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1665,\\\"text\\\":\\\"DOMAIN = git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1668,\\\"text\\\":\\\"ROOT_URL = https://git.gram1.ru/\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1705,\\\"text\\\":\\\"REVERSE_PROXY_LIMIT = 1\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1706,\\\"text\\\":\\\"REVERSE_PROXY_TRUSTED_PROXIES = *\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1902,\\\"text\\\":\\\"# Load frontend themes from the themes folder\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1903,\\\"text\\\":\\\"frontend:\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":2955,\\\"text\\\":\\\"9 [\\\\\\\"git.gram1.ru\\\\\\\"] 1 custom 0 none 0 0 SAMEORIGIN 1 \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":3524,\\\"text\\\":\\\"# git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":3536,\\\"text\\\":\\\" server_name git.gram1.ru;\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":10159,\\\"text\\\":\\\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":10165,\\\"text\\\":\\\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23215,\\\"text\\\":\\\"git.gram1.ru,[PRIVATE_IP],optional-empty,http://127.0.0.1:3002,LAN-only,cloudflare-dns-challenge\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23264,\\\"text\\\":\\\"| Gitea | 127.0.0.1:3002 | https://git.gram1.ru |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23304,\\\"text\\\":\\\"Homelab gram1.ru \\\\u043f\\\\u043e\\\\u0441\\\\u0442\\\\u0440\\\\u043e\\\\u0435\\\\u043d \\\\u0432\\\\u043e\\\\u043a\\\\u0440\\\\u0443\\\\u0433 Proxmox-\\\\u043a\\\\u043b\\\\u0430\\\\u0441\\\\u0442\\\\u0435\\\\u0440\\\\u0430, \\\\u0432\\\\u043d\\\\u0443\\\\u0442\\\\u0440\\\\u0435\\\\u043d\\\\u043d\\\\u0435\\\\u0433\\\\u043e DNS, NPMplus reverse proxy, \\\\u043c\\\\u043e\\\\u043d\\\\u0438\\\\u0442\\\\u043e\\\\u0440\\\\u0438\\\\u043d\\\\u0433\\\\u0430, backup \\\\u0438 \\\\u043d\\\\u0430\\\\u0431\\\\u043e\\\\u0440\\\\u0430 self-hosted \\\\u0441\\\\u0435\\\\u0440\\\\u0432\\\\u0438\\\\u0441\\\\u043e\\\\u0432.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23647,\\\"text\\\":\\\"- edge-vm hosting reverse proxy and most application containers.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23719,\\\"text\\\":\\\"- Purpose: reverse proxy and TLS termination.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23782,\\\"text\\\":\\\"- Domain: https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24054,\\\"text\\\":\\\"- Remote: https://git.gram1.ru/homelab-admin/homelab-configs\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24193,\\\"text\\\":\\\"- https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24406,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | yes | LAN only | git.gram1.ru | enabled |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24438,\\\"text\\\":\\\"| git.gram1.ru | letsencrypt | 2026-09-13 17:36:55 |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24465,\\\"text\\\":\\\"| `git.gram1.ru` | `http://127.0.0.1:3002` | cert id 29 | yes | Gitea |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24708,\\\"text\\\":\\\"5. Recover reverse proxy/Kuma/Auth/Gitea/Vaultwarden and service configs.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24721,\\\"text\\\":\\\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":25074,\\\"text\\\":\\\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":25411,\\\"text\\\":\\\"- reverse proxy upstream;\\\"},{\\\"path\\\":\\\"/root/771_crowdsec_capi_ipv4_restore_or_fallback.sh\\\",\\\"line\\\":326,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":211,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":304,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/root/772b_homepage_russian_normalize_apply.sh\\\",\\\"line\\\":89,\\\"text\\\":\\\" \\\\\\\"NPMplus\\\\\\\": \\\\\\\"\\\\u0410\\\\u0434\\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u0441\\\\u0442\\\\u0440\\\\u0438\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043d\\\\u0438\\\\u0435 reverse proxy.\\\\\\\",\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":1316,\\\"text\\\":\\\"IP_ROUTE|185.225.35.6 via [PRIVATE_IP] dev eth0 src [PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2390,\\\"text\\\":\\\"NPM_ROW|proxy_host|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"git.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"enabled\\\\\\\":1,\\\\\\\"forward_host\\\\\\\":\\\\\\\"127.0.0.1\\\\\\\",\\\\\\\"forward_port\\\\\\\":3002,\\\\\\\"forward_scheme\\\\\\\":\\\\\\\"http\\\\\\\",\\\\\\\"id\\\\\\\":9}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2433,\\\"text\\\":\\\"NPM_ROW|proxy_host|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"groups.chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"share.chat.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"enabled\\\\\\\":1,\\\\\\\"forward_host\\\\\\\":\\\\\\\"[PRIVATE_IP]\\\\\\\",\\\\\\\"forward_port\\\\\\\":443,\\\\\\\"forward_scheme\\\\\\\":\\\\\\\"https\\\\\\\",\\\\\\\"id\\\\\\\":61}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2440,\\\"text\\\":\\\"NPM_ROW|certificate|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"git.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"id\\\\\\\":29,\\\\\\\"nice_name\\\\\\\":\\\\\\\"git.gram1.ru\\\\\\\",\\\\\\\"provider\\\\\\\":\\\\\\\"letsencrypt\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2445,\\\"text\\\":\\\"NPM_ROW|certificate|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"groups.chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"share.chat.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"id\\\\\\\":38,\\\\\\\"nice_name\\\\\\\":\\\\\\\"chat.gram1.ru, groups.chat.gram1.ru, share.chat.gram1.ru\\\\\\\",\\\\\\\"provider\\\\\\\":\\\\\\\"letsencrypt\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2456,\\\"text\\\":\\\"DOMAIN|chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2464,\\\"text\\\":\\\"DOMAIN|git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2468,\\\"text\\\":\\\"DOMAIN|groups.chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2495,\\\"text\\\":\\\"DOMAIN|share.chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2607,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"302|[PRIVATE_IP]|https://chat.gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2610,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"codevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2615,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"dsmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2617,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"gamevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2618,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"git-read.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2619,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"git.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|[PRIVATE_IP]|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2623,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2624,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2625,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hapusya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2626,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hbarhub.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2627,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hkmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2635,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"kingofwolk.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2645,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"newfi.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2646,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"newfilya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2656,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\"10\\\\\\\",\\\\\\\"mail.pvepro.ru.\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"pvepro.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://pvepro.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2659,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"share.chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2661,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"taftauto.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2666,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.codevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://codevipe.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2667,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.dsmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://dsmods.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2668,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.gamevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://gamevipe.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2669,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"www.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://www.gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2670,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hapusya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2671,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hbarhub.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2672,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hkmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://hkmods.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2673,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.kingofwolk.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2674,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.newfi.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2675,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.newfilya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2676,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.pvepro.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://www.pvepro.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2677,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.taftauto.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2678,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.zakrutim.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://zakrutim.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2679,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"zakrutim.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/diag-pve03-dns2-20260615T091114Z.txt\\\",\\\"line\\\":261,\\\"text\\\":\\\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\\\"},{\\\"path\\\":\\\"/root/diag-pve03-dns2-20260615T091114Z.txt\\\",\\\"line\\\":263,\\\"text\\\":\\\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\\\"},{\\\"path\\\":\\\"/root/771x_crowdsec_capi_mtu_hardfix.sh\\\",\\\"line\\\":542,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771f_crowdsec_capi_godebug_mss_fix.sh\\\",\\\"line\\\":344,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771l_crowdsec_capi_netbird_vps_egress.sh\\\",\\\"line\\\":695,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\\\",\\\"line\\\":154,\\\"text\\\":\\\"--- git.gram1.ru ---\\\"},{\\\"path\\\":\\\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\\\",\\\"line\\\":155,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/767_deep_tail_and_regression_audit.sh\\\",\\\"line\\\":40,\\\"text\\\":\\\" echo \\\\\\\"1 reverse_proxy_upstream_and_headers\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/767_deep_tail_and_regression_audit.sh\\\",\\\"line\\\":70,\\\"text\\\":\\\" auth.gram1.ru photos.gram1.ru homeassistant.vpn.gram1.ru vault.gram1.ru git.gram1.ru paper.gram1.ru \\\\\\\\\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\\\",\\\"line\\\":15,\\\"text\\\":\\\"GITEA_HOST=\\\\\\\"${AUDIT_GITEA_HOST:-git.gram1.ru}\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\\\",\\\"line\\\":16,\\\"text\\\":\\\"GITEA_REPO=\\\\\\\"${AUDIT_GITEA_REPO:-https://git.gram1.ru/homelab-admin/homelab-ops.git}\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/homelab-clean-machine-bootstrap-rehearsal-v1.sh\\\",\\\"line\\\":92,\\\"text\\\":\\\"export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":101,\\\"text\\\":\\\"--- git.gram1.ru ---\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":102,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1479,\\\"text\\\":\\\" - domain: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1545,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1546,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1739,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1740,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2028,\\\"text\\\":\\\" - domain: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2091,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2092,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2265,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2266,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3358,\\\"text\\\":\\\" GITEA__server__DOMAIN: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3359,\\\"text\\\":\\\" GITEA__server__ROOT_URL: https://git.gram1.ru/\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3668,\\\"text\\\":\\\"9 [\\\\\\\"git.gram1.ru\\\\\\\"] http 127.0.0.1 3002 29 1 0 0 1 1 0 0 1 \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3718,\\\"text\\\":\\\"29 git.gram1.ru [\\\\\\\"git.gram1.ru\\\\\\\"] letsencrypt 2026-09-13 17:36:55\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3855,\\\"text\\\":\\\" href: https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3910,\\\"text\\\":\\\" description: Reverse proxy admin\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5196,\\\"text\\\":\\\"### DNS git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5197,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5322,\\\"text\\\":\\\"https://git.gram1.ru/ => 200\\\"},{\\\"path\\\":\\\"/root/CR0085_IMPLEMENTATION_INPUT_20260819.txt\\\",\\\"line\\\":1358,\\\"text\\\":\\\" \\\\\\\"out-data\\\\\\\" : \\\\\\\"UNIT_BEGIN\\\\\\\\n# /etc/systemd/system/homelab-git-read.service\\\\\\\\n[Unit]\\\\\\\\nDescription=Read-only Gitea facade for ChatGPT\\\\\\\\nAfter=network-online.target\\\\\\\\nWants=network-online.target\\\\\\\\n\\\\\\\\n[Service]\\\\\\\\nType=simple\\\\\\\\nUser=gitread\\\\\\\\nGroup=gitread\\\\\\\\nExecStart=/usr/bin/python3 /usr/local/libexec/homelab-git-read\\\\\\\\nRestart=on-failure\\\\\\\\nRestartSec=2\\\\\\\\nNoNewPrivileges=true\\\\\\\\nPrivateTmp=true\\\\\\\\nPrivateDevices=true\\\\\\\\nProtectSystem=strict\\\\\\\\nProtectHome=true\\\\\\\\nProtectKernelTunables=true\\\\\\\\nProtectKernelModules=true\\\\\\\\nProtectControlGroups=true\\\\\\\\nRestrictAddressFamilies=AF_INET AF_INET6\\\\\\\\nLockPersonality=true\\\\\\\\nMemoryDenyWriteExecute=true\\\\\\\\n\\\\\\\\n[Install]\\\\\\\\nWantedBy=multi-user.target\\\\\\\\nUNIT_END\\\\\\\\nSOURCE_BEGIN\\\\\\\\nd6110a75f789e56231196c314046263785a795ce3d220de9272777a718bca382 /usr/local/libexec/homelab-git-read\\\\\\\\n#!/usr/bin/env python3\\\\\\\\nfrom __future__ import annotations\\\\\\\\nimport base64, json, os, re\\\\\\\\nfrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServer\\\\\\\\nfrom urllib.parse import parse_qs, quote, urlparse\\\\\\\\nfrom urllib.request import Request, urlopen\\\\\\\\nfrom urllib.error import HTTPError, URLError\\\\\\\\n\\\\\\\\nHOST=\\\\\\\\\\\\\\\"0.0.0.0\\\\\\\\\\\\\\\"\\\\\\\\nPORT=8787\\\\\\\\nAPI=\\\\\\\\\\\\\\\"https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\\\\\\\\\\\\\"\\\\\\\\nTOKEN_FILE=\\\\\\\\\\\"},{\\\"path\\\":\\\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\\\",\\\"line\\\":228,\\\"text\\\":\\\" export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\\\",\\\"line\\\":567,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771k_fix_warp_register_or_clean.sh\\\",\\\"line\\\":569,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\\\",\\\"line\\\":24,\\\"text\\\":\\\"GITEA_REPO = \\\\\\\"https://git.gram1.ru/homelab-admin/homelab-ops.git\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\\\",\\\"line\\\":25,\\\"text\\\":\\\"GITEA_HOST = \\\\\\\"git.gram1.ru\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":257,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":546,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":614,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":625,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":647,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":696,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1000,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1056,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1299,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1313,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1864,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2095,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2107,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2457,\\\"text\\\":\\\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2503,\\\"text\\\":\\\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2814,\\\"text\\\":\\\"- Primary domain: chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2815,\\\"text\\\":\\\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\\\"},{\\\"path\\\":\\\"/root/hread-06.py\\\",\\\"line\\\":108,\\\"text\\\":\\\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\\\"},{\\\"path\\\":\\\"/root/771e_abort_cleanup_verify_stable.sh\\\",\\\"line\\\":100,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/hread-04.py\\\",\\\"line\\\":104,\\\"text\\\":\\\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\\\"},{\\\"path\\\":\\\"/root/771s_vps_identity_repair_netbird_capi.sh\\\",\\\"line\\\":704,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771q_netbird_public_vps_repair_then_capi.sh\\\",\\\"line\\\":594,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/build_full_8020_demonov_handoff.sh\\\",\\\"line\\\":351,\\\"text\\\":\\\"https://git.gram1.ru/homelab-admin/8020-demonov-shadow-bot.git\\\"},{\\\"path\\\":\\\"/root/771ae_crowdsec_capi_soak_final.sh\\\",\\\"line\\\":105,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.r...\nSSH_CONFIG_REFERENCES=[{\"line\":\"# users, and the values can be changed in per-user configuration files\",\"path\":\"/etc/ssh/ssh_config\"},{\"line\":\"Host *\",\"path\":\"/etc/ssh/ssh_config\"},{\"line\":\"# ProxyCommand ssh -q -W %h:%p gateway.example.com\",\"path\":\"/etc/ssh/ssh_config\"}]\nFINAL_DECISION=FRONTEND_FORENSIC3_COMPLETE_NO_MUTATION\nFORENSIC3_END=true\n" +} diff --git a/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.txt b/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.txt new file mode 100644 index 00000000..a73d504e --- /dev/null +++ b/runtime/history/NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3.txt @@ -0,0 +1,63 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=newfi-staging-upstream-tls-frontend-forensic-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=45b9f9814c0bff698962bcdd4c06d06953e5ec76ec01c8f56e680c51218c4047 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=1997b836a531166d14298c77a514de124631aa8c239a2ef9b74202fb2bf9a4ff +SANITIZED_OUTPUT_SHA256=24bb5f3b58f9b3919ef16ca69845f204063a88ea8ab583d4e12ed0445d64f801 +OUTPUT_BEGIN +FORENSIC3_BEGIN=true +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3 +MODE=read-only +MUTATIONS_PERFORMED=NO +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +PRIOR_FORENSIC2_GATE=PASS +PRIOR_FORENSIC2_HISTORY_SHA256=ca4539996dc20a97e98687e1c0721f53b03e9c9e0c9e68fc62d4686081053271 +PUBLIC_DNS_PTR={"PTR":{"err":"","rc":0,"values":[]},"chat.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"git.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"groups.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0},"newfi-staging.gram1.ru":{"A":[],"err":"","rc":0},"share.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0}} +PUBLIC_CERT_GIT_GRAM1_RU={"err":"","out":"subject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\nnotBefore=Aug 17 02:03:29 2026 GMT\nnotAfter=Nov 15 02:03:28 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:git-read.gram1.ru, DNS:git.gram1.ru","rc":0} +PUBLIC_CURL_GIT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)"],"http":"200","rc":0} +PUBLIC_CERT_CHAT_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0} +PUBLIC_CURL_CHAT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)","location: /login"],"http":"302","rc":0} +PUBLIC_CERT_NEWFI_STAGING_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0} +PUBLIC_CURL_NEWFI_STAGING_GRAM1_RU={"err":"curl: (60) SSL: no alternative certificate subject name matches target hostname 'newfi-staging.gram1.ru'\nMore details here: https://curl.se/docs/sslcerts.html\n\ncurl failed to verify the legitimacy of the server and therefore could not\nestablish a secure connection to it. To learn more about this situation and\nhow to fix it, please visit the webpage mentioned above.\n","headers":[],"http":"000","rc":60} +CLUSTER_VM_CT_INVENTORY={"err":"","rc":0,"rows":[{"name":"dns1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":110},{"name":"dns2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":111},{"name":"unbound1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":112},{"name":"unbound2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":113},{"name":"edge-vm","node":"pve03","status":"running","template":0,"type":"qemu","vmid":130},{"name":"snikket","node":"pve01","status":"running","template":0,"type":"qemu","vmid":150},{"name":"forum-prod","node":"pve02","status":"running","template":0,"type":"qemu","vmid":160},{"name":"core-apps","node":"pve01","status":"running","template":0,"type":"qemu","vmid":170},{"name":"monitoring","node":"pve01","status":"running","template":0,"type":"qemu","vmid":171},{"name":"homelab-ops-worker","node":"pve03","status":"running","template":0,"type":"qemu","vmid":190},{"name":"newfi-prod","node":"pve01","status":"running","template":0,"type":"qemu","vmid":210},{"name":"newfi-staging","node":"pve03","status":"running","template":0,"type":"qemu","vmid":211},{"name":"edge-cold-standby","node":"pve02","status":"stopped","template":0,"type":"qemu","vmid":9130}]} +PVE01_DEFAULT_ROUTE={"err":"","gateway":"[PRIVATE_IP]","line":"default via [PRIVATE_IP] dev vmbr0 proto kernel onlink","rc":0} +PVE01_GATEWAY_NEIGHBOR={"err":"","out":"[PRIVATE_IP] dev vmbr0 lladdr d6:9c:53:00:2c:c3 REACHABLE","rc":0} +GATEWAY_BASIC_PORTS={"22":{"open":false,"rc":124},"443":{"open":false,"rc":124},"80":{"open":false,"rc":124},"8443":{"open":false,"rc":124}} +GATEWAY_SSH_KEYSCAN={"err":"","out":"","rc":1} +GATEWAY_HTTP_HEAD={"err":"curl: (28) Connection timed out after 5002 milliseconds\n","out":"","rc":28} +GATEWAY_HTTPS_HEAD={"err":"curl: (28) Connection timed out after 5001 milliseconds\n","out":"","rc":28} +EDGE_PRIVATE_IP_DISCOVERY={"ips":["[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]"],"rc":0,"selected":null} +EDGE_WEB_LISTENER_OWNERSHIP={"err":"","out":"--- SS_WEB ---\nState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess \nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=16),(\"nginx\",pid=2180089,fd=16),(\"nginx\",pid=2180083,fd=16),(\"nginx\",pid=2180082,fd=16),(\"nginx\",pid=3096,fd=16))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=15),(\"nginx\",pid=2180089,fd=15),(\"nginx\",pid=2180083,fd=15),(\"nginx\",pid=2180082,fd=15),(\"nginx\",pid=3096,fd=15))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=14),(\"nginx\",pid=2180089,fd=14),(\"nginx\",pid=2180083,fd=14),(\"nginx\",pid=2180082,fd=14),(\"nginx\",pid=3096,fd=14))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=7),(\"nginx\",pid=2180089,fd=7),(\"nginx\",pid=2180083,fd=7),(\"nginx\",pid=2180082,fd=7),(\"nginx\",pid=3096,fd=7)) \nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=13),(\"nginx\",pid=2180089,fd=13),(\"nginx\",pid=2180083,fd=13),(\"nginx\",pid=2180082,fd=13),(\"nginx\",pid=3096,fd=13))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=12),(\"nginx\",pid=2180089,fd=12),(\"nginx\",pid=2180083,fd=12),(\"nginx\",pid=2180082,fd=12),(\"nginx\",pid=3096,fd=12))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=11),(\"nginx\",pid=2180089,fd=11),(\"nginx\",pid=2180083,fd=11),(\"nginx\",pid=2180082,fd=11),(\"nginx\",pid=3096,fd=11))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=6),(\"nginx\",pid=2180089,fd=6),(\"nginx\",pid=2180083,fd=6),(\"nginx\",pid=2180082,fd=6),(\"nginx\",pid=3096,fd=6)) \nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=19),(\"nginx\",pid=2180089,fd=19),(\"nginx\",pid=2180083,fd=19),(\"nginx\",pid=2180082,fd=19),(\"nginx\",pid=3096,fd=19))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=18),(\"nginx\",pid=2180089,fd=18),(\"nginx\",pid=2180083,fd=18),(\"nginx\",pid=2180082,fd=18),(\"nginx\",pid=3096,fd=18))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=17),(\"nginx\",pid=2180089,fd=17),(\"nginx\",pid=2180083,fd=17),(\"nginx\",pid=2180082,fd=17),(\"nginx\",pid=3096,fd=17))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=8),(\"nginx\",pid=2180089,fd=8),(\"nginx\",pid=2180083,fd=8),(\"nginx\",pid=2180082,fd=8),(\"nginx\",pid=3096,fd=8)) \nLISTEN 0 511 [::]:443 [::]:* users:((\"nginx\",pid=2180110,fd=10),(\"nginx\",pid=2180089,fd=10),(\"nginx\",pid=2180083,fd=10),(\"nginx\",pid=2180082,fd=10),(\"nginx\",pid=3096,fd=10))\nLISTEN 0 511 [::]:80 [::]:* users:((\"nginx\",pid=2180110,fd=9),(\"nginx\",pid=2180089,fd=9),(\"nginx\",pid=2180083,fd=9),(\"nginx\",pid=2180082,fd=9),(\"nginx\",pid=3096,fd=9)) \n--- PROCESS_TREE_NGINX ---\n 1920 1674 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n 2031 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 2375 -container-ip [PRIVATE_IP] -container-port 2375 -use-listen-fd\n 2107 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8081 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 2160 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 7422 -container-ip [PRIVATE_IP] -container-port 7422 -use-listen-fd\n 2180 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8088 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 2201 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 12345 -container-ip [PRIVATE_IP] -container-port 12345 -use-listen-fd\n 2213 1920 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n 2223 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3100 -container-ip [PRIVATE_IP] -container-port 3100 -use-listen-fd\n 2332 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9999 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 3096 3095 root nginx nginx: master process nginx -e stderr\n1948449 3096 root nginx nginx: worker process is shutting down\n2180082 3096 root nginx nginx: worker process\n2180083 3096 root nginx nginx: worker process\n2180089 3096 root nginx nginx: worker process\n2180110 3096 root nginx nginx: worker process\n2183049 722 root bash /bin/bash -lc echo '--- SS_WEB ---' ss -ltnp | awk 'NR==1 || $4 ~ /:(80|81|443)$/' echo '--- PROCESS_TREE_NGINX ---' ps -eo pid,ppid,user,comm,args | grep -E '[n]ginx|[d]ocker-proxy|[h]aproxy|[c]addy|[t]raefik' echo '--- NPMPLUS_MODE ---' docker inspect npmplus --format '{{.HostConfig.NetworkMode}}' echo '--- NPMPLUS_IMAGE ---' docker inspect npmplus --format '{{.Config.Image}} {{.Image}}' echo '--- NPMPLUS_NGINX_VERSION ---' docker exec npmplus /usr/local/nginx/sbin/nginx -v 2>&1 \n2631782 1 root sudo sudo bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n2631784 2631782 root bash bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n--- NPMPLUS_MODE ---\nhost\n--- NPMPLUS_IMAGE ---\ndocker.io/zoeyvid/npmplus:2026-06-17-b1 sha256:058637924fae1dbf161d1d78c84b738d86804e9a0ddad66cf7c87cbe33337834\n--- NPMPLUS_NGINX_VERSION ---\nnginx version: nginx/1.31.2 (NPMplus)","rc":0} +FOCUSED_FRONTEND_REFERENCES={"err":"","out":"[{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":951,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":1967,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2418,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2454,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2803,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2832,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":4810,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":5436,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":6683,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7096,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7161,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7455,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7540,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8263,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8552,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8620,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8631,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8653,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8702,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9006,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9062,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9305,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9319,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9870,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10101,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10113,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10629,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10722,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11033,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host. \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%. \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11044,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md\",\"line\":22,\"text\":\"| Gitea | https://git.gram1.ru | 185 | 89 | 105 | EVIDENCE_FOUND_REVIEW |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":315,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":604,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":672,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":683,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":705,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":754,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1058,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1114,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1357,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1371,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1922,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2153,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2165,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2515,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2561,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2872,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2873,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2902,\"text\":\"- chat.gram1.ru public A is 185.225.35.6; groups.chat.gram1.ru and share.chat.gram1.ru continue through chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2905,\"text\":\"- VM150 Internet default path is via [PRIVATE_IP] and verified public egress is 185.225.35.6.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2906,\"text\":\"- Effective coturn external address uses 185.225.35.6 and no longer advertises 95.84.154.183.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2912,\"text\":\"- Public DNS observed at release: 185.225.35.6; DNS was not changed during forum cutover.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":1831,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":2847,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3298,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3334,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3683,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3712,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":5690,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":6316,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7563,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7976,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8041,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8335,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8420,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9143,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9432,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9500,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9511,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9533,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9582,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9886,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9942,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10185,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10199,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10750,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10981,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10993,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11509,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11602,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11913,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host. \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%. \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11924,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1730,\"text\":\"- public_dns_root: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1731,\"text\":\"- public_dns_www: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":2603,\"text\":\"2026-09-03 KOW_EXTERNAL_PUBLIC_FRONT_SERVER_VERSION_DISCLOSURE OPEN public_response_Server_nginx_1_28_3_Ubuntu direct_NPMplus_Server_absent identify_external_reverse_proxy_before_mutation\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3035,\"text\":\"CERT38_NARROW_MIGRATION_20260904 | CLOSED_COMMITTED_PASS | Cert38 meta/runtime credential migrated to verified narrow gram1 token; stock npm-38 renewal dry-run succeeded for chat.gram1.ru, groups.chat.gram1.ru and share.chat.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3100,\"text\":\"EDGE01_SSH_HOSTKEY_UNKNOWN_20260904 | OPEN | Strict SSH to 185.225.35.6 stopped before authentication because no pinned ED25519 host key exists for the IP; no remote state changed and no unverified key was accepted.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3112,\"text\":\"PUBLIC_SERVER_VERSION_HARDENING_RUNTIME_MISMATCH_20260904 | CLOSED_PARTIAL_BLOCKED_EXTERNAL_INGRESS | VM130 NPMplus now has server_tokens off on all 13 public manual vhosts and direct-edge responses expose no Server header; public nginx/1.28.3 (Ubuntu) is emitted by EDGE01 185.225.35.6. kingofwolk.ru proves EDGE01 supports per-vhost server_tokens off, but external mutation is blocked until an authorized EDGE01 management credential is restored.\"},{\"path\":\"/root/finish_skladchik_cr_2026_0010_v2.sh\",\"line\":20,\"text\":\"API=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\"},{\"path\":\"/root/774c_dockge_agent_capability_inspect.sh\",\"line\":70,\"text\":\" for f in /app/package.json /app/backend/package.json /app/frontend/package.json; do\"},{\"path\":\"/root/771h_crowdsec_capi_register_correct_sequence.sh\",\"line\":453,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":64,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":314,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771w_pve01_netbird_ssh_egress_crowdsec_capi.sh\",\"line\":586,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_READONLY_SERVICE_CENSUS_20260816T065015Z.txt\",\"line\":4306,\"text\":\" \\\"out-data\\\" : \\\"GUEST_BEGIN|host=forum-prod|utc=2026-08-16T06:50:56Z\\\\nPRETTY_NAME=\\\\\\\"Debian GNU/Linux 12 (bookworm)\\\\\\\"\\\\nVERSION_ID=\\\\\\\"12\\\\\\\"\\\\nID=debian\\\\n\\\\n--- GUEST_DF ---\\\\nFilesystem Type Size Used Avail Use% Mounted on\\\\nudev devtmpfs 3.9G 0 3.9G 0% /dev\\\\ntmpfs tmpfs 796M 512K 795M 1% /run\\\\n/dev/sda1 ext4 197G 15G 175G 8% /\\\\ntmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm\\\\ntmpfs tmpfs 5.0M 0 5.0M 0% /run/lock\\\\n/dev/sda15 vfat 124M 12M 112M 10% /boot/efi\\\\n\\\\n--- GUEST_FAILED_UNITS ---\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\n0 loaded units listed.\\\\n\\\\n--- GUEST_RUNNING_SERVICES ---\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\nchrony.service loaded active running chrony, an NTP client/server\\\\ncron.service loaded active running Regular background program processing daemon\\\\ndbus.service loaded active running D-Bus System Message Bus\\\\ngetty@tty1.service loaded active running Getty on tty1\\\\nmariadb.service loaded active running MariaDB 10.11.18 database server\\\\nnginx.service loaded active running A high \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1665,\"text\":\"DOMAIN = git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1668,\"text\":\"ROOT_URL = https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1705,\"text\":\"REVERSE_PROXY_LIMIT = 1\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1706,\"text\":\"REVERSE_PROXY_TRUSTED_PROXIES = *\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1902,\"text\":\"# Load frontend themes from the themes folder\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1903,\"text\":\"frontend:\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":2955,\"text\":\"9 [\\\"git.gram1.ru\\\"] 1 custom 0 none 0 0 SAMEORIGIN 1 \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3524,\"text\":\"# git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3536,\"text\":\" server_name git.gram1.ru;\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10159,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10165,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23215,\"text\":\"git.gram1.ru,[PRIVATE_IP],optional-empty,http://127.0.0.1:3002,LAN-only,cloudflare-dns-challenge\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23264,\"text\":\"| Gitea | 127.0.0.1:3002 | https://git.gram1.ru |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23304,\"text\":\"Homelab gram1.ru \\u043f\\u043e\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d \\u0432\\u043e\\u043a\\u0440\\u0443\\u0433 Proxmox-\\u043a\\u043b\\u0430\\u0441\\u0442\\u0435\\u0440\\u0430, \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e DNS, NPMplus reverse proxy, \\u043c\\u043e\\u043d\\u0438\\u0442\\u043e\\u0440\\u0438\\u043d\\u0433\\u0430, backup \\u0438 \\u043d\\u0430\\u0431\\u043e\\u0440\\u0430 self-hosted \\u0441\\u0435\\u0440\\u0432\\u0438\\u0441\\u043e\\u0432.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23647,\"text\":\"- edge-vm hosting reverse proxy and most application containers.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23719,\"text\":\"- Purpose: reverse proxy and TLS termination.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23782,\"text\":\"- Domain: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24054,\"text\":\"- Remote: https://git.gram1.ru/homelab-admin/homelab-configs\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24193,\"text\":\"- https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24406,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | yes | LAN only | git.gram1.ru | enabled |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24438,\"text\":\"| git.gram1.ru | letsencrypt | 2026-09-13 17:36:55 |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24465,\"text\":\"| `git.gram1.ru` | `http://127.0.0.1:3002` | cert id 29 | yes | Gitea |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24708,\"text\":\"5. Recover reverse proxy/Kuma/Auth/Gitea/Vaultwarden and service configs.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24721,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25074,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25411,\"text\":\"- reverse proxy upstream;\"},{\"path\":\"/root/771_crowdsec_capi_ipv4_restore_or_fallback.sh\",\"line\":326,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/root/772b_homepage_russian_normalize_apply.sh\",\"line\":89,\"text\":\" \\\"NPMplus\\\": \\\"\\u0410\\u0434\\u043c\\u0438\\u043d\\u0438\\u0441\\u0442\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 reverse proxy.\\\",\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":1316,\"text\":\"IP_ROUTE|185.225.35.6 via [PRIVATE_IP] dev eth0 src [PRIVATE_IP] \"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2390,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"127.0.0.1\\\",\\\"forward_port\\\":3002,\\\"forward_scheme\\\":\\\"http\\\",\\\"id\\\":9}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2433,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"[PRIVATE_IP]\\\",\\\"forward_port\\\":443,\\\"forward_scheme\\\":\\\"https\\\",\\\"id\\\":61}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2440,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"id\\\":29,\\\"nice_name\\\":\\\"git.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2445,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"id\\\":38,\\\"nice_name\\\":\\\"chat.gram1.ru, groups.chat.gram1.ru, share.chat.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2456,\"text\":\"DOMAIN|chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2464,\"text\":\"DOMAIN|git.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2468,\"text\":\"DOMAIN|groups.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2495,\"text\":\"DOMAIN|share.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2607,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"chat.gram1.ru\\\",\\\"https\\\":\\\"302|[PRIVATE_IP]|https://chat.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2610,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"codevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2615,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"dsmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2617,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gamevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2618,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git-read.gram1.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2619,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git.gram1.ru\\\",\\\"https\\\":\\\"200|[PRIVATE_IP]|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2623,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2624,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"groups.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2625,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2626,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2627,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hkmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2635,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2645,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2646,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2656,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\"10\\\",\\\"mail.pvepro.ru.\\\"],\\\"domain\\\":\\\"pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2659,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"share.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2661,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2666,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.codevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://codevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2667,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.dsmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://dsmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2668,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.gamevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://gamevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2669,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"www.gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2670,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2671,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2672,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hkmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://hkmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2673,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2674,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2675,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2676,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2677,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2678,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.zakrutim.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://zakrutim.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2679,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"zakrutim.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":261,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":263,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/771x_crowdsec_capi_mtu_hardfix.sh\",\"line\":542,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771f_crowdsec_capi_godebug_mss_fix.sh\",\"line\":344,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771l_crowdsec_capi_netbird_vps_egress.sh\",\"line\":695,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":154,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":155,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":40,\"text\":\" echo \\\"1 reverse_proxy_upstream_and_headers\\\"\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":70,\"text\":\" auth.gram1.ru photos.gram1.ru homeassistant.vpn.gram1.ru vault.gram1.ru git.gram1.ru paper.gram1.ru \\\\\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":15,\"text\":\"GITEA_HOST=\\\"${AUDIT_GITEA_HOST:-git.gram1.ru}\\\"\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":16,\"text\":\"GITEA_REPO=\\\"${AUDIT_GITEA_REPO:-https://git.gram1.ru/homelab-admin/homelab-ops.git}\\\"\"},{\"path\":\"/root/homelab-clean-machine-bootstrap-rehearsal-v1.sh\",\"line\":92,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":101,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":102,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1479,\"text\":\" - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1545,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1546,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1739,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1740,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2028,\"text\":\" - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2091,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2092,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2265,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2266,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3358,\"text\":\" GITEA__server__DOMAIN: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3359,\"text\":\" GITEA__server__ROOT_URL: https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3668,\"text\":\"9 [\\\"git.gram1.ru\\\"] http 127.0.0.1 3002 29 1 0 0 1 1 0 0 1 \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3718,\"text\":\"29 git.gram1.ru [\\\"git.gram1.ru\\\"] letsencrypt 2026-09-13 17:36:55\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3855,\"text\":\" href: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3910,\"text\":\" description: Reverse proxy admin\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5196,\"text\":\"### DNS git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5197,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5322,\"text\":\"https://git.gram1.ru/ => 200\"},{\"path\":\"/root/CR0085_IMPLEMENTATION_INPUT_20260819.txt\",\"line\":1358,\"text\":\" \\\"out-data\\\" : \\\"UNIT_BEGIN\\\\n# /etc/systemd/system/homelab-git-read.service\\\\n[Unit]\\\\nDescription=Read-only Gitea facade for ChatGPT\\\\nAfter=network-online.target\\\\nWants=network-online.target\\\\n\\\\n[Service]\\\\nType=simple\\\\nUser=gitread\\\\nGroup=gitread\\\\nExecStart=/usr/bin/python3 /usr/local/libexec/homelab-git-read\\\\nRestart=on-failure\\\\nRestartSec=2\\\\nNoNewPrivileges=true\\\\nPrivateTmp=true\\\\nPrivateDevices=true\\\\nProtectSystem=strict\\\\nProtectHome=true\\\\nProtectKernelTunables=true\\\\nProtectKernelModules=true\\\\nProtectControlGroups=true\\\\nRestrictAddressFamilies=AF_INET AF_INET6\\\\nLockPersonality=true\\\\nMemoryDenyWriteExecute=true\\\\n\\\\n[Install]\\\\nWantedBy=multi-user.target\\\\nUNIT_END\\\\nSOURCE_BEGIN\\\\nd6110a75f789e56231196c314046263785a795ce3d220de9272777a718bca382 /usr/local/libexec/homelab-git-read\\\\n#!/usr/bin/env python3\\\\nfrom __future__ import annotations\\\\nimport base64, json, os, re\\\\nfrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServer\\\\nfrom urllib.parse import parse_qs, quote, urlparse\\\\nfrom urllib.request import Request, urlopen\\\\nfrom urllib.error import HTTPError, URLError\\\\n\\\\nHOST=\\\\\\\"0.0.0.0\\\\\\\"\\\\nPORT=8787\\\\nAPI=\\\\\\\"https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\\\\\"\\\\nTOKEN_FILE=\\\\\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":228,\"text\":\" export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":567,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771k_fix_warp_register_or_clean.sh\",\"line\":569,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":24,\"text\":\"GITEA_REPO = \\\"https://git.gram1.ru/homelab-admin/homelab-ops.git\\\"\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":25,\"text\":\"GITEA_HOST = \\\"git.gram1.ru\\\"\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":257,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":546,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":614,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":625,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":647,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":696,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1000,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1056,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1299,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1313,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1864,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2095,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2107,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2457,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2503,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2814,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2815,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/root/hread-06.py\",\"line\":108,\"text\":\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771e_abort_cleanup_verify_stable.sh\",\"line\":100,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/hread-04.py\",\"line\":104,\"text\":\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771s_vps_identity_repair_netbird_capi.sh\",\"line\":704,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771q_netbird_public_vps_repair_then_capi.sh\",\"line\":594,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/build_full_8020_demonov_handoff.sh\",\"line\":351,\"text\":\"https://git.gram1.ru/homelab-admin/8020-demonov-shadow-bot.git\"},{\"path\":\"/root/771ae_crowdsec_capi_soak_final.sh\",\"line\":105,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.r... +SSH_CONFIG_REFERENCES=[{"line":"# users, and the values can be changed in per-user configuration files","path":"/etc/ssh/ssh_config"},{"line":"Host *","path":"/etc/ssh/ssh_config"},{"line":"# ProxyCommand ssh -q -W %h:%p gateway.example.com","path":"/etc/ssh/ssh_config"}] +FINAL_DECISION=FRONTEND_FORENSIC3_COMPLETE_NO_MUTATION +FORENSIC3_END=true + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 93c23209..2ae5fb16 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SIGNALBOT-260908-ACTIVATION-SEAL-PREFLIGHT-043PREP", + "command_id": "NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "signalbot-cr0116-activation-seal-preflight", - "started_at_utc": "2026-09-08T07:31:07Z", - "finished_at_utc": "2026-09-08T07:31:09Z", + "component": "newfi-staging-upstream-tls-frontend-forensic-readonly", + "started_at_utc": "2026-09-08T07:36:02Z", + "finished_at_utc": "2026-09-08T07:36:39Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "b6458dbcbdaae8e92984de0a54cac30759294bf749cad7066ee510ddd05dd0e4", + "command_sha256": "45b9f9814c0bff698962bcdd4c06d06953e5ec76ec01c8f56e680c51218c4047", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "ff6caa66bc4dee183f7ac7f97989c066bc9b3e81c21f6294f399e6b0dce166f2", - "sanitized_output_sha256": "ff6caa66bc4dee183f7ac7f97989c066bc9b3e81c21f6294f399e6b0dce166f2", + "raw_evidence_sha256": "1997b836a531166d14298c77a514de124631aa8c239a2ef9b74202fb2bf9a4ff", + "sanitized_output_sha256": "24bb5f3b58f9b3919ef16ca69845f204063a88ea8ab583d4e12ed0445d64f801", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nSB043P_RUNTIME_PRESTATE={\"active_env\":{\"APP_IMAGE\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"CODE_IDENTITY\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"COLLECTION_START_AT\":\"2026-09-07T00:00:00+00:00\",\"EXPERIMENT_ID\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\",\"RUNTIME_MANIFEST_ID\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"},\"new_image\":\"8020-demonov-shadow:76e1f58baa544a0e208bba317f0150e5b6d74dbd\",\"new_image_id\":\"sha256:341f71a906c91d3fa9c1d50bd89df2a849dfb0b168bb4551efb444bf61c4ab99\",\"services\":[{\"container_id\":\"a546a70c3e8c263d9b590cd78ee206bcda0cfcdb6662327e8415ca0e29ad1501\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":13,\"running\":true,\"service\":\"collector\",\"started_at\":\"2026-09-08T05:01:08.70385245Z\"},{\"container_id\":\"d8023f4cbf91f9382e39eec0436c9cebc7665535b42b950e95408c03ff9bf30d\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"relay\",\"started_at\":\"2026-09-06T18:48:20.603414848Z\"},{\"container_id\":\"1feeca2d9428cd5a277c026bef34534db307657dcdcd63aff98ea66e44f8b9c5\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"shadow\",\"started_at\":\"2026-09-06T18:48:20.768190553Z\"},{\"container_id\":\"889be41d2cee9d327811da78388f834ba6eafe4c0eeae456867ed0df76832d01\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"worker\",\"started_at\":\"2026-09-06T18:48:20.586788319Z\"}],\"stage_path\":\"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5\",\"stage_result_sha256\":\"8ba641e823379a97f52fb90d9c89b6000f0c375aaa1db856ad133ec88516ab70\"}\nSB043P_OLD_MANIFEST={\"bytes\":584,\"exists\":true,\"object\":{\"application_image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"base_image_digest\":\"sha256:881d80734ee05dca6f7f42dcb080975652a53c7eda9ba1f03bb8da31aa6a6ec2\",\"code_identity\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"compose_hash\":\"6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061\",\"finality_policy_id\":\"BITFINEX_SEQ_ALL_D1_V1\",\"package_identity\":\"637acba19fb29c98408a8031dc9265a31dc36551c666fcf0b287e8af83d2b893\",\"runtime_manifest_id\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"},\"sha256\":\"388a610997fad0071b9140a44e88edff60a3e7ee3486faeaca769c0026246c8e\"}\nSB043P_OLD_EXPERIMENT={\"bytes\":841,\"exists\":true,\"object\":{\"code_identity\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"collection_start_at\":\"2026-09-07T00:00:00+00:00\",\"demonov_branch_policy_id\":\"ALL_FROZEN_PROFILES_ALL_NODES_RESEARCH_V1\",\"experiment_id\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\",\"experiment_version\":\"LIVE_PROSPECTIVE_V2\",\"finality_policy_id\":\"BITFINEX_SEQ_ALL_D1_V1\",\"geometry_policy_id\":\"RESEARCH_RECONSTRUCTION_8020_V1\",\"market_bundle_id\":\"78dbbebab22f49bfc4866b40e2362886b1441790d8a73a005a4eb09a5d2c64ae\",\"notification_policy_id\":\"SIGNIFICANT_STATE_CHANGE_EMAIL_V1\",\"outcome_policy_id\":\"DIRECTIONAL_CLOSE_AFTER_7_D1_BARS_V1\",\"policy_registry_id\":\"055d0b052d394f1e08176b035617fbdd96f04fff0cdfb195c2d736fd66e6ad37\",\"runtime_manifest_id\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"},\"sha256\":\"827dc4fb5ace8a25a0bd80d05450eaa758bd39d1d09485d3d428dd20ad9325aa\"}\nSB043P_SOURCE_RUNTIME_MANIFEST_META={\"class_names\":[\"RuntimeDeploymentManifestV1\"],\"error\":null,\"exists\":true,\"function_names\":[\"verify_runtime_manifest\"],\"lines\":123,\"sha256\":\"1064cfb74303fdc8e0bf50bae95b1e755556a5b1dfc28b2b062341becaba08f2\"}\nSB043P_FUNC_RUNTIME_MANIFEST_VERIFY_RUNTIME_MANIFEST={\"args\":[\"manifest\"],\"kwonly\":[\"expected_code_identity\",\"actual_image_id\",\"actual_package_identity\"],\"name\":\"verify_runtime_manifest\",\"source_b64\":\"ZGVmIHZlcmlmeV9ydW50aW1lX21hbmlmZXN0KAogICAgbWFuaWZlc3Q6IFJ1bnRpbWVEZXBsb3ltZW50TWFuaWZlc3RWMSwKICAgICosCiAgICBleHBlY3RlZF9jb2RlX2lkZW50aXR5OiBzdHIsCiAgICBhY3R1YWxfaW1hZ2VfaWQ6IHN0ciwKICAgIGFjdHVhbF9wYWNrYWdlX2lkZW50aXR5OiBzdHIsCikgLT4gTm9uZToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG1hbmlmZXN0LCBSdW50aW1lRGVwbG95bWVudE1hbmlmZXN0VjEpOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigicnVudGltZSBtYW5pZmVzdCByZXF1aXJlZCIpCiAgICBtYW5pZmVzdC5fX3Bvc3RfaW5pdF9fKCkKICAgIGlmIG1hbmlmZXN0LmNvZGVfaWRlbnRpdHkgIT0gZXhwZWN0ZWRfY29kZV9pZGVudGl0eToKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInJ1bnRpbWUgbWFuaWZlc3QgY29kZSBpZGVudGl0eSBtaXNtYXRjaCIpCiAgICBpZiBtYW5pZmVzdC5hcHBsaWNhdGlvbl9pbWFnZV9pZCAhPSBhY3R1YWxfaW1hZ2VfaWQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIG1hbmlmZXN0IGFwcGxpY2F0aW9uIGltYWdlIG1pc21hdGNoIikKICAgIGlmIG1hbmlmZXN0LnBhY2thZ2VfaWRlbnRpdHkgIT0gYWN0dWFsX3BhY2thZ2VfaWRlbnRpdHk6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIG1hbmlmZXN0IHBhY2thZ2UgaWRlbnRpdHkgbWlzbWF0Y2giKQ==\",\"source_sha256\":\"eee05b568167a968fc86666c58cf4bea3b4c99cf57474e70264b2574418d325d\"}\nSB043P_CLASS_RUNTIME_MANIFEST_RUNTIMEDEPLOYMENTMANIFESTV1={\"name\":\"RuntimeDeploymentManifestV1\",\"source_b64\":\"Y2xhc3MgUnVudGltZURlcGxveW1lbnRNYW5pZmVzdFYxOgogICAgcnVudGltZV9tYW5pZmVzdF9pZDogc3RyCiAgICBjb2RlX2lkZW50aXR5OiBzdHIKICAgIHBhY2thZ2VfaWRlbnRpdHk6IHN0cgogICAgYXBwbGljYXRpb25faW1hZ2VfaWQ6IHN0cgogICAgYmFzZV9pbWFnZV9kaWdlc3Q6IHN0cgogICAgY29tcG9zZV9oYXNoOiBzdHIKICAgIGZpbmFsaXR5X3BvbGljeV9pZDogc3RyCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29udGVudF9oYXNoKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gY2Fub25pY2FsX2hhc2goCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJzY2hlbWEiOiAiQ1IwMTE2X1JVTlRJTUVfREVQTE9ZTUVOVF9NQU5JRkVTVF9WMSIsCiAgICAgICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IHNlbGYuY29kZV9pZGVudGl0eSwKICAgICAgICAgICAgICAgICJwYWNrYWdlX2lkZW50aXR5Ijogc2VsZi5wYWNrYWdlX2lkZW50aXR5LAogICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ltYWdlX2lkIjogc2VsZi5hcHBsaWNhdGlvbl9pbWFnZV9pZCwKICAgICAgICAgICAgICAgICJiYXNlX2ltYWdlX2RpZ2VzdCI6IHNlbGYuYmFzZV9pbWFnZV9kaWdlc3QsCiAgICAgICAgICAgICAgICAiY29tcG9zZV9oYXNoIjogc2VsZi5jb21wb3NlX2hhc2gsCiAgICAgICAgICAgICAgICAiZmluYWxpdHlfcG9saWN5X2lkIjogc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBfc2hhMjU2X2hleChzZWxmLnJ1bnRpbWVfbWFuaWZlc3RfaWQsICJydW50aW1lIG1hbmlmZXN0IGlkIikKICAgICAgICBfcmVxdWlyZWQoc2VsZi5jb2RlX2lkZW50aXR5LCAiY29kZSBpZGVudGl0eSIpCiAgICAgICAgaWYgX0dJVF9JRF9SRS5mdWxsbWF0Y2goc2VsZi5jb2RlX2lkZW50aXR5KSBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoCiAgICAgICAgICAgICAgICAiY29kZSBpZGVudGl0eSBtdXN0IGJlIGxvd2VyY2FzZSA0MC02NCBoZXgiCiAgICAgICAgICAgICkKICAgICAgICBfc2hhMjU2X2hleChzZWxmLnBhY2thZ2VfaWRlbnRpdHksICJwYWNrYWdlIGlkZW50aXR5IikKICAgICAgICBfc2hhMjU2X2lkKHNlbGYuYXBwbGljYXRpb25faW1hZ2VfaWQsICJhcHBsaWNhdGlvbiBpbWFnZSBpZCIpCiAgICAgICAgX3NoYTI1Nl9pZChzZWxmLmJhc2VfaW1hZ2VfZGlnZXN0LCAiYmFzZSBpbWFnZSBkaWdlc3QiKQogICAgICAgIF9zaGEyNTZfaGV4KHNlbGYuY29tcG9zZV9oYXNoLCAiY29tcG9zZSBoYXNoIikKICAgICAgICBfcmVxdWlyZWQoc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsICJmaW5hbGl0eSBwb2xpY3kgaWQiKQogICAgICAgIGlmIHNlbGYucnVudGltZV9tYW5pZmVzdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgInJ1bnRpbWUgbWFuaWZlc3QgaWQgbXVzdCBiZSBjb250ZW50LWFkZHJlc3NlZCIKICAgICAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKAogICAgICAgIGNscywKICAgICAgICAqLAogICAgICAgIGNvZGVfaWRlbnRpdHk6IHN0ciwKICAgICAgICBwYWNrYWdlX2lkZW50aXR5OiBzdHIsCiAgICAgICAgYXBwbGljYXRpb25faW1hZ2VfaWQ6IHN0ciwKICAgICAgICBiYXNlX2ltYWdlX2RpZ2VzdDogc3RyLAogICAgICAgIGNvbXBvc2VfaGFzaDogc3RyLAogICAgICAgIGZpbmFsaXR5X3BvbGljeV9pZDogc3RyLAogICAgKSAtPiAiUnVudGltZURlcGxveW1lbnRNYW5pZmVzdFYxIjoKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IGNvZGVfaWRlbnRpdHksCiAgICAgICAgICAgICJwYWNrYWdlX2lkZW50aXR5IjogcGFja2FnZV9pZGVudGl0eSwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ltYWdlX2lkIjogYXBwbGljYXRpb25faW1hZ2VfaWQsCiAgICAgICAgICAgICJiYXNlX2ltYWdlX2RpZ2VzdCI6IGJhc2VfaW1hZ2VfZGlnZXN0LAogICAgICAgICAgICAiY29tcG9zZV9oYXNoIjogY29tcG9zZV9oYXNoLAogICAgICAgICAgICAiZmluYWxpdHlfcG9saWN5X2lkIjogZmluYWxpdHlfcG9saWN5X2lkLAogICAgICAgIH0KICAgICAgICBydW50aW1lX21hbmlmZXN0X2lkID0gY2Fub25pY2FsX2hhc2goCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJzY2hlbWEiOiAiQ1IwMTE2X1JVTlRJTUVfREVQTE9ZTUVOVF9NQU5JRkVTVF9WMSIsCiAgICAgICAgICAgICAgICAqKnBheWxvYWQsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmV0dXJuIGNscygKICAgICAgICAgICAgcnVudGltZV9tYW5pZmVzdF9pZD1ydW50aW1lX21hbmlmZXN0X2lkLAogICAgICAgICAgICAqKnBheWxvYWQsCiAgICAgICAgKQ==\",\"source_sha256\":\"58f695fd83baa1f3bc031ec9af5c4a6066186387b70c2b3f4efa0a09853568c2\"}\nSB043P_SOURCE_RUNTIME_INTEGRITY_META={\"class_names\":[\"RuntimeArtifactManifest\",\"RuntimeExperimentBinding\",\"StateSnapshotManifest\",\"PredictorRuntimeManifest\",\"FinalProspectiveSealBundle\",\"ExperimentSealReceipt\"],\"error\":null,\"exists\":true,\"function_names\":[\"verify_experiment_seal_receipt\",\"verify_final_prospective_seal_bundle\",\"verify_live_event_for_sealed_runtime_use\",\"required_retained_hashes\"],\"lines\":2726,\"sha256\":\"99859b63e23d10fc051672965123f49d6e79d2ff767871c019ff7bdae2e2e39e\"}\nSB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_EXPERIMENT_SEAL_RECEIPT={\"args\":[],\"kwonly\":[\"bundle\",\"receipt\",\"collection_start_at\",\"receipt_verifier\"],\"name\":\"verify_experiment_seal_receipt\",\"source_b64\":\"ZGVmIHZlcmlmeV9leHBlcmltZW50X3NlYWxfcmVjZWlwdCgqLCBidW5kbGU6IEZpbmFsUHJvc3BlY3RpdmVTZWFsQnVuZGxlLCByZWNlaXB0OiBFeHBlcmltZW50U2VhbFJlY2VpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9zdGFydF9hdDogZGF0ZXRpbWUsIHJlY2VpcHRfdmVyaWZpZXI6IENhbGxhYmxlW1tFeHBlcmltZW50U2VhbFJlY2VpcHRdLGJvb2xdKSAtPiBOb25lOgogICAgX2F3YXJlKGNvbGxlY3Rpb25fc3RhcnRfYXQsImNvbGxlY3Rpb25fc3RhcnRfYXQiKQogICAgaWYgcmVjZWlwdC5zZWFsX2J1bmRsZV9pZCAhPSBidW5kbGUuYnVuZGxlX2lkIG9yIG5vdCByZWNlaXB0X3ZlcmlmaWVyKHJlY2VpcHQpOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBleHRlcm5hbCByZWNlaXB0IHZlcmlmaWNhdGlvbiBmYWlsZWQiKQogICAgaWYgYnVuZGxlLmZyb3plbl9hdCA+IHJlY2VpcHQuYW5jaG9yZWRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJleHRlcm5hbCBzZWFsIHJlY2VpcHQgcHJlZGF0ZXMgZmluYWwgYnVuZGxlIGZyZWV6ZSIpCiAgICBpZiByZWNlaXB0LmFuY2hvcmVkX2F0ID49IGNvbGxlY3Rpb25fc3RhcnRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBzZWFsIG11c3QgYmUgZXh0ZXJuYWxseSBhbmNob3JlZCBzdHJpY3RseSBiZWZvcmUgY29sbGVjdGlvbiBzdGFydCIp\",\"source_sha256\":\"02aeeff79e0572258bf9691877db22c3a39e93f64021d574d1285d277f965349\"}\nSB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_FINAL_PROSPECTIVE_SEAL_BUNDLE={\"args\":[],\"kwonly\":[\"bundle\",\"base_seal\",\"runtime_binding\",\"inference_binding\",\"capture_finalization_policy\",\"predictor_runtime\",\"prediction_commit_policy\",\"feature_binding_policy\",\"collector_journal_policy\",\"deployment_attestation_policy\",\"analysis_enforcement_policy\",\"critical_hash_policy\",\"artifact_retention_policy\"],\"name\":\"verify_final_prospective_seal_bundle\",\"source_b64\":\"ZGVmIHZlcmlmeV9maW5hbF9wcm9zcGVjdGl2ZV9zZWFsX2J1bmRsZSgqLCBidW5kbGU6RmluYWxQcm9zcGVjdGl2ZVNlYWxCdW5kbGUsIGJhc2Vfc2VhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2JpbmRpbmc6UnVudGltZUV4cGVyaW1lbnRCaW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmVyZW5jZV9iaW5kaW5nOkZpbmFsSW5mZXJlbmNlQmluZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3k6Q2FwdHVyZUZpbmFsaXphdGlvblBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0b3JfcnVudGltZTpQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbl9jb21taXRfcG9saWN5OlByZWRpY3Rpb25Db21taXRQb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9iaW5kaW5nX3BvbGljeTpGaW5hbEZlYXR1cmVCaW5kaW5nUG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeTpDb2xsZWN0b3JKb3VybmFsRmluYWxpemF0aW9uUG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRfYXR0ZXN0YXRpb25fcG9saWN5OkRlcGxveW1lbnRBdHRlc3RhdGlvblBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3k6QW5hbHlzaXNBY2Nlc3NFbmZvcmNlbWVudFBvbGljeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRpY2FsX2hhc2hfcG9saWN5OkNyaXRpY2FsSGFzaFNlbWFudGljc1BvbGljeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3JldGVudGlvbl9wb2xpY3k6IkFydGlmYWN0UmV0ZW50aW9uUG9saWN5IiB8IE5vbmUgPSBOb25lKSAtPiBOb25lOgogICAgY2hlY2tzPSgKICAgICAgICAoYnVuZGxlLmJhc2Vfc2VhbF9pZCxiYXNlX3NlYWwuc2VhbF9pZCwiYmFzZSBzZWFsIiksCiAgICAgICAgKGJ1bmRsZS5ydW50aW1lX2JpbmRpbmdfaWQscnVudGltZV9iaW5kaW5nLmJpbmRpbmdfaWQsInJ1bnRpbWUgYmluZGluZyIpLAogICAgICAgIChidW5kbGUuZmluYWxfaW5mZXJlbmNlX2JpbmRpbmdfaWQsaW5mZXJlbmNlX2JpbmRpbmcuYmluZGluZ19pZCwiZmluYWwgaW5mZXJlbmNlIGJpbmRpbmciKSwKICAgICAgICAoYnVuZGxlLmNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoLGNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeS5jb250ZW50X2hhc2gsImNhcHR1cmUgZmluYWxpemF0aW9uIHBvbGljeSIpLAogICAgICAgIChidW5kbGUucHJlZGljdG9yX3J1bnRpbWVfaWQscHJlZGljdG9yX3J1bnRpbWUucHJlZGljdG9yX3J1bnRpbWVfaWQsInByZWRpY3RvciBydW50aW1lIiksCiAgICAgICAgKGJ1bmRsZS5wcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCxwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3kuY29udGVudF9oYXNoLCJwcmVkaWN0aW9uIGNvbW1pdCBwb2xpY3kiKSwKICAgICAgICAoYnVuZGxlLmZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCxmZWF0dXJlX2JpbmRpbmdfcG9saWN5LmNvbnRlbnRfaGFzaCwiZmVhdHVyZSBiaW5kaW5nIHBvbGljeSIpLAogICAgICAgIChidW5kbGUuY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2gsY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5LmNvbnRlbnRfaGFzaCwiY29sbGVjdG9yIGpvdXJuYWwgcG9saWN5IiksCiAgICAgICAgKGJ1bmRsZS5kZXBsb3ltZW50X2F0dGVzdGF0aW9uX3BvbGljeV9oYXNoLGRlcGxveW1lbnRfYXR0ZXN0YXRpb25fcG9saWN5LmNvbnRlbnRfaGFzaCwiZGVwbG95bWVudCBhdHRlc3RhdGlvbiBwb2xpY3kiKSwKICAgICkKICAgIGZvciBhLGIsbmFtZSBpbiBjaGVja3M6CiAgICAgICAgaWYgYSE9YjogcmFpc2UgRGVtb25vdkVycm9yKGYiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBidW5kbGUgbWlzbWF0Y2g6IHtuYW1lfSIpCiAgICBpZiBidW5kbGUuYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2g6CiAgICAgICAgaWYgYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5IGlzIE5vbmUgb3IgYnVuZGxlLmFuYWx5c2lzX2VuZm9yY2VtZW50X3BvbGljeV9oYXNoIT1hbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3kuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImZpbmFsIHByb3NwZWN0aXZlIHNlYWwgYnVuZGxlIG1pc21hdGNoOiBhbmFseXNpcyBhY2Nlc3MgZW5mb3JjZW1lbnQgcG9saWN5IikKICAgIGlmIGJ1bmRsZS5jcml0aWNhbF9oYXNoX3BvbGljeV9oYXNoOgogICAgICAgIGlmIGNyaXRpY2FsX2hhc2hfcG9saWN5IGlzIE5vbmUgb3IgYnVuZGxlLmNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2ghPWNyaXRpY2FsX2hhc2hfcG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBzZWFsIGJ1bmRsZSBtaXNtYXRjaDogY3JpdGljYWwgaGFzaCBzZW1hbnRpY3MgcG9saWN5IikKICAgIGlmIGJ1bmRsZS5hcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2g6CiAgICAgICAgaWYgYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeSBpcyBOb25lIG9yIGJ1bmRsZS5hcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2ghPWFydGlmYWN0X3JldGVudGlvbl9wb2xpY3kuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImZpbmFsIHByb3NwZWN0aXZlIHNlYWwgYnVuZGxlIG1pc21hdGNoOiBhcnRpZmFjdCByZXRlbnRpb24gcG9saWN5IikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5iYXNlX3NlYWxfaWQgIT0gYmFzZV9zZWFsLnNlYWxfaWQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGJpbmRpbmcgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHNlYWxlZCBiYXNlIGV4cGVyaW1lbnQiKQogICAgaWYgaW5mZXJlbmNlX2JpbmRpbmcucnVudGltZV9iaW5kaW5nX2lkICE9IHJ1bnRpbWVfYmluZGluZy5iaW5kaW5nX2lkOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgaW5mZXJlbmNlIGJpbmRpbmcgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHJ1bnRpbWUgYmluZGluZyIpCiAgICBpZiBwcmVkaWN0b3JfcnVudGltZS5jb25zdW1lcl9pZCA9PSBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3kud2F0ZXJtYXJrX2F1dGhvcml0eV9wcm92aWRlcl9pZDoKICAgICAgICAjIE5vdCBpbmhlcmVudGx5IGltcG9zc2libGUsIGJ1dCBwcm92aWRlci9jb25zdW1lciBpZGVudGl0eSByZXVzZSBkZXN0cm95cyBpbmRlcGVuZGVuY2Ugb2YgY2FwdHVyZSBwcm9vZi4KICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImNoYWxsZW5nZXIgcHJlZGljdG9yIGlkZW50aXR5IGNhbm5vdCBhbHNvIGJlIGF1dGhvcml0YXRpdmUgcHJvZHVjZXIgd2F0ZXJtYXJrIHByb3ZpZGVyIikKICAgIGlmIGJ1bmRsZS5mcm96ZW5fYXQgPCBiYXNlX3NlYWwuc2VhbGVkX2F0OgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgYnVuZGxlIGNhbm5vdCBwcmVkYXRlIGJhc2UgZXhwZXJpbWVudCBzZWFsIikKICAgIGlmIGJ1bmRsZS5mcm96ZW5fYXQgPj0gYmFzZV9zZWFsLmNvbGxlY3Rpb25fc3RhcnRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBidW5kbGUgbXVzdCBiZSBmcm96ZW4gc3RyaWN0bHkgYmVmb3JlIGNvbGxlY3Rpb24gc3RhcnRzIik=\",\"source_sha256\":\"a7dd6abbfe9dfd387da43b987fb3683883043e841fb154859d66bba8a20f7766\"}\nSB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_LIVE_EVENT_FOR_SEALED_RUNTIME_USE={\"args\":[],\"kwonly\":[\"event\",\"runtime_binding\",\"live_schema_registry\",\"market_registry\",\"timeframe_registry\",\"runtime_registry\",\"session_catalog\",\"determinism_policy\",\"receipt_store\",\"snapshot_registry\",\"bar_construction_registry\",\"clock_domain_registry\",\"clock_sync_policy\"],\"name\":\"verify_live_event_for_sealed_runtime_use\",\"source_b64\":\"ZGVmIHZlcmlmeV9saXZlX2V2ZW50X2Zvcl9zZWFsZWRfcnVudGltZV91c2UoKiwgZXZlbnQsIHJ1bnRpbWVfYmluZGluZzpSdW50aW1lRXhwZXJpbWVudEJpbmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVfc2NoZW1hX3JlZ2lzdHJ5LCBtYXJrZXRfcmVnaXN0cnk6TWFya2V0SWRlbnRpdHlSZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWZyYW1lX3JlZ2lzdHJ5OlRpbWVmcmFtZVJlZ2lzdHJ5LCBydW50aW1lX3JlZ2lzdHJ5OlJ1bnRpbWVSZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9jYXRhbG9nOlByb2R1Y2VyU2Vzc2lvbkNhdGFsb2csIGRldGVybWluaXNtX3BvbGljeTpEZXRlcm1pbmlzbVBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdF9zdG9yZTpDb2xsZWN0b3JSZWNlaXB0U3RvcmUsIHNuYXBzaG90X3JlZ2lzdHJ5OlN0YXRlU25hcHNob3RSZWdpc3RyeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5OkJhckNvbnN0cnVjdGlvblBvbGljeVJlZ2lzdHJ5IHwgTm9uZSA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX2RvbWFpbl9yZWdpc3RyeTpDbG9ja0RvbWFpblJlZ2lzdHJ5IHwgTm9uZSA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3N5bmNfcG9saWN5OkNsb2NrU3luY2hyb25pemF0aW9uUG9saWN5IHwgTm9uZSA9IE5vbmUpOgogICAgIiIiRmluYWwtb25seSBldmVudCBnYXRld2F5IHRoYXQgY2Fubm90IHNpbGVudGx5IG9taXQgZXh0ZW5zaW9ucyBzZWFsZWQgaW4gcnVudGltZV9iaW5kaW5nLiIiIgogICAgaWYgcnVudGltZV9iaW5kaW5nLmxpdmVfc2NoZW1hX3JlZ2lzdHJ5X2lkIT1saXZlX3NjaGVtYV9yZWdpc3RyeS5yZWdpc3RyeV9pZCBvciBydW50aW1lX2JpbmRpbmcubWFya2V0X3JlZ2lzdHJ5X2lkIT1tYXJrZXRfcmVnaXN0cnkucmVnaXN0cnlfaWQgb3IgcnVudGltZV9iaW5kaW5nLnRpbWVmcmFtZV9yZWdpc3RyeV9pZCE9dGltZWZyYW1lX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIG9yIHJ1bnRpbWVfYmluZGluZy5ydW50aW1lX3JlZ2lzdHJ5X2lkIT1ydW50aW1lX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigic2VhbGVkIHJ1bnRpbWUgZXZlbnQgZ2F0ZXdheSByZWdpc3RyeSBtaXNtYXRjaCIpCiAgICBpZiBydW50aW1lX2JpbmRpbmcuY29sbGVjdG9yX3RvcG9sb2d5X2hhc2ghPXJlY2VpcHRfc3RvcmUucG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInNlYWxlZCBydW50aW1lIGV2ZW50IGdhdGV3YXkgY29sbGVjdG9yIHRvcG9sb2d5IG1pc21hdGNoIikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5kZXRlcm1pbmlzbV9wb2xpY3lfaGFzaCE9ZGV0ZXJtaW5pc21fcG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInNlYWxlZCBydW50aW1lIGV2ZW50IGdhdGV3YXkgZGV0ZXJtaW5pc20gcG9saWN5IG1pc21hdGNoIikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5iYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5X2lkOgogICAgICAgIGlmIGJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnkgaXMgTm9uZSBvciBiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIT1ydW50aW1lX2JpbmRpbmcuYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSByZXF1aXJlcyBleGFjdCBiYXItY29uc3RydWN0aW9uIHJlZ2lzdHJ5IikKICAgICAgICB2ZXJpZnlfdGltZWZyYW1lX2Jhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnkodGltZWZyYW1lX3JlZ2lzdHJ5PXRpbWVmcmFtZV9yZWdpc3RyeSxiYXJfcmVnaXN0cnk9YmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeSkKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQ6CiAgICAgICAgaWYgY2xvY2tfZG9tYWluX3JlZ2lzdHJ5IGlzIE5vbmUgb3IgY2xvY2tfc3luY19wb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSByZXF1aXJlcyBleGFjdCBjbG9jay1kb21haW4gc3luY2hyb25pemF0aW9uIGJ1bmRsZSIpCiAgICAgICAgaWYgY2xvY2tfZG9tYWluX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIT1ydW50aW1lX2JpbmRpbmcuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIG9yIGNsb2NrX3N5bmNfcG9saWN5LmNvbnRlbnRfaGFzaCE9cnVudGltZV9iaW5kaW5nLmNsb2NrX3N5bmNocm9uaXphdGlvbl9wb2xpY3lfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSBjbG9jayBidW5kbGUgbWlzbWF0Y2giKQogICAgcmV0dXJuIHZlcmlmeV9saXZlX2V2ZW50X2Zvcl9wcm9zcGVjdGl2ZV91c2UoZXZlbnQ9ZXZlbnQsbGl2ZV9zY2hlbWFfcmVnaXN0cnk9bGl2ZV9zY2hlbWFfcmVnaXN0cnksCiAgICAgICAgbWFya2V0X3JlZ2lzdHJ5PW1hcmtldF9yZWdpc3RyeSx0aW1lZnJhbWVfcmVnaXN0cnk9dGltZWZyYW1lX3JlZ2lzdHJ5LHJ1bnRpbWVfcmVnaXN0cnk9cnVudGltZV9yZWdpc3RyeSwKICAgICAgICBzZXNzaW9uX2NhdGFsb2c9c2Vzc2lvbl9jYXRhbG9nLGRldGVybWluaXNtX3BvbGljeT1kZXRlcm1pbmlzbV9wb2xpY3kscmVjZWlwdF9zdG9yZT1yZWNlaXB0X3N0b3JlLAogICAgICAgIHNuYXBzaG90X3JlZ2lzdHJ5PXNuYXBzaG90X3JlZ2lzdHJ5LGNsb2NrX2RvbWFpbl9yZWdpc3RyeT1jbG9ja19kb21haW5fcmVnaXN0cnksY2xvY2tfc3luY19wb2xpY3k9Y2xvY2tfc3luY19wb2xpY3ksCiAgICAgICAgY29sbGVjdG9yX3BvbGljeT1yZWNlaXB0X3N0b3JlLnBvbGljeSBpZiBydW50aW1lX2JpbmRpbmcuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIGVsc2UgTm9uZSk=\",\"source_sha256\":\"af0af39e4ec3af3bd839bde7c58ea032581039fd1ade31680e83251df48127ae\"}\nSB043P_FUNC_RUNTIME_INTEGRITY_REQUIRED_RETAINED_HASHES={\"args\":[],\"kwonly\":[\"runtime_registry\",\"model_registry\",\"state_snapshots\",\"predictor_runtime\"],\"name\":\"required_retained_hashes\",\"source_b64\":\"ZGVmIHJlcXVpcmVkX3JldGFpbmVkX2hhc2hlcygqLCBydW50aW1lX3JlZ2lzdHJ5OlJ1bnRpbWVSZWdpc3RyeSwgbW9kZWxfcmVnaXN0cnk6RmluYWxNb2RlbFJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3NuYXBzaG90czpTZXF1ZW5jZVtTdGF0ZVNuYXBzaG90TWFuaWZlc3RdPSgpLCBwcmVkaWN0b3JfcnVudGltZTpQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QgfCBOb25lPU5vbmUpLT5NYXBwaW5nW3N0cixSZXRhaW5lZEFydGlmYWN0S2luZF06CiAgICAiIiJCdWlsZCB0aGUgbWluaW11bSBibG9iLWxldmVsIHJlcGxheSBjb3JwdXMgcmVxdWlyZWQgYnkgZmluYWwgcHJvc3BlY3RpdmUgcHJvb2YuCgogICAgQ29udGVudC1hZGRyZXNzZWQgcG9saWN5IG9iamVjdHMgcmVtYWluIGluIHRoZSBoYW5kb2ZmL3JlZ2lzdHJ5LiAgVGhpcyBmdW5jdGlvbgogICAgdGFyZ2V0cyBibG9icyB0aGF0IGNhbm5vdCBiZSByZWNvbnN0cnVjdGVkIGZyb20gaWRlbnRpZmllcnMgYWxvbmUuCiAgICAiIiIKICAgIG91dDpkaWN0W3N0cixSZXRhaW5lZEFydGlmYWN0S2luZF09e30KICAgIGZvciBhIGluIHJ1bnRpbWVfcmVnaXN0cnkuYXJ0aWZhY3RzOgogICAgICAgIG91dFthLnNvdXJjZV90cmVlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlNPVVJDRV9UUkVFCiAgICAgICAgb3V0W2EuZGVwZW5kZW5jeV9sb2NrX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkRFUEVOREVOQ1lfTE9DSwogICAgICAgIG91dFthLmJ1aWxkX3JlY2lwZV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5CVUlMRF9SRUNJUEUKICAgICAgICBvdXRbYS5leGVjdXRhYmxlX2FydGlmYWN0X2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkVYRUNVVEFCTEVfQVJUSUZBQ1QKICAgICAgICBvdXRbYS5ydW50aW1lX2Vudmlyb25tZW50X2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlJVTlRJTUVfRU5WSVJPTk1FTlQKICAgIGZvciBhIGluIG1vZGVsX3JlZ2lzdHJ5LmFydGlmYWN0czoKICAgICAgICBvdXRbYS5tb2RlbF9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuTU9ERUwKICAgICAgICBvdXRbYS50cmFuc2Zvcm1lcl9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuVFJBTlNGT1JNRVIKICAgICAgICBvdXRbYS5jYWxpYnJhdGlvbl9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuQ0FMSUJSQVRPUgogICAgICAgIG91dFthLmZlYXR1cmVfc2NoZW1hX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkZFQVRVUkVfU0NIRU1BCiAgICAgICAgb3V0W2EuZmVhdHVyZV9jb250cmFjdF9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5GRUFUVVJFX0NPTlRSQUNUCiAgICAgICAgb3V0W2EudHJhaW5pbmdfZGF0YV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5UUkFJTklOR19EQVRBCiAgICBmb3IgcyBpbiBzdGF0ZV9zbmFwc2hvdHM6CiAgICAgICAgb3V0W3Muc2VyaWFsaXplZF9zdGF0ZV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5TVEFURV9TTkFQU0hPVAogICAgaWYgcHJlZGljdG9yX3J1bnRpbWUgaXMgbm90IE5vbmU6CiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLnNvdXJjZV90cmVlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlNPVVJDRV9UUkVFCiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLmRlcGVuZGVuY3lfbG9ja19oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5ERVBFTkRFTkNZX0xPQ0sKICAgICAgICBvdXRbcHJlZGljdG9yX3J1bnRpbWUuZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5FWEVDVVRBQkxFX0FSVElGQUNUCiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLnJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuUlVOVElNRV9FTlZJUk9OTUVOVAogICAgICAgIG91dFtwcmVkaWN0b3JfcnVudGltZS5mZWF0dXJlX2V4dHJhY3Rvcl9jb2RlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkZFQVRVUkVfRVhUUkFDVE9SX0NPREUKICAgICAgICBvdXRbcHJlZGljdG9yX3J1bnRpbWUuZWZmZWN0aXZlX2NvbmZpZ19oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5FRkZFQ1RJVkVfQ09ORklHCiAgICByZXR1cm4gb3V0\",\"source_sha256\":\"ac6e18e76fcbd23144d1870ac03e3c2a4a1149dc4b5cf3f84fc0664228cdab1a\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_RUNTIMEARTIFACTMANIFEST={\"name\":\"RuntimeArtifactManifest\",\"source_b64\":\"Y2xhc3MgUnVudGltZUFydGlmYWN0TWFuaWZlc3Q6CiAgICBhcnRpZmFjdF9pZDogc3RyCiAgICBzb3VyY2VfdHJlZV9oYXNoOiBzdHIKICAgIGRlcGVuZGVuY3lfbG9ja19oYXNoOiBzdHIKICAgIGJ1aWxkX3JlY2lwZV9oYXNoOiBzdHIKICAgIGV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaDogc3RyCiAgICBydW50aW1lX2Vudmlyb25tZW50X2hhc2g6IHN0cgoKICAgIGRlZiBfX3Bvc3RfaW5pdF9fKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgZm9yIG5hbWUgaW4gKCJzb3VyY2VfdHJlZV9oYXNoIiwgImRlcGVuZGVuY3lfbG9ja19oYXNoIiwgImJ1aWxkX3JlY2lwZV9oYXNoIiwgImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsICJydW50aW1lX2Vudmlyb25tZW50X2hhc2giKToKICAgICAgICAgICAgX2hleDY0KGdldGF0dHIoc2VsZiwgbmFtZSksIG5hbWUpCiAgICAgICAgaWYgc2VsZi5hcnRpZmFjdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGFydGlmYWN0IGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbF9oYXNoKHtrOiBnZXRhdHRyKHNlbGYsIGspIGZvciBrIGluICgKICAgICAgICAgICAgInNvdXJjZV90cmVlX2hhc2giLCAiZGVwZW5kZW5jeV9sb2NrX2hhc2giLCAiYnVpbGRfcmVjaXBlX2hhc2giLCAiZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoIiwgInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIKICAgICAgICApfSkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBidWlsZChjbHMsICoqa3dhcmdzKSAtPiAiUnVudGltZUFydGlmYWN0TWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQgPSB7azoga3dhcmdzW2tdIGZvciBrIGluICgic291cmNlX3RyZWVfaGFzaCIsICJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsICJidWlsZF9yZWNpcGVfaGFzaCIsICJleGVjdXRhYmxlX2FydGlmYWN0X2hhc2giLCAicnVudGltZV9lbnZpcm9ubWVudF9oYXNoIil9CiAgICAgICAgcmV0dXJuIGNscyhhcnRpZmFjdF9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwgKiprd2FyZ3Mp\",\"source_sha256\":\"8cd1ebf70c003cd4d7b91f18602841426b19c2f54f2d803309c53c22f38cd5c7\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_RUNTIMEEXPERIMENTBINDING={\"name\":\"RuntimeExperimentBinding\",\"source_b64\":\"Y2xhc3MgUnVudGltZUV4cGVyaW1lbnRCaW5kaW5nOgogICAgYmluZGluZ19pZDogc3RyCiAgICBiYXNlX3NlYWxfaWQ6IHN0cgogICAgbGl2ZV9zY2hlbWFfcmVnaXN0cnlfaWQ6IHN0cgogICAgbWFya2V0X3JlZ2lzdHJ5X2lkOiBzdHIKICAgIHRpbWVmcmFtZV9yZWdpc3RyeV9pZDogc3RyCiAgICBydW50aW1lX3JlZ2lzdHJ5X2lkOiBzdHIKICAgIGNvbGxlY3Rvcl90b3BvbG9neV9oYXNoOiBzdHIKICAgIGNhcHR1cmVfcG9saWN5X2hhc2g6IHN0cgogICAgZGV0ZXJtaW5pc21fcG9saWN5X2hhc2g6IHN0cgogICAgc2hhZG93X2lzb2xhdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICByZXF1aXJlX3NpbmdsZV9ydW50aW1lX2Vwb2NoX2R1cmluZ19jb2xsZWN0aW9uOiBib29sID0gVHJ1ZQogICAgc2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbDogYm9vbCA9IFRydWUKICAgIGJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQ6IHN0ciA9ICIiCiAgICBjbG9ja19kb21haW5fcmVnaXN0cnlfaWQ6IHN0ciA9ICIiCiAgICBjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2g6IHN0ciA9ICIiCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBpZiBub3QgYWxsKChzZWxmLmJhc2Vfc2VhbF9pZCwgc2VsZi5saXZlX3NjaGVtYV9yZWdpc3RyeV9pZCwgc2VsZi5tYXJrZXRfcmVnaXN0cnlfaWQsIHNlbGYudGltZWZyYW1lX3JlZ2lzdHJ5X2lkLAogICAgICAgICAgICAgICAgICAgIHNlbGYucnVudGltZV9yZWdpc3RyeV9pZCwgc2VsZi5jb2xsZWN0b3JfdG9wb2xvZ3lfaGFzaCwgc2VsZi5jYXB0dXJlX3BvbGljeV9oYXNoLAogICAgICAgICAgICAgICAgICAgIHNlbGYuZGV0ZXJtaW5pc21fcG9saWN5X2hhc2gsIHNlbGYuc2hhZG93X2lzb2xhdGlvbl9wb2xpY3lfaGFzaCkpOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInJ1bnRpbWUgZXhwZXJpbWVudCBiaW5kaW5nIGZpZWxkcyBhcmUgcmVxdWlyZWQiKQogICAgICAgIGlmIG5vdCBzZWxmLnJlcXVpcmVfc2luZ2xlX3J1bnRpbWVfZXBvY2hfZHVyaW5nX2NvbGxlY3Rpb24gb3Igbm90IHNlbGYuc2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJWMTguMzkgZmluYWwgcHJvc3BlY3RpdmUgYmluZGluZyBpcyBzdHJpY3Q6IG9uZSBydW50aW1lIGVwb2NoIGFuZCBuZXcgc2VhbCBvbiBzY2hlbWEgY2hhbmdlIikKICAgICAgICBpZiBzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQ6CiAgICAgICAgICAgIF9oZXg2NChzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQsImJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQiKQogICAgICAgIGlmIGJvb2woc2VsZi5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQpICE9IGJvb2woc2VsZi5jbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2gpOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImNsb2NrIGRvbWFpbiByZWdpc3RyeSBhbmQgc3luY2hyb25pemF0aW9uIHBvbGljeSBtdXN0IGJlIGJvdW5kIHRvZ2V0aGVyIikKICAgICAgICBpZiBzZWxmLmNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZDoKICAgICAgICAgICAgX2hleDY0KHNlbGYuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkLCJjbG9ja19kb21haW5fcmVnaXN0cnlfaWQiKTsgX2hleDY0KHNlbGYuY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoLCJjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2giKQogICAgICAgIGlmIHNlbGYuYmluZGluZ19pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDogcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGV4cGVyaW1lbnQgYmluZGluZyBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIikKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjb250ZW50X2hhc2goc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7ImJhc2Vfc2VhbF9pZCI6IHNlbGYuYmFzZV9zZWFsX2lkLCAibGl2ZV9zY2hlbWFfcmVnaXN0cnlfaWQiOiBzZWxmLmxpdmVfc2NoZW1hX3JlZ2lzdHJ5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcmtldF9yZWdpc3RyeV9pZCI6IHNlbGYubWFya2V0X3JlZ2lzdHJ5X2lkLCAidGltZWZyYW1lX3JlZ2lzdHJ5X2lkIjogc2VsZi50aW1lZnJhbWVfcmVnaXN0cnlfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVudGltZV9yZWdpc3RyeV9pZCI6IHNlbGYucnVudGltZV9yZWdpc3RyeV9pZCwgImNvbGxlY3Rvcl90b3BvbG9neV9oYXNoIjogc2VsZi5jb2xsZWN0b3JfdG9wb2xvZ3lfaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXB0dXJlX3BvbGljeV9oYXNoIjogc2VsZi5jYXB0dXJlX3BvbGljeV9oYXNoLCAiZGV0ZXJtaW5pc21fcG9saWN5X2hhc2giOiBzZWxmLmRldGVybWluaXNtX3BvbGljeV9oYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYWRvd19pc29sYXRpb25fcG9saWN5X2hhc2giOiBzZWxmLnNoYWRvd19pc29sYXRpb25fcG9saWN5X2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZV9zaW5nbGVfcnVudGltZV9lcG9jaF9kdXJpbmdfY29sbGVjdGlvbiI6IHNlbGYucmVxdWlyZV9zaW5nbGVfcnVudGltZV9lcG9jaF9kdXJpbmdfY29sbGVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY2hlbWFfY2hhbmdlX3JlcXVpcmVzX25ld19zZWFsIjogc2VsZi5zY2hlbWFfY2hhbmdlX3JlcXVpcmVzX25ld19zZWFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiooeyJiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5X2lkIjpzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWR9IGlmIHNlbGYuYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCBlbHNlIHt9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKHsiY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIjpzZWxmLmNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZCwiY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoIjpzZWxmLmNsb2NrX3N5bmNocm9uaXphdGlvbl9wb2xpY3lfaGFzaH0gaWYgc2VsZi5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQgZWxzZSB7fSl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJSdW50aW1lRXhwZXJpbWVudEJpbmRpbmciOgogICAgICAgIHBheWxvYWQgPSB7azoga3dhcmdzW2tdIGZvciBrIGluICgKICAgICAgICAgICAgImJhc2Vfc2VhbF9pZCIsICJsaXZlX3NjaGVtYV9yZWdpc3RyeV9pZCIsICJtYXJrZXRfcmVnaXN0cnlfaWQiLCAidGltZWZyYW1lX3JlZ2lzdHJ5X2lkIiwgInJ1bnRpbWVfcmVnaXN0cnlfaWQiLAogICAgICAgICAgICAiY29sbGVjdG9yX3RvcG9sb2d5X2hhc2giLCAiY2FwdHVyZV9wb2xpY3lfaGFzaCIsICJkZXRlcm1pbmlzbV9wb2xpY3lfaGFzaCIsICJzaGFkb3dfaXNvbGF0aW9uX3BvbGljeV9oYXNoIiwKICAgICAgICAgICAgInJlcXVpcmVfc2luZ2xlX3J1bnRpbWVfZXBvY2hfZHVyaW5nX2NvbGxlY3Rpb24iLCAic2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbCIKICAgICAgICApfQogICAgICAgIGlmIGt3YXJncy5nZXQoImJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQiKToKICAgICAgICAgICAgcGF5bG9hZFsiYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCJdPWt3YXJnc1siYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCJdCiAgICAgICAgaWYga3dhcmdzLmdldCgiY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIik6CiAgICAgICAgICAgIHBheWxvYWRbImNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZCJdPWt3YXJnc1siY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIl0KICAgICAgICAgICAgcGF5bG9hZFsiY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoIl09a3dhcmdzWyJjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2giXQogICAgICAgIHJldHVybiBjbHMoYmluZGluZ19pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwgKiprd2FyZ3Mp\",\"source_sha256\":\"d06243f6bc10e0a8b92621ad139e2f0768d9c490da92843757ff418b1e07f840\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_STATESNAPSHOTMANIFEST={\"name\":\"StateSnapshotManifest\",\"source_b64\":\"Y2xhc3MgU3RhdGVTbmFwc2hvdE1hbmlmZXN0OgogICAgc25hcHNob3RfaWQ6IHN0cgogICAgcHJvZHVjZXJfaWQ6IHN0cgogICAgcnVudGltZV9lcG9jaF9pZDogc3RyCiAgICBzdGF0ZV9zY2hlbWFfaWQ6IHN0cgogICAgc2VyaWFsaXplZF9zdGF0ZV9oYXNoOiBzdHIKICAgIGNyZWF0ZWRfYXQ6IGRhdGV0aW1lCiAgICB0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnM6IFR1cGxlW1R1cGxlW3N0cixzdHIsc3RyLGludF0sIC4uLl0KCiAgICBkZWYgX19wb3N0X2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgICAgIF9hd2FyZShzZWxmLmNyZWF0ZWRfYXQsInN0YXRlIHNuYXBzaG90IGNyZWF0ZWRfYXQiKQogICAgICAgIGlmIG5vdCBhbGwoKHNlbGYucHJvZHVjZXJfaWQsc2VsZi5ydW50aW1lX2Vwb2NoX2lkLHNlbGYuc3RhdGVfc2NoZW1hX2lkLHNlbGYuc2VyaWFsaXplZF9zdGF0ZV9oYXNoLHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zKSk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigic3RhdGUgc25hcHNob3QgbWFuaWZlc3QgZmllbGRzIGFyZSByZXF1aXJlZCIpCiAgICAgICAgX2hleDY0KHNlbGYuc2VyaWFsaXplZF9zdGF0ZV9oYXNoLCJzZXJpYWxpemVkX3N0YXRlX2hhc2giKQogICAgICAgIGlmIGxlbihzZWxmLnRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucykhPWxlbihzZXQoc2VsZi50aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnMpKToKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJkdXBsaWNhdGUgc3RyZWFtIHBvc2l0aW9uIGluIHN0YXRlIHNuYXBzaG90IG1hbmlmZXN0IikKICAgICAgICBmb3IgcG9zIGluIHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zOgogICAgICAgICAgICBpZiBsZW4ocG9zKSE9NCBvciBub3QgYWxsKHBvc1s6M10pIG9yIG5vdCBpc2luc3RhbmNlKHBvc1szXSxpbnQpIG9yIHBvc1szXSA8IC0xOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzdGF0ZSBzbmFwc2hvdCBzdHJlYW0gcG9zaXRpb24gbXVzdCBiZSBwcm9kdWNlci9zZXNzaW9uL3BhcnRpdGlvbiBwbHVzIHNlcSA+PSAtMSIpCiAgICAgICAgaWYgc2VsZi5zbmFwc2hvdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDogcmFpc2UgRGVtb25vdkVycm9yKCJzdGF0ZSBzbmFwc2hvdCBtYW5pZmVzdCBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIikKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjb250ZW50X2hhc2goc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7InByb2R1Y2VyX2lkIjpzZWxmLnByb2R1Y2VyX2lkLCJydW50aW1lX2Vwb2NoX2lkIjpzZWxmLnJ1bnRpbWVfZXBvY2hfaWQsInN0YXRlX3NjaGVtYV9pZCI6c2VsZi5zdGF0ZV9zY2hlbWFfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsaXplZF9zdGF0ZV9oYXNoIjpzZWxmLnNlcmlhbGl6ZWRfc3RhdGVfaGFzaCwiY3JlYXRlZF9hdCI6c2VsZi5jcmVhdGVkX2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucyI6dHVwbGUoc29ydGVkKHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zKSl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJTdGF0ZVNuYXBzaG90TWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQ9eyJwcm9kdWNlcl9pZCI6a3dhcmdzWyJwcm9kdWNlcl9pZCJdLCJydW50aW1lX2Vwb2NoX2lkIjprd2FyZ3NbInJ1bnRpbWVfZXBvY2hfaWQiXSwic3RhdGVfc2NoZW1hX2lkIjprd2FyZ3NbInN0YXRlX3NjaGVtYV9pZCJdLAogICAgICAgICAgICAgICAgICJzZXJpYWxpemVkX3N0YXRlX2hhc2giOmt3YXJnc1sic2VyaWFsaXplZF9zdGF0ZV9oYXNoIl0sImNyZWF0ZWRfYXQiOmt3YXJnc1siY3JlYXRlZF9hdCJdLAogICAgICAgICAgICAgICAgICJ0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnMiOnR1cGxlKHNvcnRlZChrd2FyZ3NbInRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucyJdKSl9CiAgICAgICAgcmV0dXJuIGNscyhzbmFwc2hvdF9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSxwcm9kdWNlcl9pZD1rd2FyZ3NbInByb2R1Y2VyX2lkIl0scnVudGltZV9lcG9jaF9pZD1rd2FyZ3NbInJ1bnRpbWVfZXBvY2hfaWQiXSwKICAgICAgICAgICAgICAgICAgIHN0YXRlX3NjaGVtYV9pZD1rd2FyZ3NbInN0YXRlX3NjaGVtYV9pZCJdLHNlcmlhbGl6ZWRfc3RhdGVfaGFzaD1rd2FyZ3NbInNlcmlhbGl6ZWRfc3RhdGVfaGFzaCJdLGNyZWF0ZWRfYXQ9a3dhcmdzWyJjcmVhdGVkX2F0Il0sCiAgICAgICAgICAgICAgICAgICB0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnM9cGF5bG9hZFsidGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zIl0p\",\"source_sha256\":\"04fcdac0c5b3010433b311804622b8095e9111471f35436325119a2590330b2f\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_PREDICTORRUNTIMEMANIFEST={\"name\":\"PredictorRuntimeManifest\",\"source_b64\":\"Y2xhc3MgUHJlZGljdG9yUnVudGltZU1hbmlmZXN0OgogICAgcHJlZGljdG9yX3J1bnRpbWVfaWQ6IHN0cgogICAgY29uc3VtZXJfaWQ6IHN0cgogICAgc291cmNlX3RyZWVfaGFzaDogc3RyCiAgICBkZXBlbmRlbmN5X2xvY2tfaGFzaDogc3RyCiAgICBydW50aW1lX2Vudmlyb25tZW50X2hhc2g6IHN0cgogICAgZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoOiBzdHIKICAgIGVmZmVjdGl2ZV9jb25maWdfaGFzaDogc3RyCiAgICBmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZDogc3RyCiAgICBmZWF0dXJlX2V4dHJhY3Rvcl9jb2RlX2hhc2g6IHN0cgogICAgc3RhcnRlZF9hdDogZGF0ZXRpbWUKICAgIGVuZGVkX2F0OiBkYXRldGltZSB8IE5vbmUKICAgIGRlcGxveW1lbnRfcmVjZWlwdF9oYXNoOiBzdHIKCiAgICBkZWYgX19wb3N0X2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgICAgIF9hd2FyZShzZWxmLnN0YXJ0ZWRfYXQsICJwcmVkaWN0b3IgcnVudGltZSBzdGFydGVkX2F0IikKICAgICAgICBpZiBzZWxmLmVuZGVkX2F0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBfYXdhcmUoc2VsZi5lbmRlZF9hdCwgInByZWRpY3RvciBydW50aW1lIGVuZGVkX2F0IikKICAgICAgICAgICAgaWYgc2VsZi5lbmRlZF9hdCA8PSBzZWxmLnN0YXJ0ZWRfYXQ6IHJhaXNlIERlbW9ub3ZFcnJvcigicHJlZGljdG9yIHJ1bnRpbWUgZW5kZWRfYXQgbXVzdCBmb2xsb3cgc3RhcnRlZF9hdCIpCiAgICAgICAgaWYgbm90IHNlbGYuY29uc3VtZXJfaWQgb3Igbm90IHNlbGYuZmluYWxfbW9kZWxfcmVnaXN0cnlfaWQ6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigicHJlZGljdG9yIHJ1bnRpbWUgaWRlbnRpdHkgZmllbGRzIHJlcXVpcmVkIikKICAgICAgICBmb3IgbiBpbiAoInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIik6CiAgICAgICAgICAgIF9oZXg2NChnZXRhdHRyKHNlbGYsbiksbikKICAgICAgICBpZiBzZWxmLnByZWRpY3Rvcl9ydW50aW1lX2lkICE9IHNlbGYuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInByZWRpY3RvciBydW50aW1lIGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbF9oYXNoKHtrOmdldGF0dHIoc2VsZixrKSBmb3IgayBpbiAoCiAgICAgICAgICAgICJjb25zdW1lcl9pZCIsInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsCiAgICAgICAgICAgICJmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsInN0YXJ0ZWRfYXQiLCJlbmRlZF9hdCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIgogICAgICAgICl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQ9e2s6a3dhcmdzLmdldChrKSBmb3IgayBpbiAoCiAgICAgICAgICAgICJjb25zdW1lcl9pZCIsInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsCiAgICAgICAgICAgICJmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsInN0YXJ0ZWRfYXQiLCJlbmRlZF9hdCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIgogICAgICAgICl9CiAgICAgICAgcmV0dXJuIGNscyhwcmVkaWN0b3JfcnVudGltZV9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwqKmt3YXJncykKCiAgICBkZWYgY29udGFpbnMoc2VsZix0OmRhdGV0aW1lKS0+Ym9vbDoKICAgICAgICBfYXdhcmUodCwicHJlZGljdG9yIHJ1bnRpbWUgdGltZSIpCiAgICAgICAgcmV0dXJuIHNlbGYuc3RhcnRlZF9hdCA8PSB0IGFuZCAoc2VsZi5lbmRlZF9hdCBpcyBOb25lIG9yIHQgPCBzZWxmLmVuZGVkX2F0KQ==\",\"source_sha256\":\"6514f10948abbeb0030fb06b509a8a75d796eea4d6ef4101b72e20f688985454\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_FINALPROSPECTIVESEALBUNDLE={\"name\":\"FinalProspectiveSealBundle\",\"source_b64\":\"Y2xhc3MgRmluYWxQcm9zcGVjdGl2ZVNlYWxCdW5kbGU6CiAgICBidW5kbGVfaWQ6IHN0cgogICAgYmFzZV9zZWFsX2lkOiBzdHIKICAgIHJ1bnRpbWVfYmluZGluZ19pZDogc3RyCiAgICBmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZDogc3RyCiAgICBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICBwcmVkaWN0b3JfcnVudGltZV9pZDogc3RyCiAgICBwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaDogc3RyCiAgICBmZWF0dXJlX2JpbmRpbmdfcG9saWN5X2hhc2g6IHN0cgogICAgY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2g6IHN0cgogICAgZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICBmcm96ZW5fYXQ6IGRhdGV0aW1lCiAgICBhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaDogc3RyID0gIiIKICAgIGNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2g6IHN0ciA9ICIiCiAgICBhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2g6IHN0ciA9ICIiCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZiktPk5vbmU6CiAgICAgICAgX2F3YXJlKHNlbGYuZnJvemVuX2F0LCJmaW5hbCBwcm9zcGVjdGl2ZSBidW5kbGUgZnJvemVuX2F0IikKICAgICAgICBmb3IgbiBpbiAoImJhc2Vfc2VhbF9pZCIsInJ1bnRpbWVfYmluZGluZ19pZCIsImZpbmFsX2luZmVyZW5jZV9iaW5kaW5nX2lkIiwiY2FwdHVyZV9maW5hbGl6YXRpb25fcG9saWN5X2hhc2giLCJwcmVkaWN0b3JfcnVudGltZV9pZCIsInByZWRpY3Rpb25fY29tbWl0X3BvbGljeV9oYXNoIiwiZmVhdHVyZV9iaW5kaW5nX3BvbGljeV9oYXNoIiwiY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2giLCJkZXBsb3ltZW50X2F0dGVzdGF0aW9uX3BvbGljeV9oYXNoIik6CiAgICAgICAgICAgIF9oZXg2NChnZXRhdHRyKHNlbGYsbiksIG4pCiAgICAgICAgZm9yIG4gaW4gKCJhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaCIsImNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2giLCJhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2giKToKICAgICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLG4pOiBfaGV4NjQoZ2V0YXR0cihzZWxmLG4pLG4pCiAgICAgICAgaWYgc2VsZi5idW5kbGVfaWQgIT0gc2VsZi5jb250ZW50X2hhc2g6IHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBidW5kbGUgaWQgbXVzdCBiZSBjb250ZW50LWFkZHJlc3NlZCIpCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29udGVudF9oYXNoKHNlbGYpLT5zdHI6CiAgICAgICAgcGF5bG9hZD17azpnZXRhdHRyKHNlbGYsaykgZm9yIGsgaW4gKCJiYXNlX3NlYWxfaWQiLCJydW50aW1lX2JpbmRpbmdfaWQiLCJmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZCIsImNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoIiwicHJlZGljdG9yX3J1bnRpbWVfaWQiLCJwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCIsImZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCIsImNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeV9oYXNoIiwiZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaCIsImZyb3plbl9hdCIpfQogICAgICAgIGlmIHNlbGYuYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2g6IHBheWxvYWRbImFuYWx5c2lzX2VuZm9yY2VtZW50X3BvbGljeV9oYXNoIl09c2VsZi5hbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaAogICAgICAgIGlmIHNlbGYuY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaDogcGF5bG9hZFsiY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaCJdPXNlbGYuY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaAogICAgICAgIGlmIHNlbGYuYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeV9oYXNoOiBwYXlsb2FkWyJhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2giXT1zZWxmLmFydGlmYWN0X3JldGVudGlvbl9wb2xpY3lfaGFzaAogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaChwYXlsb2FkKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywqKmt3YXJncyktPiJGaW5hbFByb3NwZWN0aXZlU2VhbEJ1bmRsZSI6CiAgICAgICAgcGF5bG9hZD17azprd2FyZ3Nba10gZm9yIGsgaW4gKCJiYXNlX3NlYWxfaWQiLCJydW50aW1lX2JpbmRpbmdfaWQiLCJmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZCIsImNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoIiwicHJlZGljdG9yX3J1bnRpbWVfaWQiLCJwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCIsImZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCIsImNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeV9oYXNoIiwiZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaCIsImZyb3plbl9hdCIpfQogICAgICAgIGZvciBuIGluICgiYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2giLCJjcml0aWNhbF9oYXNoX3BvbGljeV9oYXNoIiwiYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeV9oYXNoIik6CiAgICAgICAgICAgIGlmIGt3YXJncy5nZXQobik6IHBheWxvYWRbbl09a3dhcmdzW25dCiAgICAgICAgcmV0dXJuIGNscyhidW5kbGVfaWQ9Y2Fub25pY2FsX2hhc2gocGF5bG9hZCksKiprd2FyZ3Mp\",\"source_sha256\":\"ea3da9d118f8c5b321632f3ea03659428d5308f44a6f59239d381d741fd128d7\"}\nSB043P_CLASS_RUNTIME_INTEGRITY_EXPERIMENTSEALRECEIPT={\"name\":\"ExperimentSealReceipt\",\"source_b64\":\"Y2xhc3MgRXhwZXJpbWVudFNlYWxSZWNlaXB0OgogICAgcmVjZWlwdF9jb21taXRtZW50X2lkOiBzdHIKICAgIHNlYWxfYnVuZGxlX2lkOiBzdHIKICAgIHByb3ZpZGVyX2lkOiBzdHIKICAgIHJlY2VpcHRfaWQ6IHN0cgogICAgYW5jaG9yZWRfYXQ6IGRhdGV0aW1lCiAgICByZWNlaXB0X3BheWxvYWRfaGFzaDogc3RyCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZiktPk5vbmU6CiAgICAgICAgX2F3YXJlKHNlbGYuYW5jaG9yZWRfYXQsImV4cGVyaW1lbnQgc2VhbCBhbmNob3JlZF9hdCIpCiAgICAgICAgaWYgbm90IGFsbCgoc2VsZi5zZWFsX2J1bmRsZV9pZCxzZWxmLnByb3ZpZGVyX2lkLHNlbGYucmVjZWlwdF9pZCxzZWxmLnJlY2VpcHRfcGF5bG9hZF9oYXNoKSk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBzZWFsIHJlY2VpcHQgZmllbGRzIHJlcXVpcmVkIikKICAgICAgICBfaGV4NjQoc2VsZi5zZWFsX2J1bmRsZV9pZCwic2VhbF9idW5kbGVfaWQiKQogICAgICAgIGlmIHNlbGYucmVjZWlwdF9jb21taXRtZW50X2lkICE9IHNlbGYuY29udGVudF9oYXNoOiByYWlzZSBEZW1vbm92RXJyb3IoImV4cGVyaW1lbnQgc2VhbCByZWNlaXB0IGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKS0+c3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7InNlYWxfYnVuZGxlX2lkIjpzZWxmLnNlYWxfYnVuZGxlX2lkLCJwcm92aWRlcl9pZCI6c2VsZi5wcm92aWRlcl9pZCwicmVjZWlwdF9pZCI6c2VsZi5yZWNlaXB0X2lkLCJhbmNob3JlZF9hdCI6c2VsZi5hbmNob3JlZF9hdCwicmVjZWlwdF9wYXlsb2FkX2hhc2giOnNlbGYucmVjZWlwdF9wYXlsb2FkX2hhc2h9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywqKmt3YXJncyktPiJFeHBlcmltZW50U2VhbFJlY2VpcHQiOgogICAgICAgIHBheWxvYWQ9e2s6a3dhcmdzW2tdIGZvciBrIGluICgic2VhbF9idW5kbGVfaWQiLCJwcm92aWRlcl9pZCIsInJlY2VpcHRfaWQiLCJhbmNob3JlZF9hdCIsInJlY2VpcHRfcGF5bG9hZF9oYXNoIil9CiAgICAgICAgcmV0dXJuIGNscyhyZWNlaXB0X2NvbW1pdG1lbnRfaWQ9Y2Fub25pY2FsX2hhc2gocGF5bG9hZCksKiprd2FyZ3Mp\",\"source_sha256\":\"1ae45f3233a0be2e37fa10392b891f0a8a308ecdcbf2305e32e0582131f84a62\"}\nSB043P_SOURCE_LIVE_PROSPECTIVE_META={\"class_names\":[\"ExperimentProvenance\"],\"error\":null,\"exists\":true,\"function_names\":[\"_hash\"],\"lines\":851,\"sha256\":\"f83f48dfeb4dc1382ebf3c77b7ec27deaeac6eec4a5dc097f90600963f0e4e98\"}\nSB043P_FUNC_LIVE_PROSPECTIVE__HASH={\"args\":[\"value\"],\"kwonly\":[],\"name\":\"_hash\",\"source_b64\":\"ZGVmIF9oYXNoKHZhbHVlOiBvYmplY3QpIC0+IHN0cjoKICAgIHJldHVybiBoYXNobGliLnNoYTI1NigKICAgICAgICBqc29uLmR1bXBzKHZhbHVlLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oIiwiLCAiOiIpLCBlbnN1cmVfYXNjaWk9VHJ1ZSkuZW5jb2RlKCkKICAgICkuaGV4ZGlnZXN0KCk=\",\"source_sha256\":\"64852a5a5c1cbe9d7f87333c81d5297577a32765474ef64aaf3848be34668232\"}\nSB043P_CLASS_LIVE_PROSPECTIVE_EXPERIMENTPROVENANCE={\"name\":\"ExperimentProvenance\",\"source_b64\":\"Y2xhc3MgRXhwZXJpbWVudFByb3ZlbmFuY2U6CiAgICBleHBlcmltZW50X2lkOiBzdHIKICAgIGNvbGxlY3Rpb25fc3RhcnRfYXQ6IGRhdGV0aW1lCiAgICBjb2RlX2lkZW50aXR5OiBzdHIKICAgIHBvbGljeV9yZWdpc3RyeV9pZDogc3RyCiAgICBtYXJrZXRfYnVuZGxlX2lkOiBzdHIKICAgIGdlb21ldHJ5X3BvbGljeV9pZDogc3RyCiAgICBkZW1vbm92X2JyYW5jaF9wb2xpY3lfaWQ6IHN0cgogICAgbm90aWZpY2F0aW9uX3BvbGljeV9pZDogc3RyCiAgICBvdXRjb21lX3BvbGljeV9pZDogc3RyCiAgICBleHBlcmltZW50X3ZlcnNpb246IHN0ciA9ICJMSVZFX1BST1NQRUNUSVZFX1YxIgogICAgZmluYWxpdHlfcG9saWN5X2lkOiBzdHIgPSAiIgogICAgcnVudGltZV9tYW5pZmVzdF9pZDogc3RyID0gIiIKCiAgICBkZWYgX2Jhc2VfaGFzaF9wYXlsb2FkKHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgImNvbGxlY3Rpb25fc3RhcnRfYXQiOiBzZWxmLmNvbGxlY3Rpb25fc3RhcnRfYXQuaXNvZm9ybWF0KCksCiAgICAgICAgICAgICJjb2RlX2lkZW50aXR5Ijogc2VsZi5jb2RlX2lkZW50aXR5LAogICAgICAgICAgICAicG9saWN5X3JlZ2lzdHJ5X2lkIjogc2VsZi5wb2xpY3lfcmVnaXN0cnlfaWQsCiAgICAgICAgICAgICJtYXJrZXRfYnVuZGxlX2lkIjogc2VsZi5tYXJrZXRfYnVuZGxlX2lkLAogICAgICAgICAgICAiZ2VvbWV0cnlfcG9saWN5X2lkIjogc2VsZi5nZW9tZXRyeV9wb2xpY3lfaWQsCiAgICAgICAgICAgICJkZW1vbm92X2JyYW5jaF9wb2xpY3lfaWQiOiBzZWxmLmRlbW9ub3ZfYnJhbmNoX3BvbGljeV9pZCwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbl9wb2xpY3lfaWQiOiBzZWxmLm5vdGlmaWNhdGlvbl9wb2xpY3lfaWQsCiAgICAgICAgICAgICJvdXRjb21lX3BvbGljeV9pZCI6IHNlbGYub3V0Y29tZV9wb2xpY3lfaWQsCiAgICAgICAgfQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcGF5bG9hZCA9IHNlbGYuX2Jhc2VfaGFzaF9wYXlsb2FkKCkKICAgICAgICBpZiBzZWxmLmV4cGVyaW1lbnRfdmVyc2lvbiA9PSAiTElWRV9QUk9TUEVDVElWRV9WMSI6CiAgICAgICAgICAgIHJldHVybiBfaGFzaChwYXlsb2FkKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YyIjoKICAgICAgICAgICAgcGF5bG9hZC51cGRhdGUoewogICAgICAgICAgICAgICAgImV4cGVyaW1lbnRfdmVyc2lvbiI6IHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uLAogICAgICAgICAgICAgICAgImZpbmFsaXR5X3BvbGljeV9pZCI6IHNlbGYuZmluYWxpdHlfcG9saWN5X2lkLAogICAgICAgICAgICAgICAgInJ1bnRpbWVfbWFuaWZlc3RfaWQiOiBzZWxmLnJ1bnRpbWVfbWFuaWZlc3RfaWQsCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIHJldHVybiBfaGFzaChwYXlsb2FkKQogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBwcm92ZW5hbmNlIHZlcnNpb24gaW52YWxpZCIpCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBpZiAoCiAgICAgICAgICAgIHNlbGYuY29sbGVjdGlvbl9zdGFydF9hdC50emluZm8gaXMgTm9uZQogICAgICAgICAgICBvciBzZWxmLmNvbGxlY3Rpb25fc3RhcnRfYXQudXRjb2Zmc2V0KCkgaXMgTm9uZQogICAgICAgICk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigKICAgICAgICAgICAgICAgICJleHBlcmltZW50IGNvbGxlY3Rpb24gc3RhcnQgbXVzdCBiZSB0aW1lem9uZS1hd2FyZSIKICAgICAgICAgICAgKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgaWYgc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQgb3Igc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMSBleHBlcmltZW50IHByb3ZlbmFuY2UgY2Fubm90IGJpbmQgVjIgZmluYWxpdHkvcnVudGltZSBpZGVudGl0eSIKICAgICAgICAgICAgICAgICkKICAgICAgICBlbGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YyIjoKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsIHN0cikgb3Igbm90IHNlbGYuZmluYWxpdHlfcG9saWN5X2lkOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMiBleHBlcmltZW50IGZpbmFsaXR5IHBvbGljeSBpZCBpcyByZXF1aXJlZCIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2Uoc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkLCBzdHIpCiAgICAgICAgICAgICAgICBvciBsZW4oc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkKSAhPSA2NAogICAgICAgICAgICAgICAgb3IgYW55KAogICAgICAgICAgICAgICAgICAgIGMgbm90IGluICIwMTIzNDU2Nzg5YWJjZGVmIgogICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHNlbGYucnVudGltZV9tYW5pZmVzdF9pZAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMiBleHBlcmltZW50IHJ1bnRpbWUgbWFuaWZlc3QgaWQgbXVzdCBiZSBsb3dlcmNhc2Ugc2hhMjU2IGhleCIKICAgICAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImV4cGVyaW1lbnQgcHJvdmVuYW5jZSB2ZXJzaW9uIGludmFsaWQiKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgImV4cGVyaW1lbnQgcHJvdmVuYW5jZSBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIgogICAgICAgICAgICApCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgYnVpbGQoY2xzLCAqKmt3YXJncykgLT4gIkV4cGVyaW1lbnRQcm92ZW5hbmNlIjoKICAgICAgICBwYXlsb2FkID0gZGljdChrd2FyZ3MpCiAgICAgICAgdmVyc2lvbiA9IHBheWxvYWQuZ2V0KAogICAgICAgICAgICAiZXhwZXJpbWVudF92ZXJzaW9uIiwKICAgICAgICAgICAgIkxJVkVfUFJPU1BFQ1RJVkVfVjEiLAogICAgICAgICkKICAgICAgICBwYXlsb2FkWyJleHBlcmltZW50X3ZlcnNpb24iXSA9IHZlcnNpb24KICAgICAgICBwYXlsb2FkLnNldGRlZmF1bHQoImZpbmFsaXR5X3BvbGljeV9pZCIsICIiKQogICAgICAgIHBheWxvYWQuc2V0ZGVmYXVsdCgicnVudGltZV9tYW5pZmVzdF9pZCIsICIiKQogICAgICAgIGJhc2UgPSB7CiAgICAgICAgICAgICJjb2xsZWN0aW9uX3N0YXJ0X2F0IjogcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdLmlzb2Zvcm1hdCgpLAogICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IHBheWxvYWRbImNvZGVfaWRlbnRpdHkiXSwKICAgICAgICAgICAgInBvbGljeV9yZWdpc3RyeV9pZCI6IHBheWxvYWRbInBvbGljeV9yZWdpc3RyeV9pZCJdLAogICAgICAgICAgICAibWFya2V0X2J1bmRsZV9pZCI6IHBheWxvYWRbIm1hcmtldF9idW5kbGVfaWQiXSwKICAgICAgICAgICAgImdlb21ldHJ5X3BvbGljeV9pZCI6IHBheWxvYWRbImdlb21ldHJ5X3BvbGljeV9pZCJdLAogICAgICAgICAgICAiZGVtb25vdl9icmFuY2hfcG9saWN5X2lkIjogcGF5bG9hZFsiZGVtb25vdl9icmFuY2hfcG9saWN5X2lkIl0sCiAgICAgICAgICAgICJub3RpZmljYXRpb25fcG9saWN5X2lkIjogcGF5bG9hZFsibm90aWZpY2F0aW9uX3BvbGljeV9pZCJdLAogICAgICAgICAgICAib3V0Y29tZV9wb2xpY3lfaWQiOiBwYXlsb2FkWyJvdXRjb21lX3BvbGljeV9pZCJdLAogICAgICAgIH0KICAgICAgICBpZiB2ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgZWlkID0gX2hhc2goYmFzZSkKICAgICAgICBlbGlmIHZlcnNpb24gPT0gIkxJVkVfUFJPU1BFQ1RJVkVfVjIiOgogICAgICAgICAgICBlaWQgPSBfaGFzaCh7CiAgICAgICAgICAgICAgICAqKmJhc2UsCiAgICAgICAgICAgICAgICAiZXhwZXJpbWVudF92ZXJzaW9uIjogdmVyc2lvbiwKICAgICAgICAgICAgICAgICJmaW5hbGl0eV9wb2xpY3lfaWQiOiBwYXlsb2FkWyJmaW5hbGl0eV9wb2xpY3lfaWQiXSwKICAgICAgICAgICAgICAgICJydW50aW1lX21hbmlmZXN0X2lkIjogcGF5bG9hZFsicnVudGltZV9tYW5pZmVzdF9pZCJdLAogICAgICAgICAgICB9KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBwcm92ZW5hbmNlIHZlcnNpb24gaW52YWxpZCIpCiAgICAgICAgcmV0dXJuIGNscyhleHBlcmltZW50X2lkPWVpZCwgKipwYXlsb2FkKQoKICAgIGRlZiB0b19qc29uKHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcGF5bG9hZCA9IGFzZGljdChzZWxmKQogICAgICAgIHBheWxvYWRbImNvbGxlY3Rpb25fc3RhcnRfYXQiXSA9ICgKICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uX3N0YXJ0X2F0Lmlzb2Zvcm1hdCgpCiAgICAgICAgKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgcGF5bG9hZC5wb3AoImV4cGVyaW1lbnRfdmVyc2lvbiIsIE5vbmUpCiAgICAgICAgICAgIHBheWxvYWQucG9wKCJmaW5hbGl0eV9wb2xpY3lfaWQiLCBOb25lKQogICAgICAgICAgICBwYXlsb2FkLnBvcCgicnVudGltZV9tYW5pZmVzdF9pZCIsIE5vbmUpCiAgICAgICAgcmV0dXJuIHBheWxvYWQKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX2pzb24oY2xzLCBkYXRhOiBkaWN0KSAtPiAiRXhwZXJpbWVudFByb3ZlbmFuY2UiOgogICAgICAgIHBheWxvYWQgPSBkaWN0KGRhdGEpCiAgICAgICAgcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdID0gZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgKICAgICAgICAgICAgcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdCiAgICAgICAgKQogICAgICAgIHBheWxvYWQuc2V0ZGVmYXVsdCgKICAgICAgICAgICAgImV4cGVyaW1lbnRfdmVyc2lvbiIsCiAgICAgICAgICAgICJMSVZFX1BST1NQRUNUSVZFX1YxIiwKICAgICAgICApCiAgICAgICAgcGF5bG9hZC5zZXRkZWZhdWx0KCJmaW5hbGl0eV9wb2xpY3lfaWQiLCAiIikKICAgICAgICBwYXlsb2FkLnNldGRlZmF1bHQoInJ1bnRpbWVfbWFuaWZlc3RfaWQiLCAiIikKICAgICAgICByZXR1cm4gY2xzKCoqcGF5bG9hZCk=\",\"source_sha256\":\"0a13b8a99eb3de83ea43a86ea2b7f1d6d0b0477d3cf7833d2d4f084ccd3b150c\"}\nSB043P_HOLDS=[]\nSB043P_DECISION=ACTIVATION_SEAL_CONTRACT_EVIDENCE_READY\nSB043P_MUTATION_SCOPE=NONE_READ_ONLY\nSIGNALBOT043P_HOLDS=[]\nSIGNALBOT043P_DECISION=ACTIVATION_SEAL_CONTRACT_EVIDENCE_READY\nSIGNALBOT043P_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION\n" + "output": "FORENSIC3_BEGIN=true\nCOMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3\nMODE=read-only\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nPRIOR_FORENSIC2_GATE=PASS\nPRIOR_FORENSIC2_HISTORY_SHA256=ca4539996dc20a97e98687e1c0721f53b03e9c9e0c9e68fc62d4686081053271\nPUBLIC_DNS_PTR={\"PTR\":{\"err\":\"\",\"rc\":0,\"values\":[]},\"chat.gram1.ru\":{\"A\":[\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"git.gram1.ru\":{\"A\":[\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"groups.chat.gram1.ru\":{\"A\":[\"chat.gram1.ru.\",\"185.225.35.6\"],\"err\":\"\",\"rc\":0},\"newfi-staging.gram1.ru\":{\"A\":[],\"err\":\"\",\"rc\":0},\"share.chat.gram1.ru\":{\"A\":[\"chat.gram1.ru.\",\"185.225.35.6\"],\"err\":\"\",\"rc\":0}}\nPUBLIC_CERT_GIT_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\\nnotBefore=Aug 17 02:03:29 2026 GMT\\nnotAfter=Nov 15 02:03:28 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:git-read.gram1.ru, DNS:git.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_GIT_GRAM1_RU={\"err\":\"\",\"headers\":[\"Server: nginx/1.28.3 (Ubuntu)\"],\"http\":\"200\",\"rc\":0}\nPUBLIC_CERT_CHAT_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=chat.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE2\\nserial=05CCB33370771F433AE4E9AD47F2DB574672\\nnotBefore=Aug 17 02:54:43 2026 GMT\\nnotAfter=Nov 15 02:54:42 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_CHAT_GRAM1_RU={\"err\":\"\",\"headers\":[\"Server: nginx/1.28.3 (Ubuntu)\",\"location: /login\"],\"http\":\"302\",\"rc\":0}\nPUBLIC_CERT_NEWFI_STAGING_GRAM1_RU={\"err\":\"\",\"out\":\"subject=CN=chat.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE2\\nserial=05CCB33370771F433AE4E9AD47F2DB574672\\nnotBefore=Aug 17 02:54:43 2026 GMT\\nnotAfter=Nov 15 02:54:42 2026 GMT\\nX509v3 Subject Alternative Name: \\n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru\",\"rc\":0}\nPUBLIC_CURL_NEWFI_STAGING_GRAM1_RU={\"err\":\"curl: (60) SSL: no alternative certificate subject name matches target hostname 'newfi-staging.gram1.ru'\\nMore details here: https://curl.se/docs/sslcerts.html\\n\\ncurl failed to verify the legitimacy of the server and therefore could not\\nestablish a secure connection to it. To learn more about this situation and\\nhow to fix it, please visit the webpage mentioned above.\\n\",\"headers\":[],\"http\":\"000\",\"rc\":60}\nCLUSTER_VM_CT_INVENTORY={\"err\":\"\",\"rc\":0,\"rows\":[{\"name\":\"dns1\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":110},{\"name\":\"dns2\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":111},{\"name\":\"unbound1\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":112},{\"name\":\"unbound2\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"vmid\":113},{\"name\":\"edge-vm\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":130},{\"name\":\"snikket\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":150},{\"name\":\"forum-prod\",\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":160},{\"name\":\"core-apps\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":170},{\"name\":\"monitoring\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":171},{\"name\":\"homelab-ops-worker\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":190},{\"name\":\"newfi-prod\",\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":210},{\"name\":\"newfi-staging\",\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"vmid\":211},{\"name\":\"edge-cold-standby\",\"node\":\"pve02\",\"status\":\"stopped\",\"template\":0,\"type\":\"qemu\",\"vmid\":9130}]}\nPVE01_DEFAULT_ROUTE={\"err\":\"\",\"gateway\":\"[PRIVATE_IP]\",\"line\":\"default via [PRIVATE_IP] dev vmbr0 proto kernel onlink\",\"rc\":0}\nPVE01_GATEWAY_NEIGHBOR={\"err\":\"\",\"out\":\"[PRIVATE_IP] dev vmbr0 lladdr d6:9c:53:00:2c:c3 REACHABLE\",\"rc\":0}\nGATEWAY_BASIC_PORTS={\"22\":{\"open\":false,\"rc\":124},\"443\":{\"open\":false,\"rc\":124},\"80\":{\"open\":false,\"rc\":124},\"8443\":{\"open\":false,\"rc\":124}}\nGATEWAY_SSH_KEYSCAN={\"err\":\"\",\"out\":\"\",\"rc\":1}\nGATEWAY_HTTP_HEAD={\"err\":\"curl: (28) Connection timed out after 5002 milliseconds\\n\",\"out\":\"\",\"rc\":28}\nGATEWAY_HTTPS_HEAD={\"err\":\"curl: (28) Connection timed out after 5001 milliseconds\\n\",\"out\":\"\",\"rc\":28}\nEDGE_PRIVATE_IP_DISCOVERY={\"ips\":[\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\",\"[PRIVATE_IP]\"],\"rc\":0,\"selected\":null}\nEDGE_WEB_LISTENER_OWNERSHIP={\"err\":\"\",\"out\":\"--- SS_WEB ---\\nState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess \\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=16),(\\\"nginx\\\",pid=2180089,fd=16),(\\\"nginx\\\",pid=2180083,fd=16),(\\\"nginx\\\",pid=2180082,fd=16),(\\\"nginx\\\",pid=3096,fd=16))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=15),(\\\"nginx\\\",pid=2180089,fd=15),(\\\"nginx\\\",pid=2180083,fd=15),(\\\"nginx\\\",pid=2180082,fd=15),(\\\"nginx\\\",pid=3096,fd=15))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=14),(\\\"nginx\\\",pid=2180089,fd=14),(\\\"nginx\\\",pid=2180083,fd=14),(\\\"nginx\\\",pid=2180082,fd=14),(\\\"nginx\\\",pid=3096,fd=14))\\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=7),(\\\"nginx\\\",pid=2180089,fd=7),(\\\"nginx\\\",pid=2180083,fd=7),(\\\"nginx\\\",pid=2180082,fd=7),(\\\"nginx\\\",pid=3096,fd=7)) \\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=13),(\\\"nginx\\\",pid=2180089,fd=13),(\\\"nginx\\\",pid=2180083,fd=13),(\\\"nginx\\\",pid=2180082,fd=13),(\\\"nginx\\\",pid=3096,fd=13))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=12),(\\\"nginx\\\",pid=2180089,fd=12),(\\\"nginx\\\",pid=2180083,fd=12),(\\\"nginx\\\",pid=2180082,fd=12),(\\\"nginx\\\",pid=3096,fd=12))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=11),(\\\"nginx\\\",pid=2180089,fd=11),(\\\"nginx\\\",pid=2180083,fd=11),(\\\"nginx\\\",pid=2180082,fd=11),(\\\"nginx\\\",pid=3096,fd=11))\\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=6),(\\\"nginx\\\",pid=2180089,fd=6),(\\\"nginx\\\",pid=2180083,fd=6),(\\\"nginx\\\",pid=2180082,fd=6),(\\\"nginx\\\",pid=3096,fd=6)) \\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=19),(\\\"nginx\\\",pid=2180089,fd=19),(\\\"nginx\\\",pid=2180083,fd=19),(\\\"nginx\\\",pid=2180082,fd=19),(\\\"nginx\\\",pid=3096,fd=19))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=18),(\\\"nginx\\\",pid=2180089,fd=18),(\\\"nginx\\\",pid=2180083,fd=18),(\\\"nginx\\\",pid=2180082,fd=18),(\\\"nginx\\\",pid=3096,fd=18))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=17),(\\\"nginx\\\",pid=2180089,fd=17),(\\\"nginx\\\",pid=2180083,fd=17),(\\\"nginx\\\",pid=2180082,fd=17),(\\\"nginx\\\",pid=3096,fd=17))\\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\\\"nginx\\\",pid=2180110,fd=8),(\\\"nginx\\\",pid=2180089,fd=8),(\\\"nginx\\\",pid=2180083,fd=8),(\\\"nginx\\\",pid=2180082,fd=8),(\\\"nginx\\\",pid=3096,fd=8)) \\nLISTEN 0 511 [::]:443 [::]:* users:((\\\"nginx\\\",pid=2180110,fd=10),(\\\"nginx\\\",pid=2180089,fd=10),(\\\"nginx\\\",pid=2180083,fd=10),(\\\"nginx\\\",pid=2180082,fd=10),(\\\"nginx\\\",pid=3096,fd=10))\\nLISTEN 0 511 [::]:80 [::]:* users:((\\\"nginx\\\",pid=2180110,fd=9),(\\\"nginx\\\",pid=2180089,fd=9),(\\\"nginx\\\",pid=2180083,fd=9),(\\\"nginx\\\",pid=2180082,fd=9),(\\\"nginx\\\",pid=3096,fd=9)) \\n--- PROCESS_TREE_NGINX ---\\n 1920 1674 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\\n 2031 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 2375 -container-ip [PRIVATE_IP] -container-port 2375 -use-listen-fd\\n 2107 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8081 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 2160 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 7422 -container-ip [PRIVATE_IP] -container-port 7422 -use-listen-fd\\n 2180 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8088 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 2201 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 12345 -container-ip [PRIVATE_IP] -container-port 12345 -use-listen-fd\\n 2213 1920 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\\n 2223 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3100 -container-ip [PRIVATE_IP] -container-port 3100 -use-listen-fd\\n 2332 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9999 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\\n 3096 3095 root nginx nginx: master process nginx -e stderr\\n1948449 3096 root nginx nginx: worker process is shutting down\\n2180082 3096 root nginx nginx: worker process\\n2180083 3096 root nginx nginx: worker process\\n2180089 3096 root nginx nginx: worker process\\n2180110 3096 root nginx nginx: worker process\\n2183049 722 root bash /bin/bash -lc echo '--- SS_WEB ---' ss -ltnp | awk 'NR==1 || $4 ~ /:(80|81|443)$/' echo '--- PROCESS_TREE_NGINX ---' ps -eo pid,ppid,user,comm,args | grep -E '[n]ginx|[d]ocker-proxy|[h]aproxy|[c]addy|[t]raefik' echo '--- NPMPLUS_MODE ---' docker inspect npmplus --format '{{.HostConfig.NetworkMode}}' echo '--- NPMPLUS_IMAGE ---' docker inspect npmplus --format '{{.Config.Image}} {{.Image}}' echo '--- NPMPLUS_NGINX_VERSION ---' docker exec npmplus /usr/local/nginx/sbin/nginx -v 2>&1 \\n2631782 1 root sudo sudo bash -lc set -euo pipefail; IDS=\\\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\\\"; B=\\\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\\\"; install -d -m 700 \\\"$B\\\"; python3 -c \\\"import sqlite3; s=sqlite3.connect(\\\\\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\\\\\",uri=True); d=sqlite3.connect(\\\\\\\"$B/database.sqlite.before\\\\\\\"); s.backup(d); d.close(); s.close()\\\"; chmod 600 \\\"$B/database.sqlite.before\\\"; for id in $IDS; do [ ! -e \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" ] || cp -a \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" \\\"$B/$id.conf.before\\\"; done; docker exec npmplus grep -q \\\"is_deleted: 1\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"Delete Nginx Config\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"internalNginx.reload\\\" /app/internal/proxy-host.js; C=\\\"/data${B#/opt/npmplus}\\\"; printf \\\"%s\\\\n\\\" \\\"import internalProxyHost from \\\\\\\"/app/internal/proxy-host.js\\\\\\\";\\\" \\\"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\\\" \\\"const access={can:async()=>({permission_visibility:\\\\\\\"all\\\\\\\"}),token=;\\\" \\\"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\\\\\"DELETED=\\\\\\\"+id+\\\\\\\":\\\\\\\"+ok); }\\\" > \\\"$B/delete-stale.mjs\\\"; chmod 644 \\\"$B/delete-stale.mjs\\\"; docker exec -u 0 npmplus node --check \\\"$C/delete-stale.mjs\\\"; echo \\\"BACKUP=$B\\\"; docker exec -u 0 npmplus node \\\"$C/delete-stale.mjs\\\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\\n2631784 2631782 root bash bash -lc set -euo pipefail; IDS=\\\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\\\"; B=\\\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\\\"; install -d -m 700 \\\"$B\\\"; python3 -c \\\"import sqlite3; s=sqlite3.connect(\\\\\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\\\\\",uri=True); d=sqlite3.connect(\\\\\\\"$B/database.sqlite.before\\\\\\\"); s.backup(d); d.close(); s.close()\\\"; chmod 600 \\\"$B/database.sqlite.before\\\"; for id in $IDS; do [ ! -e \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" ] || cp -a \\\"/opt/npmplus/nginx/proxy_host/$id.conf\\\" \\\"$B/$id.conf.before\\\"; done; docker exec npmplus grep -q \\\"is_deleted: 1\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"Delete Nginx Config\\\" /app/internal/proxy-host.js; docker exec npmplus grep -q \\\"internalNginx.reload\\\" /app/internal/proxy-host.js; C=\\\"/data${B#/opt/npmplus}\\\"; printf \\\"%s\\\\n\\\" \\\"import internalProxyHost from \\\\\\\"/app/internal/proxy-host.js\\\\\\\";\\\" \\\"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\\\" \\\"const access={can:async()=>({permission_visibility:\\\\\\\"all\\\\\\\"}),token=;\\\" \\\"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\\\\\"DELETED=\\\\\\\"+id+\\\\\\\":\\\\\\\"+ok); }\\\" > \\\"$B/delete-stale.mjs\\\"; chmod 644 \\\"$B/delete-stale.mjs\\\"; docker exec -u 0 npmplus node --check \\\"$C/delete-stale.mjs\\\"; echo \\\"BACKUP=$B\\\"; docker exec -u 0 npmplus node \\\"$C/delete-stale.mjs\\\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\\n--- NPMPLUS_MODE ---\\nhost\\n--- NPMPLUS_IMAGE ---\\ndocker.io/zoeyvid/npmplus:2026-06-17-b1 sha256:058637924fae1dbf161d1d78c84b738d86804e9a0ddad66cf7c87cbe33337834\\n--- NPMPLUS_NGINX_VERSION ---\\nnginx version: nginx/1.31.2 (NPMplus)\",\"rc\":0}\nFOCUSED_FRONTEND_REFERENCES={\"err\":\"\",\"out\":\"[{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":951,\\\"text\\\":\\\"URL=https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":1967,\\\"text\\\":\\\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2418,\\\"text\\\":\\\"from=\\\\\\\"[PRIVATE_IP]\\\\\\\",command=\\\\\\\"...\\\\\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2454,\\\"text\\\":\\\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2803,\\\"text\\\":\\\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":2832,\\\"text\\\":\\\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":4810,\\\"text\\\":\\\"- likely frontend/cache;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":5436,\\\"text\\\":\\\"- \\\\u043a\\\\u0442\\\\u043e \\\\u043e\\\\u0442\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0435\\\\u0442 \\\\u0437\\\\u0430 reverse proxy;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":6683,\\\"text\\\":\\\"| Core | Gitea | https://git.gram1.ru | public | Git |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7096,\\\"text\\\":\\\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7161,\\\"text\\\":\\\"| 257 | `### NAT / port forwarding` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7455,\\\"text\\\":\\\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":7540,\\\"text\\\":\\\"- `https://git.gram1.ru`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8263,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8552,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8620,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8631,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8653,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":8702,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9006,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9062,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9305,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9319,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":9870,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10101,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10113,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10629,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":10722,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":11033,\\\"text\\\":\\\"\\\\u0410 \\\\u0441\\\\u0430\\\\u043c\\\\u0430\\\\u044f \\\\u043a\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0447\\\\u043d\\\\u0430\\\\u044f VM130 edge-vm \\\\u043d\\\\u0430\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u0442\\\\u0441\\\\u044f \\\\u043d\\\\u0430 pve03 \\\\u0438 \\\\u0434\\\\u0435\\\\u0440\\\\u0436\\\\u0438\\\\u0442 reverse proxy, monitoring, backup automation \\\\u0438 Docker application host. \\\\u041f\\\\u0440\\\\u0438 \\\\u044d\\\\u0442\\\\u043e\\\\u043c pve03 \\\\u2014 \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u0439 \\\\u043e\\\\u0433\\\\u0440\\\\u0430\\\\u043d\\\\u0438\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0439 \\\\u043f\\\\u043e \\\\u0434\\\\u0438\\\\u0441\\\\u043a\\\\u0443: local-lvm \\\\u0443\\\\u0436\\\\u0435 \\\\u0431\\\\u044b\\\\u043b \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u043c constrained, \\\\u043f\\\\u043e\\\\u0442\\\\u043e\\\\u043c\\\\u0443 \\\\u0447\\\\u0442\\\\u043e VM130 \\\\u0438\\\\u043c\\\\u0435\\\\u0435\\\\u0442 96G OS + 150G media/data, \\\\u0430 pve03 staging \\\\u0434\\\\u043e\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u043b \\\\u0434\\\\u043e 77% \\\\u043f\\\\u0440\\\\u0438 WARN 80%. \\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\\\",\\\"line\\\":11044,\\\"text\\\":\\\"4. \\\\u0415\\\\u0441\\\\u043b\\\\u0438 \\\\u043d\\\\u0435 \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043d\\\\u043e\\\\u0441\\\\u0438\\\\u0442\\\\u044c \\\\u0441\\\\u0435\\\\u0439\\\\u0447\\\\u0430\\\\u0441, \\\\u0442\\\\u043e \\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u043c\\\\u0443\\\\u043c \\\\u0441\\\\u0434\\\\u0435\\\\u043b\\\\u0430\\\\u0442\\\\u044c **cold standby edge-vm** \\\\u043d\\\\u0430 pve01 \\\\u0438\\\\u043b\\\\u0438 pve02: \\\\u0432\\\\u043e\\\\u0441\\\\u0441\\\\u0442\\\\u0430\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f \\\\u0438\\\\u0437 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e backup, \\\\u0432\\\\u044b\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f, \\\\u0441 \\\\u043f\\\\u043e\\\\u043d\\\\u044f\\\\u0442\\\\u043d\\\\u044b\\\\u043c runbook \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u0438\\\\u044f IP/NPMplus/router port forward.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md\\\",\\\"line\\\":22,\\\"text\\\":\\\"| Gitea | https://git.gram1.ru | 185 | 89 | 105 | EVIDENCE_FOUND_REVIEW |\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":315,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":604,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":672,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":683,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":705,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":754,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1058,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1114,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1357,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1371,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":1922,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2153,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2165,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2515,\\\"text\\\":\\\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2561,\\\"text\\\":\\\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2872,\\\"text\\\":\\\"- Primary domain: chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2873,\\\"text\\\":\\\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2902,\\\"text\\\":\\\"- chat.gram1.ru public A is 185.225.35.6; groups.chat.gram1.ru and share.chat.gram1.ru continue through chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2905,\\\"text\\\":\\\"- VM150 Internet default path is via [PRIVATE_IP] and verified public egress is 185.225.35.6.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2906,\\\"text\\\":\\\"- Effective coturn external address uses 185.225.35.6 and no longer advertises 95.84.154.183.\\\"},{\\\"path\\\":\\\"/etc/pve/31_HOMELAB_REFERENCE.md\\\",\\\"line\\\":2912,\\\"text\\\":\\\"- Public DNS observed at release: 185.225.35.6; DNS was not changed during forum cutover.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":1831,\\\"text\\\":\\\"URL=https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":2847,\\\"text\\\":\\\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3298,\\\"text\\\":\\\"from=\\\\\\\"[PRIVATE_IP]\\\\\\\",command=\\\\\\\"...\\\\\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3334,\\\"text\\\":\\\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3683,\\\"text\\\":\\\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":3712,\\\"text\\\":\\\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":5690,\\\"text\\\":\\\"- likely frontend/cache;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":6316,\\\"text\\\":\\\"- \\\\u043a\\\\u0442\\\\u043e \\\\u043e\\\\u0442\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0435\\\\u0442 \\\\u0437\\\\u0430 reverse proxy;\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":7563,\\\"text\\\":\\\"| Core | Gitea | https://git.gram1.ru | public | Git |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":7976,\\\"text\\\":\\\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8041,\\\"text\\\":\\\"| 257 | `### NAT / port forwarding` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8335,\\\"text\\\":\\\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":8420,\\\"text\\\":\\\"- `https://git.gram1.ru`\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9143,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9432,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9500,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9511,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9533,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9582,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9886,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":9942,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10185,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10199,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10750,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10981,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":10993,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11509,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11602,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11913,\\\"text\\\":\\\"\\\\u0410 \\\\u0441\\\\u0430\\\\u043c\\\\u0430\\\\u044f \\\\u043a\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0447\\\\u043d\\\\u0430\\\\u044f VM130 edge-vm \\\\u043d\\\\u0430\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u0442\\\\u0441\\\\u044f \\\\u043d\\\\u0430 pve03 \\\\u0438 \\\\u0434\\\\u0435\\\\u0440\\\\u0436\\\\u0438\\\\u0442 reverse proxy, monitoring, backup automation \\\\u0438 Docker application host. \\\\u041f\\\\u0440\\\\u0438 \\\\u044d\\\\u0442\\\\u043e\\\\u043c pve03 \\\\u2014 \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u0439 \\\\u043e\\\\u0433\\\\u0440\\\\u0430\\\\u043d\\\\u0438\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0439 \\\\u043f\\\\u043e \\\\u0434\\\\u0438\\\\u0441\\\\u043a\\\\u0443: local-lvm \\\\u0443\\\\u0436\\\\u0435 \\\\u0431\\\\u044b\\\\u043b \\\\u0441\\\\u0430\\\\u043c\\\\u044b\\\\u043c constrained, \\\\u043f\\\\u043e\\\\u0442\\\\u043e\\\\u043c\\\\u0443 \\\\u0447\\\\u0442\\\\u043e VM130 \\\\u0438\\\\u043c\\\\u0435\\\\u0435\\\\u0442 96G OS + 150G media/data, \\\\u0430 pve03 staging \\\\u0434\\\\u043e\\\\u0445\\\\u043e\\\\u0434\\\\u0438\\\\u043b \\\\u0434\\\\u043e 77% \\\\u043f\\\\u0440\\\\u0438 WARN 80%. \\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\\\",\\\"line\\\":11924,\\\"text\\\":\\\"4. \\\\u0415\\\\u0441\\\\u043b\\\\u0438 \\\\u043d\\\\u0435 \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043d\\\\u043e\\\\u0441\\\\u0438\\\\u0442\\\\u044c \\\\u0441\\\\u0435\\\\u0439\\\\u0447\\\\u0430\\\\u0441, \\\\u0442\\\\u043e \\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u043c\\\\u0443\\\\u043c \\\\u0441\\\\u0434\\\\u0435\\\\u043b\\\\u0430\\\\u0442\\\\u044c **cold standby edge-vm** \\\\u043d\\\\u0430 pve01 \\\\u0438\\\\u043b\\\\u0438 pve02: \\\\u0432\\\\u043e\\\\u0441\\\\u0441\\\\u0442\\\\u0430\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f \\\\u0438\\\\u0437 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e backup, \\\\u0432\\\\u044b\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u043d\\\\u0430\\\\u044f, \\\\u0441 \\\\u043f\\\\u043e\\\\u043d\\\\u044f\\\\u0442\\\\u043d\\\\u044b\\\\u043c runbook \\\\u043f\\\\u0435\\\\u0440\\\\u0435\\\\u043a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u043d\\\\u0438\\\\u044f IP/NPMplus/router port forward.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":211,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":304,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":1730,\\\"text\\\":\\\"- public_dns_root: 185.225.35.6\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":1731,\\\"text\\\":\\\"- public_dns_www: 185.225.35.6\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":2603,\\\"text\\\":\\\"2026-09-03 KOW_EXTERNAL_PUBLIC_FRONT_SERVER_VERSION_DISCLOSURE OPEN public_response_Server_nginx_1_28_3_Ubuntu direct_NPMplus_Server_absent identify_external_reverse_proxy_before_mutation\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3035,\\\"text\\\":\\\"CERT38_NARROW_MIGRATION_20260904 | CLOSED_COMMITTED_PASS | Cert38 meta/runtime credential migrated to verified narrow gram1 token; stock npm-38 renewal dry-run succeeded for chat.gram1.ru, groups.chat.gram1.ru and share.chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3100,\\\"text\\\":\\\"EDGE01_SSH_HOSTKEY_UNKNOWN_20260904 | OPEN | Strict SSH to 185.225.35.6 stopped before authentication because no pinned ED25519 host key exists for the IP; no remote state changed and no unverified key was accepted.\\\"},{\\\"path\\\":\\\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":3112,\\\"text\\\":\\\"PUBLIC_SERVER_VERSION_HARDENING_RUNTIME_MISMATCH_20260904 | CLOSED_PARTIAL_BLOCKED_EXTERNAL_INGRESS | VM130 NPMplus now has server_tokens off on all 13 public manual vhosts and direct-edge responses expose no Server header; public nginx/1.28.3 (Ubuntu) is emitted by EDGE01 185.225.35.6. kingofwolk.ru proves EDGE01 supports per-vhost server_tokens off, but external mutation is blocked until an authorized EDGE01 management credential is restored.\\\"},{\\\"path\\\":\\\"/root/finish_skladchik_cr_2026_0010_v2.sh\\\",\\\"line\\\":20,\\\"text\\\":\\\"API=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\"},{\\\"path\\\":\\\"/root/774c_dockge_agent_capability_inspect.sh\\\",\\\"line\\\":70,\\\"text\\\":\\\" for f in /app/package.json /app/backend/package.json /app/frontend/package.json; do\\\"},{\\\"path\\\":\\\"/root/771h_crowdsec_capi_register_correct_sequence.sh\\\",\\\"line\\\":453,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\\\",\\\"line\\\":64,\\\"text\\\":\\\"export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\\\",\\\"line\\\":314,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771w_pve01_netbird_ssh_egress_crowdsec_capi.sh\\\",\\\"line\\\":586,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/HOMELAB_READONLY_SERVICE_CENSUS_20260816T065015Z.txt\\\",\\\"line\\\":4306,\\\"text\\\":\\\" \\\\\\\"out-data\\\\\\\" : \\\\\\\"GUEST_BEGIN|host=forum-prod|utc=2026-08-16T06:50:56Z\\\\\\\\nPRETTY_NAME=\\\\\\\\\\\\\\\"Debian GNU/Linux 12 (bookworm)\\\\\\\\\\\\\\\"\\\\\\\\nVERSION_ID=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\\\\\nID=debian\\\\\\\\n\\\\\\\\n--- GUEST_DF ---\\\\\\\\nFilesystem Type Size Used Avail Use% Mounted on\\\\\\\\nudev devtmpfs 3.9G 0 3.9G 0% /dev\\\\\\\\ntmpfs tmpfs 796M 512K 795M 1% /run\\\\\\\\n/dev/sda1 ext4 197G 15G 175G 8% /\\\\\\\\ntmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm\\\\\\\\ntmpfs tmpfs 5.0M 0 5.0M 0% /run/lock\\\\\\\\n/dev/sda15 vfat 124M 12M 112M 10% /boot/efi\\\\\\\\n\\\\\\\\n--- GUEST_FAILED_UNITS ---\\\\\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\\\\\n0 loaded units listed.\\\\\\\\n\\\\\\\\n--- GUEST_RUNNING_SERVICES ---\\\\\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\\\\\nchrony.service loaded active running chrony, an NTP client/server\\\\\\\\ncron.service loaded active running Regular background program processing daemon\\\\\\\\ndbus.service loaded active running D-Bus System Message Bus\\\\\\\\ngetty@tty1.service loaded active running Getty on tty1\\\\\\\\nmariadb.service loaded active running MariaDB 10.11.18 database server\\\\\\\\nnginx.service loaded active running A high \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1665,\\\"text\\\":\\\"DOMAIN = git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1668,\\\"text\\\":\\\"ROOT_URL = https://git.gram1.ru/\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1705,\\\"text\\\":\\\"REVERSE_PROXY_LIMIT = 1\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1706,\\\"text\\\":\\\"REVERSE_PROXY_TRUSTED_PROXIES = *\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1902,\\\"text\\\":\\\"# Load frontend themes from the themes folder\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":1903,\\\"text\\\":\\\"frontend:\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":2955,\\\"text\\\":\\\"9 [\\\\\\\"git.gram1.ru\\\\\\\"] 1 custom 0 none 0 0 SAMEORIGIN 1 \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":3524,\\\"text\\\":\\\"# git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":3536,\\\"text\\\":\\\" server_name git.gram1.ru;\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":10159,\\\"text\\\":\\\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":10165,\\\"text\\\":\\\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23215,\\\"text\\\":\\\"git.gram1.ru,[PRIVATE_IP],optional-empty,http://127.0.0.1:3002,LAN-only,cloudflare-dns-challenge\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23264,\\\"text\\\":\\\"| Gitea | 127.0.0.1:3002 | https://git.gram1.ru |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23304,\\\"text\\\":\\\"Homelab gram1.ru \\\\u043f\\\\u043e\\\\u0441\\\\u0442\\\\u0440\\\\u043e\\\\u0435\\\\u043d \\\\u0432\\\\u043e\\\\u043a\\\\u0440\\\\u0443\\\\u0433 Proxmox-\\\\u043a\\\\u043b\\\\u0430\\\\u0441\\\\u0442\\\\u0435\\\\u0440\\\\u0430, \\\\u0432\\\\u043d\\\\u0443\\\\u0442\\\\u0440\\\\u0435\\\\u043d\\\\u043d\\\\u0435\\\\u0433\\\\u043e DNS, NPMplus reverse proxy, \\\\u043c\\\\u043e\\\\u043d\\\\u0438\\\\u0442\\\\u043e\\\\u0440\\\\u0438\\\\u043d\\\\u0433\\\\u0430, backup \\\\u0438 \\\\u043d\\\\u0430\\\\u0431\\\\u043e\\\\u0440\\\\u0430 self-hosted \\\\u0441\\\\u0435\\\\u0440\\\\u0432\\\\u0438\\\\u0441\\\\u043e\\\\u0432.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23647,\\\"text\\\":\\\"- edge-vm hosting reverse proxy and most application containers.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23719,\\\"text\\\":\\\"- Purpose: reverse proxy and TLS termination.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":23782,\\\"text\\\":\\\"- Domain: https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24054,\\\"text\\\":\\\"- Remote: https://git.gram1.ru/homelab-admin/homelab-configs\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24193,\\\"text\\\":\\\"- https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24406,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | yes | LAN only | git.gram1.ru | enabled |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24438,\\\"text\\\":\\\"| git.gram1.ru | letsencrypt | 2026-09-13 17:36:55 |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24465,\\\"text\\\":\\\"| `git.gram1.ru` | `http://127.0.0.1:3002` | cert id 29 | yes | Gitea |\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24708,\\\"text\\\":\\\"5. Recover reverse proxy/Kuma/Auth/Gitea/Vaultwarden and service configs.\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":24721,\\\"text\\\":\\\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":25074,\\\"text\\\":\\\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\\\",\\\"line\\\":25411,\\\"text\\\":\\\"- reverse proxy upstream;\\\"},{\\\"path\\\":\\\"/root/771_crowdsec_capi_ipv4_restore_or_fallback.sh\\\",\\\"line\\\":326,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":211,\\\"text\\\":\\\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\\\"},{\\\"path\\\":\\\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\\\",\\\"line\\\":304,\\\"text\\\":\\\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\\\"},{\\\"path\\\":\\\"/root/772b_homepage_russian_normalize_apply.sh\\\",\\\"line\\\":89,\\\"text\\\":\\\" \\\\\\\"NPMplus\\\\\\\": \\\\\\\"\\\\u0410\\\\u0434\\\\u043c\\\\u0438\\\\u043d\\\\u0438\\\\u0441\\\\u0442\\\\u0440\\\\u0438\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043d\\\\u0438\\\\u0435 reverse proxy.\\\\\\\",\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":1316,\\\"text\\\":\\\"IP_ROUTE|185.225.35.6 via [PRIVATE_IP] dev eth0 src [PRIVATE_IP] \\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2390,\\\"text\\\":\\\"NPM_ROW|proxy_host|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"git.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"enabled\\\\\\\":1,\\\\\\\"forward_host\\\\\\\":\\\\\\\"127.0.0.1\\\\\\\",\\\\\\\"forward_port\\\\\\\":3002,\\\\\\\"forward_scheme\\\\\\\":\\\\\\\"http\\\\\\\",\\\\\\\"id\\\\\\\":9}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2433,\\\"text\\\":\\\"NPM_ROW|proxy_host|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"groups.chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"share.chat.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"enabled\\\\\\\":1,\\\\\\\"forward_host\\\\\\\":\\\\\\\"[PRIVATE_IP]\\\\\\\",\\\\\\\"forward_port\\\\\\\":443,\\\\\\\"forward_scheme\\\\\\\":\\\\\\\"https\\\\\\\",\\\\\\\"id\\\\\\\":61}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2440,\\\"text\\\":\\\"NPM_ROW|certificate|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"git.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"id\\\\\\\":29,\\\\\\\"nice_name\\\\\\\":\\\\\\\"git.gram1.ru\\\\\\\",\\\\\\\"provider\\\\\\\":\\\\\\\"letsencrypt\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2445,\\\"text\\\":\\\"NPM_ROW|certificate|{\\\\\\\"domain_names\\\\\\\":\\\\\\\"[\\\\\\\\\\\\\\\"chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"groups.chat.gram1.ru\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"share.chat.gram1.ru\\\\\\\\\\\\\\\"]\\\\\\\",\\\\\\\"id\\\\\\\":38,\\\\\\\"nice_name\\\\\\\":\\\\\\\"chat.gram1.ru, groups.chat.gram1.ru, share.chat.gram1.ru\\\\\\\",\\\\\\\"provider\\\\\\\":\\\\\\\"letsencrypt\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2456,\\\"text\\\":\\\"DOMAIN|chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2464,\\\"text\\\":\\\"DOMAIN|git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2468,\\\"text\\\":\\\"DOMAIN|groups.chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2495,\\\"text\\\":\\\"DOMAIN|share.chat.gram1.ru\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2607,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"302|[PRIVATE_IP]|https://chat.gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2610,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"codevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2615,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"dsmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2617,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"gamevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2618,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"git-read.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2619,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"git.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|[PRIVATE_IP]|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2623,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2624,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2625,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hapusya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2626,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hbarhub.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2627,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"hkmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2635,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"kingofwolk.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2645,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"newfi.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2646,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"newfilya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2656,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\"10\\\\\\\",\\\\\\\"mail.pvepro.ru.\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"pvepro.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://pvepro.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2659,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"[PRIVATE_IP]\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"share.chat.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2661,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"taftauto.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2666,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.codevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://codevipe.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2667,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.dsmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://dsmods.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2668,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.gamevipe.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://gamevipe.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2669,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[\\\\\\\";;\\\\\\\",\\\\\\\"communications\\\\\\\",\\\\\\\"error\\\\\\\",\\\\\\\"to\\\\\\\",\\\\\\\"100.100.131.41#53:\\\\\\\",\\\\\\\"timed\\\\\\\",\\\\\\\"out\\\\\\\",\\\\\\\";;\\\\\\\",\\\\\\\"no\\\\\\\",\\\\\\\"servers\\\\\\\",\\\\\\\"could\\\\\\\",\\\\\\\"be\\\\\\\",\\\\\\\"reached\\\\\\\"],\\\\\\\"domain\\\\\\\":\\\\\\\"www.gram1.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://www.gram1.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2670,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hapusya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2671,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hbarhub.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2672,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.hkmods.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://hkmods.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2673,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.kingofwolk.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2674,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.newfi.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2675,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.newfilya.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2676,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.pvepro.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"303|185.225.35.6|https://www.pvepro.ru/login\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2677,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.taftauto.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2678,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"www.zakrutim.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"301|185.225.35.6|https://zakrutim.ru/\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\\\",\\\"line\\\":2679,\\\"text\\\":\\\"DOMAIN_STATE|{\\\\\\\"A\\\\\\\":[\\\\\\\"185.225.35.6\\\\\\\"],\\\\\\\"AAAA\\\\\\\":[],\\\\\\\"MX\\\\\\\":[],\\\\\\\"domain\\\\\\\":\\\\\\\"zakrutim.ru\\\\\\\",\\\\\\\"https\\\\\\\":\\\\\\\"200|185.225.35.6|\\\\\\\"}\\\"},{\\\"path\\\":\\\"/root/diag-pve03-dns2-20260615T091114Z.txt\\\",\\\"line\\\":261,\\\"text\\\":\\\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\\\"},{\\\"path\\\":\\\"/root/diag-pve03-dns2-20260615T091114Z.txt\\\",\\\"line\\\":263,\\\"text\\\":\\\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\\\"},{\\\"path\\\":\\\"/root/771x_crowdsec_capi_mtu_hardfix.sh\\\",\\\"line\\\":542,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771f_crowdsec_capi_godebug_mss_fix.sh\\\",\\\"line\\\":344,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771l_crowdsec_capi_netbird_vps_egress.sh\\\",\\\"line\\\":695,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\\\",\\\"line\\\":154,\\\"text\\\":\\\"--- git.gram1.ru ---\\\"},{\\\"path\\\":\\\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\\\",\\\"line\\\":155,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/767_deep_tail_and_regression_audit.sh\\\",\\\"line\\\":40,\\\"text\\\":\\\" echo \\\\\\\"1 reverse_proxy_upstream_and_headers\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/767_deep_tail_and_regression_audit.sh\\\",\\\"line\\\":70,\\\"text\\\":\\\" auth.gram1.ru photos.gram1.ru homeassistant.vpn.gram1.ru vault.gram1.ru git.gram1.ru paper.gram1.ru \\\\\\\\\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\\\",\\\"line\\\":15,\\\"text\\\":\\\"GITEA_HOST=\\\\\\\"${AUDIT_GITEA_HOST:-git.gram1.ru}\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\\\",\\\"line\\\":16,\\\"text\\\":\\\"GITEA_REPO=\\\\\\\"${AUDIT_GITEA_REPO:-https://git.gram1.ru/homelab-admin/homelab-ops.git}\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/homelab-clean-machine-bootstrap-rehearsal-v1.sh\\\",\\\"line\\\":92,\\\"text\\\":\\\"export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":101,\\\"text\\\":\\\"--- git.gram1.ru ---\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":102,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1479,\\\"text\\\":\\\" - domain: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1545,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1546,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1739,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":1740,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2028,\\\"text\\\":\\\" - domain: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2091,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2092,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2265,\\\"text\\\":\\\"### resolve git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":2266,\\\"text\\\":\\\"95.84.154.183 STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3358,\\\"text\\\":\\\" GITEA__server__DOMAIN: git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3359,\\\"text\\\":\\\" GITEA__server__ROOT_URL: https://git.gram1.ru/\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3668,\\\"text\\\":\\\"9 [\\\\\\\"git.gram1.ru\\\\\\\"] http 127.0.0.1 3002 29 1 0 0 1 1 0 0 1 \\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3718,\\\"text\\\":\\\"29 git.gram1.ru [\\\\\\\"git.gram1.ru\\\\\\\"] letsencrypt 2026-09-13 17:36:55\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3855,\\\"text\\\":\\\" href: https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":3910,\\\"text\\\":\\\" description: Reverse proxy admin\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5196,\\\"text\\\":\\\"### DNS git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5197,\\\"text\\\":\\\"[PRIVATE_IP] STREAM git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\\\",\\\"line\\\":5322,\\\"text\\\":\\\"https://git.gram1.ru/ => 200\\\"},{\\\"path\\\":\\\"/root/CR0085_IMPLEMENTATION_INPUT_20260819.txt\\\",\\\"line\\\":1358,\\\"text\\\":\\\" \\\\\\\"out-data\\\\\\\" : \\\\\\\"UNIT_BEGIN\\\\\\\\n# /etc/systemd/system/homelab-git-read.service\\\\\\\\n[Unit]\\\\\\\\nDescription=Read-only Gitea facade for ChatGPT\\\\\\\\nAfter=network-online.target\\\\\\\\nWants=network-online.target\\\\\\\\n\\\\\\\\n[Service]\\\\\\\\nType=simple\\\\\\\\nUser=gitread\\\\\\\\nGroup=gitread\\\\\\\\nExecStart=/usr/bin/python3 /usr/local/libexec/homelab-git-read\\\\\\\\nRestart=on-failure\\\\\\\\nRestartSec=2\\\\\\\\nNoNewPrivileges=true\\\\\\\\nPrivateTmp=true\\\\\\\\nPrivateDevices=true\\\\\\\\nProtectSystem=strict\\\\\\\\nProtectHome=true\\\\\\\\nProtectKernelTunables=true\\\\\\\\nProtectKernelModules=true\\\\\\\\nProtectControlGroups=true\\\\\\\\nRestrictAddressFamilies=AF_INET AF_INET6\\\\\\\\nLockPersonality=true\\\\\\\\nMemoryDenyWriteExecute=true\\\\\\\\n\\\\\\\\n[Install]\\\\\\\\nWantedBy=multi-user.target\\\\\\\\nUNIT_END\\\\\\\\nSOURCE_BEGIN\\\\\\\\nd6110a75f789e56231196c314046263785a795ce3d220de9272777a718bca382 /usr/local/libexec/homelab-git-read\\\\\\\\n#!/usr/bin/env python3\\\\\\\\nfrom __future__ import annotations\\\\\\\\nimport base64, json, os, re\\\\\\\\nfrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServer\\\\\\\\nfrom urllib.parse import parse_qs, quote, urlparse\\\\\\\\nfrom urllib.request import Request, urlopen\\\\\\\\nfrom urllib.error import HTTPError, URLError\\\\\\\\n\\\\\\\\nHOST=\\\\\\\\\\\\\\\"0.0.0.0\\\\\\\\\\\\\\\"\\\\\\\\nPORT=8787\\\\\\\\nAPI=\\\\\\\\\\\\\\\"https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\\\\\\\\\\\\\"\\\\\\\\nTOKEN_FILE=\\\\\\\\\\\"},{\\\"path\\\":\\\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\\\",\\\"line\\\":228,\\\"text\\\":\\\" export DEBIAN_FRONTEND=noninteractive\\\"},{\\\"path\\\":\\\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\\\",\\\"line\\\":567,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771k_fix_warp_register_or_clean.sh\\\",\\\"line\\\":569,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\\\",\\\"line\\\":24,\\\"text\\\":\\\"GITEA_REPO = \\\\\\\"https://git.gram1.ru/homelab-admin/homelab-ops.git\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\\\",\\\"line\\\":25,\\\"text\\\":\\\"GITEA_HOST = \\\\\\\"git.gram1.ru\\\\\\\"\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":257,\\\"text\\\":\\\"### NAT / port forwarding\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":546,\\\"text\\\":\\\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":614,\\\"text\\\":\\\"- git.gram1.ru -> [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":625,\\\"text\\\":\\\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":647,\\\"text\\\":\\\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":696,\\\"text\\\":\\\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1000,\\\"text\\\":\\\" - https://git.gram1.ru\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1056,\\\"text\\\":\\\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1299,\\\"text\\\":\\\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1313,\\\"text\\\":\\\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":1864,\\\"text\\\":\\\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2095,\\\"text\\\":\\\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2107,\\\"text\\\":\\\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2457,\\\"text\\\":\\\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2503,\\\"text\\\":\\\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2814,\\\"text\\\":\\\"- Primary domain: chat.gram1.ru.\\\"},{\\\"path\\\":\\\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\\\",\\\"line\\\":2815,\\\"text\\\":\\\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\\\"},{\\\"path\\\":\\\"/root/hread-06.py\\\",\\\"line\\\":108,\\\"text\\\":\\\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\\\"},{\\\"path\\\":\\\"/root/771e_abort_cleanup_verify_stable.sh\\\",\\\"line\\\":100,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/hread-04.py\\\",\\\"line\\\":104,\\\"text\\\":\\\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\\\"},{\\\"path\\\":\\\"/root/771s_vps_identity_repair_netbird_capi.sh\\\",\\\"line\\\":704,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/771q_netbird_public_vps_repair_then_capi.sh\\\",\\\"line\\\":594,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\\\"},{\\\"path\\\":\\\"/root/build_full_8020_demonov_handoff.sh\\\",\\\"line\\\":351,\\\"text\\\":\\\"https://git.gram1.ru/homelab-admin/8020-demonov-shadow-bot.git\\\"},{\\\"path\\\":\\\"/root/771ae_crowdsec_capi_soak_final.sh\\\",\\\"line\\\":105,\\\"text\\\":\\\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.r...\nSSH_CONFIG_REFERENCES=[{\"line\":\"# users, and the values can be changed in per-user configuration files\",\"path\":\"/etc/ssh/ssh_config\"},{\"line\":\"Host *\",\"path\":\"/etc/ssh/ssh_config\"},{\"line\":\"# ProxyCommand ssh -q -W %h:%p gateway.example.com\",\"path\":\"/etc/ssh/ssh_config\"}]\nFINAL_DECISION=FRONTEND_FORENSIC3_COMPLETE_NO_MUTATION\nFORENSIC3_END=true\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 3f8cc573..a73d504e 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SIGNALBOT-260908-ACTIVATION-SEAL-PREFLIGHT-043PREP +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=signalbot-cr0116-activation-seal-preflight +COMPONENT=newfi-staging-upstream-tls-frontend-forensic-readonly REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=b6458dbcbdaae8e92984de0a54cac30759294bf749cad7066ee510ddd05dd0e4 +COMMAND_SHA256=45b9f9814c0bff698962bcdd4c06d06953e5ec76ec01c8f56e680c51218c4047 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,38 +24,40 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=ff6caa66bc4dee183f7ac7f97989c066bc9b3e81c21f6294f399e6b0dce166f2 -SANITIZED_OUTPUT_SHA256=ff6caa66bc4dee183f7ac7f97989c066bc9b3e81c21f6294f399e6b0dce166f2 +RAW_EVIDENCE_SHA256=1997b836a531166d14298c77a514de124631aa8c239a2ef9b74202fb2bf9a4ff +SANITIZED_OUTPUT_SHA256=24bb5f3b58f9b3919ef16ca69845f204063a88ea8ab583d4e12ed0445d64f801 OUTPUT_BEGIN +FORENSIC3_BEGIN=true +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-FRONTEND-FORENSIC3 +MODE=read-only +MUTATIONS_PERFORMED=NO ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 REFERENCE_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -SB043P_RUNTIME_PRESTATE={"active_env":{"APP_IMAGE":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","CODE_IDENTITY":"e32760c69a4311728db9066ee8bf2bf66b1e5a70","COLLECTION_START_AT":"2026-09-07T00:00:00+00:00","EXPERIMENT_ID":"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338","RUNTIME_MANIFEST_ID":"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a"},"new_image":"8020-demonov-shadow:76e1f58baa544a0e208bba317f0150e5b6d74dbd","new_image_id":"sha256:341f71a906c91d3fa9c1d50bd89df2a849dfb0b168bb4551efb444bf61c4ab99","services":[{"container_id":"a546a70c3e8c263d9b590cd78ee206bcda0cfcdb6662327e8415ca0e29ad1501","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","image_id":"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736","restart_count":13,"running":true,"service":"collector","started_at":"2026-09-08T05:01:08.70385245Z"},{"container_id":"d8023f4cbf91f9382e39eec0436c9cebc7665535b42b950e95408c03ff9bf30d","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","image_id":"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736","restart_count":0,"running":true,"service":"relay","started_at":"2026-09-06T18:48:20.603414848Z"},{"container_id":"1feeca2d9428cd5a277c026bef34534db307657dcdcd63aff98ea66e44f8b9c5","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","image_id":"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736","restart_count":0,"running":true,"service":"shadow","started_at":"2026-09-06T18:48:20.768190553Z"},{"container_id":"889be41d2cee9d327811da78388f834ba6eafe4c0eeae456867ed0df76832d01","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","image_id":"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736","restart_count":0,"running":true,"service":"worker","started_at":"2026-09-06T18:48:20.586788319Z"}],"stage_path":"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5","stage_result_sha256":"8ba641e823379a97f52fb90d9c89b6000f0c375aaa1db856ad133ec88516ab70"} -SB043P_OLD_MANIFEST={"bytes":584,"exists":true,"object":{"application_image_id":"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736","base_image_digest":"sha256:881d80734ee05dca6f7f42dcb080975652a53c7eda9ba1f03bb8da31aa6a6ec2","code_identity":"e32760c69a4311728db9066ee8bf2bf66b1e5a70","compose_hash":"6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061","finality_policy_id":"BITFINEX_SEQ_ALL_D1_V1","package_identity":"637acba19fb29c98408a8031dc9265a31dc36551c666fcf0b287e8af83d2b893","runtime_manifest_id":"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a"},"sha256":"388a610997fad0071b9140a44e88edff60a3e7ee3486faeaca769c0026246c8e"} -SB043P_OLD_EXPERIMENT={"bytes":841,"exists":true,"object":{"code_identity":"e32760c69a4311728db9066ee8bf2bf66b1e5a70","collection_start_at":"2026-09-07T00:00:00+00:00","demonov_branch_policy_id":"ALL_FROZEN_PROFILES_ALL_NODES_RESEARCH_V1","experiment_id":"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338","experiment_version":"LIVE_PROSPECTIVE_V2","finality_policy_id":"BITFINEX_SEQ_ALL_D1_V1","geometry_policy_id":"RESEARCH_RECONSTRUCTION_8020_V1","market_bundle_id":"78dbbebab22f49bfc4866b40e2362886b1441790d8a73a005a4eb09a5d2c64ae","notification_policy_id":"SIGNIFICANT_STATE_CHANGE_EMAIL_V1","outcome_policy_id":"DIRECTIONAL_CLOSE_AFTER_7_D1_BARS_V1","policy_registry_id":"055d0b052d394f1e08176b035617fbdd96f04fff0cdfb195c2d736fd66e6ad37","runtime_manifest_id":"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a"},"sha256":"827dc4fb5ace8a25a0bd80d05450eaa758bd39d1d09485d3d428dd20ad9325aa"} -SB043P_SOURCE_RUNTIME_MANIFEST_META={"class_names":["RuntimeDeploymentManifestV1"],"error":null,"exists":true,"function_names":["verify_runtime_manifest"],"lines":123,"sha256":"1064cfb74303fdc8e0bf50bae95b1e755556a5b1dfc28b2b062341becaba08f2"} -SB043P_FUNC_RUNTIME_MANIFEST_VERIFY_RUNTIME_MANIFEST={"args":["manifest"],"kwonly":["expected_code_identity","actual_image_id","actual_package_identity"],"name":"verify_runtime_manifest","source_b64":"ZGVmIHZlcmlmeV9ydW50aW1lX21hbmlmZXN0KAogICAgbWFuaWZlc3Q6IFJ1bnRpbWVEZXBsb3ltZW50TWFuaWZlc3RWMSwKICAgICosCiAgICBleHBlY3RlZF9jb2RlX2lkZW50aXR5OiBzdHIsCiAgICBhY3R1YWxfaW1hZ2VfaWQ6IHN0ciwKICAgIGFjdHVhbF9wYWNrYWdlX2lkZW50aXR5OiBzdHIsCikgLT4gTm9uZToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG1hbmlmZXN0LCBSdW50aW1lRGVwbG95bWVudE1hbmlmZXN0VjEpOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigicnVudGltZSBtYW5pZmVzdCByZXF1aXJlZCIpCiAgICBtYW5pZmVzdC5fX3Bvc3RfaW5pdF9fKCkKICAgIGlmIG1hbmlmZXN0LmNvZGVfaWRlbnRpdHkgIT0gZXhwZWN0ZWRfY29kZV9pZGVudGl0eToKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInJ1bnRpbWUgbWFuaWZlc3QgY29kZSBpZGVudGl0eSBtaXNtYXRjaCIpCiAgICBpZiBtYW5pZmVzdC5hcHBsaWNhdGlvbl9pbWFnZV9pZCAhPSBhY3R1YWxfaW1hZ2VfaWQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIG1hbmlmZXN0IGFwcGxpY2F0aW9uIGltYWdlIG1pc21hdGNoIikKICAgIGlmIG1hbmlmZXN0LnBhY2thZ2VfaWRlbnRpdHkgIT0gYWN0dWFsX3BhY2thZ2VfaWRlbnRpdHk6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIG1hbmlmZXN0IHBhY2thZ2UgaWRlbnRpdHkgbWlzbWF0Y2giKQ==","source_sha256":"eee05b568167a968fc86666c58cf4bea3b4c99cf57474e70264b2574418d325d"} -SB043P_CLASS_RUNTIME_MANIFEST_RUNTIMEDEPLOYMENTMANIFESTV1={"name":"RuntimeDeploymentManifestV1","source_b64":"Y2xhc3MgUnVudGltZURlcGxveW1lbnRNYW5pZmVzdFYxOgogICAgcnVudGltZV9tYW5pZmVzdF9pZDogc3RyCiAgICBjb2RlX2lkZW50aXR5OiBzdHIKICAgIHBhY2thZ2VfaWRlbnRpdHk6IHN0cgogICAgYXBwbGljYXRpb25faW1hZ2VfaWQ6IHN0cgogICAgYmFzZV9pbWFnZV9kaWdlc3Q6IHN0cgogICAgY29tcG9zZV9oYXNoOiBzdHIKICAgIGZpbmFsaXR5X3BvbGljeV9pZDogc3RyCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29udGVudF9oYXNoKHNlbGYpIC0+IHN0cjoKICAgICAgICByZXR1cm4gY2Fub25pY2FsX2hhc2goCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJzY2hlbWEiOiAiQ1IwMTE2X1JVTlRJTUVfREVQTE9ZTUVOVF9NQU5JRkVTVF9WMSIsCiAgICAgICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IHNlbGYuY29kZV9pZGVudGl0eSwKICAgICAgICAgICAgICAgICJwYWNrYWdlX2lkZW50aXR5Ijogc2VsZi5wYWNrYWdlX2lkZW50aXR5LAogICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ltYWdlX2lkIjogc2VsZi5hcHBsaWNhdGlvbl9pbWFnZV9pZCwKICAgICAgICAgICAgICAgICJiYXNlX2ltYWdlX2RpZ2VzdCI6IHNlbGYuYmFzZV9pbWFnZV9kaWdlc3QsCiAgICAgICAgICAgICAgICAiY29tcG9zZV9oYXNoIjogc2VsZi5jb21wb3NlX2hhc2gsCiAgICAgICAgICAgICAgICAiZmluYWxpdHlfcG9saWN5X2lkIjogc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBfc2hhMjU2X2hleChzZWxmLnJ1bnRpbWVfbWFuaWZlc3RfaWQsICJydW50aW1lIG1hbmlmZXN0IGlkIikKICAgICAgICBfcmVxdWlyZWQoc2VsZi5jb2RlX2lkZW50aXR5LCAiY29kZSBpZGVudGl0eSIpCiAgICAgICAgaWYgX0dJVF9JRF9SRS5mdWxsbWF0Y2goc2VsZi5jb2RlX2lkZW50aXR5KSBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoCiAgICAgICAgICAgICAgICAiY29kZSBpZGVudGl0eSBtdXN0IGJlIGxvd2VyY2FzZSA0MC02NCBoZXgiCiAgICAgICAgICAgICkKICAgICAgICBfc2hhMjU2X2hleChzZWxmLnBhY2thZ2VfaWRlbnRpdHksICJwYWNrYWdlIGlkZW50aXR5IikKICAgICAgICBfc2hhMjU2X2lkKHNlbGYuYXBwbGljYXRpb25faW1hZ2VfaWQsICJhcHBsaWNhdGlvbiBpbWFnZSBpZCIpCiAgICAgICAgX3NoYTI1Nl9pZChzZWxmLmJhc2VfaW1hZ2VfZGlnZXN0LCAiYmFzZSBpbWFnZSBkaWdlc3QiKQogICAgICAgIF9zaGEyNTZfaGV4KHNlbGYuY29tcG9zZV9oYXNoLCAiY29tcG9zZSBoYXNoIikKICAgICAgICBfcmVxdWlyZWQoc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsICJmaW5hbGl0eSBwb2xpY3kgaWQiKQogICAgICAgIGlmIHNlbGYucnVudGltZV9tYW5pZmVzdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgInJ1bnRpbWUgbWFuaWZlc3QgaWQgbXVzdCBiZSBjb250ZW50LWFkZHJlc3NlZCIKICAgICAgICAgICAgKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKAogICAgICAgIGNscywKICAgICAgICAqLAogICAgICAgIGNvZGVfaWRlbnRpdHk6IHN0ciwKICAgICAgICBwYWNrYWdlX2lkZW50aXR5OiBzdHIsCiAgICAgICAgYXBwbGljYXRpb25faW1hZ2VfaWQ6IHN0ciwKICAgICAgICBiYXNlX2ltYWdlX2RpZ2VzdDogc3RyLAogICAgICAgIGNvbXBvc2VfaGFzaDogc3RyLAogICAgICAgIGZpbmFsaXR5X3BvbGljeV9pZDogc3RyLAogICAgKSAtPiAiUnVudGltZURlcGxveW1lbnRNYW5pZmVzdFYxIjoKICAgICAgICBwYXlsb2FkID0gewogICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IGNvZGVfaWRlbnRpdHksCiAgICAgICAgICAgICJwYWNrYWdlX2lkZW50aXR5IjogcGFja2FnZV9pZGVudGl0eSwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ltYWdlX2lkIjogYXBwbGljYXRpb25faW1hZ2VfaWQsCiAgICAgICAgICAgICJiYXNlX2ltYWdlX2RpZ2VzdCI6IGJhc2VfaW1hZ2VfZGlnZXN0LAogICAgICAgICAgICAiY29tcG9zZV9oYXNoIjogY29tcG9zZV9oYXNoLAogICAgICAgICAgICAiZmluYWxpdHlfcG9saWN5X2lkIjogZmluYWxpdHlfcG9saWN5X2lkLAogICAgICAgIH0KICAgICAgICBydW50aW1lX21hbmlmZXN0X2lkID0gY2Fub25pY2FsX2hhc2goCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJzY2hlbWEiOiAiQ1IwMTE2X1JVTlRJTUVfREVQTE9ZTUVOVF9NQU5JRkVTVF9WMSIsCiAgICAgICAgICAgICAgICAqKnBheWxvYWQsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmV0dXJuIGNscygKICAgICAgICAgICAgcnVudGltZV9tYW5pZmVzdF9pZD1ydW50aW1lX21hbmlmZXN0X2lkLAogICAgICAgICAgICAqKnBheWxvYWQsCiAgICAgICAgKQ==","source_sha256":"58f695fd83baa1f3bc031ec9af5c4a6066186387b70c2b3f4efa0a09853568c2"} -SB043P_SOURCE_RUNTIME_INTEGRITY_META={"class_names":["RuntimeArtifactManifest","RuntimeExperimentBinding","StateSnapshotManifest","PredictorRuntimeManifest","FinalProspectiveSealBundle","ExperimentSealReceipt"],"error":null,"exists":true,"function_names":["verify_experiment_seal_receipt","verify_final_prospective_seal_bundle","verify_live_event_for_sealed_runtime_use","required_retained_hashes"],"lines":2726,"sha256":"99859b63e23d10fc051672965123f49d6e79d2ff767871c019ff7bdae2e2e39e"} -SB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_EXPERIMENT_SEAL_RECEIPT={"args":[],"kwonly":["bundle","receipt","collection_start_at","receipt_verifier"],"name":"verify_experiment_seal_receipt","source_b64":"ZGVmIHZlcmlmeV9leHBlcmltZW50X3NlYWxfcmVjZWlwdCgqLCBidW5kbGU6IEZpbmFsUHJvc3BlY3RpdmVTZWFsQnVuZGxlLCByZWNlaXB0OiBFeHBlcmltZW50U2VhbFJlY2VpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9zdGFydF9hdDogZGF0ZXRpbWUsIHJlY2VpcHRfdmVyaWZpZXI6IENhbGxhYmxlW1tFeHBlcmltZW50U2VhbFJlY2VpcHRdLGJvb2xdKSAtPiBOb25lOgogICAgX2F3YXJlKGNvbGxlY3Rpb25fc3RhcnRfYXQsImNvbGxlY3Rpb25fc3RhcnRfYXQiKQogICAgaWYgcmVjZWlwdC5zZWFsX2J1bmRsZV9pZCAhPSBidW5kbGUuYnVuZGxlX2lkIG9yIG5vdCByZWNlaXB0X3ZlcmlmaWVyKHJlY2VpcHQpOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBleHRlcm5hbCByZWNlaXB0IHZlcmlmaWNhdGlvbiBmYWlsZWQiKQogICAgaWYgYnVuZGxlLmZyb3plbl9hdCA+IHJlY2VpcHQuYW5jaG9yZWRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJleHRlcm5hbCBzZWFsIHJlY2VpcHQgcHJlZGF0ZXMgZmluYWwgYnVuZGxlIGZyZWV6ZSIpCiAgICBpZiByZWNlaXB0LmFuY2hvcmVkX2F0ID49IGNvbGxlY3Rpb25fc3RhcnRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBzZWFsIG11c3QgYmUgZXh0ZXJuYWxseSBhbmNob3JlZCBzdHJpY3RseSBiZWZvcmUgY29sbGVjdGlvbiBzdGFydCIp","source_sha256":"02aeeff79e0572258bf9691877db22c3a39e93f64021d574d1285d277f965349"} -SB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_FINAL_PROSPECTIVE_SEAL_BUNDLE={"args":[],"kwonly":["bundle","base_seal","runtime_binding","inference_binding","capture_finalization_policy","predictor_runtime","prediction_commit_policy","feature_binding_policy","collector_journal_policy","deployment_attestation_policy","analysis_enforcement_policy","critical_hash_policy","artifact_retention_policy"],"name":"verify_final_prospective_seal_bundle","source_b64":"ZGVmIHZlcmlmeV9maW5hbF9wcm9zcGVjdGl2ZV9zZWFsX2J1bmRsZSgqLCBidW5kbGU6RmluYWxQcm9zcGVjdGl2ZVNlYWxCdW5kbGUsIGJhc2Vfc2VhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2JpbmRpbmc6UnVudGltZUV4cGVyaW1lbnRCaW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmVyZW5jZV9iaW5kaW5nOkZpbmFsSW5mZXJlbmNlQmluZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3k6Q2FwdHVyZUZpbmFsaXphdGlvblBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0b3JfcnVudGltZTpQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbl9jb21taXRfcG9saWN5OlByZWRpY3Rpb25Db21taXRQb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9iaW5kaW5nX3BvbGljeTpGaW5hbEZlYXR1cmVCaW5kaW5nUG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeTpDb2xsZWN0b3JKb3VybmFsRmluYWxpemF0aW9uUG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRfYXR0ZXN0YXRpb25fcG9saWN5OkRlcGxveW1lbnRBdHRlc3RhdGlvblBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3k6QW5hbHlzaXNBY2Nlc3NFbmZvcmNlbWVudFBvbGljeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRpY2FsX2hhc2hfcG9saWN5OkNyaXRpY2FsSGFzaFNlbWFudGljc1BvbGljeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3JldGVudGlvbl9wb2xpY3k6IkFydGlmYWN0UmV0ZW50aW9uUG9saWN5IiB8IE5vbmUgPSBOb25lKSAtPiBOb25lOgogICAgY2hlY2tzPSgKICAgICAgICAoYnVuZGxlLmJhc2Vfc2VhbF9pZCxiYXNlX3NlYWwuc2VhbF9pZCwiYmFzZSBzZWFsIiksCiAgICAgICAgKGJ1bmRsZS5ydW50aW1lX2JpbmRpbmdfaWQscnVudGltZV9iaW5kaW5nLmJpbmRpbmdfaWQsInJ1bnRpbWUgYmluZGluZyIpLAogICAgICAgIChidW5kbGUuZmluYWxfaW5mZXJlbmNlX2JpbmRpbmdfaWQsaW5mZXJlbmNlX2JpbmRpbmcuYmluZGluZ19pZCwiZmluYWwgaW5mZXJlbmNlIGJpbmRpbmciKSwKICAgICAgICAoYnVuZGxlLmNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoLGNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeS5jb250ZW50X2hhc2gsImNhcHR1cmUgZmluYWxpemF0aW9uIHBvbGljeSIpLAogICAgICAgIChidW5kbGUucHJlZGljdG9yX3J1bnRpbWVfaWQscHJlZGljdG9yX3J1bnRpbWUucHJlZGljdG9yX3J1bnRpbWVfaWQsInByZWRpY3RvciBydW50aW1lIiksCiAgICAgICAgKGJ1bmRsZS5wcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCxwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3kuY29udGVudF9oYXNoLCJwcmVkaWN0aW9uIGNvbW1pdCBwb2xpY3kiKSwKICAgICAgICAoYnVuZGxlLmZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCxmZWF0dXJlX2JpbmRpbmdfcG9saWN5LmNvbnRlbnRfaGFzaCwiZmVhdHVyZSBiaW5kaW5nIHBvbGljeSIpLAogICAgICAgIChidW5kbGUuY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2gsY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5LmNvbnRlbnRfaGFzaCwiY29sbGVjdG9yIGpvdXJuYWwgcG9saWN5IiksCiAgICAgICAgKGJ1bmRsZS5kZXBsb3ltZW50X2F0dGVzdGF0aW9uX3BvbGljeV9oYXNoLGRlcGxveW1lbnRfYXR0ZXN0YXRpb25fcG9saWN5LmNvbnRlbnRfaGFzaCwiZGVwbG95bWVudCBhdHRlc3RhdGlvbiBwb2xpY3kiKSwKICAgICkKICAgIGZvciBhLGIsbmFtZSBpbiBjaGVja3M6CiAgICAgICAgaWYgYSE9YjogcmFpc2UgRGVtb25vdkVycm9yKGYiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBidW5kbGUgbWlzbWF0Y2g6IHtuYW1lfSIpCiAgICBpZiBidW5kbGUuYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2g6CiAgICAgICAgaWYgYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5IGlzIE5vbmUgb3IgYnVuZGxlLmFuYWx5c2lzX2VuZm9yY2VtZW50X3BvbGljeV9oYXNoIT1hbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3kuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImZpbmFsIHByb3NwZWN0aXZlIHNlYWwgYnVuZGxlIG1pc21hdGNoOiBhbmFseXNpcyBhY2Nlc3MgZW5mb3JjZW1lbnQgcG9saWN5IikKICAgIGlmIGJ1bmRsZS5jcml0aWNhbF9oYXNoX3BvbGljeV9oYXNoOgogICAgICAgIGlmIGNyaXRpY2FsX2hhc2hfcG9saWN5IGlzIE5vbmUgb3IgYnVuZGxlLmNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2ghPWNyaXRpY2FsX2hhc2hfcG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBzZWFsIGJ1bmRsZSBtaXNtYXRjaDogY3JpdGljYWwgaGFzaCBzZW1hbnRpY3MgcG9saWN5IikKICAgIGlmIGJ1bmRsZS5hcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2g6CiAgICAgICAgaWYgYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeSBpcyBOb25lIG9yIGJ1bmRsZS5hcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2ghPWFydGlmYWN0X3JldGVudGlvbl9wb2xpY3kuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImZpbmFsIHByb3NwZWN0aXZlIHNlYWwgYnVuZGxlIG1pc21hdGNoOiBhcnRpZmFjdCByZXRlbnRpb24gcG9saWN5IikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5iYXNlX3NlYWxfaWQgIT0gYmFzZV9zZWFsLnNlYWxfaWQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGJpbmRpbmcgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHNlYWxlZCBiYXNlIGV4cGVyaW1lbnQiKQogICAgaWYgaW5mZXJlbmNlX2JpbmRpbmcucnVudGltZV9iaW5kaW5nX2lkICE9IHJ1bnRpbWVfYmluZGluZy5iaW5kaW5nX2lkOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgaW5mZXJlbmNlIGJpbmRpbmcgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHJ1bnRpbWUgYmluZGluZyIpCiAgICBpZiBwcmVkaWN0b3JfcnVudGltZS5jb25zdW1lcl9pZCA9PSBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3kud2F0ZXJtYXJrX2F1dGhvcml0eV9wcm92aWRlcl9pZDoKICAgICAgICAjIE5vdCBpbmhlcmVudGx5IGltcG9zc2libGUsIGJ1dCBwcm92aWRlci9jb25zdW1lciBpZGVudGl0eSByZXVzZSBkZXN0cm95cyBpbmRlcGVuZGVuY2Ugb2YgY2FwdHVyZSBwcm9vZi4KICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImNoYWxsZW5nZXIgcHJlZGljdG9yIGlkZW50aXR5IGNhbm5vdCBhbHNvIGJlIGF1dGhvcml0YXRpdmUgcHJvZHVjZXIgd2F0ZXJtYXJrIHByb3ZpZGVyIikKICAgIGlmIGJ1bmRsZS5mcm96ZW5fYXQgPCBiYXNlX3NlYWwuc2VhbGVkX2F0OgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgYnVuZGxlIGNhbm5vdCBwcmVkYXRlIGJhc2UgZXhwZXJpbWVudCBzZWFsIikKICAgIGlmIGJ1bmRsZS5mcm96ZW5fYXQgPj0gYmFzZV9zZWFsLmNvbGxlY3Rpb25fc3RhcnRfYXQ6CiAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJmaW5hbCBwcm9zcGVjdGl2ZSBidW5kbGUgbXVzdCBiZSBmcm96ZW4gc3RyaWN0bHkgYmVmb3JlIGNvbGxlY3Rpb24gc3RhcnRzIik=","source_sha256":"a7dd6abbfe9dfd387da43b987fb3683883043e841fb154859d66bba8a20f7766"} -SB043P_FUNC_RUNTIME_INTEGRITY_VERIFY_LIVE_EVENT_FOR_SEALED_RUNTIME_USE={"args":[],"kwonly":["event","runtime_binding","live_schema_registry","market_registry","timeframe_registry","runtime_registry","session_catalog","determinism_policy","receipt_store","snapshot_registry","bar_construction_registry","clock_domain_registry","clock_sync_policy"],"name":"verify_live_event_for_sealed_runtime_use","source_b64":"ZGVmIHZlcmlmeV9saXZlX2V2ZW50X2Zvcl9zZWFsZWRfcnVudGltZV91c2UoKiwgZXZlbnQsIHJ1bnRpbWVfYmluZGluZzpSdW50aW1lRXhwZXJpbWVudEJpbmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVfc2NoZW1hX3JlZ2lzdHJ5LCBtYXJrZXRfcmVnaXN0cnk6TWFya2V0SWRlbnRpdHlSZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWZyYW1lX3JlZ2lzdHJ5OlRpbWVmcmFtZVJlZ2lzdHJ5LCBydW50aW1lX3JlZ2lzdHJ5OlJ1bnRpbWVSZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9jYXRhbG9nOlByb2R1Y2VyU2Vzc2lvbkNhdGFsb2csIGRldGVybWluaXNtX3BvbGljeTpEZXRlcm1pbmlzbVBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdF9zdG9yZTpDb2xsZWN0b3JSZWNlaXB0U3RvcmUsIHNuYXBzaG90X3JlZ2lzdHJ5OlN0YXRlU25hcHNob3RSZWdpc3RyeSB8IE5vbmUgPSBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5OkJhckNvbnN0cnVjdGlvblBvbGljeVJlZ2lzdHJ5IHwgTm9uZSA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX2RvbWFpbl9yZWdpc3RyeTpDbG9ja0RvbWFpblJlZ2lzdHJ5IHwgTm9uZSA9IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3N5bmNfcG9saWN5OkNsb2NrU3luY2hyb25pemF0aW9uUG9saWN5IHwgTm9uZSA9IE5vbmUpOgogICAgIiIiRmluYWwtb25seSBldmVudCBnYXRld2F5IHRoYXQgY2Fubm90IHNpbGVudGx5IG9taXQgZXh0ZW5zaW9ucyBzZWFsZWQgaW4gcnVudGltZV9iaW5kaW5nLiIiIgogICAgaWYgcnVudGltZV9iaW5kaW5nLmxpdmVfc2NoZW1hX3JlZ2lzdHJ5X2lkIT1saXZlX3NjaGVtYV9yZWdpc3RyeS5yZWdpc3RyeV9pZCBvciBydW50aW1lX2JpbmRpbmcubWFya2V0X3JlZ2lzdHJ5X2lkIT1tYXJrZXRfcmVnaXN0cnkucmVnaXN0cnlfaWQgb3IgcnVudGltZV9iaW5kaW5nLnRpbWVmcmFtZV9yZWdpc3RyeV9pZCE9dGltZWZyYW1lX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIG9yIHJ1bnRpbWVfYmluZGluZy5ydW50aW1lX3JlZ2lzdHJ5X2lkIT1ydW50aW1lX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkOgogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigic2VhbGVkIHJ1bnRpbWUgZXZlbnQgZ2F0ZXdheSByZWdpc3RyeSBtaXNtYXRjaCIpCiAgICBpZiBydW50aW1lX2JpbmRpbmcuY29sbGVjdG9yX3RvcG9sb2d5X2hhc2ghPXJlY2VpcHRfc3RvcmUucG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInNlYWxlZCBydW50aW1lIGV2ZW50IGdhdGV3YXkgY29sbGVjdG9yIHRvcG9sb2d5IG1pc21hdGNoIikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5kZXRlcm1pbmlzbV9wb2xpY3lfaGFzaCE9ZGV0ZXJtaW5pc21fcG9saWN5LmNvbnRlbnRfaGFzaDoKICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInNlYWxlZCBydW50aW1lIGV2ZW50IGdhdGV3YXkgZGV0ZXJtaW5pc20gcG9saWN5IG1pc21hdGNoIikKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5iYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5X2lkOgogICAgICAgIGlmIGJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnkgaXMgTm9uZSBvciBiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIT1ydW50aW1lX2JpbmRpbmcuYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSByZXF1aXJlcyBleGFjdCBiYXItY29uc3RydWN0aW9uIHJlZ2lzdHJ5IikKICAgICAgICB2ZXJpZnlfdGltZWZyYW1lX2Jhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnkodGltZWZyYW1lX3JlZ2lzdHJ5PXRpbWVmcmFtZV9yZWdpc3RyeSxiYXJfcmVnaXN0cnk9YmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeSkKICAgIGlmIHJ1bnRpbWVfYmluZGluZy5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQ6CiAgICAgICAgaWYgY2xvY2tfZG9tYWluX3JlZ2lzdHJ5IGlzIE5vbmUgb3IgY2xvY2tfc3luY19wb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSByZXF1aXJlcyBleGFjdCBjbG9jay1kb21haW4gc3luY2hyb25pemF0aW9uIGJ1bmRsZSIpCiAgICAgICAgaWYgY2xvY2tfZG9tYWluX3JlZ2lzdHJ5LnJlZ2lzdHJ5X2lkIT1ydW50aW1lX2JpbmRpbmcuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIG9yIGNsb2NrX3N5bmNfcG9saWN5LmNvbnRlbnRfaGFzaCE9cnVudGltZV9iaW5kaW5nLmNsb2NrX3N5bmNocm9uaXphdGlvbl9wb2xpY3lfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzZWFsZWQgcnVudGltZSBjbG9jayBidW5kbGUgbWlzbWF0Y2giKQogICAgcmV0dXJuIHZlcmlmeV9saXZlX2V2ZW50X2Zvcl9wcm9zcGVjdGl2ZV91c2UoZXZlbnQ9ZXZlbnQsbGl2ZV9zY2hlbWFfcmVnaXN0cnk9bGl2ZV9zY2hlbWFfcmVnaXN0cnksCiAgICAgICAgbWFya2V0X3JlZ2lzdHJ5PW1hcmtldF9yZWdpc3RyeSx0aW1lZnJhbWVfcmVnaXN0cnk9dGltZWZyYW1lX3JlZ2lzdHJ5LHJ1bnRpbWVfcmVnaXN0cnk9cnVudGltZV9yZWdpc3RyeSwKICAgICAgICBzZXNzaW9uX2NhdGFsb2c9c2Vzc2lvbl9jYXRhbG9nLGRldGVybWluaXNtX3BvbGljeT1kZXRlcm1pbmlzbV9wb2xpY3kscmVjZWlwdF9zdG9yZT1yZWNlaXB0X3N0b3JlLAogICAgICAgIHNuYXBzaG90X3JlZ2lzdHJ5PXNuYXBzaG90X3JlZ2lzdHJ5LGNsb2NrX2RvbWFpbl9yZWdpc3RyeT1jbG9ja19kb21haW5fcmVnaXN0cnksY2xvY2tfc3luY19wb2xpY3k9Y2xvY2tfc3luY19wb2xpY3ksCiAgICAgICAgY29sbGVjdG9yX3BvbGljeT1yZWNlaXB0X3N0b3JlLnBvbGljeSBpZiBydW50aW1lX2JpbmRpbmcuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIGVsc2UgTm9uZSk=","source_sha256":"af0af39e4ec3af3bd839bde7c58ea032581039fd1ade31680e83251df48127ae"} -SB043P_FUNC_RUNTIME_INTEGRITY_REQUIRED_RETAINED_HASHES={"args":[],"kwonly":["runtime_registry","model_registry","state_snapshots","predictor_runtime"],"name":"required_retained_hashes","source_b64":"ZGVmIHJlcXVpcmVkX3JldGFpbmVkX2hhc2hlcygqLCBydW50aW1lX3JlZ2lzdHJ5OlJ1bnRpbWVSZWdpc3RyeSwgbW9kZWxfcmVnaXN0cnk6RmluYWxNb2RlbFJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX3NuYXBzaG90czpTZXF1ZW5jZVtTdGF0ZVNuYXBzaG90TWFuaWZlc3RdPSgpLCBwcmVkaWN0b3JfcnVudGltZTpQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QgfCBOb25lPU5vbmUpLT5NYXBwaW5nW3N0cixSZXRhaW5lZEFydGlmYWN0S2luZF06CiAgICAiIiJCdWlsZCB0aGUgbWluaW11bSBibG9iLWxldmVsIHJlcGxheSBjb3JwdXMgcmVxdWlyZWQgYnkgZmluYWwgcHJvc3BlY3RpdmUgcHJvb2YuCgogICAgQ29udGVudC1hZGRyZXNzZWQgcG9saWN5IG9iamVjdHMgcmVtYWluIGluIHRoZSBoYW5kb2ZmL3JlZ2lzdHJ5LiAgVGhpcyBmdW5jdGlvbgogICAgdGFyZ2V0cyBibG9icyB0aGF0IGNhbm5vdCBiZSByZWNvbnN0cnVjdGVkIGZyb20gaWRlbnRpZmllcnMgYWxvbmUuCiAgICAiIiIKICAgIG91dDpkaWN0W3N0cixSZXRhaW5lZEFydGlmYWN0S2luZF09e30KICAgIGZvciBhIGluIHJ1bnRpbWVfcmVnaXN0cnkuYXJ0aWZhY3RzOgogICAgICAgIG91dFthLnNvdXJjZV90cmVlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlNPVVJDRV9UUkVFCiAgICAgICAgb3V0W2EuZGVwZW5kZW5jeV9sb2NrX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkRFUEVOREVOQ1lfTE9DSwogICAgICAgIG91dFthLmJ1aWxkX3JlY2lwZV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5CVUlMRF9SRUNJUEUKICAgICAgICBvdXRbYS5leGVjdXRhYmxlX2FydGlmYWN0X2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkVYRUNVVEFCTEVfQVJUSUZBQ1QKICAgICAgICBvdXRbYS5ydW50aW1lX2Vudmlyb25tZW50X2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlJVTlRJTUVfRU5WSVJPTk1FTlQKICAgIGZvciBhIGluIG1vZGVsX3JlZ2lzdHJ5LmFydGlmYWN0czoKICAgICAgICBvdXRbYS5tb2RlbF9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuTU9ERUwKICAgICAgICBvdXRbYS50cmFuc2Zvcm1lcl9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuVFJBTlNGT1JNRVIKICAgICAgICBvdXRbYS5jYWxpYnJhdGlvbl9mcmVlemVfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuQ0FMSUJSQVRPUgogICAgICAgIG91dFthLmZlYXR1cmVfc2NoZW1hX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkZFQVRVUkVfU0NIRU1BCiAgICAgICAgb3V0W2EuZmVhdHVyZV9jb250cmFjdF9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5GRUFUVVJFX0NPTlRSQUNUCiAgICAgICAgb3V0W2EudHJhaW5pbmdfZGF0YV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5UUkFJTklOR19EQVRBCiAgICBmb3IgcyBpbiBzdGF0ZV9zbmFwc2hvdHM6CiAgICAgICAgb3V0W3Muc2VyaWFsaXplZF9zdGF0ZV9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5TVEFURV9TTkFQU0hPVAogICAgaWYgcHJlZGljdG9yX3J1bnRpbWUgaXMgbm90IE5vbmU6CiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLnNvdXJjZV90cmVlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLlNPVVJDRV9UUkVFCiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLmRlcGVuZGVuY3lfbG9ja19oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5ERVBFTkRFTkNZX0xPQ0sKICAgICAgICBvdXRbcHJlZGljdG9yX3J1bnRpbWUuZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5FWEVDVVRBQkxFX0FSVElGQUNUCiAgICAgICAgb3V0W3ByZWRpY3Rvcl9ydW50aW1lLnJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaF09UmV0YWluZWRBcnRpZmFjdEtpbmQuUlVOVElNRV9FTlZJUk9OTUVOVAogICAgICAgIG91dFtwcmVkaWN0b3JfcnVudGltZS5mZWF0dXJlX2V4dHJhY3Rvcl9jb2RlX2hhc2hdPVJldGFpbmVkQXJ0aWZhY3RLaW5kLkZFQVRVUkVfRVhUUkFDVE9SX0NPREUKICAgICAgICBvdXRbcHJlZGljdG9yX3J1bnRpbWUuZWZmZWN0aXZlX2NvbmZpZ19oYXNoXT1SZXRhaW5lZEFydGlmYWN0S2luZC5FRkZFQ1RJVkVfQ09ORklHCiAgICByZXR1cm4gb3V0","source_sha256":"ac6e18e76fcbd23144d1870ac03e3c2a4a1149dc4b5cf3f84fc0664228cdab1a"} -SB043P_CLASS_RUNTIME_INTEGRITY_RUNTIMEARTIFACTMANIFEST={"name":"RuntimeArtifactManifest","source_b64":"Y2xhc3MgUnVudGltZUFydGlmYWN0TWFuaWZlc3Q6CiAgICBhcnRpZmFjdF9pZDogc3RyCiAgICBzb3VyY2VfdHJlZV9oYXNoOiBzdHIKICAgIGRlcGVuZGVuY3lfbG9ja19oYXNoOiBzdHIKICAgIGJ1aWxkX3JlY2lwZV9oYXNoOiBzdHIKICAgIGV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaDogc3RyCiAgICBydW50aW1lX2Vudmlyb25tZW50X2hhc2g6IHN0cgoKICAgIGRlZiBfX3Bvc3RfaW5pdF9fKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgZm9yIG5hbWUgaW4gKCJzb3VyY2VfdHJlZV9oYXNoIiwgImRlcGVuZGVuY3lfbG9ja19oYXNoIiwgImJ1aWxkX3JlY2lwZV9oYXNoIiwgImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsICJydW50aW1lX2Vudmlyb25tZW50X2hhc2giKToKICAgICAgICAgICAgX2hleDY0KGdldGF0dHIoc2VsZiwgbmFtZSksIG5hbWUpCiAgICAgICAgaWYgc2VsZi5hcnRpZmFjdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGFydGlmYWN0IGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbF9oYXNoKHtrOiBnZXRhdHRyKHNlbGYsIGspIGZvciBrIGluICgKICAgICAgICAgICAgInNvdXJjZV90cmVlX2hhc2giLCAiZGVwZW5kZW5jeV9sb2NrX2hhc2giLCAiYnVpbGRfcmVjaXBlX2hhc2giLCAiZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoIiwgInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIKICAgICAgICApfSkKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBidWlsZChjbHMsICoqa3dhcmdzKSAtPiAiUnVudGltZUFydGlmYWN0TWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQgPSB7azoga3dhcmdzW2tdIGZvciBrIGluICgic291cmNlX3RyZWVfaGFzaCIsICJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsICJidWlsZF9yZWNpcGVfaGFzaCIsICJleGVjdXRhYmxlX2FydGlmYWN0X2hhc2giLCAicnVudGltZV9lbnZpcm9ubWVudF9oYXNoIil9CiAgICAgICAgcmV0dXJuIGNscyhhcnRpZmFjdF9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwgKiprd2FyZ3Mp","source_sha256":"8cd1ebf70c003cd4d7b91f18602841426b19c2f54f2d803309c53c22f38cd5c7"} -SB043P_CLASS_RUNTIME_INTEGRITY_RUNTIMEEXPERIMENTBINDING={"name":"RuntimeExperimentBinding","source_b64":"Y2xhc3MgUnVudGltZUV4cGVyaW1lbnRCaW5kaW5nOgogICAgYmluZGluZ19pZDogc3RyCiAgICBiYXNlX3NlYWxfaWQ6IHN0cgogICAgbGl2ZV9zY2hlbWFfcmVnaXN0cnlfaWQ6IHN0cgogICAgbWFya2V0X3JlZ2lzdHJ5X2lkOiBzdHIKICAgIHRpbWVmcmFtZV9yZWdpc3RyeV9pZDogc3RyCiAgICBydW50aW1lX3JlZ2lzdHJ5X2lkOiBzdHIKICAgIGNvbGxlY3Rvcl90b3BvbG9neV9oYXNoOiBzdHIKICAgIGNhcHR1cmVfcG9saWN5X2hhc2g6IHN0cgogICAgZGV0ZXJtaW5pc21fcG9saWN5X2hhc2g6IHN0cgogICAgc2hhZG93X2lzb2xhdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICByZXF1aXJlX3NpbmdsZV9ydW50aW1lX2Vwb2NoX2R1cmluZ19jb2xsZWN0aW9uOiBib29sID0gVHJ1ZQogICAgc2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbDogYm9vbCA9IFRydWUKICAgIGJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQ6IHN0ciA9ICIiCiAgICBjbG9ja19kb21haW5fcmVnaXN0cnlfaWQ6IHN0ciA9ICIiCiAgICBjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2g6IHN0ciA9ICIiCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBpZiBub3QgYWxsKChzZWxmLmJhc2Vfc2VhbF9pZCwgc2VsZi5saXZlX3NjaGVtYV9yZWdpc3RyeV9pZCwgc2VsZi5tYXJrZXRfcmVnaXN0cnlfaWQsIHNlbGYudGltZWZyYW1lX3JlZ2lzdHJ5X2lkLAogICAgICAgICAgICAgICAgICAgIHNlbGYucnVudGltZV9yZWdpc3RyeV9pZCwgc2VsZi5jb2xsZWN0b3JfdG9wb2xvZ3lfaGFzaCwgc2VsZi5jYXB0dXJlX3BvbGljeV9oYXNoLAogICAgICAgICAgICAgICAgICAgIHNlbGYuZGV0ZXJtaW5pc21fcG9saWN5X2hhc2gsIHNlbGYuc2hhZG93X2lzb2xhdGlvbl9wb2xpY3lfaGFzaCkpOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInJ1bnRpbWUgZXhwZXJpbWVudCBiaW5kaW5nIGZpZWxkcyBhcmUgcmVxdWlyZWQiKQogICAgICAgIGlmIG5vdCBzZWxmLnJlcXVpcmVfc2luZ2xlX3J1bnRpbWVfZXBvY2hfZHVyaW5nX2NvbGxlY3Rpb24gb3Igbm90IHNlbGYuc2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJWMTguMzkgZmluYWwgcHJvc3BlY3RpdmUgYmluZGluZyBpcyBzdHJpY3Q6IG9uZSBydW50aW1lIGVwb2NoIGFuZCBuZXcgc2VhbCBvbiBzY2hlbWEgY2hhbmdlIikKICAgICAgICBpZiBzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQ6CiAgICAgICAgICAgIF9oZXg2NChzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQsImJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQiKQogICAgICAgIGlmIGJvb2woc2VsZi5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQpICE9IGJvb2woc2VsZi5jbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2gpOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImNsb2NrIGRvbWFpbiByZWdpc3RyeSBhbmQgc3luY2hyb25pemF0aW9uIHBvbGljeSBtdXN0IGJlIGJvdW5kIHRvZ2V0aGVyIikKICAgICAgICBpZiBzZWxmLmNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZDoKICAgICAgICAgICAgX2hleDY0KHNlbGYuY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkLCJjbG9ja19kb21haW5fcmVnaXN0cnlfaWQiKTsgX2hleDY0KHNlbGYuY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoLCJjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2giKQogICAgICAgIGlmIHNlbGYuYmluZGluZ19pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDogcmFpc2UgRGVtb25vdkVycm9yKCJydW50aW1lIGV4cGVyaW1lbnQgYmluZGluZyBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIikKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjb250ZW50X2hhc2goc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7ImJhc2Vfc2VhbF9pZCI6IHNlbGYuYmFzZV9zZWFsX2lkLCAibGl2ZV9zY2hlbWFfcmVnaXN0cnlfaWQiOiBzZWxmLmxpdmVfc2NoZW1hX3JlZ2lzdHJ5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcmtldF9yZWdpc3RyeV9pZCI6IHNlbGYubWFya2V0X3JlZ2lzdHJ5X2lkLCAidGltZWZyYW1lX3JlZ2lzdHJ5X2lkIjogc2VsZi50aW1lZnJhbWVfcmVnaXN0cnlfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVudGltZV9yZWdpc3RyeV9pZCI6IHNlbGYucnVudGltZV9yZWdpc3RyeV9pZCwgImNvbGxlY3Rvcl90b3BvbG9neV9oYXNoIjogc2VsZi5jb2xsZWN0b3JfdG9wb2xvZ3lfaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXB0dXJlX3BvbGljeV9oYXNoIjogc2VsZi5jYXB0dXJlX3BvbGljeV9oYXNoLCAiZGV0ZXJtaW5pc21fcG9saWN5X2hhc2giOiBzZWxmLmRldGVybWluaXNtX3BvbGljeV9oYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYWRvd19pc29sYXRpb25fcG9saWN5X2hhc2giOiBzZWxmLnNoYWRvd19pc29sYXRpb25fcG9saWN5X2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZV9zaW5nbGVfcnVudGltZV9lcG9jaF9kdXJpbmdfY29sbGVjdGlvbiI6IHNlbGYucmVxdWlyZV9zaW5nbGVfcnVudGltZV9lcG9jaF9kdXJpbmdfY29sbGVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY2hlbWFfY2hhbmdlX3JlcXVpcmVzX25ld19zZWFsIjogc2VsZi5zY2hlbWFfY2hhbmdlX3JlcXVpcmVzX25ld19zZWFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiooeyJiYXJfY29uc3RydWN0aW9uX3JlZ2lzdHJ5X2lkIjpzZWxmLmJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWR9IGlmIHNlbGYuYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCBlbHNlIHt9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKHsiY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIjpzZWxmLmNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZCwiY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoIjpzZWxmLmNsb2NrX3N5bmNocm9uaXphdGlvbl9wb2xpY3lfaGFzaH0gaWYgc2VsZi5jbG9ja19kb21haW5fcmVnaXN0cnlfaWQgZWxzZSB7fSl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJSdW50aW1lRXhwZXJpbWVudEJpbmRpbmciOgogICAgICAgIHBheWxvYWQgPSB7azoga3dhcmdzW2tdIGZvciBrIGluICgKICAgICAgICAgICAgImJhc2Vfc2VhbF9pZCIsICJsaXZlX3NjaGVtYV9yZWdpc3RyeV9pZCIsICJtYXJrZXRfcmVnaXN0cnlfaWQiLCAidGltZWZyYW1lX3JlZ2lzdHJ5X2lkIiwgInJ1bnRpbWVfcmVnaXN0cnlfaWQiLAogICAgICAgICAgICAiY29sbGVjdG9yX3RvcG9sb2d5X2hhc2giLCAiY2FwdHVyZV9wb2xpY3lfaGFzaCIsICJkZXRlcm1pbmlzbV9wb2xpY3lfaGFzaCIsICJzaGFkb3dfaXNvbGF0aW9uX3BvbGljeV9oYXNoIiwKICAgICAgICAgICAgInJlcXVpcmVfc2luZ2xlX3J1bnRpbWVfZXBvY2hfZHVyaW5nX2NvbGxlY3Rpb24iLCAic2NoZW1hX2NoYW5nZV9yZXF1aXJlc19uZXdfc2VhbCIKICAgICAgICApfQogICAgICAgIGlmIGt3YXJncy5nZXQoImJhcl9jb25zdHJ1Y3Rpb25fcmVnaXN0cnlfaWQiKToKICAgICAgICAgICAgcGF5bG9hZFsiYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCJdPWt3YXJnc1siYmFyX2NvbnN0cnVjdGlvbl9yZWdpc3RyeV9pZCJdCiAgICAgICAgaWYga3dhcmdzLmdldCgiY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIik6CiAgICAgICAgICAgIHBheWxvYWRbImNsb2NrX2RvbWFpbl9yZWdpc3RyeV9pZCJdPWt3YXJnc1siY2xvY2tfZG9tYWluX3JlZ2lzdHJ5X2lkIl0KICAgICAgICAgICAgcGF5bG9hZFsiY2xvY2tfc3luY2hyb25pemF0aW9uX3BvbGljeV9oYXNoIl09a3dhcmdzWyJjbG9ja19zeW5jaHJvbml6YXRpb25fcG9saWN5X2hhc2giXQogICAgICAgIHJldHVybiBjbHMoYmluZGluZ19pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwgKiprd2FyZ3Mp","source_sha256":"d06243f6bc10e0a8b92621ad139e2f0768d9c490da92843757ff418b1e07f840"} -SB043P_CLASS_RUNTIME_INTEGRITY_STATESNAPSHOTMANIFEST={"name":"StateSnapshotManifest","source_b64":"Y2xhc3MgU3RhdGVTbmFwc2hvdE1hbmlmZXN0OgogICAgc25hcHNob3RfaWQ6IHN0cgogICAgcHJvZHVjZXJfaWQ6IHN0cgogICAgcnVudGltZV9lcG9jaF9pZDogc3RyCiAgICBzdGF0ZV9zY2hlbWFfaWQ6IHN0cgogICAgc2VyaWFsaXplZF9zdGF0ZV9oYXNoOiBzdHIKICAgIGNyZWF0ZWRfYXQ6IGRhdGV0aW1lCiAgICB0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnM6IFR1cGxlW1R1cGxlW3N0cixzdHIsc3RyLGludF0sIC4uLl0KCiAgICBkZWYgX19wb3N0X2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgICAgIF9hd2FyZShzZWxmLmNyZWF0ZWRfYXQsInN0YXRlIHNuYXBzaG90IGNyZWF0ZWRfYXQiKQogICAgICAgIGlmIG5vdCBhbGwoKHNlbGYucHJvZHVjZXJfaWQsc2VsZi5ydW50aW1lX2Vwb2NoX2lkLHNlbGYuc3RhdGVfc2NoZW1hX2lkLHNlbGYuc2VyaWFsaXplZF9zdGF0ZV9oYXNoLHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zKSk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigic3RhdGUgc25hcHNob3QgbWFuaWZlc3QgZmllbGRzIGFyZSByZXF1aXJlZCIpCiAgICAgICAgX2hleDY0KHNlbGYuc2VyaWFsaXplZF9zdGF0ZV9oYXNoLCJzZXJpYWxpemVkX3N0YXRlX2hhc2giKQogICAgICAgIGlmIGxlbihzZWxmLnRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucykhPWxlbihzZXQoc2VsZi50aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnMpKToKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJkdXBsaWNhdGUgc3RyZWFtIHBvc2l0aW9uIGluIHN0YXRlIHNuYXBzaG90IG1hbmlmZXN0IikKICAgICAgICBmb3IgcG9zIGluIHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zOgogICAgICAgICAgICBpZiBsZW4ocG9zKSE9NCBvciBub3QgYWxsKHBvc1s6M10pIG9yIG5vdCBpc2luc3RhbmNlKHBvc1szXSxpbnQpIG9yIHBvc1szXSA8IC0xOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKCJzdGF0ZSBzbmFwc2hvdCBzdHJlYW0gcG9zaXRpb24gbXVzdCBiZSBwcm9kdWNlci9zZXNzaW9uL3BhcnRpdGlvbiBwbHVzIHNlcSA+PSAtMSIpCiAgICAgICAgaWYgc2VsZi5zbmFwc2hvdF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDogcmFpc2UgRGVtb25vdkVycm9yKCJzdGF0ZSBzbmFwc2hvdCBtYW5pZmVzdCBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIikKCiAgICBAcHJvcGVydHkKICAgIGRlZiBjb250ZW50X2hhc2goc2VsZikgLT4gc3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7InByb2R1Y2VyX2lkIjpzZWxmLnByb2R1Y2VyX2lkLCJydW50aW1lX2Vwb2NoX2lkIjpzZWxmLnJ1bnRpbWVfZXBvY2hfaWQsInN0YXRlX3NjaGVtYV9pZCI6c2VsZi5zdGF0ZV9zY2hlbWFfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsaXplZF9zdGF0ZV9oYXNoIjpzZWxmLnNlcmlhbGl6ZWRfc3RhdGVfaGFzaCwiY3JlYXRlZF9hdCI6c2VsZi5jcmVhdGVkX2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucyI6dHVwbGUoc29ydGVkKHNlbGYudGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zKSl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJTdGF0ZVNuYXBzaG90TWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQ9eyJwcm9kdWNlcl9pZCI6a3dhcmdzWyJwcm9kdWNlcl9pZCJdLCJydW50aW1lX2Vwb2NoX2lkIjprd2FyZ3NbInJ1bnRpbWVfZXBvY2hfaWQiXSwic3RhdGVfc2NoZW1hX2lkIjprd2FyZ3NbInN0YXRlX3NjaGVtYV9pZCJdLAogICAgICAgICAgICAgICAgICJzZXJpYWxpemVkX3N0YXRlX2hhc2giOmt3YXJnc1sic2VyaWFsaXplZF9zdGF0ZV9oYXNoIl0sImNyZWF0ZWRfYXQiOmt3YXJnc1siY3JlYXRlZF9hdCJdLAogICAgICAgICAgICAgICAgICJ0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnMiOnR1cGxlKHNvcnRlZChrd2FyZ3NbInRocm91Z2hfc3RyZWFtX3Bvc2l0aW9ucyJdKSl9CiAgICAgICAgcmV0dXJuIGNscyhzbmFwc2hvdF9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSxwcm9kdWNlcl9pZD1rd2FyZ3NbInByb2R1Y2VyX2lkIl0scnVudGltZV9lcG9jaF9pZD1rd2FyZ3NbInJ1bnRpbWVfZXBvY2hfaWQiXSwKICAgICAgICAgICAgICAgICAgIHN0YXRlX3NjaGVtYV9pZD1rd2FyZ3NbInN0YXRlX3NjaGVtYV9pZCJdLHNlcmlhbGl6ZWRfc3RhdGVfaGFzaD1rd2FyZ3NbInNlcmlhbGl6ZWRfc3RhdGVfaGFzaCJdLGNyZWF0ZWRfYXQ9a3dhcmdzWyJjcmVhdGVkX2F0Il0sCiAgICAgICAgICAgICAgICAgICB0aHJvdWdoX3N0cmVhbV9wb3NpdGlvbnM9cGF5bG9hZFsidGhyb3VnaF9zdHJlYW1fcG9zaXRpb25zIl0p","source_sha256":"04fcdac0c5b3010433b311804622b8095e9111471f35436325119a2590330b2f"} -SB043P_CLASS_RUNTIME_INTEGRITY_PREDICTORRUNTIMEMANIFEST={"name":"PredictorRuntimeManifest","source_b64":"Y2xhc3MgUHJlZGljdG9yUnVudGltZU1hbmlmZXN0OgogICAgcHJlZGljdG9yX3J1bnRpbWVfaWQ6IHN0cgogICAgY29uc3VtZXJfaWQ6IHN0cgogICAgc291cmNlX3RyZWVfaGFzaDogc3RyCiAgICBkZXBlbmRlbmN5X2xvY2tfaGFzaDogc3RyCiAgICBydW50aW1lX2Vudmlyb25tZW50X2hhc2g6IHN0cgogICAgZXhlY3V0YWJsZV9hcnRpZmFjdF9oYXNoOiBzdHIKICAgIGVmZmVjdGl2ZV9jb25maWdfaGFzaDogc3RyCiAgICBmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZDogc3RyCiAgICBmZWF0dXJlX2V4dHJhY3Rvcl9jb2RlX2hhc2g6IHN0cgogICAgc3RhcnRlZF9hdDogZGF0ZXRpbWUKICAgIGVuZGVkX2F0OiBkYXRldGltZSB8IE5vbmUKICAgIGRlcGxveW1lbnRfcmVjZWlwdF9oYXNoOiBzdHIKCiAgICBkZWYgX19wb3N0X2luaXRfXyhzZWxmKSAtPiBOb25lOgogICAgICAgIF9hd2FyZShzZWxmLnN0YXJ0ZWRfYXQsICJwcmVkaWN0b3IgcnVudGltZSBzdGFydGVkX2F0IikKICAgICAgICBpZiBzZWxmLmVuZGVkX2F0IGlzIG5vdCBOb25lOgogICAgICAgICAgICBfYXdhcmUoc2VsZi5lbmRlZF9hdCwgInByZWRpY3RvciBydW50aW1lIGVuZGVkX2F0IikKICAgICAgICAgICAgaWYgc2VsZi5lbmRlZF9hdCA8PSBzZWxmLnN0YXJ0ZWRfYXQ6IHJhaXNlIERlbW9ub3ZFcnJvcigicHJlZGljdG9yIHJ1bnRpbWUgZW5kZWRfYXQgbXVzdCBmb2xsb3cgc3RhcnRlZF9hdCIpCiAgICAgICAgaWYgbm90IHNlbGYuY29uc3VtZXJfaWQgb3Igbm90IHNlbGYuZmluYWxfbW9kZWxfcmVnaXN0cnlfaWQ6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigicHJlZGljdG9yIHJ1bnRpbWUgaWRlbnRpdHkgZmllbGRzIHJlcXVpcmVkIikKICAgICAgICBmb3IgbiBpbiAoInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIik6CiAgICAgICAgICAgIF9oZXg2NChnZXRhdHRyKHNlbGYsbiksbikKICAgICAgICBpZiBzZWxmLnByZWRpY3Rvcl9ydW50aW1lX2lkICE9IHNlbGYuY29udGVudF9oYXNoOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoInByZWRpY3RvciBydW50aW1lIGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbF9oYXNoKHtrOmdldGF0dHIoc2VsZixrKSBmb3IgayBpbiAoCiAgICAgICAgICAgICJjb25zdW1lcl9pZCIsInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsCiAgICAgICAgICAgICJmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsInN0YXJ0ZWRfYXQiLCJlbmRlZF9hdCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIgogICAgICAgICl9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywgKiprd2FyZ3MpIC0+ICJQcmVkaWN0b3JSdW50aW1lTWFuaWZlc3QiOgogICAgICAgIHBheWxvYWQ9e2s6a3dhcmdzLmdldChrKSBmb3IgayBpbiAoCiAgICAgICAgICAgICJjb25zdW1lcl9pZCIsInNvdXJjZV90cmVlX2hhc2giLCJkZXBlbmRlbmN5X2xvY2tfaGFzaCIsInJ1bnRpbWVfZW52aXJvbm1lbnRfaGFzaCIsImV4ZWN1dGFibGVfYXJ0aWZhY3RfaGFzaCIsImVmZmVjdGl2ZV9jb25maWdfaGFzaCIsCiAgICAgICAgICAgICJmaW5hbF9tb2RlbF9yZWdpc3RyeV9pZCIsImZlYXR1cmVfZXh0cmFjdG9yX2NvZGVfaGFzaCIsInN0YXJ0ZWRfYXQiLCJlbmRlZF9hdCIsImRlcGxveW1lbnRfcmVjZWlwdF9oYXNoIgogICAgICAgICl9CiAgICAgICAgcmV0dXJuIGNscyhwcmVkaWN0b3JfcnVudGltZV9pZD1jYW5vbmljYWxfaGFzaChwYXlsb2FkKSwqKmt3YXJncykKCiAgICBkZWYgY29udGFpbnMoc2VsZix0OmRhdGV0aW1lKS0+Ym9vbDoKICAgICAgICBfYXdhcmUodCwicHJlZGljdG9yIHJ1bnRpbWUgdGltZSIpCiAgICAgICAgcmV0dXJuIHNlbGYuc3RhcnRlZF9hdCA8PSB0IGFuZCAoc2VsZi5lbmRlZF9hdCBpcyBOb25lIG9yIHQgPCBzZWxmLmVuZGVkX2F0KQ==","source_sha256":"6514f10948abbeb0030fb06b509a8a75d796eea4d6ef4101b72e20f688985454"} -SB043P_CLASS_RUNTIME_INTEGRITY_FINALPROSPECTIVESEALBUNDLE={"name":"FinalProspectiveSealBundle","source_b64":"Y2xhc3MgRmluYWxQcm9zcGVjdGl2ZVNlYWxCdW5kbGU6CiAgICBidW5kbGVfaWQ6IHN0cgogICAgYmFzZV9zZWFsX2lkOiBzdHIKICAgIHJ1bnRpbWVfYmluZGluZ19pZDogc3RyCiAgICBmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZDogc3RyCiAgICBjYXB0dXJlX2ZpbmFsaXphdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICBwcmVkaWN0b3JfcnVudGltZV9pZDogc3RyCiAgICBwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaDogc3RyCiAgICBmZWF0dXJlX2JpbmRpbmdfcG9saWN5X2hhc2g6IHN0cgogICAgY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2g6IHN0cgogICAgZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaDogc3RyCiAgICBmcm96ZW5fYXQ6IGRhdGV0aW1lCiAgICBhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaDogc3RyID0gIiIKICAgIGNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2g6IHN0ciA9ICIiCiAgICBhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2g6IHN0ciA9ICIiCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZiktPk5vbmU6CiAgICAgICAgX2F3YXJlKHNlbGYuZnJvemVuX2F0LCJmaW5hbCBwcm9zcGVjdGl2ZSBidW5kbGUgZnJvemVuX2F0IikKICAgICAgICBmb3IgbiBpbiAoImJhc2Vfc2VhbF9pZCIsInJ1bnRpbWVfYmluZGluZ19pZCIsImZpbmFsX2luZmVyZW5jZV9iaW5kaW5nX2lkIiwiY2FwdHVyZV9maW5hbGl6YXRpb25fcG9saWN5X2hhc2giLCJwcmVkaWN0b3JfcnVudGltZV9pZCIsInByZWRpY3Rpb25fY29tbWl0X3BvbGljeV9oYXNoIiwiZmVhdHVyZV9iaW5kaW5nX3BvbGljeV9oYXNoIiwiY29sbGVjdG9yX2pvdXJuYWxfcG9saWN5X2hhc2giLCJkZXBsb3ltZW50X2F0dGVzdGF0aW9uX3BvbGljeV9oYXNoIik6CiAgICAgICAgICAgIF9oZXg2NChnZXRhdHRyKHNlbGYsbiksIG4pCiAgICAgICAgZm9yIG4gaW4gKCJhbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaCIsImNyaXRpY2FsX2hhc2hfcG9saWN5X2hhc2giLCJhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2giKToKICAgICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLG4pOiBfaGV4NjQoZ2V0YXR0cihzZWxmLG4pLG4pCiAgICAgICAgaWYgc2VsZi5idW5kbGVfaWQgIT0gc2VsZi5jb250ZW50X2hhc2g6IHJhaXNlIERlbW9ub3ZFcnJvcigiZmluYWwgcHJvc3BlY3RpdmUgc2VhbCBidW5kbGUgaWQgbXVzdCBiZSBjb250ZW50LWFkZHJlc3NlZCIpCgogICAgQHByb3BlcnR5CiAgICBkZWYgY29udGVudF9oYXNoKHNlbGYpLT5zdHI6CiAgICAgICAgcGF5bG9hZD17azpnZXRhdHRyKHNlbGYsaykgZm9yIGsgaW4gKCJiYXNlX3NlYWxfaWQiLCJydW50aW1lX2JpbmRpbmdfaWQiLCJmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZCIsImNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoIiwicHJlZGljdG9yX3J1bnRpbWVfaWQiLCJwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCIsImZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCIsImNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeV9oYXNoIiwiZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaCIsImZyb3plbl9hdCIpfQogICAgICAgIGlmIHNlbGYuYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2g6IHBheWxvYWRbImFuYWx5c2lzX2VuZm9yY2VtZW50X3BvbGljeV9oYXNoIl09c2VsZi5hbmFseXNpc19lbmZvcmNlbWVudF9wb2xpY3lfaGFzaAogICAgICAgIGlmIHNlbGYuY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaDogcGF5bG9hZFsiY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaCJdPXNlbGYuY3JpdGljYWxfaGFzaF9wb2xpY3lfaGFzaAogICAgICAgIGlmIHNlbGYuYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeV9oYXNoOiBwYXlsb2FkWyJhcnRpZmFjdF9yZXRlbnRpb25fcG9saWN5X2hhc2giXT1zZWxmLmFydGlmYWN0X3JldGVudGlvbl9wb2xpY3lfaGFzaAogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaChwYXlsb2FkKQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywqKmt3YXJncyktPiJGaW5hbFByb3NwZWN0aXZlU2VhbEJ1bmRsZSI6CiAgICAgICAgcGF5bG9hZD17azprd2FyZ3Nba10gZm9yIGsgaW4gKCJiYXNlX3NlYWxfaWQiLCJydW50aW1lX2JpbmRpbmdfaWQiLCJmaW5hbF9pbmZlcmVuY2VfYmluZGluZ19pZCIsImNhcHR1cmVfZmluYWxpemF0aW9uX3BvbGljeV9oYXNoIiwicHJlZGljdG9yX3J1bnRpbWVfaWQiLCJwcmVkaWN0aW9uX2NvbW1pdF9wb2xpY3lfaGFzaCIsImZlYXR1cmVfYmluZGluZ19wb2xpY3lfaGFzaCIsImNvbGxlY3Rvcl9qb3VybmFsX3BvbGljeV9oYXNoIiwiZGVwbG95bWVudF9hdHRlc3RhdGlvbl9wb2xpY3lfaGFzaCIsImZyb3plbl9hdCIpfQogICAgICAgIGZvciBuIGluICgiYW5hbHlzaXNfZW5mb3JjZW1lbnRfcG9saWN5X2hhc2giLCJjcml0aWNhbF9oYXNoX3BvbGljeV9oYXNoIiwiYXJ0aWZhY3RfcmV0ZW50aW9uX3BvbGljeV9oYXNoIik6CiAgICAgICAgICAgIGlmIGt3YXJncy5nZXQobik6IHBheWxvYWRbbl09a3dhcmdzW25dCiAgICAgICAgcmV0dXJuIGNscyhidW5kbGVfaWQ9Y2Fub25pY2FsX2hhc2gocGF5bG9hZCksKiprd2FyZ3Mp","source_sha256":"ea3da9d118f8c5b321632f3ea03659428d5308f44a6f59239d381d741fd128d7"} -SB043P_CLASS_RUNTIME_INTEGRITY_EXPERIMENTSEALRECEIPT={"name":"ExperimentSealReceipt","source_b64":"Y2xhc3MgRXhwZXJpbWVudFNlYWxSZWNlaXB0OgogICAgcmVjZWlwdF9jb21taXRtZW50X2lkOiBzdHIKICAgIHNlYWxfYnVuZGxlX2lkOiBzdHIKICAgIHByb3ZpZGVyX2lkOiBzdHIKICAgIHJlY2VpcHRfaWQ6IHN0cgogICAgYW5jaG9yZWRfYXQ6IGRhdGV0aW1lCiAgICByZWNlaXB0X3BheWxvYWRfaGFzaDogc3RyCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZiktPk5vbmU6CiAgICAgICAgX2F3YXJlKHNlbGYuYW5jaG9yZWRfYXQsImV4cGVyaW1lbnQgc2VhbCBhbmNob3JlZF9hdCIpCiAgICAgICAgaWYgbm90IGFsbCgoc2VsZi5zZWFsX2J1bmRsZV9pZCxzZWxmLnByb3ZpZGVyX2lkLHNlbGYucmVjZWlwdF9pZCxzZWxmLnJlY2VpcHRfcGF5bG9hZF9oYXNoKSk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBzZWFsIHJlY2VpcHQgZmllbGRzIHJlcXVpcmVkIikKICAgICAgICBfaGV4NjQoc2VsZi5zZWFsX2J1bmRsZV9pZCwic2VhbF9idW5kbGVfaWQiKQogICAgICAgIGlmIHNlbGYucmVjZWlwdF9jb21taXRtZW50X2lkICE9IHNlbGYuY29udGVudF9oYXNoOiByYWlzZSBEZW1vbm92RXJyb3IoImV4cGVyaW1lbnQgc2VhbCByZWNlaXB0IGlkIG11c3QgYmUgY29udGVudC1hZGRyZXNzZWQiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKS0+c3RyOgogICAgICAgIHJldHVybiBjYW5vbmljYWxfaGFzaCh7InNlYWxfYnVuZGxlX2lkIjpzZWxmLnNlYWxfYnVuZGxlX2lkLCJwcm92aWRlcl9pZCI6c2VsZi5wcm92aWRlcl9pZCwicmVjZWlwdF9pZCI6c2VsZi5yZWNlaXB0X2lkLCJhbmNob3JlZF9hdCI6c2VsZi5hbmNob3JlZF9hdCwicmVjZWlwdF9wYXlsb2FkX2hhc2giOnNlbGYucmVjZWlwdF9wYXlsb2FkX2hhc2h9KQoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJ1aWxkKGNscywqKmt3YXJncyktPiJFeHBlcmltZW50U2VhbFJlY2VpcHQiOgogICAgICAgIHBheWxvYWQ9e2s6a3dhcmdzW2tdIGZvciBrIGluICgic2VhbF9idW5kbGVfaWQiLCJwcm92aWRlcl9pZCIsInJlY2VpcHRfaWQiLCJhbmNob3JlZF9hdCIsInJlY2VpcHRfcGF5bG9hZF9oYXNoIil9CiAgICAgICAgcmV0dXJuIGNscyhyZWNlaXB0X2NvbW1pdG1lbnRfaWQ9Y2Fub25pY2FsX2hhc2gocGF5bG9hZCksKiprd2FyZ3Mp","source_sha256":"1ae45f3233a0be2e37fa10392b891f0a8a308ecdcbf2305e32e0582131f84a62"} -SB043P_SOURCE_LIVE_PROSPECTIVE_META={"class_names":["ExperimentProvenance"],"error":null,"exists":true,"function_names":["_hash"],"lines":851,"sha256":"f83f48dfeb4dc1382ebf3c77b7ec27deaeac6eec4a5dc097f90600963f0e4e98"} -SB043P_FUNC_LIVE_PROSPECTIVE__HASH={"args":["value"],"kwonly":[],"name":"_hash","source_b64":"ZGVmIF9oYXNoKHZhbHVlOiBvYmplY3QpIC0+IHN0cjoKICAgIHJldHVybiBoYXNobGliLnNoYTI1NigKICAgICAgICBqc29uLmR1bXBzKHZhbHVlLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oIiwiLCAiOiIpLCBlbnN1cmVfYXNjaWk9VHJ1ZSkuZW5jb2RlKCkKICAgICkuaGV4ZGlnZXN0KCk=","source_sha256":"64852a5a5c1cbe9d7f87333c81d5297577a32765474ef64aaf3848be34668232"} -SB043P_CLASS_LIVE_PROSPECTIVE_EXPERIMENTPROVENANCE={"name":"ExperimentProvenance","source_b64":"Y2xhc3MgRXhwZXJpbWVudFByb3ZlbmFuY2U6CiAgICBleHBlcmltZW50X2lkOiBzdHIKICAgIGNvbGxlY3Rpb25fc3RhcnRfYXQ6IGRhdGV0aW1lCiAgICBjb2RlX2lkZW50aXR5OiBzdHIKICAgIHBvbGljeV9yZWdpc3RyeV9pZDogc3RyCiAgICBtYXJrZXRfYnVuZGxlX2lkOiBzdHIKICAgIGdlb21ldHJ5X3BvbGljeV9pZDogc3RyCiAgICBkZW1vbm92X2JyYW5jaF9wb2xpY3lfaWQ6IHN0cgogICAgbm90aWZpY2F0aW9uX3BvbGljeV9pZDogc3RyCiAgICBvdXRjb21lX3BvbGljeV9pZDogc3RyCiAgICBleHBlcmltZW50X3ZlcnNpb246IHN0ciA9ICJMSVZFX1BST1NQRUNUSVZFX1YxIgogICAgZmluYWxpdHlfcG9saWN5X2lkOiBzdHIgPSAiIgogICAgcnVudGltZV9tYW5pZmVzdF9pZDogc3RyID0gIiIKCiAgICBkZWYgX2Jhc2VfaGFzaF9wYXlsb2FkKHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgImNvbGxlY3Rpb25fc3RhcnRfYXQiOiBzZWxmLmNvbGxlY3Rpb25fc3RhcnRfYXQuaXNvZm9ybWF0KCksCiAgICAgICAgICAgICJjb2RlX2lkZW50aXR5Ijogc2VsZi5jb2RlX2lkZW50aXR5LAogICAgICAgICAgICAicG9saWN5X3JlZ2lzdHJ5X2lkIjogc2VsZi5wb2xpY3lfcmVnaXN0cnlfaWQsCiAgICAgICAgICAgICJtYXJrZXRfYnVuZGxlX2lkIjogc2VsZi5tYXJrZXRfYnVuZGxlX2lkLAogICAgICAgICAgICAiZ2VvbWV0cnlfcG9saWN5X2lkIjogc2VsZi5nZW9tZXRyeV9wb2xpY3lfaWQsCiAgICAgICAgICAgICJkZW1vbm92X2JyYW5jaF9wb2xpY3lfaWQiOiBzZWxmLmRlbW9ub3ZfYnJhbmNoX3BvbGljeV9pZCwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbl9wb2xpY3lfaWQiOiBzZWxmLm5vdGlmaWNhdGlvbl9wb2xpY3lfaWQsCiAgICAgICAgICAgICJvdXRjb21lX3BvbGljeV9pZCI6IHNlbGYub3V0Y29tZV9wb2xpY3lfaWQsCiAgICAgICAgfQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGNvbnRlbnRfaGFzaChzZWxmKSAtPiBzdHI6CiAgICAgICAgcGF5bG9hZCA9IHNlbGYuX2Jhc2VfaGFzaF9wYXlsb2FkKCkKICAgICAgICBpZiBzZWxmLmV4cGVyaW1lbnRfdmVyc2lvbiA9PSAiTElWRV9QUk9TUEVDVElWRV9WMSI6CiAgICAgICAgICAgIHJldHVybiBfaGFzaChwYXlsb2FkKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YyIjoKICAgICAgICAgICAgcGF5bG9hZC51cGRhdGUoewogICAgICAgICAgICAgICAgImV4cGVyaW1lbnRfdmVyc2lvbiI6IHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uLAogICAgICAgICAgICAgICAgImZpbmFsaXR5X3BvbGljeV9pZCI6IHNlbGYuZmluYWxpdHlfcG9saWN5X2lkLAogICAgICAgICAgICAgICAgInJ1bnRpbWVfbWFuaWZlc3RfaWQiOiBzZWxmLnJ1bnRpbWVfbWFuaWZlc3RfaWQsCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIHJldHVybiBfaGFzaChwYXlsb2FkKQogICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBwcm92ZW5hbmNlIHZlcnNpb24gaW52YWxpZCIpCgogICAgZGVmIF9fcG9zdF9pbml0X18oc2VsZikgLT4gTm9uZToKICAgICAgICBpZiAoCiAgICAgICAgICAgIHNlbGYuY29sbGVjdGlvbl9zdGFydF9hdC50emluZm8gaXMgTm9uZQogICAgICAgICAgICBvciBzZWxmLmNvbGxlY3Rpb25fc3RhcnRfYXQudXRjb2Zmc2V0KCkgaXMgTm9uZQogICAgICAgICk6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigKICAgICAgICAgICAgICAgICJleHBlcmltZW50IGNvbGxlY3Rpb24gc3RhcnQgbXVzdCBiZSB0aW1lem9uZS1hd2FyZSIKICAgICAgICAgICAgKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgaWYgc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQgb3Igc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMSBleHBlcmltZW50IHByb3ZlbmFuY2UgY2Fubm90IGJpbmQgVjIgZmluYWxpdHkvcnVudGltZSBpZGVudGl0eSIKICAgICAgICAgICAgICAgICkKICAgICAgICBlbGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YyIjoKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5maW5hbGl0eV9wb2xpY3lfaWQsIHN0cikgb3Igbm90IHNlbGYuZmluYWxpdHlfcG9saWN5X2lkOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMiBleHBlcmltZW50IGZpbmFsaXR5IHBvbGljeSBpZCBpcyByZXF1aXJlZCIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2Uoc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkLCBzdHIpCiAgICAgICAgICAgICAgICBvciBsZW4oc2VsZi5ydW50aW1lX21hbmlmZXN0X2lkKSAhPSA2NAogICAgICAgICAgICAgICAgb3IgYW55KAogICAgICAgICAgICAgICAgICAgIGMgbm90IGluICIwMTIzNDU2Nzg5YWJjZGVmIgogICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHNlbGYucnVudGltZV9tYW5pZmVzdF9pZAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgICAgICJWMiBleHBlcmltZW50IHJ1bnRpbWUgbWFuaWZlc3QgaWQgbXVzdCBiZSBsb3dlcmNhc2Ugc2hhMjU2IGhleCIKICAgICAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBEZW1vbm92RXJyb3IoImV4cGVyaW1lbnQgcHJvdmVuYW5jZSB2ZXJzaW9uIGludmFsaWQiKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF9pZCAhPSBzZWxmLmNvbnRlbnRfaGFzaDoKICAgICAgICAgICAgcmFpc2UgRGVtb25vdkVycm9yKAogICAgICAgICAgICAgICAgImV4cGVyaW1lbnQgcHJvdmVuYW5jZSBpZCBtdXN0IGJlIGNvbnRlbnQtYWRkcmVzc2VkIgogICAgICAgICAgICApCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgYnVpbGQoY2xzLCAqKmt3YXJncykgLT4gIkV4cGVyaW1lbnRQcm92ZW5hbmNlIjoKICAgICAgICBwYXlsb2FkID0gZGljdChrd2FyZ3MpCiAgICAgICAgdmVyc2lvbiA9IHBheWxvYWQuZ2V0KAogICAgICAgICAgICAiZXhwZXJpbWVudF92ZXJzaW9uIiwKICAgICAgICAgICAgIkxJVkVfUFJPU1BFQ1RJVkVfVjEiLAogICAgICAgICkKICAgICAgICBwYXlsb2FkWyJleHBlcmltZW50X3ZlcnNpb24iXSA9IHZlcnNpb24KICAgICAgICBwYXlsb2FkLnNldGRlZmF1bHQoImZpbmFsaXR5X3BvbGljeV9pZCIsICIiKQogICAgICAgIHBheWxvYWQuc2V0ZGVmYXVsdCgicnVudGltZV9tYW5pZmVzdF9pZCIsICIiKQogICAgICAgIGJhc2UgPSB7CiAgICAgICAgICAgICJjb2xsZWN0aW9uX3N0YXJ0X2F0IjogcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdLmlzb2Zvcm1hdCgpLAogICAgICAgICAgICAiY29kZV9pZGVudGl0eSI6IHBheWxvYWRbImNvZGVfaWRlbnRpdHkiXSwKICAgICAgICAgICAgInBvbGljeV9yZWdpc3RyeV9pZCI6IHBheWxvYWRbInBvbGljeV9yZWdpc3RyeV9pZCJdLAogICAgICAgICAgICAibWFya2V0X2J1bmRsZV9pZCI6IHBheWxvYWRbIm1hcmtldF9idW5kbGVfaWQiXSwKICAgICAgICAgICAgImdlb21ldHJ5X3BvbGljeV9pZCI6IHBheWxvYWRbImdlb21ldHJ5X3BvbGljeV9pZCJdLAogICAgICAgICAgICAiZGVtb25vdl9icmFuY2hfcG9saWN5X2lkIjogcGF5bG9hZFsiZGVtb25vdl9icmFuY2hfcG9saWN5X2lkIl0sCiAgICAgICAgICAgICJub3RpZmljYXRpb25fcG9saWN5X2lkIjogcGF5bG9hZFsibm90aWZpY2F0aW9uX3BvbGljeV9pZCJdLAogICAgICAgICAgICAib3V0Y29tZV9wb2xpY3lfaWQiOiBwYXlsb2FkWyJvdXRjb21lX3BvbGljeV9pZCJdLAogICAgICAgIH0KICAgICAgICBpZiB2ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgZWlkID0gX2hhc2goYmFzZSkKICAgICAgICBlbGlmIHZlcnNpb24gPT0gIkxJVkVfUFJPU1BFQ1RJVkVfVjIiOgogICAgICAgICAgICBlaWQgPSBfaGFzaCh7CiAgICAgICAgICAgICAgICAqKmJhc2UsCiAgICAgICAgICAgICAgICAiZXhwZXJpbWVudF92ZXJzaW9uIjogdmVyc2lvbiwKICAgICAgICAgICAgICAgICJmaW5hbGl0eV9wb2xpY3lfaWQiOiBwYXlsb2FkWyJmaW5hbGl0eV9wb2xpY3lfaWQiXSwKICAgICAgICAgICAgICAgICJydW50aW1lX21hbmlmZXN0X2lkIjogcGF5bG9hZFsicnVudGltZV9tYW5pZmVzdF9pZCJdLAogICAgICAgICAgICB9KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJhaXNlIERlbW9ub3ZFcnJvcigiZXhwZXJpbWVudCBwcm92ZW5hbmNlIHZlcnNpb24gaW52YWxpZCIpCiAgICAgICAgcmV0dXJuIGNscyhleHBlcmltZW50X2lkPWVpZCwgKipwYXlsb2FkKQoKICAgIGRlZiB0b19qc29uKHNlbGYpIC0+IGRpY3Q6CiAgICAgICAgcGF5bG9hZCA9IGFzZGljdChzZWxmKQogICAgICAgIHBheWxvYWRbImNvbGxlY3Rpb25fc3RhcnRfYXQiXSA9ICgKICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uX3N0YXJ0X2F0Lmlzb2Zvcm1hdCgpCiAgICAgICAgKQogICAgICAgIGlmIHNlbGYuZXhwZXJpbWVudF92ZXJzaW9uID09ICJMSVZFX1BST1NQRUNUSVZFX1YxIjoKICAgICAgICAgICAgcGF5bG9hZC5wb3AoImV4cGVyaW1lbnRfdmVyc2lvbiIsIE5vbmUpCiAgICAgICAgICAgIHBheWxvYWQucG9wKCJmaW5hbGl0eV9wb2xpY3lfaWQiLCBOb25lKQogICAgICAgICAgICBwYXlsb2FkLnBvcCgicnVudGltZV9tYW5pZmVzdF9pZCIsIE5vbmUpCiAgICAgICAgcmV0dXJuIHBheWxvYWQKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX2pzb24oY2xzLCBkYXRhOiBkaWN0KSAtPiAiRXhwZXJpbWVudFByb3ZlbmFuY2UiOgogICAgICAgIHBheWxvYWQgPSBkaWN0KGRhdGEpCiAgICAgICAgcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdID0gZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgKICAgICAgICAgICAgcGF5bG9hZFsiY29sbGVjdGlvbl9zdGFydF9hdCJdCiAgICAgICAgKQogICAgICAgIHBheWxvYWQuc2V0ZGVmYXVsdCgKICAgICAgICAgICAgImV4cGVyaW1lbnRfdmVyc2lvbiIsCiAgICAgICAgICAgICJMSVZFX1BST1NQRUNUSVZFX1YxIiwKICAgICAgICApCiAgICAgICAgcGF5bG9hZC5zZXRkZWZhdWx0KCJmaW5hbGl0eV9wb2xpY3lfaWQiLCAiIikKICAgICAgICBwYXlsb2FkLnNldGRlZmF1bHQoInJ1bnRpbWVfbWFuaWZlc3RfaWQiLCAiIikKICAgICAgICByZXR1cm4gY2xzKCoqcGF5bG9hZCk=","source_sha256":"0a13b8a99eb3de83ea43a86ea2b7f1d6d0b0477d3cf7833d2d4f084ccd3b150c"} -SB043P_HOLDS=[] -SB043P_DECISION=ACTIVATION_SEAL_CONTRACT_EVIDENCE_READY -SB043P_MUTATION_SCOPE=NONE_READ_ONLY -SIGNALBOT043P_HOLDS=[] -SIGNALBOT043P_DECISION=ACTIVATION_SEAL_CONTRACT_EVIDENCE_READY -SIGNALBOT043P_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION +PRIOR_FORENSIC2_GATE=PASS +PRIOR_FORENSIC2_HISTORY_SHA256=ca4539996dc20a97e98687e1c0721f53b03e9c9e0c9e68fc62d4686081053271 +PUBLIC_DNS_PTR={"PTR":{"err":"","rc":0,"values":[]},"chat.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"git.gram1.ru":{"A":["185.225.35.6"],"err":"","rc":0},"groups.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0},"newfi-staging.gram1.ru":{"A":[],"err":"","rc":0},"share.chat.gram1.ru":{"A":["chat.gram1.ru.","185.225.35.6"],"err":"","rc":0}} +PUBLIC_CERT_GIT_GRAM1_RU={"err":"","out":"subject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\nnotBefore=Aug 17 02:03:29 2026 GMT\nnotAfter=Nov 15 02:03:28 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:git-read.gram1.ru, DNS:git.gram1.ru","rc":0} +PUBLIC_CURL_GIT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)"],"http":"200","rc":0} +PUBLIC_CERT_CHAT_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0} +PUBLIC_CURL_CHAT_GRAM1_RU={"err":"","headers":["Server: nginx/1.28.3 (Ubuntu)","location: /login"],"http":"302","rc":0} +PUBLIC_CERT_NEWFI_STAGING_GRAM1_RU={"err":"","out":"subject=CN=chat.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE2\nserial=05CCB33370771F433AE4E9AD47F2DB574672\nnotBefore=Aug 17 02:54:43 2026 GMT\nnotAfter=Nov 15 02:54:42 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:chat.gram1.ru, DNS:groups.chat.gram1.ru, DNS:share.chat.gram1.ru","rc":0} +PUBLIC_CURL_NEWFI_STAGING_GRAM1_RU={"err":"curl: (60) SSL: no alternative certificate subject name matches target hostname 'newfi-staging.gram1.ru'\nMore details here: https://curl.se/docs/sslcerts.html\n\ncurl failed to verify the legitimacy of the server and therefore could not\nestablish a secure connection to it. To learn more about this situation and\nhow to fix it, please visit the webpage mentioned above.\n","headers":[],"http":"000","rc":60} +CLUSTER_VM_CT_INVENTORY={"err":"","rc":0,"rows":[{"name":"dns1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":110},{"name":"dns2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":111},{"name":"unbound1","node":"pve01","status":"running","template":0,"type":"lxc","vmid":112},{"name":"unbound2","node":"pve02","status":"running","template":0,"type":"lxc","vmid":113},{"name":"edge-vm","node":"pve03","status":"running","template":0,"type":"qemu","vmid":130},{"name":"snikket","node":"pve01","status":"running","template":0,"type":"qemu","vmid":150},{"name":"forum-prod","node":"pve02","status":"running","template":0,"type":"qemu","vmid":160},{"name":"core-apps","node":"pve01","status":"running","template":0,"type":"qemu","vmid":170},{"name":"monitoring","node":"pve01","status":"running","template":0,"type":"qemu","vmid":171},{"name":"homelab-ops-worker","node":"pve03","status":"running","template":0,"type":"qemu","vmid":190},{"name":"newfi-prod","node":"pve01","status":"running","template":0,"type":"qemu","vmid":210},{"name":"newfi-staging","node":"pve03","status":"running","template":0,"type":"qemu","vmid":211},{"name":"edge-cold-standby","node":"pve02","status":"stopped","template":0,"type":"qemu","vmid":9130}]} +PVE01_DEFAULT_ROUTE={"err":"","gateway":"[PRIVATE_IP]","line":"default via [PRIVATE_IP] dev vmbr0 proto kernel onlink","rc":0} +PVE01_GATEWAY_NEIGHBOR={"err":"","out":"[PRIVATE_IP] dev vmbr0 lladdr d6:9c:53:00:2c:c3 REACHABLE","rc":0} +GATEWAY_BASIC_PORTS={"22":{"open":false,"rc":124},"443":{"open":false,"rc":124},"80":{"open":false,"rc":124},"8443":{"open":false,"rc":124}} +GATEWAY_SSH_KEYSCAN={"err":"","out":"","rc":1} +GATEWAY_HTTP_HEAD={"err":"curl: (28) Connection timed out after 5002 milliseconds\n","out":"","rc":28} +GATEWAY_HTTPS_HEAD={"err":"curl: (28) Connection timed out after 5001 milliseconds\n","out":"","rc":28} +EDGE_PRIVATE_IP_DISCOVERY={"ips":["[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]","[PRIVATE_IP]"],"rc":0,"selected":null} +EDGE_WEB_LISTENER_OWNERSHIP={"err":"","out":"--- SS_WEB ---\nState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess \nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=16),(\"nginx\",pid=2180089,fd=16),(\"nginx\",pid=2180083,fd=16),(\"nginx\",pid=2180082,fd=16),(\"nginx\",pid=3096,fd=16))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=15),(\"nginx\",pid=2180089,fd=15),(\"nginx\",pid=2180083,fd=15),(\"nginx\",pid=2180082,fd=15),(\"nginx\",pid=3096,fd=15))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=14),(\"nginx\",pid=2180089,fd=14),(\"nginx\",pid=2180083,fd=14),(\"nginx\",pid=2180082,fd=14),(\"nginx\",pid=3096,fd=14))\nLISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=7),(\"nginx\",pid=2180089,fd=7),(\"nginx\",pid=2180083,fd=7),(\"nginx\",pid=2180082,fd=7),(\"nginx\",pid=3096,fd=7)) \nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=13),(\"nginx\",pid=2180089,fd=13),(\"nginx\",pid=2180083,fd=13),(\"nginx\",pid=2180082,fd=13),(\"nginx\",pid=3096,fd=13))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=12),(\"nginx\",pid=2180089,fd=12),(\"nginx\",pid=2180083,fd=12),(\"nginx\",pid=2180082,fd=12),(\"nginx\",pid=3096,fd=12))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=11),(\"nginx\",pid=2180089,fd=11),(\"nginx\",pid=2180083,fd=11),(\"nginx\",pid=2180082,fd=11),(\"nginx\",pid=3096,fd=11))\nLISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=6),(\"nginx\",pid=2180089,fd=6),(\"nginx\",pid=2180083,fd=6),(\"nginx\",pid=2180082,fd=6),(\"nginx\",pid=3096,fd=6)) \nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=19),(\"nginx\",pid=2180089,fd=19),(\"nginx\",pid=2180083,fd=19),(\"nginx\",pid=2180082,fd=19),(\"nginx\",pid=3096,fd=19))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=18),(\"nginx\",pid=2180089,fd=18),(\"nginx\",pid=2180083,fd=18),(\"nginx\",pid=2180082,fd=18),(\"nginx\",pid=3096,fd=18))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=17),(\"nginx\",pid=2180089,fd=17),(\"nginx\",pid=2180083,fd=17),(\"nginx\",pid=2180082,fd=17),(\"nginx\",pid=3096,fd=17))\nLISTEN 0 511 127.0.0.1:81 0.0.0.0:* users:((\"nginx\",pid=2180110,fd=8),(\"nginx\",pid=2180089,fd=8),(\"nginx\",pid=2180083,fd=8),(\"nginx\",pid=2180082,fd=8),(\"nginx\",pid=3096,fd=8)) \nLISTEN 0 511 [::]:443 [::]:* users:((\"nginx\",pid=2180110,fd=10),(\"nginx\",pid=2180089,fd=10),(\"nginx\",pid=2180083,fd=10),(\"nginx\",pid=2180082,fd=10),(\"nginx\",pid=3096,fd=10))\nLISTEN 0 511 [::]:80 [::]:* users:((\"nginx\",pid=2180110,fd=9),(\"nginx\",pid=2180089,fd=9),(\"nginx\",pid=2180083,fd=9),(\"nginx\",pid=2180082,fd=9),(\"nginx\",pid=3096,fd=9)) \n--- PROCESS_TREE_NGINX ---\n 1920 1674 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n 2031 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 2375 -container-ip [PRIVATE_IP] -container-port 2375 -use-listen-fd\n 2107 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8081 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 2160 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 7422 -container-ip [PRIVATE_IP] -container-port 7422 -use-listen-fd\n 2180 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 8088 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 2201 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 12345 -container-ip [PRIVATE_IP] -container-port 12345 -use-listen-fd\n 2213 1920 root haproxy /usr/sbin/haproxy -f /run/haproxy/haproxy.cfg -W -db\n 2223 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 3100 -container-ip [PRIVATE_IP] -container-port 3100 -use-listen-fd\n 2332 888 root docker-proxy /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9999 -container-ip [PRIVATE_IP] -container-port 8080 -use-listen-fd\n 3096 3095 root nginx nginx: master process nginx -e stderr\n1948449 3096 root nginx nginx: worker process is shutting down\n2180082 3096 root nginx nginx: worker process\n2180083 3096 root nginx nginx: worker process\n2180089 3096 root nginx nginx: worker process\n2180110 3096 root nginx nginx: worker process\n2183049 722 root bash /bin/bash -lc echo '--- SS_WEB ---' ss -ltnp | awk 'NR==1 || $4 ~ /:(80|81|443)$/' echo '--- PROCESS_TREE_NGINX ---' ps -eo pid,ppid,user,comm,args | grep -E '[n]ginx|[d]ocker-proxy|[h]aproxy|[c]addy|[t]raefik' echo '--- NPMPLUS_MODE ---' docker inspect npmplus --format '{{.HostConfig.NetworkMode}}' echo '--- NPMPLUS_IMAGE ---' docker inspect npmplus --format '{{.Config.Image}} {{.Image}}' echo '--- NPMPLUS_NGINX_VERSION ---' docker exec npmplus /usr/local/nginx/sbin/nginx -v 2>&1 \n2631782 1 root sudo sudo bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n2631784 2631782 root bash bash -lc set -euo pipefail; IDS=\"30 32 33 34 35 36 37 38 39 40 43 44 47 54 55 56 57 58 59\"; B=\"/opt/npmplus/manual-backups/stale-proxy-host-retirement-$(date -u +%Y%m%dT%H%M%SZ)\"; install -d -m 700 \"$B\"; python3 -c \"import sqlite3; s=sqlite3.connect(\\\"file:/opt/npmplus/npmplus/database.sqlite?mode=ro\\\",uri=True); d=sqlite3.connect(\\\"$B/database.sqlite.before\\\"); s.backup(d); d.close(); s.close()\"; chmod 600 \"$B/database.sqlite.before\"; for id in $IDS; do [ ! -e \"/opt/npmplus/nginx/proxy_host/$id.conf\" ] || cp -a \"/opt/npmplus/nginx/proxy_host/$id.conf\" \"$B/$id.conf.before\"; done; docker exec npmplus grep -q \"is_deleted: 1\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"Delete Nginx Config\" /app/internal/proxy-host.js; docker exec npmplus grep -q \"internalNginx.reload\" /app/internal/proxy-host.js; C=\"/data${B#/opt/npmplus}\"; printf \"%s\\n\" \"import internalProxyHost from \\\"/app/internal/proxy-host.js\\\";\" \"const ids=[30,32,33,34,35,36,37,38,39,40,43,44,47,54,55,56,57,58,59];\" \"const access={can:async()=>({permission_visibility:\\\"all\\\"}),token=;\" \"for (const id of ids) { const ok=await internalProxyHost.delete(access,{id}); console.log(\\\"DELETED=\\\"+id+\\\":\\\"+ok); }\" > \"$B/delete-stale.mjs\"; chmod 644 \"$B/delete-stale.mjs\"; docker exec -u 0 npmplus node --check \"$C/delete-stale.mjs\"; echo \"BACKUP=$B\"; docker exec -u 0 npmplus node \"$C/delete-stale.mjs\"; docker exec npmplus nginx -t; echo NPMPLUS_STALE_PROXY_HOST_DELETE=PASS\n--- NPMPLUS_MODE ---\nhost\n--- NPMPLUS_IMAGE ---\ndocker.io/zoeyvid/npmplus:2026-06-17-b1 sha256:058637924fae1dbf161d1d78c84b738d86804e9a0ddad66cf7c87cbe33337834\n--- NPMPLUS_NGINX_VERSION ---\nnginx version: nginx/1.31.2 (NPMplus)","rc":0} +FOCUSED_FRONTEND_REFERENCES={"err":"","out":"[{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":951,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":1967,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2418,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2454,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2803,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":2832,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":4810,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":5436,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":6683,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7096,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7161,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7455,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":7540,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8263,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8552,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8620,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8631,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8653,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":8702,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9006,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9062,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9305,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9319,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":9870,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10101,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10113,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10629,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":10722,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11033,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host. \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%. \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md\",\"line\":11044,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md\",\"line\":22,\"text\":\"| Gitea | https://git.gram1.ru | 185 | 89 | 105 | EVIDENCE_FOUND_REVIEW |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":315,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":604,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":672,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":683,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":705,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":754,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1058,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1114,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1357,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1371,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":1922,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2153,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2165,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2515,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2561,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2872,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2873,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2902,\"text\":\"- chat.gram1.ru public A is 185.225.35.6; groups.chat.gram1.ru and share.chat.gram1.ru continue through chat.gram1.ru.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2905,\"text\":\"- VM150 Internet default path is via [PRIVATE_IP] and verified public egress is 185.225.35.6.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2906,\"text\":\"- Effective coturn external address uses 185.225.35.6 and no longer advertises 95.84.154.183.\"},{\"path\":\"/etc/pve/31_HOMELAB_REFERENCE.md\",\"line\":2912,\"text\":\"- Public DNS observed at release: 185.225.35.6; DNS was not changed during forum cutover.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":1831,\"text\":\"URL=https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":2847,\"text\":\"4. The only remaining access convenience item is optional: expose the cluster-admin panel via a VPN-only/internal reverse proxy route such as `cluster-admin.vpn.gram1.ru`.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3298,\"text\":\"from=\\\"[PRIVATE_IP]\\\",command=\\\"...\\\",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3334,\"text\":\"- Optional ports 80/443 on VM150/170/171 are not hard failures because services may live behind reverse proxy or not expose direct ports.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3683,\"text\":\"Configure operator-friendly VPN reverse proxy route: cluster-admin.vpn.gram1.ru -> [PRIVATE_IP]:8080\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":3712,\"text\":\"8. `http://[PRIVATE_IP]:8080/` is not reachable from a normal browser outside LAN/VPN. Use VPN, SSH tunnel, or internal reverse proxy.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":5690,\"text\":\"- likely frontend/cache;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":6316,\"text\":\"- \\u043a\\u0442\\u043e \\u043e\\u0442\\u0432\\u0435\\u0447\\u0430\\u0435\\u0442 \\u0437\\u0430 reverse proxy;\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7563,\"text\":\"| Core | Gitea | https://git.gram1.ru | public | Git |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":7976,\"text\":\"- line 304: `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8041,\"text\":\"| 257 | `### NAT / port forwarding` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8335,\"text\":\"| 304 | `## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701` |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":8420,\"text\":\"- `https://git.gram1.ru`\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9143,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9432,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9500,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9511,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9533,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9582,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9886,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":9942,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10185,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10199,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10750,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10981,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":10993,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11509,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11602,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11913,\"text\":\"\\u0410 \\u0441\\u0430\\u043c\\u0430\\u044f \\u043a\\u0440\\u0438\\u0442\\u0438\\u0447\\u043d\\u0430\\u044f VM130 edge-vm \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 pve03 \\u0438 \\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 reverse proxy, monitoring, backup automation \\u0438 Docker application host. \\u041f\\u0440\\u0438 \\u044d\\u0442\\u043e\\u043c pve03 \\u2014 \\u0441\\u0430\\u043c\\u044b\\u0439 \\u043e\\u0433\\u0440\\u0430\\u043d\\u0438\\u0447\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043f\\u043e \\u0434\\u0438\\u0441\\u043a\\u0443: local-lvm \\u0443\\u0436\\u0435 \\u0431\\u044b\\u043b \\u0441\\u0430\\u043c\\u044b\\u043c constrained, \\u043f\\u043e\\u0442\\u043e\\u043c\\u0443 \\u0447\\u0442\\u043e VM130 \\u0438\\u043c\\u0435\\u0435\\u0442 96G OS + 150G media/data, \\u0430 pve03 staging \\u0434\\u043e\\u0445\\u043e\\u0434\\u0438\\u043b \\u0434\\u043e 77% \\u043f\\u0440\\u0438 WARN 80%. \"},{\"path\":\"/etc/pve/HOMELAB_FULL_HANDOFF_CURRENT.md\",\"line\":11924,\"text\":\"4. \\u0415\\u0441\\u043b\\u0438 \\u043d\\u0435 \\u043f\\u0435\\u0440\\u0435\\u043d\\u043e\\u0441\\u0438\\u0442\\u044c \\u0441\\u0435\\u0439\\u0447\\u0430\\u0441, \\u0442\\u043e \\u043c\\u0438\\u043d\\u0438\\u043c\\u0443\\u043c \\u0441\\u0434\\u0435\\u043b\\u0430\\u0442\\u044c **cold standby edge-vm** \\u043d\\u0430 pve01 \\u0438\\u043b\\u0438 pve02: \\u0432\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u0430\\u044f \\u0438\\u0437 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e backup, \\u0432\\u044b\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u043d\\u0430\\u044f, \\u0441 \\u043f\\u043e\\u043d\\u044f\\u0442\\u043d\\u044b\\u043c runbook \\u043f\\u0435\\u0440\\u0435\\u043a\\u043b\\u044e\\u0447\\u0435\\u043d\\u0438\\u044f IP/NPMplus/router port forward.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1730,\"text\":\"- public_dns_root: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":1731,\"text\":\"- public_dns_www: 185.225.35.6\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":2603,\"text\":\"2026-09-03 KOW_EXTERNAL_PUBLIC_FRONT_SERVER_VERSION_DISCLOSURE OPEN public_response_Server_nginx_1_28_3_Ubuntu direct_NPMplus_Server_absent identify_external_reverse_proxy_before_mutation\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3035,\"text\":\"CERT38_NARROW_MIGRATION_20260904 | CLOSED_COMMITTED_PASS | Cert38 meta/runtime credential migrated to verified narrow gram1 token; stock npm-38 renewal dry-run succeeded for chat.gram1.ru, groups.chat.gram1.ru and share.chat.gram1.ru.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3100,\"text\":\"EDGE01_SSH_HOSTKEY_UNKNOWN_20260904 | OPEN | Strict SSH to 185.225.35.6 stopped before authentication because no pinned ED25519 host key exists for the IP; no remote state changed and no unverified key was accepted.\"},{\"path\":\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":3112,\"text\":\"PUBLIC_SERVER_VERSION_HARDENING_RUNTIME_MISMATCH_20260904 | CLOSED_PARTIAL_BLOCKED_EXTERNAL_INGRESS | VM130 NPMplus now has server_tokens off on all 13 public manual vhosts and direct-edge responses expose no Server header; public nginx/1.28.3 (Ubuntu) is emitted by EDGE01 185.225.35.6. kingofwolk.ru proves EDGE01 supports per-vhost server_tokens off, but external mutation is blocked until an authorized EDGE01 management credential is restored.\"},{\"path\":\"/root/finish_skladchik_cr_2026_0010_v2.sh\",\"line\":20,\"text\":\"API=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\"},{\"path\":\"/root/774c_dockge_agent_capability_inspect.sh\",\"line\":70,\"text\":\" for f in /app/package.json /app/backend/package.json /app/frontend/package.json; do\"},{\"path\":\"/root/771h_crowdsec_capi_register_correct_sequence.sh\",\"line\":453,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":64,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771d_crowdsec_capi_via_privoxy_tor.sh\",\"line\":314,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771w_pve01_netbird_ssh_egress_crowdsec_capi.sh\",\"line\":586,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_READONLY_SERVICE_CENSUS_20260816T065015Z.txt\",\"line\":4306,\"text\":\" \\\"out-data\\\" : \\\"GUEST_BEGIN|host=forum-prod|utc=2026-08-16T06:50:56Z\\\\nPRETTY_NAME=\\\\\\\"Debian GNU/Linux 12 (bookworm)\\\\\\\"\\\\nVERSION_ID=\\\\\\\"12\\\\\\\"\\\\nID=debian\\\\n\\\\n--- GUEST_DF ---\\\\nFilesystem Type Size Used Avail Use% Mounted on\\\\nudev devtmpfs 3.9G 0 3.9G 0% /dev\\\\ntmpfs tmpfs 796M 512K 795M 1% /run\\\\n/dev/sda1 ext4 197G 15G 175G 8% /\\\\ntmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm\\\\ntmpfs tmpfs 5.0M 0 5.0M 0% /run/lock\\\\n/dev/sda15 vfat 124M 12M 112M 10% /boot/efi\\\\n\\\\n--- GUEST_FAILED_UNITS ---\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\n0 loaded units listed.\\\\n\\\\n--- GUEST_RUNNING_SERVICES ---\\\\nUNIT LOAD ACTIVE SUB DESCRIPTION\\\\nchrony.service loaded active running chrony, an NTP client/server\\\\ncron.service loaded active running Regular background program processing daemon\\\\ndbus.service loaded active running D-Bus System Message Bus\\\\ngetty@tty1.service loaded active running Getty on tty1\\\\nmariadb.service loaded active running MariaDB 10.11.18 database server\\\\nnginx.service loaded active running A high \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1665,\"text\":\"DOMAIN = git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1668,\"text\":\"ROOT_URL = https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1705,\"text\":\"REVERSE_PROXY_LIMIT = 1\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1706,\"text\":\"REVERSE_PROXY_TRUSTED_PROXIES = *\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1902,\"text\":\"# Load frontend themes from the themes folder\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":1903,\"text\":\"frontend:\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":2955,\"text\":\"9 [\\\"git.gram1.ru\\\"] 1 custom 0 none 0 0 SAMEORIGIN 1 \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3524,\"text\":\"# git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":3536,\"text\":\" server_name git.gram1.ru;\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10159,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":10165,\"text\":\"dns_server=[PRIVATE_IP] domain=git.gram1.ru A=[PRIVATE_IP] \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23215,\"text\":\"git.gram1.ru,[PRIVATE_IP],optional-empty,http://127.0.0.1:3002,LAN-only,cloudflare-dns-challenge\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23264,\"text\":\"| Gitea | 127.0.0.1:3002 | https://git.gram1.ru |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23304,\"text\":\"Homelab gram1.ru \\u043f\\u043e\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d \\u0432\\u043e\\u043a\\u0440\\u0443\\u0433 Proxmox-\\u043a\\u043b\\u0430\\u0441\\u0442\\u0435\\u0440\\u0430, \\u0432\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0435\\u0433\\u043e DNS, NPMplus reverse proxy, \\u043c\\u043e\\u043d\\u0438\\u0442\\u043e\\u0440\\u0438\\u043d\\u0433\\u0430, backup \\u0438 \\u043d\\u0430\\u0431\\u043e\\u0440\\u0430 self-hosted \\u0441\\u0435\\u0440\\u0432\\u0438\\u0441\\u043e\\u0432.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23647,\"text\":\"- edge-vm hosting reverse proxy and most application containers.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23719,\"text\":\"- Purpose: reverse proxy and TLS termination.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":23782,\"text\":\"- Domain: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24054,\"text\":\"- Remote: https://git.gram1.ru/homelab-admin/homelab-configs\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24193,\"text\":\"- https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24406,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | yes | LAN only | git.gram1.ru | enabled |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24438,\"text\":\"| git.gram1.ru | letsencrypt | 2026-09-13 17:36:55 |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24465,\"text\":\"| `git.gram1.ru` | `http://127.0.0.1:3002` | cert id 29 | yes | Gitea |\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24708,\"text\":\"5. Recover reverse proxy/Kuma/Auth/Gitea/Vaultwarden and service configs.\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":24721,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25074,\"text\":\"git clone https://git.gram1.ru/homelab-admin/homelab-configs.git\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v3_20260623T195206Z.txt\",\"line\":25411,\"text\":\"- reverse proxy upstream;\"},{\"path\":\"/root/771_crowdsec_capi_ipv4_restore_or_fallback.sh\",\"line\":326,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":211,\"text\":\"- A portal card is openable only when DNS, reverse-proxy host mapping, and target content are all valid.\"},{\"path\":\"/root/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\"line\":304,\"text\":\"## FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\"},{\"path\":\"/root/772b_homepage_russian_normalize_apply.sh\",\"line\":89,\"text\":\" \\\"NPMplus\\\": \\\"\\u0410\\u0434\\u043c\\u0438\\u043d\\u0438\\u0441\\u0442\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 reverse proxy.\\\",\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":1316,\"text\":\"IP_ROUTE|185.225.35.6 via [PRIVATE_IP] dev eth0 src [PRIVATE_IP] \"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2390,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"127.0.0.1\\\",\\\"forward_port\\\":3002,\\\"forward_scheme\\\":\\\"http\\\",\\\"id\\\":9}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2433,\"text\":\"NPM_ROW|proxy_host|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"enabled\\\":1,\\\"forward_host\\\":\\\"[PRIVATE_IP]\\\",\\\"forward_port\\\":443,\\\"forward_scheme\\\":\\\"https\\\",\\\"id\\\":61}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2440,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"git.gram1.ru\\\\\\\"]\\\",\\\"id\\\":29,\\\"nice_name\\\":\\\"git.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2445,\"text\":\"NPM_ROW|certificate|{\\\"domain_names\\\":\\\"[\\\\\\\"chat.gram1.ru\\\\\\\",\\\\\\\"groups.chat.gram1.ru\\\\\\\",\\\\\\\"share.chat.gram1.ru\\\\\\\"]\\\",\\\"id\\\":38,\\\"nice_name\\\":\\\"chat.gram1.ru, groups.chat.gram1.ru, share.chat.gram1.ru\\\",\\\"provider\\\":\\\"letsencrypt\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2456,\"text\":\"DOMAIN|chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2464,\"text\":\"DOMAIN|git.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2468,\"text\":\"DOMAIN|groups.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2495,\"text\":\"DOMAIN|share.chat.gram1.ru\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2607,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"chat.gram1.ru\\\",\\\"https\\\":\\\"302|[PRIVATE_IP]|https://chat.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2610,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"codevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2615,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"dsmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2617,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gamevipe.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2618,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git-read.gram1.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2619,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"git.gram1.ru\\\",\\\"https\\\":\\\"200|[PRIVATE_IP]|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2623,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2624,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"MX\\\":[],\\\"domain\\\":\\\"groups.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2625,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2626,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2627,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"hkmods.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2635,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2645,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2646,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2656,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\"10\\\",\\\"mail.pvepro.ru.\\\"],\\\"domain\\\":\\\"pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2659,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"[PRIVATE_IP]\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"share.chat.gram1.ru\\\",\\\"https\\\":\\\"301|[PRIVATE_IP]|https://chat.gram1.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2661,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2666,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.codevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://codevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2667,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.dsmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://dsmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2668,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.gamevipe.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://gamevipe.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2669,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[\\\";;\\\",\\\"communications\\\",\\\"error\\\",\\\"to\\\",\\\"100.100.131.41#53:\\\",\\\"timed\\\",\\\"out\\\",\\\";;\\\",\\\"no\\\",\\\"servers\\\",\\\"could\\\",\\\"be\\\",\\\"reached\\\"],\\\"domain\\\":\\\"www.gram1.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.gram1.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2670,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hapusya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2671,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hbarhub.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2672,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.hkmods.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://hkmods.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2673,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.kingofwolk.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2674,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfi.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2675,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.newfilya.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2676,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.pvepro.ru\\\",\\\"https\\\":\\\"303|185.225.35.6|https://www.pvepro.ru/login\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2677,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.taftauto.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2678,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"www.zakrutim.ru\\\",\\\"https\\\":\\\"301|185.225.35.6|https://zakrutim.ru/\\\"}\"},{\"path\":\"/root/CLUSTER_V3_CENSUS_20260817T181842Z.txt\",\"line\":2679,\"text\":\"DOMAIN_STATE|{\\\"A\\\":[\\\"185.225.35.6\\\"],\\\"AAAA\\\":[],\\\"MX\\\":[],\\\"domain\\\":\\\"zakrutim.ru\\\",\\\"https\\\":\\\"200|185.225.35.6|\\\"}\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":261,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/diag-pve03-dns2-20260615T091114Z.txt\",\"line\":263,\"text\":\"debug1: Remote: [SENSITIVE_PATH] key options: agent-forwarding port-forwarding pty user-rc x11-forwarding\"},{\"path\":\"/root/771x_crowdsec_capi_mtu_hardfix.sh\",\"line\":542,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771f_crowdsec_capi_godebug_mss_fix.sh\",\"line\":344,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771l_crowdsec_capi_netbird_vps_egress.sh\",\"line\":695,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":154,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_network_equipment_audit_20260623T170441Z.txt\",\"line\":155,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":40,\"text\":\" echo \\\"1 reverse_proxy_upstream_and_headers\\\"\"},{\"path\":\"/root/767_deep_tail_and_regression_audit.sh\",\"line\":70,\"text\":\" auth.gram1.ru photos.gram1.ru homeassistant.vpn.gram1.ru vault.gram1.ru git.gram1.ru paper.gram1.ru \\\\\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":15,\"text\":\"GITEA_HOST=\\\"${AUDIT_GITEA_HOST:-git.gram1.ru}\\\"\"},{\"path\":\"/root/Workers2_AUDIT0_collect_2026-08-23.sh\",\"line\":16,\"text\":\"GITEA_REPO=\\\"${AUDIT_GITEA_REPO:-https://git.gram1.ru/homelab-admin/homelab-ops.git}\\\"\"},{\"path\":\"/root/homelab-clean-machine-bootstrap-rehearsal-v1.sh\",\"line\":92,\"text\":\"export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":101,\"text\":\"--- git.gram1.ru ---\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":102,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1479,\"text\":\" - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1545,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1546,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1739,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":1740,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2028,\"text\":\" - domain: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2091,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2092,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2265,\"text\":\"### resolve git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":2266,\"text\":\"95.84.154.183 STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3358,\"text\":\" GITEA__server__DOMAIN: git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3359,\"text\":\" GITEA__server__ROOT_URL: https://git.gram1.ru/\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3668,\"text\":\"9 [\\\"git.gram1.ru\\\"] http 127.0.0.1 3002 29 1 0 0 1 1 0 0 1 \"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3718,\"text\":\"29 git.gram1.ru [\\\"git.gram1.ru\\\"] letsencrypt 2026-09-13 17:36:55\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3855,\"text\":\" href: https://git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":3910,\"text\":\" description: Reverse proxy admin\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5196,\"text\":\"### DNS git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5197,\"text\":\"[PRIVATE_IP] STREAM git.gram1.ru\"},{\"path\":\"/root/homelab_cluster_audit_supplement_v2_20260623T193322Z.txt\",\"line\":5322,\"text\":\"https://git.gram1.ru/ => 200\"},{\"path\":\"/root/CR0085_IMPLEMENTATION_INPUT_20260819.txt\",\"line\":1358,\"text\":\" \\\"out-data\\\" : \\\"UNIT_BEGIN\\\\n# /etc/systemd/system/homelab-git-read.service\\\\n[Unit]\\\\nDescription=Read-only Gitea facade for ChatGPT\\\\nAfter=network-online.target\\\\nWants=network-online.target\\\\n\\\\n[Service]\\\\nType=simple\\\\nUser=gitread\\\\nGroup=gitread\\\\nExecStart=/usr/bin/python3 /usr/local/libexec/homelab-git-read\\\\nRestart=on-failure\\\\nRestartSec=2\\\\nNoNewPrivileges=true\\\\nPrivateTmp=true\\\\nPrivateDevices=true\\\\nProtectSystem=strict\\\\nProtectHome=true\\\\nProtectKernelTunables=true\\\\nProtectKernelModules=true\\\\nProtectControlGroups=true\\\\nRestrictAddressFamilies=AF_INET AF_INET6\\\\nLockPersonality=true\\\\nMemoryDenyWriteExecute=true\\\\n\\\\n[Install]\\\\nWantedBy=multi-user.target\\\\nUNIT_END\\\\nSOURCE_BEGIN\\\\nd6110a75f789e56231196c314046263785a795ce3d220de9272777a718bca382 /usr/local/libexec/homelab-git-read\\\\n#!/usr/bin/env python3\\\\nfrom __future__ import annotations\\\\nimport base64, json, os, re\\\\nfrom http.server import BaseHTTPRequestHandler, ThreadingHTTPServer\\\\nfrom urllib.parse import parse_qs, quote, urlparse\\\\nfrom urllib.request import Request, urlopen\\\\nfrom urllib.error import HTTPError, URLError\\\\n\\\\nHOST=\\\\\\\"0.0.0.0\\\\\\\"\\\\nPORT=8787\\\\nAPI=\\\\\\\"https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-ops\\\\\\\"\\\\nTOKEN_FILE=\\\\\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":228,\"text\":\" export DEBIAN_FRONTEND=noninteractive\"},{\"path\":\"/root/771j_crowdsec_capi_via_cloudflare_warp_proxy.sh\",\"line\":567,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771k_fix_warp_register_or_clean.sh\",\"line\":569,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":24,\"text\":\"GITEA_REPO = \\\"https://git.gram1.ru/homelab-admin/homelab-ops.git\\\"\"},{\"path\":\"/root/Workers2_AUDIT1_deep_collect_20260823_v1.py\",\"line\":25,\"text\":\"GITEA_HOST = \\\"git.gram1.ru\\\"\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":257,\"text\":\"### NAT / port forwarding\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":546,\"text\":\"- Role: edge application host / reverse proxy / monitoring / backup automation host.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":614,\"text\":\"- git.gram1.ru -> [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":625,\"text\":\"- Public WAN router forwards TCP/80 and TCP/443 to NPMplus on edge-vm, [PRIVATE_IP].\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":647,\"text\":\"- git.gram1.ru -> http://127.0.0.1:3002, cert=29, ssl_forced=1, enabled=1.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":696,\"text\":\"- cert=29: git.gram1.ru, expires 2026-09-13 17:36:55.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1000,\"text\":\" - https://git.gram1.ru\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1056,\"text\":\"- external canary checks include nc.gram1.ru, git.gram1.ru, auth.gram1.ru, backup.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1299,\"text\":\"- Reverse proxy: NPMplus on edge-vm, container npmplus, host networking, admin bound to 127.0.0.1:81.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1313,\"text\":\"| git.gram1.ru | http://127.0.0.1:3002 | edge-vm / gitea | gitea backup/offhost/restore |\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":1864,\"text\":\"- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2095,\"text\":\"- Bulk import of five forums reached DB/files/nginx/php-fpm ready state, but frontend body stayed empty under PHP 8.5.7.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2107,\"text\":\"- Final result: all five frontend/admin HTTP 200, www redirects 301, internal_data 403, no new XenForo errors.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2457,\"text\":\"- Recommended future path: establish VPN/NetBird/WireGuard or reverse-proxy/private management endpoint first; then issue DNS-01 certificate on a trusted node and deploy cert/key to the router only over that private path.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2503,\"text\":\"- TLS terminates on edge using certbot DNS-01 cert router-taftauto.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2814,\"text\":\"- Primary domain: chat.gram1.ru.\"},{\"path\":\"/root/31_HOMELAB_REFERENCE.before-cr0079-20260817T052826Z.md\",\"line\":2815,\"text\":\"- groups.chat.gram1.ru and share.chat.gram1.ru are Snikket service domains.\"},{\"path\":\"/root/hread-06.py\",\"line\":108,\"text\":\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771e_abort_cleanup_verify_stable.sh\",\"line\":100,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/hread-04.py\",\"line\":104,\"text\":\" if (u.scheme != 'https' or u.netloc != 'git.gram1.ru' or\"},{\"path\":\"/root/771s_vps_identity_repair_netbird_capi.sh\",\"line\":704,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/771q_netbird_public_vps_repair_then_capi.sh\",\"line\":594,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.ru mealie.vpn.gram1.ru karakeep.vpn.gram1.ru dozzle.gram1.ru npmplus.vpn.gram1.ru; do\"},{\"path\":\"/root/build_full_8020_demonov_handoff.sh\",\"line\":351,\"text\":\"https://git.gram1.ru/homelab-admin/8020-demonov-shadow-bot.git\"},{\"path\":\"/root/771ae_crowdsec_capi_soak_final.sh\",\"line\":105,\"text\":\" for h in auth.gram1.ru photos.gram1.ru git.gram1.ru n8n.vpn.gram1.r... +SSH_CONFIG_REFERENCES=[{"line":"# users, and the values can be changed in per-user configuration files","path":"/etc/ssh/ssh_config"},{"line":"Host *","path":"/etc/ssh/ssh_config"},{"line":"# ProxyCommand ssh -q -W %h:%p gateway.example.com","path":"/etc/ssh/ssh_config"}] +FINAL_DECISION=FRONTEND_FORENSIC3_COMPLETE_NO_MUTATION +FORENSIC3_END=true OUTPUT_END CHAT_OUTPUT_END