17765 Commits

Author SHA1 Message Date
Igor Pecovnik
a6cb68a1f5 fix: switch rockchip family_tweaks from addgroup to groupadd
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
`addgroup` lives in `adduser`, which Debian forky no longer pulls
into a minimal rootfs by default. `family_tweaks` then dies with
`bash: line 1: addgroup: command not found` (exit 127) on every
forky-armhf rockchip build.

`groupadd` is in `passwd` (Essential, every Linux), and works
identically for our use here. The only behavioural difference —
`groupadd` returns 9 if the group already exists where `addgroup`
returns 0 — is gated by the existing `getent group … ||` guard in
rockchip.conf, and added to rockchip-rv1106.conf to keep
re-runnability.

Repro: armbian/os tinkerboard-current forky-armhf, log
https://paste.armbian.com/iyasuwenum
v26.2.0-trunk.844
2026-05-03 16:37:00 +02:00
Igor Pecovnik
cd55d66933 fix: rename imx8m bare uboot hook so binman pkg_resources patch can run
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
`imx8m.conf` defined a bare `pre_config_uboot_target()`. The framework
treats a bare hook as the full implementation and drops any
`pre_config_uboot_target__<purpose>` companions, so #9407's
auto-enabled `uboot-binman-fix-pkg-resources` extension was never
firing on i.MX 8M boards — `tools/binman/control.py`'s
`import pkg_resources` stayed unpatched, and `make flash.bin` died
with `ModuleNotFoundError` on Python 3.12 / setuptools >= 82.

Rename to `pre_config_uboot_target__imx8m_firmware()`. Body unchanged.
Both hooks now register and run; order between them doesn't matter
(NXP firmware fetch vs. Python source rewrite are independent).

Repro: armbian/os run 25262303737, job uboot-mba8mpxl-ras314-current.
2026-05-03 10:58:50 +02:00
Igor Pecovnik
f13bc6b822 boards: declare ARCH=arm64 explicitly on five inheriting boards
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
Data: Sync board list / Send dispatch (push) Has been cancelled
Five board configs were inheriting their architecture either implicitly
(via BOARDFAMILY → kernel-config selection) or by sourcing another
board's .csc and never overriding it. Declare ARCH explicitly so that
arch-aware tooling (e.g. the build matrix filter that picks which
boards a release/arch target should fan out to) can match them by a
direct field read instead of having to re-evaluate the
BOARDFAMILY-to-arch chain.

Boards touched:

  aml-t95z-plus.tvb         BOARDFAMILY=meson-gxl   → ARCH=arm64
  ayn-odin2mini.csc         (sources ayn-odin2.csc) → ARCH=arm64
  ayn-odin2portal.csc       (sources ayn-odin2.csc) → ARCH=arm64
  ayn-thor.csc              (sources ayn-odin2.csc) → ARCH=arm64
  gateway-dk.conf           BOARDFAMILY=ls1046a     → ARCH=arm64

No build behaviour change for these boards: the resolved ARCH was
already arm64 via inheritance, the declaration just makes it
addressable at config-load time without sourcing the kernel config
chain.

Also clean up a stray apostrophe in aml-t95z-plus.tvb's BOARDFAMILY
comment ("s912's" → "s912s").
2026-05-02 20:59:25 +02:00
Igor Pecovnik
3640a9d289 validate-board-config: follow source ${SRC}/config/boards/<foo> inheritance
`Validate changed board configs` (PR #9747 CI run 25258999953) failed
on the three Ayn-Odin2 derivative boards with:

    ERROR: config/boards/ayn-odin2mini.csc: BOARDFAMILY: required, ...
    ERROR: config/boards/ayn-odin2mini.csc: KERNEL_TARGET: required, ...
    (same pair on ayn-odin2portal.csc and ayn-thor.csc)

The validator's header explicitly says it does NOT source the file
("boards have side-effecty function bodies"), and the regex
`parse_assignments` only sees top-level `KEY=value` lines. Boards
that consist of one `source "${SRC}/config/boards/<parent>.csc"` line
plus a handful of overrides (BOARD_NAME, BOARD_VENDOR, BOARD_MAINTAINER,
ARCH) inherit BOARDFAMILY / KERNEL_TARGET / KERNEL_TEST_TARGET from
the parent, so the validator saw them as missing and erred out.

The errors are pre-existing — they would fire on any future change
to those .csc files. PR #9747 just made them visible by being the
first PR to touch an inheriting board since the validator landed.

Add `collect_inherited_assignments`: when a top-level `source` line
points at another file under config/boards/ (matched by a regex
anchored to start-of-line so `source` calls inside function bodies —
which are always indented — aren't followed), parse that file's
top-level assignments and lay them behind the child's own. Child's
explicit values still win via dict.setdefault.

Recursion is guarded by a visited set keyed on resolved paths, so
a self-source or a parent-source-child cycle terminates instead of
looping. Missing source targets are silently skipped — the main
required-field checks will still flag any field that ends up unset
after the merge, so a typo'd source path doesn't mask a real gap.

Verified against the five PR-changed files: 6 errors → 0 errors,
4 warnings → 1 warning (the unmaintained-board warning on
aml-t95z-plus.tvb, which is unrelated to inheritance and was
already there). Self-contained boards (musepipro.conf etc.)
produce identical output to before this change.
2026-05-02 20:56:34 +02:00
Igor Pecovnik
e825695352 patch: disable drm/xe patches that don't apply to current kernels (NEEDS FIXING)
Some checks failed
Data: Sync board list / Send dispatch (push) Has been cancelled
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
Rename two .patch files to .patch.NEED_FIX so the patch driver
skips them on apply. Both are drm/xe kernel patches that stopped
applying cleanly after an upstream rebase and haven't been
refreshed yet:

  - 0002-drm-xe-guc-use-GUC_SIZE-SZ_4K-for-alignment.patch
  - 0005-drm-xe-query-use-PAGE_SIZE-as-the-minimum-page-align.patch

Kernels that were picking these up need them re-based against
current upstream drm/xe before re-enabling. Not a behaviour
change on its own — the patches were already failing the apply
step — but stops the noise in build logs and makes it obvious
at a glance which patches need maintainer attention.
2026-05-01 20:54:17 +02:00
EvilOlaf
fee43b8770 retroidpocket: add edge as target 2026-05-01 20:53:40 +02:00
EvilOlaf
6ce28eadcc retroidpocket: replace dt added via patch with out-of-tree dts
Similar to https://github.com/armbian/build/pull/9572
2026-05-01 20:53:40 +02:00
retro98boy
5c9eb46ea3 Improve Type-C Virtual PD extcon driver 2026-05-01 20:24:33 +02:00
retro98boy
de7519c03d SMART AM40: Update DT 2026-05-01 20:24:33 +02:00
Igor Pecovnik
df935563cd motd/20-ip-info: align (LAN)/(WAN) labels across IPv4 + IPv6 rows
The IPv4 row used a 14-char prefix (` IPv4:` + 8 trailing spaces);
the IPv6 row used 15 (` IPv6:` + 9 trailing spaces). The extra
space on v6 was an attempt to make the v6 address column line up
with the v4 address column when v4 had a `(LAN)` label and v6
didn't (v6's LAN appendix had no label at all, just the bare
address). Worked when v4 had `(LAN)` and v6 had something — broke
the moment LAN got dropped against WAN by the dedup at lines
76-81 and only the `(WAN)` half remained.

Net visible bug (addresses are RFC 5737 / RFC 3849 examples):

   IPv4:        (WAN) 192.0.2.42
   IPv6:         (WAN) 2001:db8::42
                ^ shifted by one column

Fix:

  - Use the same 13-char prefix for both rows (IPv4: / IPv6: + 7
    padding, no trailing space).
  - Both `(LAN)` and `(WAN)` appendices start with a single
    leading space — the label always sits at the same column
    regardless of which (or both) are present.
  - Add a `(LAN)` label to v6 too; the asymmetry was the original
    reason the spacing was offset, and removing it lets v4 and v6
    structurally mirror each other.
  - Drop the trailing space the appendices used to carry — pure
    EOL whitespace, never visible.

Verified across all four cases (LAN+WAN / LAN only / WAN only /
nothing): `(LAN)` and `(WAN)` always align column-for-column on
both rows.
2026-05-01 20:22:34 +02:00
Alex Ling
7138b33cf5 Revert "families: sm8550: Limit kernel version to 6.18.18"
This reverts commit 9ce5fd3f1acca09d483abf290604af5b996daa0c.
2026-05-01 20:21:25 +02:00
retro98boy
ca9ff59a45 Copy 6.18/cniot-core.dts to 6.12/cniot-core.dts 2026-05-01 20:01:39 +02:00
Sam Collinson
6b53921f24 Add missing default for COLUMNS env var in uboot and kernel patching scripts 2026-05-01 20:00:34 +02:00
dependabot[bot]
ea7f2b580c build(deps): bump tspascoal/get-user-teams-membership from 3 to 4
Bumps [tspascoal/get-user-teams-membership](https://github.com/tspascoal/get-user-teams-membership) from 3 to 4.
- [Release notes](https://github.com/tspascoal/get-user-teams-membership/releases)
- [Commits](https://github.com/tspascoal/get-user-teams-membership/compare/v3...v4)

---
updated-dependencies:
- dependency-name: tspascoal/get-user-teams-membership
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 19:55:22 +02:00
dependabot[bot]
9d4b1ff405 build(deps): bump gitpython from 3.1.47 to 3.1.49
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.47 to 3.1.49.
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.47...3.1.49)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.49
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-29 06:51:59 +02:00
Andreas Niedermair
73a3e49e0c
fixing to armbian-image-release (#9729)
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
EXTENSIONS and VENDORPRETTYNAME were not contained in the file
2026-04-27 21:55:58 +02:00
Jianfeng Liu
c4e7a9d8ed kernel: add linux-initramfs-tool as dep of linux-image package for other alternatives like dracut 2026-04-27 17:39:16 +02:00
dependabot[bot]
bfbd0b5fac build(deps): bump pip from 26.0.1 to 26.1
Bumps [pip](https://github.com/pypa/pip) from 26.0.1 to 26.1.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/pip/compare/26.0.1...26.1)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '26.1'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-27 17:29:56 +02:00
igorpecovnik
35e57cc6ab Automatic board configs status synchronise
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
v26.2.0-trunk.807
2026-04-26 14:33:02 +02:00
Jianfeng Liu
0676a241f9 kernel: add dependency of initramfs-tools for linux-image package 2026-04-26 19:26:26 +08:00
Igor Velkov
39fdcef4ce u-boot: v2026.04: add btrfs zstd decompression fix
Some checks failed
Data: Sync board list / Send dispatch (push) Has been cancelled
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
Same fix as #9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3fd for the full rationale.
2026-04-24 21:18:55 +02:00
Igor Velkov
c2ee2face9 helios64: defensive fixes on top of u-boot v2026.04 bump
Code-style and defensive-programming fixes to the helios64 u-boot
overlay, applied on top of the pristine v2026.04 vendor bump. All
changes are additive safety nets — none alter the happy-path
behaviour of the previous Kobol/Armbian code.

board/helios64.c:
  - setup_leds(): check led_get_by_label() return value. Without
    this, led_set_state() is called on an uninitialised udevice
    pointer if LED lookup fails.
  - sata_power_enable(): add the matching 10s mdelay after
    enabling hdd_b_power, mirroring the one already present after
    hdd_a_power. Previously rail B had no spin-up time before
    scsi_scan(true) in last_stage_init(), so drives on the second
    rail could miss the scan. The staggered spin-up between rails
    is preserved (PSU in-rush protection for two 3.5" HDDs).

board/sys_otp.c:
  - replace the || chain magic-number check in is_valid_header()
    with memcmp() against a const expected_magic[8] (fixes a real
    pre-existing bug: the || chain was always true);
  - introduce otp_serial() / otp_mfg_year() helpers that assemble
    the multi-byte values byte-by-byte, eliminating unaligned
    u64/u16 casts into the packed otp struct (UB per the C standard,
    also over-read into adjacent fields);
  - bounds-check otp.variant against BOARD_VARIANT_MAX before
    indexing var_str[], adding BOARD_VARIANT_INVALID slot;
  - use strnlen() when printing packed fixed-length fields;
  - use snprintf() with target buffer size instead of sprintf();
  - retry read_otp_data() in ensure_otp_data_ready() on the first
    access after a failed board_early_init_r(), instead of silently
    skipping OTP-provided values for the whole boot.

cmd-fileenv-read-string-from-file-into-env.patch:
  add 'depends on CMD_FAT' to the cherry-picked CMD_FILEENV Kconfig
  entry. do_fat_fsload() is called unconditionally from the
  fileenv implementation, so the dependency reflects reality.

general-fix-btrfs-zstd-decompression.patch:
  tighten the decompression-success check to also reject short
  reads ('|| ret < dlen'). zstd_is_error() alone does not cover
  truncated output.

Assisted-by: Claude:claude-opus-4-7
2026-04-24 21:18:55 +02:00
Igor Velkov
eace2edf31 helios64: u-boot: bump v2026.01 → v2026.04
Self-contained board_helios64/ overlay bumped to v2026.04 from v2026.01.
The overlay is a pristine copy of v2026.01 plus the minimum set of
v2026.04-mandated changes and new cherry-picks:

- board/Kconfig: ENV_OFFSET 0x460000 → 0x3F8000
  Required by the v2026.04 SPI NOR environment layout.

- 1001-fdt_fixup_ethernet-add-logs.patch.disabled
  Cherry-pick of Ricardo Pardini's fdt_fixup_ethernet logging patch.
  Shipped disabled; preserved for debugging MAC propagation issues.

- cmd-fileenv-read-string-from-file-into-env.patch
  Cherry-pick of the Home Assistant 2018 vendor patch (rebased by
  rpardini) adapting 'fileenv' u-boot command for v2026.04.

config/boards/helios64.conf: BOOTBRANCH / BOOTPATCHDIR → v2026.04.

No behaviour changes beyond what the u-boot version bump itself
requires; pre-existing code paths (sys_otp.c, helios64.c) are left
exactly as they were in v2026.01. Defensive code-style fixes on top
of this baseline are a separate follow-up commit.

Assisted-by: Claude:claude-opus-4-7
2026-04-24 21:18:55 +02:00
igorpecovnik
1c86bd2910 Automatic board configs status synchronise
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
2026-04-24 14:17:39 +02:00
Ricardo Pardini
0dfc64416c Revert "genio: edge: bump to collabora's mediatek-v7.0"
This reverts commit 5b1a617574446b2b5f19fe1562ef3e6cb32e1992.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
f0c441ce49 Revert "genio: linux-genio-edge.config: rewrite vs 7.0, no changes"
This reverts commit b14a5f3bd3a7c6e9010d78c50bcbba01516b4a67.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
7c69f772fa Revert "genio: linux-genio-edge.config: disable broken DRM_PANEL_ILITEK_ILI9882T"
This reverts commit 51275c8443099244d21ac739dc1d86c7a745ca48.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
113ceef7b3 Revert "genio: linux-genio-edge.config: cleanup DRM stuff"
This reverts commit e83d9cef7c18e54102486d24f8d9972158290c72.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
9e2fa34d03 Revert "genio: linux-genio-edge.config: update from Collabora's defconfig"
This reverts commit 407270b911bf3f11e21c01feb00f197bbeb1cf5d.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
bc946d2b42 Revert "genio: linux-genio-edge.config: flip a bunch to =m"
This reverts commit d137a6f7e183e6491808a01ab18f6b9b284bec12.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
78c6184a8e Revert "genio: linux-genio-edge.config: flip a bunch to =m (more)"
This reverts commit f3231a1d396bdba93637917a850369e6fc1c7d0a.
2026-04-24 12:56:10 +02:00
Ricardo Pardini
94fc0d85c8 genio: linux-genio-edge.config: flip a bunch to =m (more)
- as kernel image has to be smaller than 50mb to fit sans relocations/gaps
2026-04-24 12:56:10 +02:00
Ricardo Pardini
d35beac933 genio: linux-genio-edge.config: flip a bunch to =m
- as kernel image has to be smaller than 50mb to fit sans relocations/gaps
2026-04-24 12:56:10 +02:00
Ricardo Pardini
ba450c38a1 genio: linux-genio-edge.config: update from Collabora's defconfig
- from AGDM's a7af64b31b/arch/arm64/configs/defconfig
- but keep only `CONFIG_ARCH_MEDIATEK`
2026-04-24 12:56:10 +02:00
Ricardo Pardini
6314a4949b genio: linux-genio-edge.config: cleanup DRM stuff
- disable Nouveau etc
2026-04-24 12:56:10 +02:00
Ricardo Pardini
625f2be170 genio: linux-genio-edge.config: disable broken DRM_PANEL_ILITEK_ILI9882T 2026-04-24 12:56:10 +02:00
Ricardo Pardini
fb93235c75 genio: linux-genio-edge.config: rewrite vs 7.0, no changes 2026-04-24 12:56:10 +02:00
Ricardo Pardini
9673c6f0c8 genio: edge: bump to collabora's mediatek-v7.0 2026-04-24 12:56:10 +02:00
Ricardo Pardini
0fc6ad12b6 genio: edge: bump to collabora's 6.19.8 2026-04-24 12:56:10 +02:00
Ricardo Pardini
ab8ef99ba9 genio: linux-genio-edge.config: 6.19: enable CONFIG_FIB_RULES et al
- for Cilium and co
2026-04-24 12:56:10 +02:00
Ricardo Pardini
a95f096a88 genio: linux-genio-edge.config: 6.19: rewrite, no changes 2026-04-24 12:56:10 +02:00
Ricardo Pardini
6e144e119a cli: kernel-dtb: pass -@ to normalized dtc invocation
- more comparable, but nothing too drastic
2026-04-24 12:55:32 +02:00
Igor Velkov
6618b892bf armbian-resize-filesystem: fix typo $rootdev → $diskdev
Some checks failed
Infrastructure: Dispatch to fork / 📢 Run repository dispatch on fork (push) Has been cancelled
Infrastructure: Mirror to Codeberg / codeberg (push) Has been cancelled
Maintenance: Announce merge / announcepush (push) Has been cancelled
Maintenance: Security scan / Scorecards analysis (push) Has been cancelled
Data: Sync board list / Send dispatch (push) Has been cancelled
$rootdev is undefined in do_expand_partition; should be $diskdev.

Fixes #9594

Assisted-by: Claude:claude-opus-4-7
2026-04-23 20:50:59 +02:00
Alex Ling
949209bb50 sm8550-6.18: No need to use sdhci-msm-downstream driver
Signed-off-by: Alex Ling <ling_kasim@hotmail.com>
2026-04-23 20:50:41 +02:00
Alex Ling
be9bc71569 sm8550-6.18: Switch back to upstream sdhci_msm driver
Signed-off-by: Alex Ling <ling_kasim@hotmail.com>
2026-04-23 20:50:41 +02:00
Alex Ling
dca1c9417c ayn-odin2.csc: Use GITHUB_SOURCE
Signed-off-by: Alex Ling <ling_kasim@hotmail.com>
2026-04-23 20:50:41 +02:00
Ricardo Pardini
93bcd0926f u-boot: 2026.04: drop #warnings in fdt_fixup_ethernet logging patch
- those were added to ensure that code was actually being compiled
- we're pretty sure now, so avoid spurious warnings during compilation

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
2026-04-23 20:49:44 +02:00
Ricardo Pardini
6c44ab74df odroidhc4: u-boot: bump 2026.01 -> 2026.04 (final) & add LWIP 2026-04-23 20:49:30 +02:00
Ricardo Pardini
0459ebb6c5 armbian-kernel: btf: KPROBES + KPROBE_EVENTS
- only for KERNEL_BTF=yes case
2026-04-23 20:49:10 +02:00
Ricardo Pardini
0e73604d9d armbian-kernel: btf: DEBUG_INFO_REDUCED blocks DEBUG_INFO_BTF
- only for KERNEL_BTF=yes case
2026-04-23 20:49:10 +02:00