Diff of the two buildlogs:

--
--- b1/build.log	2021-07-03 11:01:32.074568722 +0000
+++ b2/build.log	2021-07-03 11:02:25.576564337 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Fri Aug  5 05:23:40 -12 2022
-I: pbuilder-time-stamp: 1659720220
+I: Current time: Sun Jul  4 01:01:33 +14 2021
+I: pbuilder-time-stamp: 1625310093
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/buster-reproducible-base.tgz]
 I: copying local configuration
@@ -17,7 +17,7 @@
 I: Extracting source
 gpgv: unknown type of key resource 'trustedkeys.kbx'
 gpgv: keyblock resource '/root/.gnupg/trustedkeys.kbx': General error
-gpgv: Signature made Sun Oct  8 02:12:20 2017 -12
+gpgv: Signature made Mon Oct  9 04:12:20 2017 +14
 gpgv:                using RSA key D1CB8F39BC5DED24C5D2C78C1302F1F036EBEB19
 gpgv: Can't check signature: No public key
 dpkg-source: warning: failed to verify signature on ./golang-github-tideland-golib_4.24.2-1.dsc
@@ -29,136 +29,170 @@
 dpkg-source: info: applying fix-ftbfs.patch
 I: using fakeroot in build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/23185/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos1-amd64.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
+Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
+Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
+Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='amd64'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=16'
-  DISTRIBUTION=''
-  HOME='/root'
-  HOST_ARCH='amd64'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="0" [2]="3" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
+  BASH_VERSION='5.0.3(1)-release'
+  BUILDDIR=/build
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=amd64
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=15'
+  DIRSTACK=()
+  DISTRIBUTION=
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='b053defba5774878b34e516cb67d2fb5'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='23185'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=8eccf6bb5c6f4e54bb2ea44c8c09e32d
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=25132
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.nqulpMVAZv/pbuilderrc_SMYm --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.nqulpMVAZv/b1 --logfile b1/build.log golang-github-tideland-golib_4.24.2-1.dsc'
-  SUDO_GID='111'
-  SUDO_UID='106'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://85.184.249.68:3128'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.nqulpMVAZv/pbuilderrc_IKpR --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.nqulpMVAZv/b2 --logfile b2/build.log golang-github-tideland-golib_4.24.2-1.dsc'
+  SUDO_GID=110
+  SUDO_UID=105
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://78.137.99.97:3128
 I: uname -a
-  Linux ionos15-amd64 5.10.0-0.bpo.7-amd64 #1 SMP Debian 5.10.40-1~bpo10+1 (2021-06-04) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 4.19.0-17-amd64 #1 SMP Debian 4.19.194-2 (2021-06-21) x86_64 GNU/Linux
 I: ls -l /bin
   total 5116
-  -rwxr-xr-x 1 root root 1168776 Apr 17  2019 bash
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bunzip2
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bzcat
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzcmp -> bzdiff
-  -rwxr-xr-x 1 root root    2227 Jul 10  2019 bzdiff
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzegrep -> bzgrep
-  -rwxr-xr-x 1 root root    4877 Jun 24  2019 bzexe
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzfgrep -> bzgrep
-  -rwxr-xr-x 1 root root    3641 Jul 10  2019 bzgrep
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bzip2
-  -rwxr-xr-x 1 root root   14328 Jul 10  2019 bzip2recover
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzless -> bzmore
-  -rwxr-xr-x 1 root root    1297 Jul 10  2019 bzmore
-  -rwxr-xr-x 1 root root   43744 Feb 28  2019 cat
-  -rwxr-xr-x 1 root root   64320 Feb 28  2019 chgrp
-  -rwxr-xr-x 1 root root   64288 Feb 28  2019 chmod
-  -rwxr-xr-x 1 root root   72512 Feb 28  2019 chown
-  -rwxr-xr-x 1 root root  146880 Feb 28  2019 cp
-  -rwxr-xr-x 1 root root  121464 Jan 17  2019 dash
-  -rwxr-xr-x 1 root root  109408 Feb 28  2019 date
-  -rwxr-xr-x 1 root root   76712 Feb 28  2019 dd
-  -rwxr-xr-x 1 root root   93744 Feb 28  2019 df
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 dir
-  -rwxr-xr-x 1 root root   84288 Jan  9  2019 dmesg
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 dnsdomainname -> hostname
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 domainname -> hostname
-  -rwxr-xr-x 1 root root   39520 Feb 28  2019 echo
-  -rwxr-xr-x 1 root root      28 Jan  7  2019 egrep
-  -rwxr-xr-x 1 root root   35424 Feb 28  2019 false
-  -rwxr-xr-x 1 root root      28 Jan  7  2019 fgrep
-  -rwxr-xr-x 1 root root   68880 Jan  9  2019 findmnt
-  -rwsr-xr-x 1 root root   34896 Apr 22  2020 fusermount
-  -rwxr-xr-x 1 root root  198976 Jan  7  2019 grep
-  -rwxr-xr-x 2 root root    2345 Jan  5  2019 gunzip
-  -rwxr-xr-x 1 root root    6375 Jan  5  2019 gzexe
-  -rwxr-xr-x 1 root root   98048 Jan  5  2019 gzip
-  -rwxr-xr-x 1 root root   26696 Sep 26  2018 hostname
-  -rwxr-xr-x 1 root root   68552 Feb 28  2019 ln
-  -rwxr-xr-x 1 root root   56760 Jul 26  2018 login
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 ls
-  -rwxr-xr-x 1 root root  108624 Jan  9  2019 lsblk
-  -rwxr-xr-x 1 root root   89088 Feb 28  2019 mkdir
-  -rwxr-xr-x 1 root root   68544 Feb 28  2019 mknod
-  -rwxr-xr-x 1 root root   43808 Feb 28  2019 mktemp
-  -rwxr-xr-x 1 root root   43008 Jan  9  2019 more
-  -rwsr-xr-x 1 root root   51280 Jan  9  2019 mount
-  -rwxr-xr-x 1 root root   14408 Jan  9  2019 mountpoint
-  -rwxr-xr-x 1 root root  138728 Feb 28  2019 mv
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 nisdomainname -> hostname
-  lrwxrwxrwx 1 root root      14 Feb 14  2019 pidof -> /sbin/killall5
-  -rwxr-xr-x 1 root root   39616 Feb 28  2019 pwd
-  lrwxrwxrwx 1 root root       4 Apr 17  2019 rbash -> bash
-  -rwxr-xr-x 1 root root   47776 Feb 28  2019 readlink
-  -rwxr-xr-x 1 root root   68416 Feb 28  2019 rm
-  -rwxr-xr-x 1 root root   47776 Feb 28  2019 rmdir
-  -rwxr-xr-x 1 root root   23312 Jan 21  2019 run-parts
-  -rwxr-xr-x 1 root root  122224 Dec 22  2018 sed
-  lrwxrwxrwx 1 root root       4 Jul 24 02:47 sh -> dash
-  -rwxr-xr-x 1 root root   39552 Feb 28  2019 sleep
-  -rwxr-xr-x 1 root root   80672 Feb 28  2019 stty
-  -rwsr-xr-x 1 root root   63568 Jan  9  2019 su
-  -rwxr-xr-x 1 root root   35488 Feb 28  2019 sync
-  -rwxr-xr-x 1 root root  445560 Apr 23  2019 tar
-  -rwxr-xr-x 1 root root   14440 Jan 21  2019 tempfile
-  -rwxr-xr-x 1 root root   97152 Feb 28  2019 touch
-  -rwxr-xr-x 1 root root   35424 Feb 28  2019 true
-  -rwxr-xr-x 1 root root   14328 Apr 22  2020 ulockmgr_server
-  -rwsr-xr-x 1 root root   34888 Jan  9  2019 umount
-  -rwxr-xr-x 1 root root   39584 Feb 28  2019 uname
-  -rwxr-xr-x 2 root root    2345 Jan  5  2019 uncompress
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 vdir
-  -rwxr-xr-x 1 root root   34896 Jan  9  2019 wdctl
-  -rwxr-xr-x 1 root root     946 Jan 21  2019 which
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 ypdomainname -> hostname
-  -rwxr-xr-x 1 root root    1983 Jan  5  2019 zcat
-  -rwxr-xr-x 1 root root    1677 Jan  5  2019 zcmp
-  -rwxr-xr-x 1 root root    5879 Jan  5  2019 zdiff
-  -rwxr-xr-x 1 root root      29 Jan  5  2019 zegrep
-  -rwxr-xr-x 1 root root      29 Jan  5  2019 zfgrep
-  -rwxr-xr-x 1 root root    2080 Jan  5  2019 zforce
-  -rwxr-xr-x 1 root root    7584 Jan  5  2019 zgrep
-  -rwxr-xr-x 1 root root    2205 Jan  5  2019 zless
-  -rwxr-xr-x 1 root root    1841 Jan  5  2019 zmore
-  -rwxr-xr-x 1 root root    4552 Jan  5  2019 znew
-I: user script /srv/workspace/pbuilder/23185/tmp/hooks/D02_print_environment finished
+  -rwxr-xr-x 1 root root 1168776 Apr 18  2019 bash
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bunzip2
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bzcat
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzcmp -> bzdiff
+  -rwxr-xr-x 1 root root    2227 Jul 11  2019 bzdiff
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzegrep -> bzgrep
+  -rwxr-xr-x 1 root root    4877 Jun 25  2019 bzexe
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzfgrep -> bzgrep
+  -rwxr-xr-x 1 root root    3641 Jul 11  2019 bzgrep
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bzip2
+  -rwxr-xr-x 1 root root   14328 Jul 11  2019 bzip2recover
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzless -> bzmore
+  -rwxr-xr-x 1 root root    1297 Jul 11  2019 bzmore
+  -rwxr-xr-x 1 root root   43744 Mar  1  2019 cat
+  -rwxr-xr-x 1 root root   64320 Mar  1  2019 chgrp
+  -rwxr-xr-x 1 root root   64288 Mar  1  2019 chmod
+  -rwxr-xr-x 1 root root   72512 Mar  1  2019 chown
+  -rwxr-xr-x 1 root root  146880 Mar  1  2019 cp
+  -rwxr-xr-x 1 root root  121464 Jan 18  2019 dash
+  -rwxr-xr-x 1 root root  109408 Mar  1  2019 date
+  -rwxr-xr-x 1 root root   76712 Mar  1  2019 dd
+  -rwxr-xr-x 1 root root   93744 Mar  1  2019 df
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 dir
+  -rwxr-xr-x 1 root root   84288 Jan 10  2019 dmesg
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 dnsdomainname -> hostname
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 domainname -> hostname
+  -rwxr-xr-x 1 root root   39520 Mar  1  2019 echo
+  -rwxr-xr-x 1 root root      28 Jan  8  2019 egrep
+  -rwxr-xr-x 1 root root   35424 Mar  1  2019 false
+  -rwxr-xr-x 1 root root      28 Jan  8  2019 fgrep
+  -rwxr-xr-x 1 root root   68880 Jan 10  2019 findmnt
+  -rwsr-xr-x 1 root root   34896 Apr 23  2020 fusermount
+  -rwxr-xr-x 1 root root  198976 Jan  8  2019 grep
+  -rwxr-xr-x 2 root root    2345 Jan  6  2019 gunzip
+  -rwxr-xr-x 1 root root    6375 Jan  6  2019 gzexe
+  -rwxr-xr-x 1 root root   98048 Jan  6  2019 gzip
+  -rwxr-xr-x 1 root root   26696 Sep 27  2018 hostname
+  -rwxr-xr-x 1 root root   68552 Mar  1  2019 ln
+  -rwxr-xr-x 1 root root   56760 Jul 27  2018 login
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 ls
+  -rwxr-xr-x 1 root root  108624 Jan 10  2019 lsblk
+  -rwxr-xr-x 1 root root   89088 Mar  1  2019 mkdir
+  -rwxr-xr-x 1 root root   68544 Mar  1  2019 mknod
+  -rwxr-xr-x 1 root root   43808 Mar  1  2019 mktemp
+  -rwxr-xr-x 1 root root   43008 Jan 10  2019 more
+  -rwsr-xr-x 1 root root   51280 Jan 10  2019 mount
+  -rwxr-xr-x 1 root root   14408 Jan 10  2019 mountpoint
+  -rwxr-xr-x 1 root root  138728 Mar  1  2019 mv
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 nisdomainname -> hostname
+  lrwxrwxrwx 1 root root      14 Feb 15  2019 pidof -> /sbin/killall5
+  -rwxr-xr-x 1 root root   39616 Mar  1  2019 pwd
+  lrwxrwxrwx 1 root root       4 Apr 18  2019 rbash -> bash
+  -rwxr-xr-x 1 root root   47776 Mar  1  2019 readlink
+  -rwxr-xr-x 1 root root   68416 Mar  1  2019 rm
+  -rwxr-xr-x 1 root root   47776 Mar  1  2019 rmdir
+  -rwxr-xr-x 1 root root   23312 Jan 22  2019 run-parts
+  -rwxr-xr-x 1 root root  122224 Dec 23  2018 sed
+  lrwxrwxrwx 1 root root       4 Jul  4 01:01 sh -> bash
+  lrwxrwxrwx 1 root root       4 Jun 21 22:24 sh.distrib -> dash
+  -rwxr-xr-x 1 root root   39552 Mar  1  2019 sleep
+  -rwxr-xr-x 1 root root   80672 Mar  1  2019 stty
+  -rwsr-xr-x 1 root root   63568 Jan 10  2019 su
+  -rwxr-xr-x 1 root root   35488 Mar  1  2019 sync
+  -rwxr-xr-x 1 root root  445560 Apr 24  2019 tar
+  -rwxr-xr-x 1 root root   14440 Jan 22  2019 tempfile
+  -rwxr-xr-x 1 root root   97152 Mar  1  2019 touch
+  -rwxr-xr-x 1 root root   35424 Mar  1  2019 true
+  -rwxr-xr-x 1 root root   14328 Apr 23  2020 ulockmgr_server
+  -rwsr-xr-x 1 root root   34888 Jan 10  2019 umount
+  -rwxr-xr-x 1 root root   39584 Mar  1  2019 uname
+  -rwxr-xr-x 2 root root    2345 Jan  6  2019 uncompress
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 vdir
+  -rwxr-xr-x 1 root root   34896 Jan 10  2019 wdctl
+  -rwxr-xr-x 1 root root     946 Jan 22  2019 which
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 ypdomainname -> hostname
+  -rwxr-xr-x 1 root root    1983 Jan  6  2019 zcat
+  -rwxr-xr-x 1 root root    1677 Jan  6  2019 zcmp
+  -rwxr-xr-x 1 root root    5879 Jan  6  2019 zdiff
+  -rwxr-xr-x 1 root root      29 Jan  6  2019 zegrep
+  -rwxr-xr-x 1 root root      29 Jan  6  2019 zfgrep
+  -rwxr-xr-x 1 root root    2080 Jan  6  2019 zforce
+  -rwxr-xr-x 1 root root    7584 Jan  6  2019 zgrep
+  -rwxr-xr-x 1 root root    2205 Jan  6  2019 zless
+  -rwxr-xr-x 1 root root    1841 Jan  6  2019 zmore
+  -rwxr-xr-x 1 root root    4552 Jan  6  2019 znew
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -237,7 +271,7 @@
 Get: 37 http://deb.debian.org/debian buster/main amd64 golang-src amd64 2:1.11~1 [4344 B]
 Get: 38 http://deb.debian.org/debian buster/main amd64 golang-go amd64 2:1.11~1 [23.4 kB]
 Get: 39 http://deb.debian.org/debian buster/main amd64 golang-any amd64 2:1.11~1 [4472 B]
-Fetched 74.0 MB in 1s (78.2 MB/s)
+Fetched 74.0 MB in 1s (83.3 MB/s)
 debconf: delaying package configuration, since apt-utils is not installed
 Selecting previously unselected package libbsd0:amd64.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19195 files and directories currently installed.)
@@ -416,7 +450,7 @@
 fakeroot is already the newest version (1.23-1).
 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 I: Building the package
-I: Running cd /build/golang-github-tideland-golib-4.24.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b
+I: Running cd /build/golang-github-tideland-golib-4.24.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b
 dpkg-buildpackage: info: source package golang-github-tideland-golib
 dpkg-buildpackage: info: source version 4.24.2-1
 dpkg-buildpackage: info: source distribution unstable
@@ -434,26 +468,26 @@
    dh_autoreconf -O--buildsystem=golang
    dh_auto_configure -O--buildsystem=golang
    dh_auto_build -O--buildsystem=golang
-	cd obj-x86_64-linux-gnu && go install -gcflags=all=\"-trimpath=/build/golang-github-tideland-golib-4.24.2/obj-x86_64-linux-gnu/src\" -asmflags=all=\"-trimpath=/build/golang-github-tideland-golib-4.24.2/obj-x86_64-linux-gnu/src\" -v -p 16 github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/gjp github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version
+	cd obj-x86_64-linux-gnu && go install -gcflags=all=\"-trimpath=/build/golang-github-tideland-golib-4.24.2/obj-x86_64-linux-gnu/src\" -asmflags=all=\"-trimpath=/build/golang-github-tideland-golib-4.24.2/obj-x86_64-linux-gnu/src\" -v -p 15 github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/gjp github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version
+encoding
+unicode/utf8
+crypto/internal/subtle
 errors
-internal/cpu
 internal/race
-crypto/internal/subtle
-math/bits
-runtime/internal/sys
-crypto/subtle
-unicode/utf8
-sync/atomic
-internal/nettrace
-encoding
+internal/cpu
 runtime/cgo
+internal/nettrace
+sync/atomic
+crypto/subtle
 runtime/internal/atomic
-unicode
 container/list
-vendor/golang_org/x/crypto/cryptobyte/asn1
 vendor/golang_org/x/net/dns/dnsmessage
+runtime/internal/sys
+vendor/golang_org/x/crypto/cryptobyte/asn1
 vendor/golang_org/x/crypto/curve25519
 unicode/utf16
+math/bits
+unicode
 internal/bytealg
 internal/testlog
 math
@@ -461,25 +495,25 @@
 strconv
 crypto/rc4
 sync
-internal/singleflight
 io
 math/rand
 reflect
 syscall
+internal/singleflight
+crypto/cipher
 bytes
 crypto/internal/randutil
 hash
-crypto/cipher
 strings
 crypto
 hash/crc32
-crypto/hmac
 hash/adler32
+crypto/hmac
 crypto/md5
 crypto/sha1
-github.com/tideland/golib/mapreduce
 crypto/sha512
 crypto/sha256
+github.com/tideland/golib/mapreduce
 crypto/aes
 bufio
 vendor/golang_org/x/text/transform
@@ -487,59 +521,59 @@
 html
 internal/syscall/unix
 time
-internal/poll
 encoding/binary
 sort
-os
+internal/poll
 github.com/tideland/golib/sort
 regexp/syntax
+os
+crypto/des
 encoding/base64
 vendor/golang_org/x/crypto/internal/chacha20
-crypto/des
 vendor/golang_org/x/crypto/poly1305
-encoding/pem
 vendor/golang_org/x/crypto/chacha20poly1305
+encoding/pem
 path/filepath
 fmt
-io/ioutil
 regexp
+io/ioutil
+github.com/tideland/golib/errors
 encoding/hex
 context
-github.com/tideland/golib/errors
 log
-vendor/golang_org/x/net/http2/hpack
 net/url
+encoding/xml
+compress/flate
+vendor/golang_org/x/net/http2/hpack
 mime/quotedprintable
 mime
 net/http/internal
-encoding/xml
-compress/flate
 math/big
 github.com/tideland/golib/numerics
 encoding/json
 vendor/golang_org/x/text/unicode/norm
-github.com/tideland/golib/version
-github.com/tideland/golib/collections
 net
+github.com/tideland/golib/collections
+github.com/tideland/golib/version
 vendor/golang_org/x/text/unicode/bidi
-vendor/golang_org/x/text/secure/bidirule
 compress/gzip
+vendor/golang_org/x/text/secure/bidirule
 vendor/golang_org/x/net/idna
 github.com/tideland/golib/feed/utils
 github.com/tideland/golib/sml
 crypto/rand
-encoding/asn1
-crypto/dsa
 crypto/elliptic
-crypto/rsa
+crypto/dsa
+encoding/asn1
 github.com/tideland/golib/audit
+crypto/rsa
 crypto/ecdsa
 crypto/x509/pkix
 vendor/golang_org/x/crypto/cryptobyte
+github.com/tideland/golib/identifier
 log/syslog
-net/textproto
 vendor/golang_org/x/net/http/httpproxy
-github.com/tideland/golib/identifier
+net/textproto
 crypto/x509
 github.com/tideland/golib/logger
 vendor/golang_org/x/net/http/httpguts
@@ -548,13 +582,13 @@
 github.com/tideland/golib/stringex
 github.com/tideland/golib/cache
 github.com/tideland/golib/scroller
-github.com/tideland/golib/scene
 github.com/tideland/golib/monitoring
+github.com/tideland/golib/scene
 github.com/tideland/golib/timex
 github.com/tideland/golib/etc
 github.com/tideland/golib/gjp
-crypto/tls
 github.com/tideland/golib/redis
+crypto/tls
 net/http/httptrace
 net/http
 github.com/tideland/golib/feed/atom
@@ -562,7 +596,7 @@
    debian/rules override_dh_auto_test
 make[1]: Entering directory '/build/golang-github-tideland-golib-4.24.2'
 dh_auto_test -- -short
-	cd obj-x86_64-linux-gnu && go test -vet=off -v -p 16 -short github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/gjp github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version
+	cd obj-x86_64-linux-gnu && go test -vet=off -v -p 15 -short github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/gjp github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version
 === RUN   TestAssertTrue
 --- PASS: TestAssertTrue (0.00s)
     asserts_test.go:485: testing assert "true" failed: 'false' (bool) <> 'true' (bool) [should fail and be logged]
@@ -594,7 +628,7 @@
     asserts_test.go:485: testing assert "range" failed: '1' (float64) <> '&{10 20}' (ptr to audit.lowHigh) [float64 out of range]
     asserts_test.go:485: testing assert "range" failed: '97' (int32) <> '&{120 122}' (ptr to audit.lowHigh) [rune out of range]
     asserts_test.go:485: testing assert "range" failed: 'aaa' (string) <> '&{uuuuu zzzzz}' (ptr to audit.lowHigh) [string out of range]
-    asserts_test.go:485: testing assert "range" failed: '2022-08-05 17:24:17.469629135 +0000 UTC m=+0.001301290' (struct Time) <> '&{{13885567967443155151 60001301290 0x6994e0} {13885571768489212111 3600001301290 0x6994e0}}' (ptr to audit.lowHigh) [time out of range]
+    asserts_test.go:485: testing assert "range" failed: '2021-07-03 11:02:10.454523578 +0000 UTC m=+0.006321627' (struct Time) <> '&{{13848620374898997946 60006321627 0x6994e0} {13848624175945054906 3600006321627 0x6994e0}}' (ptr to audit.lowHigh) [time out of range]
     asserts_test.go:485: testing assert "range" failed: '1s' (int64) <> '&{60000000000 3600000000000}' (ptr to audit.lowHigh) [duration in range]
     asserts_test.go:485: testing assert "range" failed: '[1 2 3]' (slice of int) <> '&{5 10}' (ptr to audit.lowHigh) [slice length out of range]
     asserts_test.go:485: testing assert "range" failed: '[1 2 3]' (array of int) <> '&{5 10}' (ptr to audit.lowHigh) [array length out of range]
@@ -648,8 +682,8 @@
     asserts_test.go:485: testing assert "error match" failed: 'oops, an error' (ptr to errors.errorString) <> 'foo' (string) [should fail and be logged]
 === RUN   TestAssertImplementor
 --- PASS: TestAssertImplementor (0.00s)
-    asserts_test.go:485: testing assert "implementor" failed: 'string test' (string) <> '0xc00006dab0' (ptr to error) [should fail and be logged]
-    asserts_test.go:485: testing assert "implementor" failed: 'error test' (ptr to errors.errorString) <> '0xc00006dac0' (ptr to io.Writer) [should fail and be logged]
+    asserts_test.go:485: testing assert "implementor" failed: 'string test' (string) <> '0xc000099aa0' (ptr to error) [should fail and be logged]
+    asserts_test.go:485: testing assert "implementor" failed: 'error test' (ptr to errors.errorString) <> '0xc000099ab0' (ptr to io.Writer) [should fail and be logged]
 === RUN   TestAssertAssignable
 --- PASS: TestAssertAssignable (0.00s)
     asserts_test.go:485: testing assert "assignable" failed: 'one' (string) <> '5' (int) [should fail and be logged]
@@ -678,16 +712,16 @@
 --- PASS: TestAssertPathExists (0.00s)
     asserts_test.go:485: testing assert "path exists" failed: '/this/path/will/hopefully/not/exist' (string) <> 'true' (bool) [illegal path]
 === RUN   TestAssertWait
---- PASS: TestAssertWait (0.20s)
+--- PASS: TestAssertWait (0.21s)
     asserts_test.go:485: testing assert "wait" failed: 'false' (bool) <> 'true' (bool) [should be false]
     asserts_test.go:485: testing assert "wait" failed: 'timeout 100ms' (string) <> 'signal true' (string) [should timeout]
 === RUN   TestAssertWaitTested
---- PASS: TestAssertWaitTested (0.20s)
+--- PASS: TestAssertWaitTested (0.21s)
     asserts_test.go:485: testing assert "nil" failed: 'illegal value' (ptr to errors.errorString) <> '<nil>' (invalid) [should be false]
     asserts_test.go:485: testing assert "wait" failed: 'timeout 100ms' (string) <> 'signal true' (string) [should timeout]
 === RUN   TestAssertRetry
 --- PASS: TestAssertRetry (0.15s)
-    asserts_test.go:485: testing assert "retry" failed: 'timeout after 106.625569ms and 10 retries' (string) <> 'successful call' (string) [should fail]
+    asserts_test.go:485: testing assert "retry" failed: 'timeout after 105.730656ms and 10 retries' (string) <> 'successful call' (string) [should fail]
 === RUN   TestAssertFail
 --- PASS: TestAssertFail (0.00s)
     asserts_test.go:485: testing assert "fail" failed: '<nil>' (invalid) <> '<nil>' (invalid) [this should fail]
@@ -747,84 +781,52 @@
 === RUN   TestOneOf
 --- PASS: TestOneOf (0.01s)
 === RUN   TestWords
---- PASS: TestWords (0.01s)
+--- PASS: TestWords (0.02s)
 === RUN   TestPattern
 --- PASS: TestPattern (0.00s)
 === RUN   TestText
---- PASS: TestText (0.40s)
+--- PASS: TestText (0.33s)
 === RUN   TestName
---- PASS: TestName (1.71s)
+--- PASS: TestName (1.80s)
 === RUN   TestDomain
---- PASS: TestDomain (0.00s)
+--- PASS: TestDomain (0.01s)
 === RUN   TestURL
---- PASS: TestURL (0.86s)
+--- PASS: TestURL (0.87s)
 === RUN   TestEMail
---- PASS: TestEMail (0.77s)
+--- PASS: TestEMail (0.80s)
 === RUN   TestTimes
 --- PASS: TestTimes (3.20s)
 PASS
-ok  	github.com/tideland/golib/audit	7.531s
+ok  	github.com/tideland/golib/audit	7.644s
 === RUN   TestNoLoader
 --- PASS: TestNoLoader (0.00s)
 === RUN   TestLoader
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loader" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loader" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loader" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loader" stopped
 --- PASS: TestLoader (0.00s)
 === RUN   TestLoading
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loading" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loading" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loading" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::loading" stopped
 --- PASS: TestLoading (0.07s)
 === RUN   TestConcurrentLoading
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::concurrent-loading" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::concurrent-loading" starts
 cache_test.go:118 func1(): Goroutine 98 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 99 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 53 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 54 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 52 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 95 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 9 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 10 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 11 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 12 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 55 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 13 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 14 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 15 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 16 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 17 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 18 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 19 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 20 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 21 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 22 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 23 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 24 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 25 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 26 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 27 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 28 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 29 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 30 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 31 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 32 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 33 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 34 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 35 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 36 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 37 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 18 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 38 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 39 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 40 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 41 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 42 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 22 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 43 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 44 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 45 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 46 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 47 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 27 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 48 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 49 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 50 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 29 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 51 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 52 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 53 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 54 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 55 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 56 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 57 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 58 loaded "/concurrent"
@@ -864,46 +866,78 @@
 cache_test.go:118 func1(): Goroutine 92 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 93 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 94 loaded "/concurrent"
-cache_test.go:118 func1(): Goroutine 95 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 99 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 96 loaded "/concurrent"
 cache_test.go:118 func1(): Goroutine 97 loaded "/concurrent"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::concurrent-loading" stopped
+cache_test.go:118 func1(): Goroutine 30 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 10 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 11 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 12 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 31 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 32 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 33 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 14 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 15 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 16 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 17 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 35 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 36 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 37 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 19 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 20 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 21 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 39 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 40 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 41 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 42 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 23 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 24 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 25 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 26 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 44 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 45 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 46 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 47 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 28 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 49 loaded "/concurrent"
+cache_test.go:118 func1(): Goroutine 50 loaded "/concurrent"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::concurrent-loading" stopped
 --- PASS: TestConcurrentLoading (0.05s)
 === RUN   TestOutdatingFail
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-fail" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-fail" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-fail" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-fail" stopped
 --- PASS: TestOutdatingFail (0.05s)
 === RUN   TestOutdatingReload
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload" stopped
 --- PASS: TestOutdatingReload (0.10s)
 === RUN   TestOutdatingReloadError
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload-error" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload-error" stopped
---- PASS: TestOutdatingReloadError (0.11s)
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload-error" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::outdating-reload-error" stopped
+--- PASS: TestOutdatingReloadError (0.10s)
 === RUN   TestDiscarding
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "cache::discarding" starts
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "cache::discarding" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "cache::discarding" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "cache::discarding" stopped
 --- PASS: TestDiscarding (0.21s)
 === RUN   TestCleanup
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "cache::cleanup" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "cache::cleanup" starts
 cache_test.go:247 TestCleanup(): 1st: 6 > 2nd: 0
-2022-08-05 17:24:21 Z [INFO] [github.com/tideland/golib/loop] loop "cache::cleanup" stopped
---- PASS: TestCleanup (3.03s)
+2021-07-03 11:02:14 Z [INFO] [github.com/tideland/golib/loop] loop "cache::cleanup" stopped
+--- PASS: TestCleanup (3.05s)
 === RUN   TestClear
-2022-08-05 17:24:21 Z [INFO] [github.com/tideland/golib/loop] loop "cache::clear" starts
+2021-07-03 11:02:14 Z [INFO] [github.com/tideland/golib/loop] loop "cache::clear" starts
 cache_test.go:271 TestClear(): 1st: 50 > 2nd: 0
-2022-08-05 17:24:23 Z [INFO] [github.com/tideland/golib/loop] loop "cache::clear" stopped
---- PASS: TestClear (2.51s)
+2021-07-03 11:02:16 Z [INFO] [github.com/tideland/golib/loop] loop "cache::clear" stopped
+--- PASS: TestClear (2.52s)
 === RUN   TestFileLoader
 loader_test.go:57 TestFileLoader(): test #0: fa with size 1 mb
 loader_test.go:57 TestFileLoader(): test #1: fb with size 2 mb
 loader_test.go:57 TestFileLoader(): test #2: fc with size 3 mb
 loader_test.go:57 TestFileLoader(): test #3: fd with size 4 mb
 loader_test.go:57 TestFileLoader(): test #4: fe with size 5 mb
---- PASS: TestFileLoader (0.34s)
+--- PASS: TestFileLoader (0.33s)
 PASS
-ok  	github.com/tideland/golib/cache	6.495s
+ok  	github.com/tideland/golib/cache	6.515s
 === RUN   TestRingBufferPush
 --- PASS: TestRingBufferPush (0.00s)
 === RUN   TestRingBufferPop
@@ -975,13 +1009,13 @@
 === RUN   TestKeyStringValueTreeSetValue
 --- PASS: TestKeyStringValueTreeSetValue (0.00s)
 === RUN   TestKeyStringValueTreeFind
---- PASS: TestKeyStringValueTreeFind (0.00s)
+--- PASS: TestKeyStringValueTreeFind (0.01s)
 === RUN   TestKeyStringValueTreeDo
---- PASS: TestKeyStringValueTreeDo (0.03s)
+--- PASS: TestKeyStringValueTreeDo (0.00s)
 === RUN   TestKeyStringValueTreeCopy
 --- PASS: TestKeyStringValueTreeCopy (0.00s)
 PASS
-ok  	github.com/tideland/golib/collections	0.049s
+ok  	github.com/tideland/golib/collections	0.064s
 === RUN   TestIsError
 --- PASS: TestIsError (0.00s)
 === RUN   TestValidation
@@ -993,7 +1027,7 @@
 === RUN   TestDoAll
 --- PASS: TestDoAll (0.00s)
 PASS
-ok  	github.com/tideland/golib/errors	0.009s
+ok  	github.com/tideland/golib/errors	0.018s
 === RUN   TestRead
 --- PASS: TestRead (0.00s)
 === RUN   TestReadFile
@@ -1019,7 +1053,7 @@
 === RUN   TestContext
 --- PASS: TestContext (0.00s)
 PASS
-ok  	github.com/tideland/golib/etc	0.027s
+ok  	github.com/tideland/golib/etc	0.029s
 === RUN   TestParseComposeTime
 --- PASS: TestParseComposeTime (0.00s)
 === RUN   TestEncodeDecode
@@ -1028,7 +1062,7 @@
 --- SKIP: TestGet (0.00s)
     atom_test.go:77: Network test skipped in short mode
 PASS
-ok  	github.com/tideland/golib/feed/atom	0.031s
+ok  	github.com/tideland/golib/feed/atom	0.010s
 === RUN   TestParseComposeTime
 --- PASS: TestParseComposeTime (0.00s)
 === RUN   TestEncodeDecode
@@ -1039,11 +1073,11 @@
 --- SKIP: TestGet (0.00s)
     rss_test.go:123: Network test skipped in short mode
 PASS
-ok  	github.com/tideland/golib/feed/rss	0.025s
+ok  	github.com/tideland/golib/feed/rss	0.015s
 === RUN   TestStripTags
 --- PASS: TestStripTags (0.00s)
 PASS
-ok  	github.com/tideland/golib/feed/utils	0.011s
+ok  	github.com/tideland/golib/feed/utils	0.024s
 === RUN   TestParseError
 --- PASS: TestParseError (0.00s)
 === RUN   TestClear
@@ -1051,17 +1085,17 @@
 === RUN   TestLength
 --- PASS: TestLength (0.00s)
 === RUN   TestProcessing
-gjp_test.go:82 func1(): path 01  =>  "/A"       = "Level One"
-gjp_test.go:82 func1(): path 02  =>  "/B/0/A"   = "Level Two - 0"
-gjp_test.go:82 func1(): path 03  =>  "/B/0/B"   = "100"
-gjp_test.go:82 func1(): path 04  =>  "/B/0/C"   = "true"
-gjp_test.go:82 func1(): path 05  =>  "/B/0/D/A" = "Level Three - 0"
-gjp_test.go:82 func1(): path 06  =>  "/B/0/D/B" = "10.1"
-gjp_test.go:82 func1(): path 07  =>  "/B/0/S/0" = "red"
-gjp_test.go:82 func1(): path 08  =>  "/B/0/S/1" = "green"
-gjp_test.go:82 func1(): path 09  =>  "/B/0/S/2" = "1"
-gjp_test.go:82 func1(): path 10  =>  "/B/0/S/3" = "2.2"
-gjp_test.go:82 func1(): path 11  =>  "/B/0/S/4" = "true"
+gjp_test.go:82 func1(): path 01  =>  "/B/0/B"   = "100"
+gjp_test.go:82 func1(): path 02  =>  "/B/0/C"   = "true"
+gjp_test.go:82 func1(): path 03  =>  "/B/0/D/A" = "Level Three - 0"
+gjp_test.go:82 func1(): path 04  =>  "/B/0/D/B" = "10.1"
+gjp_test.go:82 func1(): path 05  =>  "/B/0/S/0" = "red"
+gjp_test.go:82 func1(): path 06  =>  "/B/0/S/1" = "green"
+gjp_test.go:82 func1(): path 07  =>  "/B/0/S/2" = "1"
+gjp_test.go:82 func1(): path 08  =>  "/B/0/S/3" = "2.2"
+gjp_test.go:82 func1(): path 09  =>  "/B/0/S/4" = "true"
+gjp_test.go:82 func1(): path 10  =>  "/B/0/A"   = "Level Two - 0"
+gjp_test.go:82 func1(): path 11  =>  "/B/1/C"   = "false"
 gjp_test.go:82 func1(): path 12  =>  "/B/1/D/A" = "Level Three - 1"
 gjp_test.go:82 func1(): path 13  =>  "/B/1/D/B" = "20.2"
 gjp_test.go:82 func1(): path 14  =>  "/B/1/S/0" = "orange"
@@ -1069,15 +1103,15 @@
 gjp_test.go:82 func1(): path 16  =>  "/B/1/S/2" = "white"
 gjp_test.go:82 func1(): path 17  =>  "/B/1/A"   = "Level Two - 1"
 gjp_test.go:82 func1(): path 18  =>  "/B/1/B"   = "200"
-gjp_test.go:82 func1(): path 19  =>  "/B/1/C"   = "false"
+gjp_test.go:82 func1(): path 19  =>  "/B/2/S"   = "<undefined>"
 gjp_test.go:82 func1(): path 20  =>  "/B/2/A"   = "Level Two - 2"
 gjp_test.go:82 func1(): path 21  =>  "/B/2/B"   = "300"
 gjp_test.go:82 func1(): path 22  =>  "/B/2/C"   = "true"
-gjp_test.go:82 func1(): path 23  =>  "/B/2/D/B" = "30.3"
-gjp_test.go:82 func1(): path 24  =>  "/B/2/D/A" = "Level Three - 2"
-gjp_test.go:82 func1(): path 25  =>  "/B/2/S"   = "<undefined>"
-gjp_test.go:82 func1(): path 26  =>  "/D"       = "5000000000"
-gjp_test.go:82 func1(): path 27  =>  "/T"       = "2017-04-29T20:30:00Z"
+gjp_test.go:82 func1(): path 23  =>  "/B/2/D/A" = "Level Three - 2"
+gjp_test.go:82 func1(): path 24  =>  "/B/2/D/B" = "30.3"
+gjp_test.go:82 func1(): path 25  =>  "/D"       = "5000000000"
+gjp_test.go:82 func1(): path 26  =>  "/T"       = "2017-04-29T20:30:00Z"
+gjp_test.go:82 func1(): path 27  =>  "/A"       = "Level One"
 --- PASS: TestProcessing (0.00s)
 === RUN   TestSeparator
 --- PASS: TestSeparator (0.00s)
@@ -1098,7 +1132,7 @@
 === RUN   TestMarshalJSON
 --- PASS: TestMarshalJSON (0.00s)
 PASS
-ok  	github.com/tideland/golib/gjp	0.022s
+ok  	github.com/tideland/golib/gjp	0.024s
 === RUN   TestTypeAsIdentifierPart
 --- PASS: TestTypeAsIdentifierPart (0.00s)
 === RUN   TestIdentifier
@@ -1106,17 +1140,17 @@
 === RUN   TestSepIdentifier
 --- PASS: TestSepIdentifier (0.00s)
 === RUN   TestStandardUUID
---- PASS: TestStandardUUID (3.37s)
+--- PASS: TestStandardUUID (3.47s)
 === RUN   TestUUIDVersions
-uuid_test.go:62 TestUUIDVersions(): UUID V1: 3bfa2b71-e314-1d01-9103-6b5bce75ae0f
+uuid_test.go:62 TestUUIDVersions(): UUID V1: 0e133e1f-eedb-1b01-8b2f-1b15d9df8743
 uuid_test.go:67 TestUUIDVersions(): UUID V3: c4d91d8a-0d3e-3e3f-8dd6-924b8cc71909
-uuid_test.go:72 TestUUIDVersions(): UUID V4: 93fd9d91-386d-4ced-8f8a-a8553216a3e4
+uuid_test.go:72 TestUUIDVersions(): UUID V4: f98c34c2-0b09-4913-98ce-30ada716b15c
 uuid_test.go:77 TestUUIDVersions(): UUID V5: 479b560a-cc70-5da7-9009-dcda1e772b01
 --- PASS: TestUUIDVersions (0.00s)
 === RUN   TestUUIDByHex
 --- PASS: TestUUIDByHex (0.00s)
 PASS
-ok  	github.com/tideland/golib/identifier	3.395s
+ok  	github.com/tideland/golib/identifier	3.504s
 === RUN   TestGetSetLevel
 --- PASS: TestGetSetLevel (0.00s)
 === RUN   TestGetSetLevelString
@@ -1124,11 +1158,11 @@
 === RUN   TestFiltering
 --- PASS: TestFiltering (0.00s)
 === RUN   TestGoLogger
-2022/08/05 17:24:17 [DEBUG] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:146) Debug.
-2022/08/05 17:24:17 [INFO] [github.com/tideland/golib/logger_test] Info.
-2022/08/05 17:24:17 [WARNING] [github.com/tideland/golib/logger_test] Warning.
-2022/08/05 17:24:17 [ERROR] [github.com/tideland/golib/logger_test] Error.
-2022/08/05 17:24:17 [CRITICAL] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:150) Critical.
+2021/07/03 11:02:10 [DEBUG] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:146) Debug.
+2021/07/03 11:02:10 [INFO] [github.com/tideland/golib/logger_test] Info.
+2021/07/03 11:02:10 [WARNING] [github.com/tideland/golib/logger_test] Warning.
+2021/07/03 11:02:10 [ERROR] [github.com/tideland/golib/logger_test] Error.
+2021/07/03 11:02:10 [CRITICAL] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:150) Critical.
 --- PASS: TestGoLogger (0.00s)
 === RUN   TestSysLogger
 --- SKIP: TestSysLogger (0.00s)
@@ -1136,235 +1170,235 @@
 === RUN   TestFatalExit
 --- PASS: TestFatalExit (0.00s)
 PASS
-ok  	github.com/tideland/golib/logger	0.015s
+ok  	github.com/tideland/golib/logger	0.051s
 === RUN   TestSimpleStop
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" stopped
 --- PASS: TestSimpleStop (0.00s)
 === RUN   TestLogging
 --- PASS: TestLogging (0.00s)
 === RUN   TestSimpleRestart
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" restarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" restarts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
 --- PASS: TestSimpleRestart (0.00s)
 === RUN   TestSimpleKill
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-kill" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "simple-kill" stopped with error: ouch
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-kill" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "simple-kill" stopped with error: ouch
 --- PASS: TestSimpleKill (0.00s)
 === RUN   TestError
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "error" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "error" stopped with error: internal loop error
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "error" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "error" stopped with error: internal loop error
 --- PASS: TestError (0.00s)
 === RUN   TestDeferredError
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "deferred-error" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "deferred-error" stopped with error: deferred error
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "deferred-error" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "deferred-error" stopped with error: deferred error
 --- PASS: TestDeferredError (0.00s)
 === RUN   TestStopRecoverings
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "stop-recoverings" tries to recover
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" recovered
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "stop-recoverings" tries to recover
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" recovered
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" stopped
 --- PASS: TestStopRecoverings (0.00s)
 === RUN   TestEndRecoverings
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" stopped
 --- PASS: TestEndRecoverings (0.00s)
 === RUN   TestRecoveringsPanic
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" stopped with error: too many panics
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" stopped with error: too many panics
 --- PASS: TestRecoveringsPanic (0.00s)
 === RUN   TestRecoveringsError
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-error" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" tries to recover
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" stopped with error: error
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-error" starts
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" tries to recover
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" stopped with error: error
 --- PASS: TestRecoveringsError (0.00s)
 === RUN   TestDescription
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "one" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "two::three::four" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "two::three::four"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing ""
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "one" stops observable "two::three::four"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "one" stops observable ""
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "one" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "one" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "two::three::four" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "two::three::four"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing ""
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "one" stops observable "two::three::four"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "one" stops observable ""
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "one" stopped
 --- PASS: TestDescription (0.00s)
 === RUN   TestSimpleSentinel
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "simple-sentinel" stops observable "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" stopped
 --- PASS: TestSimpleSentinel (0.00s)
 === RUN   TestSentinelStoppingLoop
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-stopping-loop" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-stopping-loop" stops observable "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-stopping-loop" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-stopping-loop" stops observable "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" stopped
 --- PASS: TestSentinelStoppingLoop (0.00s)
 === RUN   TestSentineForget
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::d" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::d"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-forget" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-forget" stops observable "loop::d"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::d" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::d"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-forget" stops observable "loop::d"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-forget" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" stopped
 --- PASS: TestSentineForget (0.00s)
 === RUN   TestSentinelKillingLoopNoHandler
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-no-handler" kills all observables after error: bang!
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" stopped with error: [LOOP:002] error handling for "loop::b" failed: bang!
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-no-handler" kills all observables after error: bang!
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" stopped with error: [LOOP:002] error handling for "loop::b" failed: bang!
 --- PASS: TestSentinelKillingLoopNoHandler (0.00s)
 === RUN   TestSentinelKillingLoopHandlerRestarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-handler-restarts" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" stopped
 --- PASS: TestSentinelKillingLoopHandlerRestarts (0.00s)
 === RUN   TestSentinelKillingLoopHandlerStops
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-with-stops" kills all observables after error: oh no!
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" stopped with error: [LOOP:002] error handling for "loop::b" failed: oh no!
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-with-stops" kills all observables after error: oh no!
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
 --- PASS: TestSentinelKillingLoopHandlerStops (0.00s)
 === RUN   TestSentinelKillingLoopHandlerRestartAll
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::c"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" stopped with error: [LOOP:002] error handling for "loop::b" failed: oh no!
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-killing-loop-restarting-all" stops observable "loop::c"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" stopped
 --- PASS: TestSentinelKillingLoopHandlerRestartAll (0.00s)
 === RUN   TestNestedSentinelKill
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "nested-sentinel-kill::nested"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::nested" stops observable "loop::b"
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" stopped with error: bang!
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] sentinel "nested-sentinel-kill::nested" restarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" restarts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::top" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::top" stops observable "nested-sentinel-kill::nested"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "nested-sentinel-kill::nested"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::nested" stops observable "loop::b"
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" stopped with error: bang!
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] sentinel "nested-sentinel-kill::nested" restarts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" restarts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::top" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "nested-sentinel-kill::top" stops observable "nested-sentinel-kill::nested"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" stopped
 --- PASS: TestNestedSentinelKill (0.00s)
 === RUN   TestSentinelSwitch
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::b" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-switch::b" stops observable "loop::a"
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::b" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::b" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop.(*sentinel).backendLoop] sentinel "sentinel-switch::b" stops observable "loop::a"
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::b" stopped
 --- PASS: TestSentinelSwitch (0.00s)
 PASS
-ok  	github.com/tideland/golib/loop	0.020s
+ok  	github.com/tideland/golib/loop	0.028s
 === RUN   TestMapReduce
 --- PASS: TestMapReduce (3.13s)
 PASS
-ok  	github.com/tideland/golib/mapreduce	3.139s
+ok  	github.com/tideland/golib/mapreduce	3.169s
 === RUN   TestETMMonitor
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
---- PASS: TestETMMonitor (0.17s)
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+--- PASS: TestETMMonitor (0.16s)
 === RUN   TestSSIMonitor
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
 --- PASS: TestSSIMonitor (0.00s)
 === RUN   TestDSRMonitor
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
-2022-08-05 17:24:17 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: runtime error: integer divide by zero
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
+2021-07-03 11:02:10 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: runtime error: integer divide by zero
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
 --- PASS: TestDSRMonitor (0.00s)
 === RUN   TestInternalPanic
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
-2022-08-05 17:24:17 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: ouch
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
+2021-07-03 11:02:10 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
+2021-07-03 11:02:10 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: ouch
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
 --- PASS: TestInternalPanic (0.00s)
 === RUN   TestBackendSwitch
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
---- PASS: TestBackendSwitch (0.06s)
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
+2021-07-03 11:02:10 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
+--- PASS: TestBackendSwitch (0.05s)
 PASS
-ok  	github.com/tideland/golib/monitoring	0.248s
+ok  	github.com/tideland/golib/monitoring	0.249s
 === RUN   TestSimplePoint
 --- PASS: TestSimplePoint (0.00s)
 === RUN   TestSimplePointArray
@@ -1384,7 +1418,7 @@
 === RUN   TestLeastSquaresFunction
 --- PASS: TestLeastSquaresFunction (0.00s)
 PASS
-ok  	github.com/tideland/golib/numerics	0.011s
+ok  	github.com/tideland/golib/numerics	0.030s
 === RUN   TestSimpleKeyOperations
 --- SKIP: TestSimpleKeyOperations (0.00s)
     commands_test.go:29: Redis test skipped in short mode
@@ -1437,105 +1471,105 @@
 --- SKIP: TestPipelining (0.00s)
     redis_test.go:87: Redis test skipped in short mode
 === RUN   TestOptions
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "redis::tmp-redis-sock::0" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "redis::tmp-redis-sock::0" starts
 --- PASS: TestOptions (0.00s)
 === RUN   TestConcurrency
 --- SKIP: TestConcurrency (0.00s)
     redis_test.go:145: Redis test skipped in short mode
 PASS
-ok  	github.com/tideland/golib/redis	0.007s
+ok  	github.com/tideland/golib/redis	0.010s
 === RUN   TestSimpleNoTimeout
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::0fdb36d3-7845-46fd-8892-869049ebc65d" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::0fdb36d3-7845-46fd-8892-869049ebc65d" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::039703c9-89a6-49c7-90df-4167e4c22d24" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::039703c9-89a6-49c7-90df-4167e4c22d24" stopped
 --- PASS: TestSimpleNoTimeout (0.00s)
 === RUN   TestAccessAfterStopping
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::937ef06a-9966-44bf-89e4-66de3322c899" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::937ef06a-9966-44bf-89e4-66de3322c899" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::819eb055-f456-42a5-8365-f25de23bb68a" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::819eb055-f456-42a5-8365-f25de23bb68a" stopped
 --- PASS: TestAccessAfterStopping (0.00s)
 === RUN   TestCleanupNoError
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::a7f4397b-d72d-4500-92bd-24565b26fc4a" starts
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::a7f4397b-d72d-4500-92bd-24565b26fc4a" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ed03bd1b-a696-42ce-9879-71e8eb200cbb" starts
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ed03bd1b-a696-42ce-9879-71e8eb200cbb" stopped
 --- PASS: TestCleanupNoError (0.00s)
 === RUN   TestCleanupWithErrors
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::94772ad7-6c88-4429-8eab-fa52005308b1" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::94772ad7-6c88-4429-8eab-fa52005308b1" stopped with error: [SCENE:005] cleanup of property "bar" failed: ouch
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::bd16491e-e2ab-4daf-863f-4701503b17cd" starts
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::bd16491e-e2ab-4daf-863f-4701503b17cd" stopped with error: [SCENE:005] cleanup of property "bar" failed: ouch
 --- PASS: TestCleanupWithErrors (0.00s)
 === RUN   TestSimpleInactivityTimeout
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::039d2579-e5f4-4f6d-8346-9777131d389f" starts
-2022-08-05 17:24:17 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::039d2579-e5f4-4f6d-8346-9777131d389f" stopped with error: [SCENE:002] scene inactivity timeout reached at 2022-08-05 17:24:17.873931198 +0000 UTC m=+0.105284235
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::9bfa2172-701c-4232-9af6-c6913dcdc466" starts
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::9bfa2172-701c-4232-9af6-c6913dcdc466" stopped with error: [SCENE:002] scene inactivity timeout reached at 2021-07-03 11:02:11.148658706 +0000 UTC m=+0.105640715
 --- PASS: TestSimpleInactivityTimeout (0.10s)
 === RUN   TestSimpleAbsoluteTimeout
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scene::a66f1b0f-982f-4821-9449-adefb55438be" starts
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::a66f1b0f-982f-4821-9449-adefb55438be" stopped with error: [SCENE:002] scene absolute timeout reached at 2022-08-05 17:24:18.124476868 +0000 UTC m=+0.355829933
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::cfbfe969-49a7-4936-95d0-2ecc94da8c8b" starts
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::cfbfe969-49a7-4936-95d0-2ecc94da8c8b" stopped with error: [SCENE:002] scene absolute timeout reached at 2021-07-03 11:02:11.399072895 +0000 UTC m=+0.356054951
 --- PASS: TestSimpleAbsoluteTimeout (0.25s)
 === RUN   TestCleanupAfterTimeout
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::1a18be93-053b-4968-951a-af7331ed734e" starts
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::1a18be93-053b-4968-951a-af7331ed734e" stopped with error: [SCENE:002] scene absolute timeout reached at 2022-08-05 17:24:18.225737333 +0000 UTC m=+0.457090377
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ab29889b-9938-43ea-83da-60d4e568edea" starts
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::ab29889b-9938-43ea-83da-60d4e568edea" stopped with error: [SCENE:002] scene absolute timeout reached at 2021-07-03 11:02:11.49959526 +0000 UTC m=+0.456577364
 --- PASS: TestCleanupAfterTimeout (0.25s)
 === RUN   TestAbort
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::30bd8d69-d424-498b-86df-6aeb92465183" starts
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::30bd8d69-d424-498b-86df-6aeb92465183" stopped with error: aborted
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::b11f98e6-00c6-451a-9913-dc03bdbfd2c4" starts
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::b11f98e6-00c6-451a-9913-dc03bdbfd2c4" stopped with error: aborted
 --- PASS: TestAbort (0.00s)
 === RUN   TestFlagNoTimeout
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::b485305e-0a12-4e55-82ed-343f2bb77e28" starts
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::b485305e-0a12-4e55-82ed-343f2bb77e28" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scene::05294ba9-dbc0-4f78-8520-17929d32022d" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::05294ba9-dbc0-4f78-8520-17929d32022d" stopped
 --- PASS: TestFlagNoTimeout (0.35s)
 === RUN   TestNoFlagDueToStop
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::73f84770-9037-4ddf-8019-ef01c08ae70a" starts
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::73f84770-9037-4ddf-8019-ef01c08ae70a" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ac697e20-48b9-4b46-9b98-de73e8e1813a" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ac697e20-48b9-4b46-9b98-de73e8e1813a" stopped
 --- PASS: TestNoFlagDueToStop (0.10s)
 === RUN   TestStoreAndFlag
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::8b123c31-560c-4ef1-8021-25cfa235cfb8" starts
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::8b123c31-560c-4ef1-8021-25cfa235cfb8" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d32c85bc-93f4-4940-98ae-62bb47cab109" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d32c85bc-93f4-4940-98ae-62bb47cab109" stopped
 --- PASS: TestStoreAndFlag (0.10s)
 === RUN   TestEarlyFlag
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "scene::dbec5d13-cee8-4516-8570-1f43a57feb38" starts
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "scene::dbec5d13-cee8-4516-8570-1f43a57feb38" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::cfdec68e-9537-4789-9abf-c9186118a46b" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::cfdec68e-9537-4789-9abf-c9186118a46b" stopped
 --- PASS: TestEarlyFlag (0.10s)
 === RUN   TestFlagTimeout
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "scene::0830a1e6-3c81-4885-8224-4ebcd1156bfa" starts
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "scene::0830a1e6-3c81-4885-8224-4ebcd1156bfa" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::cc47d607-2b78-4343-8e9e-85e90afc1f5f" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::cc47d607-2b78-4343-8e9e-85e90afc1f5f" stopped
 --- PASS: TestFlagTimeout (0.10s)
 === RUN   TestFlagUnflag
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d2c78fb9-6aa1-4003-9c6b-67d4d4d86c80" starts
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d2c78fb9-6aa1-4003-9c6b-67d4d4d86c80" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::1f2bbe29-876e-4568-801b-39f12e09bfe5" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "scene::1f2bbe29-876e-4568-801b-39f12e09bfe5" stopped
 --- PASS: TestFlagUnflag (0.05s)
 PASS
-ok  	github.com/tideland/golib/scene	1.415s
+ok  	github.com/tideland/golib/scene	1.419s
 === RUN   TestScroller
 scroller_test.go:173 TestScroller(): test #1/10: no lines existing; initially no lines scrolled
-2022-08-05 17:24:17 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:13 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #2/10: no lines existing; initially five lines scrolled
-2022-08-05 17:24:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:13 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:16 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #3/10: ten lines existing; initially no lines scrolled
-2022-08-05 17:24:22 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
-2022-08-05 17:24:22 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:25 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:16 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:18 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #4/10: ten lines existing; initially five lines scrolled
-2022-08-05 17:24:25 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:18 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:19 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #5/10: ten lines existing; initially twenty lines scrolled
-2022-08-05 17:24:25 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
-2022-08-05 17:24:25 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:26 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:19 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:19 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #6/10: ten lines existing; initially twenty lines scrolled; buffer smaller than lines
-2022-08-05 17:24:26 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:26 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:19 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #7/10: ten lines existing; initially three lines scrolled; filter lines with special prefix
-2022-08-05 17:24:26 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
-scroller_test.go:173 TestScroller(): test #8/10: ten lines existing; initially five lines scrolled; error after further 25 lines
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:27 Z [ERROR] [github.com/tideland/golib/loop] loop "scroller" stopped with error: ouch
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] scroller_test.go:173 TestScroller(): test #8/10: ten lines existing; initially five lines scrolled; error after further 25 lines
+loop "scroller" stopped
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:20 Z [ERROR] [github.com/tideland/golib/loop] loop "scroller" stopped with error: ouch
 scroller_test.go:173 TestScroller(): test #9/10: ten lines existing; initially five lines scrolled; simply stop after 25 lines
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
 scroller_test.go:173 TestScroller(): test #10/10: unterminated last line is not scrolled
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
---- PASS: TestScroller (9.58s)
-2022-08-05 17:24:27 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
+2021-07-03 11:02:20 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
+--- PASS: TestScroller (9.56s)
 PASS
-ok  	github.com/tideland/golib/scroller	9.585s
+ok  	github.com/tideland/golib/scroller	9.566s
 === RUN   TestTagValidation
 --- PASS: TestTagValidation (0.00s)
 === RUN   TestCreating
@@ -1639,38 +1673,38 @@
 sml_test.go:180 TestSML2XML(): ===== DONE =====
 --- PASS: TestSML2XML (0.00s)
 PASS
-ok  	github.com/tideland/golib/sml	0.007s
+ok  	github.com/tideland/golib/sml	0.008s
 === RUN   TestPivot
 --- PASS: TestPivot (0.00s)
 PASS
-ok  	github.com/tideland/golib/sort	0.003s
+ok  	github.com/tideland/golib/sort	0.006s
 === RUN   TestAsString
 defaulter_test.go:54 TestAsString(): test Defaulter{AsString} 0: value 'foo' without error and default bar
 defaulter_test.go:54 TestAsString(): test Defaulter{AsString} 1: value 'foo' with error and default bar
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsString) value returned with error: foo
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsString) value returned with error: foo
 --- PASS: TestAsString (0.00s)
 === RUN   TestAsStringSlice
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 0: value 'a/b/c' without error and default [a]
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 1: value 'a/b/c' with error and default [a]
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 2: value 'a/b/c' without error and default []
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 3: value 'a/b/c' with error and default []
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 4: value '' without error and default []
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 5: value '' with error and default [foo]
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: 
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: 
 defaulter_test.go:80 TestAsStringSlice(): test Defaulter{AsStringSlice} 6: value 'a/b/c' without error and default [a]
 --- PASS: TestAsStringSlice (0.00s)
 === RUN   TestAsStringMap
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 0: value 'a:1/b:2' without error and default map[a:1]
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 1: value 'a:1/b:2' with error and default map[a:1]
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 2: value 'a:1/b:2' without error and default map[]
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 3: value 'a:1/b:2' with error and default map[]
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 4: value '' without error and default map[]
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 5: value '' with error and default map[a:1]
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: 
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: 
 defaulter_test.go:107 TestAsStringMap(): test Defaulter{AsStringMap} 6: value 'a:1/b:2' without error and default map[]
 --- PASS: TestAsStringMap (0.00s)
 === RUN   TestAsBool
@@ -1681,9 +1715,9 @@
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 4: value 'true' without error and default false
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 5: value 'True' without error and default false
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 6: value 'wahr' without error and default true
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "wahr": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "wahr": invalid syntax
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 7: value '' with error and default true
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error: 
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error: 
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 8: value '0' without error and default true
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 9: value 'f' without error and default true
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 10: value 'F' without error and default true
@@ -1691,9 +1725,9 @@
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 12: value 'false' without error and default true
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 13: value 'False' without error and default true
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 14: value 'falsch' without error and default false
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "falsch": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "falsch": invalid syntax
 defaulter_test.go:141 TestAsBool(): test Defaulter{AsBool} 15: value '' with error and default false
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error: 
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error: 
 --- PASS: TestAsBool (0.00s)
 === RUN   TestAsInt
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 0: value '0' without error and default 0
@@ -1702,15 +1736,15 @@
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 3: value '9223372036854775807' without error and default 0
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 4: value '-9223372036854775808' without error and default 0
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 5: value '999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "999999999999999999999": value out of range
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 6: value '-999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "-999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "-999999999999999999999": value out of range
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 7: value 'one two three' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "one two three": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "one two three": invalid syntax
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 8: value '1' with error and default 2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: 1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: 1
 defaulter_test.go:171 TestAsInt(): test Defaulter{AsInt} 9: value '-1' with error and default -2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: -1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: -1
 --- PASS: TestAsInt (0.00s)
 === RUN   TestAsInt64
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 0: value '0' without error and default 0
@@ -1719,37 +1753,37 @@
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 3: value '9223372036854775807' without error and default 0
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 4: value '-9223372036854775808' without error and default 0
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 5: value '999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "999999999999999999999": value out of range
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 6: value '-999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "-999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "-999999999999999999999": value out of range
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 7: value 'one two three' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "one two three": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "one two three": invalid syntax
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 8: value '1' with error and default 2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: 1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: 1
 defaulter_test.go:201 TestAsInt64(): test Defaulter{AsInt64} 9: value '-1' with error and default -2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: -1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: -1
 --- PASS: TestAsInt64 (0.00s)
 === RUN   TestAsUint
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 0: value '0' without error and default 0
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 1: value '1' without error and default 0
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 2: value '18446744073709551615' without error and default 0
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 3: value '999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "999999999999999999999": value out of range
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 4: value 'one two three' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "one two three": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "one two three": invalid syntax
 defaulter_test.go:226 TestAsUint(): test Defaulter{AsUint} 5: value '-1' with error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value returned with error: -1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value returned with error: -1
 --- PASS: TestAsUint (0.00s)
 === RUN   TestAsUInt64
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 0: value '0' without error and default 0
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 1: value '1' without error and default 0
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 2: value '18446744073709551615' without error and default 0
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 3: value '999999999999999999999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "999999999999999999999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "999999999999999999999": value out of range
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 4: value 'one two three' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "one two three": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "one two three": invalid syntax
 defaulter_test.go:251 TestAsUInt64(): test Defaulter{AsUInt64} 5: value '-1' with error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value returned with error: -1
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value returned with error: -1
 --- PASS: TestAsUInt64 (0.00s)
 === RUN   TestAsFloat64
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 0: value '0.0' without error and default 0
@@ -1758,33 +1792,33 @@
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 3: value '1.7976931348623157e+308' without error and default 0
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 4: value '-1.7976931348623157e+308' without error and default 0
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 5: value '9e+999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "9e+999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "9e+999": value out of range
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 6: value '-9e+999' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "-9e+999": value out of range
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "-9e+999": value out of range
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 7: value 'one.two' without error and default 1
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "one.two": invalid syntax
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "one.two": invalid syntax
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 8: value '1.0' with error and default 2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: 1.0
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: 1.0
 defaulter_test.go:281 TestAsFloat64(): test Defaulter{AsFloat4} 9: value '-1.0' with error and default -2
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: -1.0
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: -1.0
 --- PASS: TestAsFloat64 (0.00s)
 === RUN   TestAsTime
-defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 0: value '2022-08-05T17:24:18.168723553Z' without error and default 2000-01-01 00:00:00 +0000 UTC
-defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 1: value '2022-08-05T17:24:18.168723553Z' with error and default 2000-01-01 00:00:00 +0000 UTC
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value returned with error: 2022-08-05T17:24:18.168723553Z
-defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 2: value '2022-08-05T17:24:18.168723553Z' without error and default 2000-01-01 00:00:00 +0000 UTC
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "2022-08-05T17:24:18.168723553Z" as "any false layout": cannot parse "2022-08-05T17:24:18.168723553Z" as "any false layout"
+defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 0: value '2021-07-03T11:02:11.277384615Z' without error and default 2000-01-01 00:00:00 +0000 UTC
+defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 1: value '2021-07-03T11:02:11.277384615Z' with error and default 2000-01-01 00:00:00 +0000 UTC
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value returned with error: 2021-07-03T11:02:11.277384615Z
+defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 2: value '2021-07-03T11:02:11.277384615Z' without error and default 2000-01-01 00:00:00 +0000 UTC
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "2021-07-03T11:02:11.277384615Z" as "any false layout": cannot parse "2021-07-03T11:02:11.277384615Z" as "any false layout"
 defaulter_test.go:307 TestAsTime(): test Defaulter{AsTime} 3: value '' without error and default 2000-01-01 00:00:00 +0000 UTC
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "" as "2006"
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "" as "2006"
 --- PASS: TestAsTime (0.00s)
 === RUN   TestAsDuration
 defaulter_test.go:330 TestAsDuration(): test Defaulter{AsDuration} 0: value '1s' without error and default 1s
 defaulter_test.go:330 TestAsDuration(): test Defaulter{AsDuration} 1: value '1s' with error and default 1m0s
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value returned with error: 1s
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value returned with error: 1s
 defaulter_test.go:330 TestAsDuration(): test Defaulter{AsDuration} 2: value '2' without error and default 1m0s
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: missing unit in duration 2
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: missing unit in duration 2
 defaulter_test.go:330 TestAsDuration(): test Defaulter{AsDuration} 3: value '1 hour' without error and default 1m0s
-2022-08-05 17:24:18 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: unknown unit  hour in duration 1 hour
+2021-07-03 11:02:11 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: unknown unit  hour in duration 1 hour
 defaulter_test.go:330 TestAsDuration(): test Defaulter{AsDuration} 4: value '4711h' without error and default 1m0s
 --- PASS: TestAsDuration (0.00s)
 === RUN   TestDefaulterString
@@ -1854,7 +1888,7 @@
     --- PASS: TestMatches/matching_pattern_with_escape (0.00s)
     --- PASS: TestMatches/not-matching_pattern_with_escape (0.00s)
 PASS
-ok  	github.com/tideland/golib/stringex	0.012s
+ok  	github.com/tideland/golib/stringex	0.017s
 === RUN   TestTimeContainments
 --- PASS: TestTimeContainments (0.00s)
 === RUN   TestBeginOf
@@ -1862,17 +1896,17 @@
 === RUN   TestEndOf
 --- PASS: TestEndOf (0.00s)
 === RUN   TestCrontabKeep
-2022-08-05 17:24:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::50ms" starts
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::50ms" stopped
+2021-07-03 11:02:11 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::50ms" starts
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::50ms" stopped
 --- PASS: TestCrontabKeep (1.00s)
 === RUN   TestCrontabRemove
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
 --- PASS: TestCrontabRemove (0.50s)
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
 === RUN   TestCrontabError
-2022-08-05 17:24:19 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
-2022-08-05 17:24:19 Z [ERROR] [github.com/tideland/golib/timex.(*Crontab).do] job "remove" removed after error: failed
-2022-08-05 17:24:20 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
+2021-07-03 11:02:12 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
+2021-07-03 11:02:12 Z [ERROR] [github.com/tideland/golib/timex.(*Crontab).do] job "remove" removed after error: failed
+2021-07-03 11:02:13 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
 --- PASS: TestCrontabError (0.50s)
 === RUN   TestRetrySuccess
 --- PASS: TestRetrySuccess (0.20s)
@@ -1946,7 +1980,7 @@
 version_test.go:399 TestLess(): less test #14: "1.2.3-alpha.2" <> "1.2.3-alpha.1b" -> false
 --- PASS: TestLess (0.00s)
 PASS
-ok  	github.com/tideland/golib/version	0.006s
+ok  	github.com/tideland/golib/version	0.005s
 make[1]: Leaving directory '/build/golang-github-tideland-golib-4.24.2'
    create-stamp debian/debhelper-build-stamp
  fakeroot debian/rules binary
@@ -1978,12 +2012,14 @@
  dpkg-source --after-build .
 dpkg-buildpackage: info: binary-only upload (no source included)
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/25132/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/23185 and its subdirectories
-I: Current time: Fri Aug  5 05:24:31 -12 2022
-I: pbuilder-time-stamp: 1659720271
+I: removing directory /srv/workspace/pbuilder/25132 and its subdirectories
+I: Current time: Sun Jul  4 01:02:25 +14 2021
+I: pbuilder-time-stamp: 1625310145