OK, turing.

<- leave blank

Fri Sep 22 18:47:28 EDT 2023

diff 3504122012e3f7ee778efa048e462510619c13b4 uncommitted
--- a/sys/src/libmach/8db.c
+++ b/sys/src/libmach/8db.c
@@ -127,6 +127,8 @@
		if(++i > 1000)
			break;
	}
+ if(i == 0)
+ werrstr("no pc for sp %#llux", pc);
	return i;
 }

--- a/sys/src/libmach/machdata.c
+++ b/sys/src/libmach/machdata.c
@@ -359,6 +359,8 @@
		if(++i > 40)
			break;
	}
+ if(i == 0)
+ werrstr("no pc for sp %#llux", pc);
	return i;
 }

@@ -395,6 +397,8 @@
		if(++i > 40)
			break;
	}
+ if(i == 0)
+ werrstr("no pc for sp %#llux", pc);
	return i;
 }



Fri Sep 22 16:41:31 EDT 2023
Spgneler
Spengler
Spengler
Spengler
Spengler

Fri Sep 22 12:24:19 EDT 2023
From: Russ Cox <rsc@swtch.com>
Date: Sat, 18 Jul 2020 23:52:58 +0000
Subject: [PATCH] acme: add font control message

---
diff 4e5f39796d548fc1b530ae87e25f2db0830b5851
3504122012e3f7ee778efa048e462510619c13b4
--- a/sys/man/4/acme
+++ b/sys/man/4/acme
@@ -31,7 +31,7 @@
 windows.
 Some of them are virtual versions of system files for dealing
 with the virtual console; others control operations
-of
+of
 .I acme
 itself.
 When a command is run under
@@ -252,6 +252,11 @@
 Equivalent to the
 .B Get
 interactive command with no arguments; accepts no arguments.
+.TP
+.BI font " path
+Equivalent to the
+.B Font
+interactive command with a single (required) argument.
 .TP
 .B limit=addr
 When the
--- a/sys/src/cmd/acme/xfid.c
+++ b/sys/src/cmd/acme/xfid.c
@@ -664,6 +664,24 @@
			winsetname(w, r, nr);
			m += (q+1) - pp;
		}else
+ if(strncmp(p, "font ", 5) == 0){ /* execute font command */
+ pp = p+5;
+ m = 5;
+ q = memchr(pp, '\n', e-pp);
+ if(q==nil || q==pp){
+ err = Ebadctl;
+ break;
+ }
+ *q = 0;
+ nulls = FALSE;
+ cvttorunes(pp, q-pp, r, &nb, &nr, &nulls);
+ if(nulls){
+ err = "nulls in font string";
+ break;
+ }
+ fontx(&w->body, nil, nil, FALSE, XXX, r, nr);
+ m += (q+1) - pp;
+ }else
		if(strncmp(p, "dump ", 5) == 0){ /* set dump string */
			pp = p+5;
			m = 5;


Fri Sep 22 03:46:15 EDT 2023
diff --git a/src/tipideed/send_file.c b/src/tipideed/send_file.c
index 23a0373..d6f9122 100644
--- a/src/tipideed/send_file.c
+++ b/src/tipideed/send_file.c
@@ -102,7 +102,7 @@ void send_file (int fd, uint64_t n, char const *fn)
   while (n)
   {
     ssize_t r ;
- buffer_rpeek(buffer_1, v) ;
+ buffer_wpeek(buffer_1, v) ;
     r = allreadv(fd, v, 2) ;
     if (r == -1) strerr_diefu2sys(111, "read from ", fn) ;
     if (!r) strerr_diefu3x(111, "serve ", fn, ": file was truncated") ;
@@ -112,7 +112,7 @@ void send_file (int fd, uint64_t n, char const *fn)
       if (g.verbosity >= 2)
	 strerr_warnw2x("serving elongated file: ", fn) ;
     }
- buffer_rseek(buffer_1, r) ;
+ buffer_wseek(buffer_1, r) ;
     tain_add_g(&deadline, &g.writetto) ;
     if (!buffer_timed_flush_g(buffer_1, &deadline))
       strerr_diefu1sys(111, "write to stdout") ;


Thu Sep 21 21:33:56 EDT 2023
From: Douglas McIlroy <douglas.mcilroy@dartmouth.edu>
Date: Thu, 21 Sep 2023 21:08:13 -0400
To: TUHS main list <tuhs@tuhs.org>
Message-ID-Hash: QSX7M7I6NWPMR333IXMFB6F2J7CEKHHK
Subject: [TUHS] Re: UNIX Influence on Teletype and Vice Versa
Archived-At:
<https://www.tuhs.org/mailman3/hyperkitty/list/tuhs@tuhs.org/message/QSX7M7I6NWPMR333IXMFB6F2J7CEKHHK/>

I omitted one crucial fact from my post about Joe Ossanna's influence
on the TTY 37.  That happened not in connection with Unix, but with
Multics.  When Unix came on the scene, model 37 was already in
production.

Doug




Thu Sep 21 20:15:14 EDT 2023
# Yes.
/> Indeed.  <i>Or is it?</i>

Thu Sep 21 20:13:56 EDT 2023
gmake --version

Thu Sep 21 17:10:11 EDT 2023
$ cat localhost:80/empty
$ cat localhost:80/asdf
asdf
$ ktrace tipideed -f ../etc/tipidee.conf.cdb -v 5
tipideed: pid 3025: info: new connection from ip 1.0.0.0 (1.0.0.0) port 1234
GET /empty HTTP/1.1
host: localhost

tipideed: pid 3025: info: request GET for host localhost path /empty
tipideed: pid 3025: info: sending regular file localhost:80/empty (0 bytes) with
type application/octet-stream
GET /asdf HTTP/1.1
host: localhost
connection: close

tipideed: pid 3025: info: request GET for host localhost path /asdf
tipideed: pid 3025: info: sending regular file localhost:80/asdf (5 bytes) with
type application/octet-stream
1.1 200 OK
Date: Thu, 21 Sep 2023 21:06:57 GMT
Accept-Ranges: none
Cache-Control: private
Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline';
Referrer-Policy: no-referrer-when-downgrade
Server: tipidee/0.0.1.0
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Last-Modified: Thu, 21 Sep 2023 20:56:08 GMT
Content-Type: application/octet-stream
Content-Length: 0

HTTP/1.1 200 OK
Date: Thu, 21 Sep 2023 21:07:10 GMT
Accept-Ranges: none
Cache-Control: private
Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline';
Referrer-Policy: no-referrer-when-downgrade
Server: tipidee/0.0.1.0
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Connection: close
Last-Modified: Thu, 21 Sep 2023 20:51:46 GMT
Content-Type: application/octet-stream
Content-Length: 5

tipideed: pid 3025: info: exiting 0
$ kdump
  3025 ktrace RET ktrace 0
  3025 ktrace CALL
  mmap(0,0xfd,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 ktrace RET mmap 17479103983616/0xfe5abc8b000
  3025 ktrace CALL execve(0x7ef307604ba0,0x7ef307605190,0x7ef3076051c0)
  3025 ktrace NAMI "/home/humm/bin/tipideed"
  3025 ktrace ARGS
	[0] = "tipideed"
	[1] = "-f"
	[2] = "../etc/tipidee.conf.cdb"
	[3] = "-v"
	[4] = "5"
  3025 tipideed NAMI "/usr/libexec/ld.so"
  3025 tipideed RET execve JUSTRETURN
  3025 tipideed CALL getentropy(0x7a901c79a670,40)
  3025 tipideed RET getentropy 0
  3025 tipideed CALL getentropy(0x7a901c79a670,40)
  3025 tipideed RET getentropy 0
  3025 tipideed CALL
  mmap(0,0x4000,0<PROT_NONE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7181146914816/0x687fdb60000
  3025 tipideed CALL
  mprotect(0x687fdb61000,0x2000,0x3<PROT_READ|PROT_WRITE>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179615981568/0x687a275d000
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL mprotect(0x6878cc6c000,0x1000,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mimmutable(0x6878cc6c000,0x1000)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178105749504/0x68748718000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178235310080/0x687502a7000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177807966208/0x68736b1b000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178624524288/0x687675d6000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179781206016/0x687ac4ef000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7180372881408/0x687cf933000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178386034688/0x68759265000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177478356992/0x687230c4000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179387437056/0x68794d68000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177782272000/0x6873529a000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7181070880768/0x687f92dd000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7180285292544/0x687ca5ab000
  3025 tipideed CALL open(0x6878cb6c589,0x10000<O_RDONLY|O_CLOEXEC>)
  3025 tipideed NAMI "/var/run/ld.so.hints"
  3025 tipideed RET open 3
  3025 tipideed CALL fstat(3,0x7a901c79a4a0)
  3025 tipideed STRU struct stat { dev=1028, ino=259222, mode=-r--r--r-- ,
  nlink=1, uid=0<"root">, gid=0<"wheel">, rdev=1040288,
  atime=1695280825<"Sep 21 09:20:25 2023">.039608300,
  mtime=1695280797<"Sep 21 09:19:57 2023">.239662656,
  ctime=1695280797<"Sep 21 09:19:57 2023">.239662656, size=50838,
  blocks=100, blksize=16384, flags=0x0, gen=0x0 }
  3025 tipideed RET fstat 0
  3025 tipideed CALL
  mmap(0,0xc696,0x1<PROT_READ>,0x2<MAP_PRIVATE>,3,0)
  3025 tipideed RET mmap 7179602006016/0x687a1a09000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178866688000/0x68775cc8000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177660911616/0x6872dedd000
  3025 tipideed CALL mimmutable(0x687a1a09000,0xc696)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL open(0x687a1a0fe6e,0x10000<O_RDONLY|O_CLOEXEC>)
  3025 tipideed NAMI "/usr/lib/libc.so.97.1"
  3025 tipideed RET open 3
  3025 tipideed CALL fstat(3,0x7a901c79a570)
  3025 tipideed STRU struct stat { dev=1029, ino=259309, mode=-r--r--r-- ,
  nlink=1, uid=0<"root">, gid=7<"bin">, rdev=1097240,
  atime=1695330391<"Sep 21 23:06:31 2023">.659609445,
  mtime=1695280790<"Sep 21 09:19:50 2023">.409608139,
  ctime=1695280790<"Sep 21 09:19:50 2023">.499609234, size=3680384,
  blocks=7232, blksize=16384, flags=0x0, gen=0x0 }
  3025 tipideed RET fstat 0
  3025 tipideed CALL read(3,0x7a901c799060,0x1000)
  3025 tipideed GIO fd 3 read 4096 bytes
       "\^?ELF\^B\^A\^A\0\0\0\0\0\0\0\0\0\^C\0>\0\^A\0\0\0\M^@y\^C\0\0\0\0\0@\
	\0\0\0\0\0\0\0\M^@\^\8\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0000\0.\0\^F\0\0\
	\0\^D\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\240\^B\0\0\0\
	\0\0\0\240\^B\0\0\0\0\0\0\b\0\0\0\0\0\0\0\^A\0\0\0\^D\0\0\0\0\0\0\0\0\
	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ti\^C\0\0\0\0\0ti\^C\0\0\0\0\0\
	\0\^P\0\0\0\0\0\0\^A\0\0\0\^A\0\0\0\M^@i\^C\0\0\0\0\0\M^@y\^C\0\0\0\0\
	\0\M^@y\^C\0\0\0\0\0\M^P\M^^
	\0\0\0\0\0\M^P\M^^
	\0\0\0\0\0\0\^P\0\0\0\0\0\0\^A\0\0\0\^F\0\0\0\^P\b\^N\0\0\0\0\0\^P(\
	\^N\0\0\0\0\0\^P(\^N\0\0\0\0\0pV\0\0\0\0\0\0pV\0\0\0\0\0\0\0\^P\0\0\0\
	\0\0\0\^A\0\0\0\^F\0\0\0\M^@^\^N\0\0\0\0\0\M^@\M^N\^N\0\0\0\0\0\M^@\
	\M^N\^N\0\0\0\0\0\M^@1\0\0\0\0\0\0\\ \^A\0\0\0\0\0\0\^P\0\0\0\0\0\
	\0\^B\0\0\0\^F\0\0\0\b\\\^N\0\0\0\0\0\b|\^N\0\0\0\0\0\b|\^N\0\0\0\0\0\
	@\^A\0\0\0\0\0\0@\^A\0\0\0\0\0\0\b\0\0\0\0\0\0\0R\M-etd\^D\0\0\0\^P\b\
	\^N\0\0\0\0\0\^P(\^N\0\0\0\0\0\^P(\^N\0\0\0\0\0pV\0\0\0\0\0\0\M-pW\0\
	\0\0\0\0\0\^A\0\0\0\0\0\0\0P\M-etd\^D\0\0\0\M-p"\^B\0\0\0\0\0\M-p"\^B\
	\0\0\0\0\0\M-p"\^B\0\0\0\0\0L5\0\0\0\0\0\0L5\0\0\0\0\0\0\^D\0\0\0\0\0\
	\0\0\M-e\M-[\M-#e\^F\0\0\0\0\M^@\^N\0\0\0\0\0\0\M-0\^N\0\0\0\0\0\0\
	\M-0\^N\0\0\0\0\0\0\^P\0\0\0\0\0\0\0\^P\0\0\0\0\0\0\0\^P\0\0\0\0\0\0\
	\M-f\M-[\M-#e\^F\0\0\0\^P\b\^N\0\0\0\0\0\^P(\^N\0\0\0\0\0\^P(\^N\0\0\
	\0\0\0\M-03\0\0\0\0\0\0\M-03\0\0\0\0\0\0\b\0\0\0\0\0\0\0Q\M-etd\^F\0\
	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^D\0\0\0\^D\0\0\0\M-`\^B\0\0\0\0\0\0\
	\M-`\^B\0\0\0\0\0\0\M-`\^B\0\0\0\0\0\0\^X\0\0\0\0\0\0\0\^X\0\0\0\0\0\
	\0\0\^D\0\0\0\0\0\0\0\b\0\0\0\^D\0\0\0\^A\0\0\0OpenBSD\0\0\0\0\0\0\0\
	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\^P\0\0\^R\0\v\0\M-P\M-S\
	\^E\0\0\0\0\0@\0\0\0\0\0\0\0&.\0\0"\0\v\0\M-p\\
	\0\0\0\0\0M\0\0\0\0\0\0\0d2\0\0"\0\v\0\^P\M-e
	\0\0\0\0\0.\^B\0\0\0\0\0\0>3\0\0\^R\0\v\0\0\M-y
	\0\0\0\0\0P\0\0\0\0\0\0\0\M--B\0\0"\0\v\0\M-@\M^X\f\0\0\0\0\0\M-!\^A\
	\0\0\0\0\0\0\M-\\^T\0\0"\0\v\0\M-0[\^F\0\0\0\0\0\^N\0\0\0\0\0\0\0\^^8\
	\0\0\^R\0\v\0000\M^E\v\0\0\0\0\0p\0\0\0\0\0\0\0\M-m9\0\0\^R\0\v\0\M-`\
	\M^]\v\0\0\0\0\0P\^C\0\0\0\0\0\0g*\0\0"\0\v\0p\M-l \0\0\0\0\0\
	\M-5\0\0\0\0\0\0\0\^E\^C\0\0"\0\v\0\M-@\M-`\^C\0\0\0\0\0M\0\0\0\0\0\0\
	\0\M-&\^E\0\0"\0\v\0\240\^Y\^D\0\0\0\0\0\240\0\0\0\0\0\0\0\M-X \0\0"\
	\0\v\0\0\M^Z\^D\0\0\0\0\0M\0\0\0\0\0\0\0\M^M9\0\0"\0\v\0\M-p\M^[\v\0\
	\0\0\0\0M\0\0\0\0\0\0\0\M--G\0\0"\0\v\0`\^C\r\0\0\0\0\0\^T\0\0\0\0\0\
	\0\0\M-`\f\0\0"\0\v\0 $\^E\0\0\0\0\0\M^U\0\0\0\0\0\0\0@\^T\0\0"\0\v\0\
	@W\^F\0\0\0\0\0@\0\0\0\0\0\0\0\M^O\^T\0\0"\0\v\0\M-0X\^F\0\0\0\0\0M\0\
	\0\0\0\0\0\0\M-~#\0\0"\0\v\0\M-0\M-W\b\0\0\0\0\0M\0\0\0\0\0\0\00078\0\
	\0\^R\0\v\0\M^P\M^G\v\0\0\0\0\0M\0\0\0\0\0\0\0\M-d'\0\0"\0\v\0\M-0K\
		\0\0\0\0\0M\0\0\0\0\0\0\0\M^M.\0\0\^R\0\v\0\M-p`
	\0\0\0\0\0000\0\0\0\0\0\0\0c0\0\0"\0\v\0\M-p\M-=
	\0\0\0\0\0@\^A\0\0\0\0\0\0\M^W7\0\0"\0\v\0\240a\v\0\0\0\0\0\M^E\0\0\0\
	\0\0\0\0,\r\0\0\^R\0\v\0\M-@5\^E\0\0\0\0\0\M-4\0\0\0\0\0\0\0D\^Z\0\0\
	\^R\0\v\0pz\a\0\0\0\0\0m\0\0\0\0\0\0\0\M-I/\0\0"\0\v\0\M-P\240
	\0\0\0\0\0\M-`\^E\0\0\0\0\0\00056\0\0"\0\v\0000D\v\0\0\0\0\0M\0\0\0\0\
	\0\0\0\M^Y\r\0\0"\0\v\0 E\^E\0\0\0\0\0\M-0\0\0\0\0\0\0\0'\^\\0\0\^R\0\
	\v\0 \M^W\a\0\0\0\0\0K\a\0\0\0\0\0\0>1\0\0\^Q\0\^S\08\M-!\^N\0\0\0\0\
	\0\b\0\0\0\0\0\0\0\M-'E\0\0\^R\0\v\0 \M-Z\f\0\0\0\0\0p\0\0\0\0\0\0\0\
	\M^@\^N\0\0"\0\v\0\M-Ps\^E\0\0\0\0\0007\^A\0\0\0\0\0\0\M-}\^\\0\0"\0\
	\v\0\M-`\f\b\0\0\0\0\0p\0\0\0\0\0\0\0\M-Y\^_\0\0\^R\0\v\0\M^Pe\b\0\0\
	\0\0\0@\0\0\0\0\0\0\0H\b\0\0"\0\v\0PJ\^D\0\0\0\0\0M\0\0\0\0\0\0\0H!\0\
	\0"\0\v\0Pw\b\0\0\0\0\0K\^A\0\0\0\0\0\0G2\0\0"\0\v\0\0\M-a
	\0\0\0\0\0p\^A\0\0\0\0\0\0\M-z9\0\0"\0\v\0p\M-"\v\0\0\0\0\0]\0\0\0\0\
	\0\0\0\M-9>\0\0"\0\v\0`A\f\0\0\0\0\0@\0\0\0\0\0\0\0\M-/\b\0\0\^R\0\v\
	\0\M-pM\^D\0\0\0\0\0\M-0\^F\0\0\0\0\0\0\^W\^_\0\0\^R\0\v\00007\b\0\0\
	\0\0\0n\^A\0\0\0\0\0\0\M-Y%\0\0\^R\0\v\0000- \0\0\0\0\0-\0\0\0\0\0\
	\0\0+(\0\0\^R\0\v\0\M^PO \0\0\0\0\0\M^@\0\0\0\0\0\0\0\M->8\0\0\
	\^R\0\v\0\M^P\M^R\v\0\0\0\0\0P\0\0\0\0\0\0\0\M-%;\0\0"\0\v\0\^P\M-O\v\
	\0\0\0\0\0M\0\0\0\0\0\0\0\M-U\^N\0\0"\0\v\0\0x\^E\0\0\0\0\0\M-*\^A\0\
	\0\0\0\0\0\M^I\b\0\0"\0\v\0`M\^D\0\0\0\0\0\M^@\0\0\0\0\0\0\0m&\0\0"\0\
	\v\0\M-P; \0\0\0\0\0\M^P\0\0\0\0\0\0\0\M-s\^S\0\0"\0\v\0\M-p;\
	\^F\0\0\0\0\0\240\0\0\0\0\0\0\0-\^Z\0\0"\0\v\0@y\a\0\0\0\0\0e\0\0\0\0\
	\0\0\0\M-Z&\0\0\^R\0\v\0\^PA \0\0\0\0\0`\0\0\0\0\0\0\0\^Z(\0\0"\0\
	\v\0\M-@M \0\0\0\0\0000\^A\0\0\0\0\0\0\^O;\0\0"\0\v\0\M-p\M-<\v\
	\0\0\0\0\0\M-k\^B\0\0\0\0\0\09>\0\0"\0\v\0\0002\f\0\0\0\0\0|\^B\0\0\0\
	\0\0\0\M^TF\0\0"\0\v\0\^P\M-n\f\0\0\0\0\0\M-@\0\0\0\0\0\0\0\M^_I\0\0"\
	\0\v\0`&\r\0\0\0\0\0\M-0\0\0\0\0\0\0\0AL\0\0\^R\0\v\0\M^P\M^?\r\0\0\0\
	\0\0-\0\0\0\0\0\0\0x\^]\0\0\^Q\0\^U\0X%\^O\0\0\0\0\0\^D\0\0\0\0\0\0\0\
	[ \0\0\^R\0\v\0\M-0h\b\0\0\0\0\0M\0\0\0\0\0\0\0\^O,\0\0"\0\v\0\M-@!
	\0\0\0\0\0\M^@\0\0\0\0\0\0\0\M-S\^\\0\0"\0\v\0P\v\b\0\0\0\0\0`\0\0\0\
	\0\0\0\0>#\0\0"\0\v\0\0\M-7\b\0\0\0\0\0\M-@\0\0\0\0\0\0\0X4\0\0\^R\0\
	\v\0P(\v\0\0\0\0\0\M-@\0\0\0\0\0\0\0dF\0\0"\0\v\0\M-`\M-f\f\0\0\0\0\0\
	\M-0\0\0\0\0\0\0\0\M-QG\0\0"\0\v\0 \^F\r\0\0\0\0\0P\^A\0\0\0\0\0\0\
	\240\f\0\0"\0\v\0\M-P\^\\^E\0\0\0\0\0\M^@\0\0\0\0\0\0\0]/\0\0"\0\v\0`\
	\M^Z
	\0\0\0\0\0\^R\0\0\0\0\0\0\0\M-LG\0\0"\0\v\0\M-P\^C\r\0\0\0\0\0P\^B\0\
	\0\0\0\0\0-H\0\0"\0\v\0\M-p\r\r\0\0\0\0\0M\0\0\0\0\0\0\0Y\^T\0\0\^R\0\
	\v\0`X\^F\0\0\0\0\0M\0\0\0\0\0\0\0\M-]$\0\0\^R\0\v\0\^P' \0\0\
	\0\0\0P\0\0\0\0\0\0\0\M-_\^D\0\0"\0\v\0\0\^U\^D\0\0\0\0\0\^R\0\0\0\0\
	\0\0\0W\^E\0\0\^R\0\v\0\M-`\^W\^D\0\0\0\0\0M\0\0\0\0\0\0\0qF\0\0"\0\v\
	\0\M^P\M-g\f\0\0\0\0\0\240\0\0\0\0\0\0\0s\^[\0\0\^R\0\v\0\M^P\M^M\a\0\
	\0\0\0\0P\0\0\0\0\0\0\0\M-y!\0\0"\0\v\0\M-p\M-$\b\0\0\0\0\0000\0\0\0\
	\0\0\0\0\M-7\a\0\0!\0\b\0x\M-|\^A\0\0\0\0\0\^P\0\0\0\0\0\0\0\M-%\^U\0\
	\0\^R\0\v\0\M-@f\^F\0\0\0\0\0M\0\0\0\0\0\0\0K\^W\0\0"\0\v\0\M-0\M^B\
	\^F\0\0\0\0\0P\0\0\0\0\0\0\0\M-C\^Y\0\0\^R\0\v\0pt\a\0\0\0\0\0\M-p\0\
	\0\0\0\0\0\0\M^V%\0\0\^R\0\v\0\M-0+ \0\0\0\0\0M\0\0\0\0\0\0\0\M^_\
	&\0\0"\0\v\0\240= \0\0\0\0\0\M-D\0\0\0\0\0\0\0T(\0\0\^R\0\v\0\0\
	\M^Y \0\0\0\0\0\^U\0\0\0\0\0\0\0E7\0\0"\0\v\0PV\v\0\0\0\0\0p\^A\0\
	\0\0\0\0\0\M^B8\0\0"\0\v\0P\M^Q\v\0\0\0\0\0M\0\0\0\0\0\0\0006I\0\0"\0\
	\v\0\M-p\^T\r\0\0\0\0\0000\0\0\0\0\0\0\0\M^PI\0\0"\0\v\0\M-P$\r\0\0\0\
	\0\0%\^A\0\0\0\0\0\0\^V\^F\0\0"\0\v\0@&\^D\0\0\0\0\0000\0\0\0\0\0\0\0\
	\M-H\a\0\0!\0\b\0\M^H\M-|\^A\0\0\0\0\0\^P\0\0\0\0\0\0\0\M-6\^R\0\0\^R\
	\0\v\0\0\r\^F\0\0\0\0\0M\0\0\0\0\0\0\0\^[0\0\0"\0\v\0000\M-+
	\0\0\0\0\0\M-p\0\0\0\0\0\0\0\\?\0\0\^R\0\v\0\0Q\f\0\0\0\0\0P\0\0\0\0\
	\0\0\0\M^H?\0\0\^R\0\v\0\M-`z\f\0\0\0\0\0M\0\0\0\0\0\0\0\M-r?\0\0"\0\
	\v\0P\M^D\f\0\0\0\0\0@\0\0\0\0\0\0\0\M-2L\0\0"\0\v\0\0\^B\^N\0\0\0\0\
	\0P\0\0\0\0\0\0\0\M-GM\0\0"\0\v\0\M^@\^U\^N\0\0\0\0\0p\0\0\0\0\0\0\0\
	\M-=\^D\0\0"\0\v\0P\^Q\^D\0\0\0\0\0\M-0\0\0\0\0\0\0\0\^D\f\0\0"\0\v\0\
	\240\r\^E\0\0\0\0\0P\0\0\0\0\0\0\0c<\0\0\^R\0\v\0\M-p\M-r\v\0\0\0\0\0\
	\M-p\0\0\0\0\0\0\0rH\0\0"\0\v\0000\^R\r\0\0\0\0\0000\0\0\0\0\0\0\0\
	\M-Y\0\0\0\^R\0\v\0P\M^A\^C\0\0\0\0\0M\0\0\0\0\0\0\0 \^A\0\0"\0\v\
	\0p\M^D\^C\0\0\0\0\0@\0\0\0\0\0\0\0002\^N\0\0"\0\v\0\M^@O\^E\0\0\0\0\
	\0p\^N\0\0\0\0\0\0\M-@\^O\0\0"\0\v\0\M^@\M-B\^E\0\0\0\0\0000\0\0\0\0\
	\0\0\0002\^_\0\0"\0\v\0\M-0?\b\0\0\0\0\0\^\\0\0\0\0\0\0\0L8\0\0"\0\v\
	\0\M^P\M^G\v\0\0\0\0\0M\0\0\0\0\0\0\0\M-'I\0\0"\0\v\0\^P'\r\0\0\0\0\0\
	@\^B\0\0\0\0\0\0\M-0I\0\0"\0\v\0P)\r\0\0\0\0\0\M-0\^B\0\0\0\0\0\0\M--\
	/\0\0"\0\v\0000\240
	\0\0\0\0\0\240\0\0\0\0\0\0\0\M^I0\0\0"\0\v\0000\M-@
	\0\0\0\0\0M\0\0\0\0\0\0\0'G\0\0"\0\v\0P\M-v\f\0\0\0\0\0\^\\0\0\0\0\0\
	\0\0\M-NK\0\0\^Q\0\^N\0\M-Pw\^N\0\0\0\0\0\0\^C\0\0\0\0\0\0\rN\0\0"\0\
	\v\0\M^P\^W\^N\0\0\0\0\0M\0\0\0\0\0\0\0?\^P\0\0\^R\0\v\0\M-P\M-N\^E\0\
	\0\0\0\0\^]\0\0\0\0\0\0\0&\^X\0\0"\0\v\0\M-P\M-8\^F\0\0\0\0\0\^B\a\0\
	\0\0\0\0\0\f \0\0\^R\0\v\0\M^@g\b\0\0\0\0\0M\0\0\0\0\0\0\0\M-7@\0\0"\
	\0\v\0\M-`\M^G\f\0\0\0\0\0@\0\0\0\0\0\0\0\M-{F\0\0\^R\0\v\0p\M-s\f\0\
	\0\0\0\0M\0\0\0\0\0\0\0\M-YJ\0\0"\0\v\0\M-0\M-7\r\0\0\0\0\0\M-P\0\0\0\
	\0\0\0\0JK\0\0"\0\v\0 \M-E\r\0\0\0\0\0\M^@\0\0\0\0\0\0\0S\^A\0\0"\0\v\
	\0@\M^X\^C\0\0\0\0\0M\0\0\0\0\0\0\0`\^D\0\0\^R\0\v\0\240\M-r\^C\0\0\0\
	\0\0M\0\0\0\0\0\0\0J(\0\0"\0\v\0\M-0\M^X \0\0\0\0\0M\0\0\0\0\0\
	\0\0\M^M8\0\0\^R\0\v\0\240\M^Q\v\0\0\0\0\0M\0\0\0\0\0\0\0\^W\^E\0\0"\
	\0\v\0\240\^V\^D\0\0\0\0\0`\0\0\0\0\0\0\0\M^W\^X\0\0"\0\v\0\M-pX\a\0\
	\0\0\0\0\^N\0\0\0\0\0\0\0000$\0\0\^R\0\v\0@
		\0\0\0\0\0p\0\0\0\0\0\0\0a$\0\0\^R\0\v\0000\^Y \0\0\0\0\0M\0\
	\0\0\0\0\0\0P\0\0\0"\0\v\0\^P|\^C\0\0\0\0\0\M-+\0\0\0\0\0\0\0\M-L\b\0\
	\0"\0\v\0\0W\^D\0\0\0\0\0=\0\0\0\0\0\0\0N\^X\0\0"\0\v\0\240\^F\a\0\0\
	\0\0\0\240\^A\0\0\0\0\0\0\M-*\^\\0\0"\0\v\0@\b\b\0\0\0\0\0\M-`\0\0\0\
	\0\0\0\0y>\0\0"\0\v\0\0005\f\0\0\0\0\0P\0\0\0\0\0\0\0\M-f\f\0\0\^R\0\
	\v\0\M-@$\^E\0\0\0\0\0\M-P\0\0\0\0\0\0\0G\^Y\0\0"\0\v\0\M^@k\a\0\0\0\
	\0\0\240\^A\0\0\0\0\0\0\M^A\^_\0\0"\0\v\0\M-pZ\b\0\0\0\0\0!\^B\0\0\0\
	\0\0\0\M-M1\0\0\^R\0\v\0\M-@\M-P
	\0\0\0\0\0\^X\0\0\0\0\0\0\0\M-T$\0\0\^R\0\v\0\M-P& \0\0\0\0\0@\0\
	\0\0\0\0\0\0"
  3025 tipideed RET read 4096/0x1000
  3025 tipideed CALL mmap(0,0xfa000,0<PROT_NONE>,0x2<MAP_PRIVATE>,3,0)
  3025 tipideed RET mmap 7180002275328/0x687b97c3000
  3025 tipideed CALL
  mmap(0x687b97c3000,0x37000,0x1<PROT_READ>,0x12<MAP_PRIVATE|MAP_FIXED>,3,0)
  3025 tipideed RET mmap 7180002275328/0x687b97c3000
  3025 tipideed CALL
  mmap(0x687b97fa000,0xab000,0x4<PROT_EXEC>,0x12<MAP_PRIVATE|MAP_FIXED>,3,0x36000)
  3025 tipideed RET mmap 7180002500608/0x687b97fa000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177133252608/0x6870e7a6000
  3025 tipideed CALL
  mmap(0x687b98a5000,0x6000,0x3<PROT_READ|PROT_WRITE>,0x12<MAP_PRIVATE|MAP_FIXED>,3,0xe0000)
  3025 tipideed RET mmap 7180003201024/0x687b98a5000
  3025 tipideed CALL
  mmap(0x687b98ab000,0x4000,0x3<PROT_READ|PROT_WRITE>,0x12<MAP_PRIVATE|MAP_FIXED>,3,0xe5000)
  3025 tipideed RET mmap 7180003225600/0x687b98ab000
  3025 tipideed CALL
  mmap(0x687b98af000,0xe000,0x3<PROT_READ|PROT_WRITE>,0x1012<MAP_PRIVATE|MAP_FIXED|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7180003241984/0x687b98af000
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178690117632/0x6876b464000
  3025 tipideed CALL msyscall(0x687b97fa000,0xab000)
  3025 tipideed RET msyscall 0
  3025 tipideed CALL pinsyscall(0x3b,0x687b985f5a0,0x4d)
  3025 tipideed RET pinsyscall 0
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178179813376/0x6874cdba000
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177518817280/0x6872575a000
  3025 tipideed CALL getthrid()
  3025 tipideed RET getthrid 186056/0x2d6c8
  3025 tipideed CALL __set_tcb(0x687675d6a40)
  3025 tipideed RET __set_tcb 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL mprotect(0x687b98a5810,0x57f0,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mimmutable(0x687b98a5810,0x57f0)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL mimmutable(0x687b97c3000,0xe2810)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL mimmutable(0x687b98ab000,0x3000)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL mimmutable(0x687b98af000,0xe000)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL mprotect(0x6850c80bdc0,0x1240,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mimmutable(0x6850c80bdc0,0x1240)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL kbind(0x7a901c79a6b8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c79a668,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL getentropy(0x7a901c79a670,40)
  3025 tipideed RET getentropy 0
  3025 tipideed CALL
  mmap(0,0x450,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177542619136/0x68726e0d000
  3025 tipideed CALL minherit(0x68726e0d000,0x450,MAP_INHERIT_ZERO)
  3025 tipideed RET minherit 0
  3025 tipideed CALL kbind(0x7a901c79a648,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL sigaction(SIGTERM,0,0x7a901c79a718)
  3025 tipideed STRU struct sigaction { handler=SIG_DFL, mask=0<>,
  flags=0<> }
  3025 tipideed RET sigaction 0
  3025 tipideed CALL kbind(0x7a901c79a648,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL sigaction(SIGTERM,0x7a901c79a6e0,0x7a901c79a6d0)
  3025 tipideed STRU struct sigaction { handler=0x6850c809190, mask=0<>,
  flags=0x2<SA_RESTART> }
  3025 tipideed STRU struct sigaction { handler=SIG_DFL, mask=0<>,
  flags=0<> }
  3025 tipideed RET sigaction 0
  3025 tipideed CALL sigaction(SIGCHLD,0x7a901c79a6e0,0x7a901c79a6d0)
  3025 tipideed STRU struct sigaction { handler=SIG_DFL, mask=0<>,
  flags=0x2<SA_RESTART> }
  3025 tipideed STRU struct sigaction { handler=SIG_DFL, mask=0<>,
  flags=0<> }
  3025 tipideed RET sigaction 0
  3025 tipideed CALL kbind(0x7a901c79a648,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL write(199,0x7a901c79a734,0x4)
  3025 tipideed RET write -1 errno 9 Bad file descriptor
  3025 tipideed CALL kbind(0x7a901c79a7f8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL
  mmap(0x6878cb6f000,0x2000,0<PROT_NONE>,0x1012<MAP_PRIVATE|MAP_FIXED|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179251150848/0x6878cb6f000
  3025 tipideed CALL mimmutable(0x6878cb6f000,0x2000)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL
  mmap(0,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7180217962496/0x687c6575000
  3025 tipideed CALL mprotect(0x687c6575000,0x1000,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL kbind(0x7a901c79a7e8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL
  mprotect(0x687c6575000,0x1000,0x3<PROT_READ|PROT_WRITE>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mprotect(0x687c6575000,0x1000,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL kbind(0x7a901c796fb8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL getpid()
  3025 tipideed RET getpid 3025/0xbd1
  3025 tipideed CALL kbind(0x7a901c796f38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL
  open(0x7a901c79ab84,0x10004<O_RDONLY|O_NONBLOCK|O_CLOEXEC>)
  3025 tipideed NAMI "../etc/tipidee.conf.cdb"
  3025 tipideed RET open 3
  3025 tipideed CALL kbind(0x7a901c796eb8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL fstat(3,0x7a901c796f80)
  3025 tipideed STRU struct stat { dev=1036, ino=52719, mode=-rw-r--r-- , nlink=1,
  uid=1000<"humm">, gid=1000<"humm">, rdev=269395,
  atime=1695327950<"Sep 21 22:25:50 2023">.209662843,
  mtime=1695327948<"Sep 21 22:25:48 2023">.339662704,
  ctime=1695327948<"Sep 21 22:25:48 2023">.349609889, size=5568, blocks=12,
  blksize=16384, flags=0x0, gen=0x0 }
  3025 tipideed RET fstat 0
  3025 tipideed CALL kbind(0x7a901c796eb8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL mmap(0,0x15c0,0x1<PROT_READ>,0x1<MAP_SHARED>,3,0)
  3025 tipideed RET mmap 7180162752512/0x687c30ce000
  3025 tipideed CALL kbind(0x7a901c796f48,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796f48,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL kbind(0x7a901c796b38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL
  sysctl(2.12<vm.malloc_conf>,0x7a901c796b50,0x7a901c796b68,0,0)
  3025 tipideed RET sysctl 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL
  mmap(0,0xdcc0,0<PROT_NONE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178965946368/0x6877bb71000
  3025 tipideed CALL
  mprotect(0x6877bb72000,0xbcc0,0x3<PROT_READ|PROT_WRITE>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mimmutable(0x6877bb71000,0xdcc0)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL mprotect(0x687b98ae000,0x1000,0x1<PROT_READ>)
  3025 tipideed RET mprotect 0
  3025 tipideed CALL mimmutable(0x687b98ae000,0x1000)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL
  mmap(0,0x2200,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7181175500800/0x687ff6a3000
  3025 tipideed CALL mimmutable(0x687ff6a3000,0x2200)
  3025 tipideed RET mimmutable 0
  3025 tipideed CALL
  mmap(0,0x40000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7180760088576/0x687e6a78000
  3025 tipideed CALL
  mmap(0,0x40000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179578818560/0x687a03ec000
  3025 tipideed CALL
  mmap(0,0x3000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7179342147584/0x68792237000
  3025 tipideed CALL kbind(0x7a901c796b38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL __getcwd(0x687e6ab7600,128)
  3025 tipideed NAMI "/home/humm/www"
  3025 tipideed RET __getcwd 0
  3025 tipideed CALL kbind(0x7a901c796b38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796b38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796b58,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796e08,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796f98,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL fcntl(0,F_GETFL)
  3025 tipideed RET fcntl 2
  3025 tipideed CALL fcntl(0,F_SETFL,0x6<O_RDWR|O_NONBLOCK>)
  3025 tipideed RET fcntl 0
  3025 tipideed CALL fcntl(1,F_GETFL)
  3025 tipideed RET fcntl 6
  3025 tipideed CALL sigaction(SIGCHLD,0x7a901c797020,0)
  3025 tipideed STRU struct sigaction { handler=0x6850c7ef770,
  mask=~0x80000000<SIGTHR>, flags=0xa<SA_RESTART|SA_NOCLDSTOP> }
  3025 tipideed RET sigaction 0
  3025 tipideed CALL kbind(0x7a901c796f38,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796e58,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL writev(2,0x7a901c796f50,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812b50, len=77 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 77 bytes
       "tipideed: pid 3025: info: new connection from ip 1.0.0.0 (1.0.0.0) po\
	rt 1234
       "
  3025 tipideed RET writev 77/0x4d
  3025 tipideed CALL kbind(0x7a901c796da8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796d88,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL readv(0,0x7a901c796e80,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb50, len=8191 } { base=0x0,
  len=0 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL kbind(0x7a901c796de8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL ppoll(0x7a901c796f60,1,0x7a901c796eb0,0)
  3025 tipideed STRU struct timespec { 2305843009213693952 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e80,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb50, len=8191 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 0 read 20 bytes
       "GET /empty HTTP/1.1
       "
  3025 tipideed RET readv 20/0x14
  3025 tipideed CALL kbind(0x7a901c796ee8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796ed8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796e78,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb64, len=8172 } {
  base=0x6850c80eb50, len=19 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796ed0,1,0x7a901c796e20,0)
  3025 tipideed STRU struct timespec { 2305843009213693945.777006406 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb64, len=8172 } {
  base=0x6850c80eb50, len=19 }
  3025 tipideed GIO fd 0 read 16 bytes
       "host: localhost
       "
  3025 tipideed RET readv 16/0x10
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb74, len=8156 } {
  base=0x6850c80eb50, len=35 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796ed0,1,0x7a901c796e20,0)
  3025 tipideed STRU struct timespec { 2305843009213693942.423024882 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb74, len=8156 } {
  base=0x6850c80eb50, len=35 }
  3025 tipideed GIO fd 0 read 1 bytes
       "
       "
  3025 tipideed RET readv 1
  3025 tipideed CALL kbind(0x7a901c796e78,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796fb8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL writev(2,0x7a901c796ef0,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812b9d, len=69 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 69 bytes
       "tipideed: pid 3025: info: request GET for host localhost path /empty
       "
  3025 tipideed RET writev 69/0x45
  3025 tipideed CALL kbind(0x7a901c796db8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL stat(0x7a901c796e80,0x7a901c796f60)
  3025 tipideed NAMI "localhost:80/empty"
  3025 tipideed STRU struct stat { dev=1036, ino=53577, mode=-rw-r--r-- , nlink=1,
  uid=1000<"humm">, gid=1000<"humm">, rdev=0, atime=1695330072<"Sep
  21 23:01:12 2023">.259663130, mtime=1695329805<"Sep 21 22:56:45
  2023">.409608533, ctime=1695329805<"Sep 21 22:56:45 2023">.409608533,
  size=0, blocks=0, blksize=16384, flags=0x0, gen=0x0 }
  3025 tipideed RET stat 0
  3025 tipideed CALL kbind(0x7a901c796c58,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL __realpath(0x7a901c796e80,0x7a901c796900)
  3025 tipideed NAMI "localhost:80/empty"
  3025 tipideed NAMI "/home/humm/www/localhost:80/empty"
  3025 tipideed RET __realpath 0
  3025 tipideed CALL kbind(0x7a901c796c18,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL kbind(0x7a901c796a58,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL
  mmap(0,0x5000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178984497152/0x6877cd22000
  3025 tipideed CALL
  mmap(0,0xb000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177982324736/0x68741163000
  3025 tipideed CALL open(0x687b97e1b31,0<O_RDONLY>)
  3025 tipideed NAMI "/etc/localtime"
  3025 tipideed RET open 3
  3025 tipideed CALL read(3,0x68741163000,0xa1e8)
  3025 tipideed GIO fd 3 read 2309 bytes
       "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\b\0\0\0\0\0\0\0\M^P\
	\0\0\0\b\0\0\0\^N\M^[\f\^W`\M^[\M-U\M-Z\M-p\M^\\M-Y\M-.\M^P\M^]\M-$\
	\M-5\M^P\M^^\M-9\M^P\M^P\M^_\M^D\M^W\M^P\M-H q\M^P\M-L\M-gK\^P\M-M\
	\M-)\^W\M^P\M-N\M-"C\^P\M-O\M^R4\^P\M-P\M^B%\^P\M-Qr\^V\^P\M-Q\M-6\
	\M^V\0\M-RX\M->\M^@\M-R\M-!O\^P\M-R\M-[4\M-p\M-Sc\^[\M^P\M-TK#\M^P\
	\M-U9\M-Q \M-Ug\M-g\M^P\M-U\M-(s\0\M-V)\M-4\^P\M-W,\^Z\^P\M-X \M^V\
	\^P\M-Y\^B\M-A\M^P\M-Y\M-ix\^P\^R\M-N\M^W\M-p\^SMD\^P\^T3\M-z\M^P\^U#\
	\M-k\M^P\^V\^S\M-\\M^P\^W\^C\M-M\M^P\^W\M-s\M->\M^P\^X\M-c\M-/\M^P\^Y\
	\M-S\240\M^P\^Z\M-C\M^Q\M^P\^[\M-<\M-=\^P\^\\M-,\M-.\^P\^]\M^\\M^_\^P\
	\^^\M^L\M^P\^P\^_|\M^A\^P lr\^P!\\c\^P"LT\^P#<E\^P$,6\^P%\^\'\^P&\f\
	\^X\^P'\^EC\M^P'\M-u4\M^P(\M-e%\M^P)\M-U\^V\M^P*\M-E\a\M^P+\M-4\M-x\
	\M^P,\M-$\M-i\M^P-\M^T\M-Z\M^P.\M^D\M-K\M^P/t\M-<\M^P0d\M--\M^P1]\M-Y\
	\^P2r\M-4\^P3=\M-;\^P4R\M^V\^P5\^]\M^]\^P62x\^P6\M-}\^?\^P8\^[\M^T\
	\M^P8\M-]a\^P9\M-{v\M^P:\M-=C\^P;\M-[X\M^P<\M-&_\M^P=\M-;:\M^P>\M^FA\
	\M^P?\M^[\^\\M^P@f#\M^PA\M^D9\^PBF\^E\M^PCd\^[\^PD%\M-g\M^PEC\M-}\^PF\
	\^E\M-I\M^PG#\M-_\^PG\M-n\M-f\^PI\^C\M-A\^PI\M-N\M-H\^PJ\M-c\M-#\^PK\
	\M-.\M-*\^PL\M-L\M-?\M^PM\M^N\M^L\^PN\M-,\M-!\M^POnn\^PP\M^L\M^C\M^PQ\
	W\M^J\M^PRle\M^PS7l\M^PTLG\M^PU\^WN\M^PV,)\M^PV\M-w0\M^PX\^UF\^PX\M-W\
	\^R\M^PY\M-u(\^PZ\M-6\M-t\M^P[\M-U
	\^P\\\240\^Q\^P]\M-4\M-l\^P^\^?\M-s\^P_\M^T\M-N\^P`_\M-U\^Pa}\M-j\M^P\
	b?\M-7\^Pc]\M-L\M^Pd\^_\M^Y\^Pe=\M-.\M^Pf\b\M-5\M^Pg\^]\M^P\M^Pg\M-h\
	\M^W\M^Ph\M-}r\M^Pi\M-Hy\M^Pj\M-]T\M^Pk\M-([\M^Pl\M-Fq\^Pm\M^H=\M^Pn\
	\M-&S\^Poh\^_\M^Pp\M^F5\^PqQ<\^Prf\^W\^Ps1\^^\^PtE\M-y\^Pu\^Q\0\^Pv/\
	\^U\M^Pv\M-p\M-b\^Px\^N\M-w\M^Px\M-P\M-D\^Py\M-n\M-Y\M^Pz\M-0\M-&\^P{\
	\M-N\M-;\M^P|\M^Y\M-B\M^P}\M-.\M^]\M^P~y\M-$\M^P\^?\M^N\^?\M^P\0\^A\
	\^B\^C\^B\^C\^B\^C\^B\^C\^B\^C\^B\^D\0\^C\^A\^B\^C\^B\^E\0\^C\^B\^C\
	\^B\^C\^A\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\
	\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\
	\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\
	\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\a\^F\
	\a\^F\a\^F\a\^F\a\^F\a\^F\a\0\0\^\ \^A\0\0\0\^N\^P\0\^E\0\0\^\ \^A\0\
	\0\0\^N\^P\0\^E\0\0*0\^A \0\0*0\^A \0\0\^\ \^A\0\0\0\^N\
	\^P\0\^ECEST\0CET\0CEMT\0\0\0\^A\^A\0\^A\^A\^A\0\0\0\0\0\0\^A\^ATZif2\
	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0 \0\0\0\0\0\0\0\M^Q\0\
	\0\0 \0\0\0\^R\M^?\M^?\M^?\M^?o\M-"a\M-x\M^?\M^?\M^?\M^?\M^[\f\^W`\
	\M^?\M^?\M^?\M^?\M^[\M-U\M-Z\M-p\M^?\M^?\M^?\M^?\M^\\M-Y\M-.\M^P\M^?\
	\M^?\M^?\M^?\M^]\M-$\M-5\M^P\M^?\M^?\M^?\M^?\M^^\M-9\M^P\M^P\M^?\M^?\
	\M^?\M^?\M^_\M^D\M^W\M^P\M^?\M^?\M^?\M^?\M-H q\M^P\M^?\M^?\M^?\M^?\
	\M-L\M-gK\^P\M^?\M^?\M^?\M^?\M-M\M-)\^W\M^P\M^?\M^?\M^?\M^?\M-N\M-"C\
	\^P\M^?\M^?\M^?\M^?\M-O\M^R4\^P\M^?\M^?\M^?\M^?\M-P\M^B%\^P\M^?\M^?\
	\M^?\M^?\M-Qr\^V\^P\M^?\M^?\M^?\M^?\M-Q\M-6\M^V\0\M^?\M^?\M^?\M^?\M-R\
	X\M->\M^@\M^?\M^?\M^?\M^?\M-R\M-!O\^P\M^?\M^?\M^?\M^?\M-R\M-[4\M-p\
	\M^?\M^?\M^?\M^?\M-Sc\^[\M^P\M^?\M^?\M^?\M^?\M-TK#\M^P\M^?\M^?\M^?\
	\M^?\M-U9\M-Q \M^?\M^?\M^?\M^?\M-Ug\M-g\M^P\M^?\M^?\M^?\M^?\M-U\M-(s\
	\0\M^?\M^?\M^?\M^?\M-V)\M-4\^P\M^?\M^?\M^?\M^?\M-W,\^Z\^P\M^?\M^?\M^?\
	\M^?\M-X \M^V\^P\M^?\M^?\M^?\M^?\M-Y\^B\M-A\M^P\M^?\M^?\M^?\
	\M^?\M-Y\M-ix\^P\0\0\0\0\^R\M-N\M^W\M-p\0\0\0\0\^SMD\^P\0\0\0\0\^T3\
	\M-z\M^P\0\0\0\0\^U#\M-k\M^P\0\0\0\0\^V\^S\M-\\M^P\0\0\0\0\^W\^C\M-M\
	\M^P\0\0\0\0\^W\M-s\M->\M^P\0\0\0\0\^X\M-c\M-/\M^P\0\0\0\0\^Y\M-S\240\
	\M^P\0\0\0\0\^Z\M-C\M^Q\M^P\0\0\0\0\^[\M-<\M-=\^P\0\0\0\0\^\\M-,\M-.\
	\^P\0\0\0\0\^]\M^\\M^_\^P\0\0\0\0\^^\M^L\M^P\^P\0\0\0\0\^_|\M^A\^P\0\
	\0\0\0 lr\^P\0\0\0\0!\\c\^P\0\0\0\0"LT\^P\0\0\0\0#<E\^P\0\0\0\0$,6\^P\
	\0\0\0\0%\^\'\^P\0\0\0\0&\f\^X\^P\0\0\0\0'\^EC\M^P\0\0\0\0'\M-u4\M^P\
	\0\0\0\0(\M-e%\M^P\0\0\0\0)\M-U\^V\M^P\0\0\0\0*\M-E\a\M^P\0\0\0\0+\
	\M-4\M-x\M^P\0\0\0\0,\M-$\M-i\M^P\0\0\0\0-\M^T\M-Z\M^P\0\0\0\0.\M^D\
	\M-K\M^P\0\0\0\0/t\M-<\M^P\0\0\0\0000d\M--\M^P\0\0\0\0001]\M-Y\^P\0\0\
	\0\0002r\M-4\^P\0\0\0\0003=\M-;\^P\0\0\0\0004R\M^V\^P\0\0\0\0005\^]\
	\M^]\^P\0\0\0\00062x\^P\0\0\0\0006\M-}\^?\^P\0\0\0\08\^[\M^T\M^P\0\0\
	\0\08\M-]a\^P\0\0\0\09\M-{v\M^P\0\0\0\0:\M-=C\^P\0\0\0\0;\M-[X\M^P\0\
	\0\0\0<\M-&_\M^P\0\0\0\0=\M-;:\M^P\0\0\0\0>\M^FA\M^P\0\0\0\0?\M^[\^\\
	\M^P\0\0\0\0@f#\M^P\0\0\0\0A\M^D9\^P\0\0\0\0BF\^E\M^P\0\0\0\0Cd\^[\^P\
	\0\0\0\0D%\M-g\M^P\0\0\0\0EC\M-}\^P\0\0\0\0F\^E\M-I\M^P\0\0\0\0G#\M-_\
	\^P\0\0\0\0G\M-n\M-f\^P\0\0\0\0I\^C\M-A\^P\0\0\0\0I\M-N\M-H\^P\0\0\0\
	\0J\M-c\M-#\^P\0\0\0\0K\M-.\M-*\^P\0\0\0\0L\M-L\M-?\M^P\0\0\0\0M\M^N\
	\M^L\^P\0\0\0\0N\M-,\M-!\M^P\0\0\0\0Onn\^P\0\0\0\0P\M^L\M^C\M^P\0\0\0\
	\0QW\M^J\M^P\0\0\0\0Rle\M^P\0\0\0\0S7l\M^P\0\0\0\0TLG\M^P\0\0\0\0U\^W\
	N\M^P\0\0\0\0V,)\M^P\0\0\0\0V\M-w0\M^P\0\0\0\0X\^UF\^P\0\0\0\0X\M-W\
	\^R\M^P\0\0\0\0Y\M-u(\^P\0\0\0\0Z\M-6\M-t\M^P\0\0\0\0[\M-U
	\^P\0\0\0\0\\\240\^Q\^P\0\0\0\0]\M-4\M-l\^P\0\0\0\0^\^?\M-s\^P\0\0\0\
	\0_\M^T\M-N\^P\0\0\0\0`_\M-U\^P\0\0\0\0a}\M-j\M^P\0\0\0\0b?\M-7\^P\0\
	\0\0\0c]\M-L\M^P\0\0\0\0d\^_\M^Y\^P\0\0\0\0e=\M-.\M^P\0\0\0\0f\b\M-5\
	\M^P\0\0\0\0g\^]\M^P\M^P\0\0\0\0g\M-h\M^W\M^P\0\0\0\0h\M-}r\M^P\0\0\0\
	\0i\M-Hy\M^P\0\0\0\0j\M-]T\M^P\0\0\0\0k\M-([\M^P\0\0\0\0l\M-Fq\^P\0\0\
	\0\0m\M^H=\M^P\0\0\0\0n\M-&S\^P\0\0\0\0oh\^_\M^P\0\0\0\0p\M^F5\^P\0\0\
	\0\0qQ<\^P\0\0\0\0rf\^W\^P\0\0\0\0s1\^^\^P\0\0\0\0tE\M-y\^P\0\0\0\0u\
	\^Q\0\^P\0\0\0\0v/\^U\M^P\0\0\0\0v\M-p\M-b\^P\0\0\0\0x\^N\M-w\M^P\0\0\
	\0\0x\M-P\M-D\^P\0\0\0\0y\M-n\M-Y\M^P\0\0\0\0z\M-0\M-&\^P\0\0\0\0{\
	\M-N\M-;\M^P\0\0\0\0|\M^Y\M-B\M^P\0\0\0\0}\M-.\M^]\M^P\0\0\0\0~y\M-$\
	\M^P\0\0\0\0\^?\M^N\^?\M^P\^B\^A\^B\^C\^D\^C\^D\^C\^D\^C\^D\^C\^D\^C\
	\^E\^A\^D\^B\^C\^D\^C\^F\^A\^D\^C\^D\^C\^D\^B\a\b\a\b\a\b\a\b\a\b\a\b\
	\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\
	\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\
	\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\a\b\
	\a\b\0\0\f\M^H\0\0\0\0\^\ \^A\^D\0\0\^N\^P\0 \0\0\^\ \^A\^D\0\0\^N\
	\^P\0 \0\0*0\^A\r\0\0*0\^A\r\0\0\^\ \^A\^D\0\0\^N\^P\0 LMT\0\
	CEST\0CET\0CEMT\0\0\0\0\^A\^A\0\^A\^A\^A\0\0\0\0\0\0\0\^A\^A
	CET-1CEST,M3.5.0,M10.5.0/3
       "
  3025 tipideed RET read 2309/0x905
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL
  mmap(0,0xb000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7178257031168/0x6875175e000
  3025 tipideed CALL open(0x7a901c78d9d0,0<O_RDONLY>)
  3025 tipideed NAMI "/usr/share/zoneinfo/posixrules"
  3025 tipideed RET open 3
  3025 tipideed CALL read(3,0x6875175e000,0xa1e8)
  3025 tipideed GIO fd 3 read 2835 bytes
       "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^E\0\0\0\^E\0\0\0\0\0\0\0\
	\M-9\0\0\0\^E\0\0\0\^P\M^^\M-&H\240\M^_\M-;\^U\M^P\240\M^F*\240\M-!\
	\M^Z\M-w\M^P\M-K\M^I\^Z\240\M-R#\M-tp\M-Ra&\^P\M-V\M-~t\\\M-X\M^@\M--\
	\M^P\M-Z\M-~\M-C\M^P\M-[\M-@\M^P\^P\M-\\M-^\M-%\M^P\M-]\M-)\M-,\M^P\
	\M-^\M->\M^G\M^P\M-_\M^I\M^N\M^P\M-`\M^^i\M^P\M-aip\M^P\M-b~K\M^P\M-c\
	IR\M^P\M-d^-\M^P\M-e)4\M^P\M-fGJ\^P\M-g\^RQ\^P\M-h',\^P\M-h\M-r3\^P\
	\M-j\a\^N\^P\M-j\M-R\^U\^P\M-k\M-f\M-p\^P\M-l\M-1\M-w\^P\M-m\M-F\M-R\
	\^P\M-n\M^Q\M-Y\^P\M-o\M-/\M-n\M^P\M-pq\M-;\^P\M-q\M^O\M-P\M^P\M-r\^?\
	\M-A\M^P\M-so\M-2\M^P\M-t_\M-#\M^P\M-uO\M^T\M^P\M-v?\M^E\M^P\M-w/v\
	\M^P\M-x(\M-"\^P\M-y\^OX\M^P\M-z\b\M^D\^P\M-z\M-x\M^C \M-{\M-hf\^P\
	\M-|\M-Xe \M-}\M-HH\^P\M-~\M-8G \M^?\M-(*\^P\0\M^X) \^A\M^H\f\^P\^Bx\
	\v \^Cq(\M^P\^Da'\240\^EQ
	\M^P\^FA \240\a0\M-l\M^P\a\M^MC\240 \^P\M-N\M^P \M--\
	\M-?
	\M-p\M-0\M^P\v\M-`\M-/\240\f\M-Y\M-M\^P\r\M-@\M^Q\240\^N\M-9\M-/\^P\
	\^O\M-)\M-.  \^P\M^Y\M^Q\^P\^Q\M^I\M^P \^Rys\^P\^Sir \^TYU\^P\^UIT \^V\
	97\^P\^W)6 \^X"S\M^P\^Y \^X \^Z\^B5\M^P\^Z\M-r4\240\^[\M-b\^W\M^P\^\\
	\M-R\^V\240\^]\M-A\M-y\M^P\^^\M-1\M-x\240\^_\M-!\M-[\M^P v+ !\M^A\M-=\
	\M^P"V\r #j\M-Z\^P$5\M-o %J\M-<\^P&\^U\M-Q '*\M^^\^P'\M-~\M-m\240)
	\M^@\^P)\M-^\M-O\240*\M-jb\^P+\M->\M-1\240,\M-S~\M^P-\M^^\M^S\240.\
	\M-3`\M^P/~u\2400\M^SB\M^P1g\M^R 2s$\M^P3Gt 4S\^F\M^P5'V 62\M-h\M^P7\
	\a8 8\^\\^E\^P8\M-g\^Z 9\M-{\M-g\^P:\M-F\M-| ;\M-[\M-I\^P<\M-0\^X\240\
	=\M-;\M-+\^P>\M^O\M-z\240?\M^[\M^M\^P@o\M-\\240A\M^D\M-)\M^PBO\M->\
	\240Cd\M^K\M^PD/\240\240EDm\M^PE\M-s\M-S G-\M^J\^PG\M-S\M-5 I\rl\^PI\
	\M-3\M^W J\M-mN\^PK\M^\\M-3\240L\M-Vj\M^PM|\M^U\240N\M-6L\M^PO\\w\240\
	P\M^V.\M^PQ<Y\240Rv\^P\M^PS\^\;\240TU\M-r\M^PT\M-|\^]\240V5\M-T\M^PV\
	\M-e: X\^^\M-q\^PX\M-E\^\ Y\M-~\M-S\^PZ\M-$\M-~ [\M-^\M-5\^P\\\M^D\
	\M-` ]\M->\M^W\^P^d\M-B _\M^^y\^P`M\M-^\240a\M^G\M^U\M^Pb-\M-@\240cgw\
	\M^Pd\r\M-"\240eGY\M^Pe\M-m\M^D\240g';\M^Pg\M-Mf\240i\a\^]\M^Pi\M--H\
	\240j\M-f\M^?\M^Pk\M^Ve l\M-P\^\\^PmvG n\M-/\M-~\^PoV) p\M^O\M-`\^Pq6\
	\v ro\M-B\^Ps\^U\M-m tO\M-$\^Pt\M^?  \240v8\M-@\M^Pv\M-^\M-k\240x\
	\^X\M-"\M^Px\M->\M-M\240y\M-x\M^D\M^Pz\M^^\M-/\240{\M-Xf\M^P|~\M^Q\
	\240}\M-8H\M^P~^s\240\^?\M^X*\M^P\0\^A\0\^A\^B\^C\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\M^?\M^?\M^]\M^P\^A\0\M^?\M^?\M^O\M^@\0\^D\M^?\
	\M^?\M^]\M^P\^A\b\M^?\M^?\M^]\M^P\^A\f\M^?\M^?\M^O\M^@\0\^DPDT\0PST\0\
	PWT\0PPT\0\0\0\0\^A\^A\0\0\0\^A\^ATZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
	\0\0\0\^F\0\0\0\^F\0\0\0\0\0\0\0\M-:\0\0\0\^F\0\0\0\^T\M^?\M^?\M^?\
	\M^?^\^D\^Z\M-@\M^?\M^?\M^?\M^?\M^^\M-&H\240\M^?\M^?\M^?\M^?\M^_\M-;\
	\^U\M^P\M^?\M^?\M^?\M^?\240\M^F*\240\M^?\M^?\M^?\M^?\M-!\M^Z\M-w\M^P\
	\M^?\M^?\M^?\M^?\M-K\M^I\^Z\240\M^?\M^?\M^?\M^?\M-R#\M-tp\M^?\M^?\M^?\
	\M^?\M-Ra&\^P\M^?\M^?\M^?\M^?\M-V\M-~t\\\M^?\M^?\M^?\M^?\M-X\M^@\M--\
	\M^P\M^?\M^?\M^?\M^?\M-Z\M-~\M-C\M^P\M^?\M^?\M^?\M^?\M-[\M-@\M^P\^P\
	\M^?\M^?\M^?\M^?\M-\\M-^\M-%\M^P\M^?\M^?\M^?\M^?\M-]\M-)\M-,\M^P\M^?\
	\M^?\M^?\M^?\M-^\M->\M^G\M^P\M^?\M^?\M^?\M^?\M-_\M^I\M^N\M^P\M^?\M^?\
	\M^?\M^?\M-`\M^^i\M^P\M^?\M^?\M^?\M^?\M-aip\M^P\M^?\M^?\M^?\M^?\M-b~K\
	\M^P\M^?\M^?\M^?\M^?\M-cIR\M^P\M^?\M^?\M^?\M^?\M-d^-\M^P\M^?\M^?\M^?\
	\M^?\M-e)4\M^P\M^?\M^?\M^?\M^?\M-fGJ\^P\M^?\M^?\M^?\M^?\M-g\^RQ\^P\
	\M^?\M^?\M^?\M^?\M-h',\^P\M^?\M^?\M^?\M^?\M-h\M-r3\^P\M^?\M^?\M^?\M^?\
	\M-j\a\^N\^P\M^?\M^?\M^?\M^?\M-j\M-R\^U\^P\M^?\M^?\M^?\M^?\M-k\M-f\
	\M-p\^P\M^?\M^?\M^?\M^?\M-l\M-1\M-w\^P\M^?\M^?\M^?\M^?\M-m\M-F\M-R\^P\
	\M^?\M^?\M^?\M^?\M-n\M^Q\M-Y\^P\M^?\M^?\M^?\M^?\M-o\M-/\M-n\M^P\M^?\
	\M^?\M^?\M^?\M-pq\M-;\^P\M^?\M^?\M^?\M^?\M-q\M^O\M-P\M^P\M^?\M^?\M^?\
	\M^?\M-r\^?\M-A\M^P\M^?\M^?\M^?\M^?\M-so\M-2\M^P\M^?\M^?\M^?\M^?\M-t_\
	\M-#\M^P\M^?\M^?\M^?\M^?\M-uO\M^T\M^P\M^?\M^?\M^?\M^?\M-v?\M^E\M^P\
	\M^?\M^?\M^?\M^?\M-w/v\M^P\M^?\M^?\M^?\M^?\M-x(\M-"\^P\M^?\M^?\M^?\
	\M^?\M-y\^OX\M^P\M^?\M^?\M^?\M^?\M-z\b\M^D\^P\M^?\M^?\M^?\M^?\M-z\M-x\
	\M^C \M^?\M^?\M^?\M^?\M-{\M-hf\^P\M^?\M^?\M^?\M^?\M-|\M-Xe \M^?\M^?\
	\M^?\M^?\M-}\M-HH\^P\M^?\M^?\M^?\M^?\M-~\M-8G \M^?\M^?\M^?\M^?\M^?\
	\M-(*\^P\0\0\0\0\0\M^X) \0\0\0\0\^A\M^H\f\^P\0\0\0\0\^Bx\v \0\0\0\0\
	\^Cq(\M^P\0\0\0\0\^Da'\240\0\0\0\0\^EQ
	\M^P\0\0\0\0\^FA \240\0\0\0\0\a0\M-l\M^P\0\0\0\0\a\M^MC\240\0\
	\0\0\0 \^P\M-N\M^P\0\0\0\0 \M--\M-?  \0\0\0\0
	\M-p\M-0\M^P\0\0\0\0\v\M-`\M-/\240\0\0\0\0\f\M-Y\M-M\^P\0\0\0\0\r\M-@\
	\M^Q\240\0\0\0\0\^N\M-9\M-/\^P\0\0\0\0\^O\M-)\M-.  \0\0\0\0\^P\M^Y\M^Q\
	\^P\0\0\0\0\^Q\M^I\M^P \0\0\0\0\^Rys\^P\0\0\0\0\^Sir \0\0\0\0\^TYU\^P\
	\0\0\0\0\^UIT \0\0\0\0\^V97\^P\0\0\0\0\^W)6 \0\0\0\0\^X"S\M^P\0\0\0\0\
	\^Y \^X \0\0\0\0\^Z\^B5\M^P\0\0\0\0\^Z\M-r4\240\0\0\0\0\^[\M-b\^W\
	\M^P\0\0\0\0\^\\M-R\^V\240\0\0\0\0\^]\M-A\M-y\M^P\0\0\0\0\^^\M-1\M-x\
	\240\0\0\0\0\^_\M-!\M-[\M^P\0\0\0\0 v+ \0\0\0\0!\M^A\M-=\M^P\0\0\0\0"\
	V\r \0\0\0\0#j\M-Z\^P\0\0\0\0$5\M-o \0\0\0\0%J\M-<\^P\0\0\0\0&\^U\M-Q\
	 \0\0\0\0'*\M^^\^P\0\0\0\0'\M-~\M-m\240\0\0\0\0)
	\M^@\^P\0\0\0\0)\M-^\M-O\240\0\0\0\0*\M-jb\^P\0\0\0\0+\M->\M-1\240\0\
	\0\0\0,\M-S~\M^P\0\0\0\0-\M^^\M^S\240\0\0\0\0.\M-3`\M^P\0\0\0\0/~u\
	\240\0\0\0\0000\M^SB\M^P\0\0\0\0001g\M^R \0\0\0\0002s$\M^P\0\0\0\0003\
	Gt \0\0\0\0004S\^F\M^P\0\0\0\0005'V \0\0\0\00062\M-h\M^P\0\0\0\0007\a\
	8 \0\0\0\08\^\\^E\^P\0\0\0\08\M-g\^Z \0\0\0\09\M-{\M-g\^P\0\0\0\0:\
	\M-F\M-| \0\0\0\0;\M-[\M-I\^P\0\0\0\0<\M-0\^X\240\0\0\0\0=\M-;\M-+\^P\
	\0\0\0\0>\M^O\M-z\240\0\0\0\0?\M^[\M^M\^P\0\0\0\0@o\M-\\240\0\0\0\0A\
	\M^D\M-)\M^P\0\0\0\0BO\M->\240\0\0\0\0Cd\M^K\M^P\0\0\0\0D/\240\240\0\
	\0\0\0EDm\M^P\0\0\0\0E\M-s\M-S \0\0\0\0G-\M^J\^P\0\0\0\0G\M-S\M-5 \0\
	\0\0\0I\rl\^P\0\0\0\0I\M-3\M^W \0\0\0\0J\M-mN\^P\0\0\0\0K\M^\\M-3\240\
	\0\0\0\0L\M-Vj\M^P\0\0\0\0M|\M^U\240\0\0\0\0N\M-6L\M^P\0\0\0\0O\\w\
	\240\0\0\0\0P\M^V.\M^P\0\0\0\0Q<Y\240\0\0\0\0Rv\^P\M^P\0\0\0\0S\^\;\
	\240\0\0\0\0TU\M-r\M^P\0\0\0\0T\M-|\^]\240\0\0\0\0V5\M-T\M^P\0\0\0\0V\
	\M-e: \0\0\0\0X\^^\M-q\^P\0\0\0\0X\M-E\^\ \0\0\0\0Y\M-~\M-S\^P\0\0\0\
	\0Z\M-$\M-~ \0\0\0\0[\M-^\M-5\^P\0\0\0\0\\\M^D\M-` \0\0\0\0]\M->\M^W\
	\^P\0\0\0\0^d\M-B \0\0\0\0_\M^^y\^P\0\0\0\0`M\M-^\240\0\0\0\0a\M^G\
	\M^U\M^P\0\0\0\0b-\M-@\240\0\0\0\0cgw\M^P\0\0\0\0d\r\M-"\240\0\0\0\0e\
	GY\M^P\0\0\0\0e\M-m\M^D\240\0\0\0\0g';\M^P\0\0\0\0g\M-Mf\240\0\0\0\0i\
	\a\^]\M^P\0\0\0\0i\M--H\240\0\0\0\0j\M-f\M^?\M^P\0\0\0\0k\M^Ve \0\0\0\
	\0l\M-P\^\\^P\0\0\0\0mvG \0\0\0\0n\M-/\M-~\^P\0\0\0\0oV) \0\0\0\0p\
	\M^O\M-`\^P\0\0\0\0q6\v \0\0\0\0ro\M-B\^P\0\0\0\0s\^U\M-m \0\0\0\0tO\
	\M-$\^P\0\0\0\0t\M^?  \240\0\0\0\0v8\M-@\M^P\0\0\0\0v\M-^\M-k\240\0\
	\0\0\0x\^X\M-"\M^P\0\0\0\0x\M->\M-M\240\0\0\0\0y\M-x\M^D\M^P\0\0\0\0z\
	\M^^\M-/\240\0\0\0\0{\M-Xf\M^P\0\0\0\0|~\M^Q\240\0\0\0\0}\M-8H\M^P\0\
	\0\0\0~^s\240\0\0\0\0\^?\M^X*\M^P\^E\^A\^B\^A\^B\^C\^D\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\M^?\M^?\M^Q&\0\0\M^?\M^?\M^]\
	\M^P\^A\^D\M^?\M^?\M^O\M^@\0\b\M^?\M^?\M^]\M^P\^A\f\M^?\M^?\M^]\M^P\
	\^A\^P\M^?\M^?\M^O\M^@\0\bLMT\0PDT\0PST\0PWT\0PPT\0\0\0\0\0\^A\^A\0\0\
	\0\0\^A\^A
	PST8PDT,M3.2.0,M11.1.0
       "
  3025 tipideed RET read 2835/0xb13
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL kbind(0x7a901c796a98,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL
  mmap(0,0x5000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,-1,0)
  3025 tipideed RET mmap 7177787641856/0x687357b9000
  3025 tipideed CALL open(0x7a901c792300,0<O_RDONLY>)
  3025 tipideed NAMI "/usr/share/zoneinfo/GMT"
  3025 tipideed RET open 3
  3025 tipideed CALL read(3,0x68741163000,0xa1e8)
  3025 tipideed GIO fd 3 read 118 bytes
       "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^A\0\0\0\^A\0\0\0\0\0\0\0\0\
	\0\0\0\^A\0\0\0\^D\0\0\0\0\0\0GMT\0\0\0TZif2\0\0\0\0\0\0\0\0\0\0\0\0\
	\0\0\0\0\0\0\^A\0\0\0\^A\0\0\0\0\0\0\0\0\0\0\0\^A\0\0\0\^D\0\0\0\0\0\
	\0GMT\0\0\0
	GMT0
       "
  3025 tipideed RET read 118/0x76
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL open(0x7a901c78da20,0<O_RDONLY>)
  3025 tipideed NAMI "/usr/share/zoneinfo/posixrules"
  3025 tipideed RET open 3
  3025 tipideed CALL read(3,0x6875175e000,0xa1e8)
  3025 tipideed GIO fd 3 read 2835 bytes
       "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\^E\0\0\0\^E\0\0\0\0\0\0\0\
	\M-9\0\0\0\^E\0\0\0\^P\M^^\M-&H\240\M^_\M-;\^U\M^P\240\M^F*\240\M-!\
	\M^Z\M-w\M^P\M-K\M^I\^Z\240\M-R#\M-tp\M-Ra&\^P\M-V\M-~t\\\M-X\M^@\M--\
	\M^P\M-Z\M-~\M-C\M^P\M-[\M-@\M^P\^P\M-\\M-^\M-%\M^P\M-]\M-)\M-,\M^P\
	\M-^\M->\M^G\M^P\M-_\M^I\M^N\M^P\M-`\M^^i\M^P\M-aip\M^P\M-b~K\M^P\M-c\
	IR\M^P\M-d^-\M^P\M-e)4\M^P\M-fGJ\^P\M-g\^RQ\^P\M-h',\^P\M-h\M-r3\^P\
	\M-j\a\^N\^P\M-j\M-R\^U\^P\M-k\M-f\M-p\^P\M-l\M-1\M-w\^P\M-m\M-F\M-R\
	\^P\M-n\M^Q\M-Y\^P\M-o\M-/\M-n\M^P\M-pq\M-;\^P\M-q\M^O\M-P\M^P\M-r\^?\
	\M-A\M^P\M-so\M-2\M^P\M-t_\M-#\M^P\M-uO\M^T\M^P\M-v?\M^E\M^P\M-w/v\
	\M^P\M-x(\M-"\^P\M-y\^OX\M^P\M-z\b\M^D\^P\M-z\M-x\M^C \M-{\M-hf\^P\
	\M-|\M-Xe \M-}\M-HH\^P\M-~\M-8G \M^?\M-(*\^P\0\M^X) \^A\M^H\f\^P\^Bx\
	\v \^Cq(\M^P\^Da'\240\^EQ
	\M^P\^FA \240\a0\M-l\M^P\a\M^MC\240 \^P\M-N\M^P \M--\
	\M-?
	\M-p\M-0\M^P\v\M-`\M-/\240\f\M-Y\M-M\^P\r\M-@\M^Q\240\^N\M-9\M-/\^P\
	\^O\M-)\M-.  \^P\M^Y\M^Q\^P\^Q\M^I\M^P \^Rys\^P\^Sir \^TYU\^P\^UIT \^V\
	97\^P\^W)6 \^X"S\M^P\^Y \^X \^Z\^B5\M^P\^Z\M-r4\240\^[\M-b\^W\M^P\^\\
	\M-R\^V\240\^]\M-A\M-y\M^P\^^\M-1\M-x\240\^_\M-!\M-[\M^P v+ !\M^A\M-=\
	\M^P"V\r #j\M-Z\^P$5\M-o %J\M-<\^P&\^U\M-Q '*\M^^\^P'\M-~\M-m\240)
	\M^@\^P)\M-^\M-O\240*\M-jb\^P+\M->\M-1\240,\M-S~\M^P-\M^^\M^S\240.\
	\M-3`\M^P/~u\2400\M^SB\M^P1g\M^R 2s$\M^P3Gt 4S\^F\M^P5'V 62\M-h\M^P7\
	\a8 8\^\\^E\^P8\M-g\^Z 9\M-{\M-g\^P:\M-F\M-| ;\M-[\M-I\^P<\M-0\^X\240\
	=\M-;\M-+\^P>\M^O\M-z\240?\M^[\M^M\^P@o\M-\\240A\M^D\M-)\M^PBO\M->\
	\240Cd\M^K\M^PD/\240\240EDm\M^PE\M-s\M-S G-\M^J\^PG\M-S\M-5 I\rl\^PI\
	\M-3\M^W J\M-mN\^PK\M^\\M-3\240L\M-Vj\M^PM|\M^U\240N\M-6L\M^PO\\w\240\
	P\M^V.\M^PQ<Y\240Rv\^P\M^PS\^\;\240TU\M-r\M^PT\M-|\^]\240V5\M-T\M^PV\
	\M-e: X\^^\M-q\^PX\M-E\^\ Y\M-~\M-S\^PZ\M-$\M-~ [\M-^\M-5\^P\\\M^D\
	\M-` ]\M->\M^W\^P^d\M-B _\M^^y\^P`M\M-^\240a\M^G\M^U\M^Pb-\M-@\240cgw\
	\M^Pd\r\M-"\240eGY\M^Pe\M-m\M^D\240g';\M^Pg\M-Mf\240i\a\^]\M^Pi\M--H\
	\240j\M-f\M^?\M^Pk\M^Ve l\M-P\^\\^PmvG n\M-/\M-~\^PoV) p\M^O\M-`\^Pq6\
	\v ro\M-B\^Ps\^U\M-m tO\M-$\^Pt\M^?  \240v8\M-@\M^Pv\M-^\M-k\240x\
	\^X\M-"\M^Px\M->\M-M\240y\M-x\M^D\M^Pz\M^^\M-/\240{\M-Xf\M^P|~\M^Q\
	\240}\M-8H\M^P~^s\240\^?\M^X*\M^P\0\^A\0\^A\^B\^C\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\
	\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\^A\0\
	\^A\0\^A\0\^A\0\^A\0\^A\M^?\M^?\M^]\M^P\^A\0\M^?\M^?\M^O\M^@\0\^D\M^?\
	\M^?\M^]\M^P\^A\b\M^?\M^?\M^]\M^P\^A\f\M^?\M^?\M^O\M^@\0\^DPDT\0PST\0\
	PWT\0PPT\0\0\0\0\^A\^A\0\0\0\^A\^ATZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
	\0\0\0\^F\0\0\0\^F\0\0\0\0\0\0\0\M-:\0\0\0\^F\0\0\0\^T\M^?\M^?\M^?\
	\M^?^\^D\^Z\M-@\M^?\M^?\M^?\M^?\M^^\M-&H\240\M^?\M^?\M^?\M^?\M^_\M-;\
	\^U\M^P\M^?\M^?\M^?\M^?\240\M^F*\240\M^?\M^?\M^?\M^?\M-!\M^Z\M-w\M^P\
	\M^?\M^?\M^?\M^?\M-K\M^I\^Z\240\M^?\M^?\M^?\M^?\M-R#\M-tp\M^?\M^?\M^?\
	\M^?\M-Ra&\^P\M^?\M^?\M^?\M^?\M-V\M-~t\\\M^?\M^?\M^?\M^?\M-X\M^@\M--\
	\M^P\M^?\M^?\M^?\M^?\M-Z\M-~\M-C\M^P\M^?\M^?\M^?\M^?\M-[\M-@\M^P\^P\
	\M^?\M^?\M^?\M^?\M-\\M-^\M-%\M^P\M^?\M^?\M^?\M^?\M-]\M-)\M-,\M^P\M^?\
	\M^?\M^?\M^?\M-^\M->\M^G\M^P\M^?\M^?\M^?\M^?\M-_\M^I\M^N\M^P\M^?\M^?\
	\M^?\M^?\M-`\M^^i\M^P\M^?\M^?\M^?\M^?\M-aip\M^P\M^?\M^?\M^?\M^?\M-b~K\
	\M^P\M^?\M^?\M^?\M^?\M-cIR\M^P\M^?\M^?\M^?\M^?\M-d^-\M^P\M^?\M^?\M^?\
	\M^?\M-e)4\M^P\M^?\M^?\M^?\M^?\M-fGJ\^P\M^?\M^?\M^?\M^?\M-g\^RQ\^P\
	\M^?\M^?\M^?\M^?\M-h',\^P\M^?\M^?\M^?\M^?\M-h\M-r3\^P\M^?\M^?\M^?\M^?\
	\M-j\a\^N\^P\M^?\M^?\M^?\M^?\M-j\M-R\^U\^P\M^?\M^?\M^?\M^?\M-k\M-f\
	\M-p\^P\M^?\M^?\M^?\M^?\M-l\M-1\M-w\^P\M^?\M^?\M^?\M^?\M-m\M-F\M-R\^P\
	\M^?\M^?\M^?\M^?\M-n\M^Q\M-Y\^P\M^?\M^?\M^?\M^?\M-o\M-/\M-n\M^P\M^?\
	\M^?\M^?\M^?\M-pq\M-;\^P\M^?\M^?\M^?\M^?\M-q\M^O\M-P\M^P\M^?\M^?\M^?\
	\M^?\M-r\^?\M-A\M^P\M^?\M^?\M^?\M^?\M-so\M-2\M^P\M^?\M^?\M^?\M^?\M-t_\
	\M-#\M^P\M^?\M^?\M^?\M^?\M-uO\M^T\M^P\M^?\M^?\M^?\M^?\M-v?\M^E\M^P\
	\M^?\M^?\M^?\M^?\M-w/v\M^P\M^?\M^?\M^?\M^?\M-x(\M-"\^P\M^?\M^?\M^?\
	\M^?\M-y\^OX\M^P\M^?\M^?\M^?\M^?\M-z\b\M^D\^P\M^?\M^?\M^?\M^?\M-z\M-x\
	\M^C \M^?\M^?\M^?\M^?\M-{\M-hf\^P\M^?\M^?\M^?\M^?\M-|\M-Xe \M^?\M^?\
	\M^?\M^?\M-}\M-HH\^P\M^?\M^?\M^?\M^?\M-~\M-8G \M^?\M^?\M^?\M^?\M^?\
	\M-(*\^P\0\0\0\0\0\M^X) \0\0\0\0\^A\M^H\f\^P\0\0\0\0\^Bx\v \0\0\0\0\
	\^Cq(\M^P\0\0\0\0\^Da'\240\0\0\0\0\^EQ
	\M^P\0\0\0\0\^FA \240\0\0\0\0\a0\M-l\M^P\0\0\0\0\a\M^MC\240\0\
	\0\0\0 \^P\M-N\M^P\0\0\0\0 \M--\M-?  \0\0\0\0
	\M-p\M-0\M^P\0\0\0\0\v\M-`\M-/\240\0\0\0\0\f\M-Y\M-M\^P\0\0\0\0\r\M-@\
	\M^Q\240\0\0\0\0\^N\M-9\M-/\^P\0\0\0\0\^O\M-)\M-.  \0\0\0\0\^P\M^Y\M^Q\
	\^P\0\0\0\0\^Q\M^I\M^P \0\0\0\0\^Rys\^P\0\0\0\0\^Sir \0\0\0\0\^TYU\^P\
	\0\0\0\0\^UIT \0\0\0\0\^V97\^P\0\0\0\0\^W)6 \0\0\0\0\^X"S\M^P\0\0\0\0\
	\^Y \^X \0\0\0\0\^Z\^B5\M^P\0\0\0\0\^Z\M-r4\240\0\0\0\0\^[\M-b\^W\
	\M^P\0\0\0\0\^\\M-R\^V\240\0\0\0\0\^]\M-A\M-y\M^P\0\0\0\0\^^\M-1\M-x\
	\240\0\0\0\0\^_\M-!\M-[\M^P\0\0\0\0 v+ \0\0\0\0!\M^A\M-=\M^P\0\0\0\0"\
	V\r \0\0\0\0#j\M-Z\^P\0\0\0\0$5\M-o \0\0\0\0%J\M-<\^P\0\0\0\0&\^U\M-Q\
	 \0\0\0\0'*\M^^\^P\0\0\0\0'\M-~\M-m\240\0\0\0\0)
	\M^@\^P\0\0\0\0)\M-^\M-O\240\0\0\0\0*\M-jb\^P\0\0\0\0+\M->\M-1\240\0\
	\0\0\0,\M-S~\M^P\0\0\0\0-\M^^\M^S\240\0\0\0\0.\M-3`\M^P\0\0\0\0/~u\
	\240\0\0\0\0000\M^SB\M^P\0\0\0\0001g\M^R \0\0\0\0002s$\M^P\0\0\0\0003\
	Gt \0\0\0\0004S\^F\M^P\0\0\0\0005'V \0\0\0\00062\M-h\M^P\0\0\0\0007\a\
	8 \0\0\0\08\^\\^E\^P\0\0\0\08\M-g\^Z \0\0\0\09\M-{\M-g\^P\0\0\0\0:\
	\M-F\M-| \0\0\0\0;\M-[\M-I\^P\0\0\0\0<\M-0\^X\240\0\0\0\0=\M-;\M-+\^P\
	\0\0\0\0>\M^O\M-z\240\0\0\0\0?\M^[\M^M\^P\0\0\0\0@o\M-\\240\0\0\0\0A\
	\M^D\M-)\M^P\0\0\0\0BO\M->\240\0\0\0\0Cd\M^K\M^P\0\0\0\0D/\240\240\0\
	\0\0\0EDm\M^P\0\0\0\0E\M-s\M-S \0\0\0\0G-\M^J\^P\0\0\0\0G\M-S\M-5 \0\
	\0\0\0I\rl\^P\0\0\0\0I\M-3\M^W \0\0\0\0J\M-mN\^P\0\0\0\0K\M^\\M-3\240\
	\0\0\0\0L\M-Vj\M^P\0\0\0\0M|\M^U\240\0\0\0\0N\M-6L\M^P\0\0\0\0O\\w\
	\240\0\0\0\0P\M^V.\M^P\0\0\0\0Q<Y\240\0\0\0\0Rv\^P\M^P\0\0\0\0S\^\;\
	\240\0\0\0\0TU\M-r\M^P\0\0\0\0T\M-|\^]\240\0\0\0\0V5\M-T\M^P\0\0\0\0V\
	\M-e: \0\0\0\0X\^^\M-q\^P\0\0\0\0X\M-E\^\ \0\0\0\0Y\M-~\M-S\^P\0\0\0\
	\0Z\M-$\M-~ \0\0\0\0[\M-^\M-5\^P\0\0\0\0\\\M^D\M-` \0\0\0\0]\M->\M^W\
	\^P\0\0\0\0^d\M-B \0\0\0\0_\M^^y\^P\0\0\0\0`M\M-^\240\0\0\0\0a\M^G\
	\M^U\M^P\0\0\0\0b-\M-@\240\0\0\0\0cgw\M^P\0\0\0\0d\r\M-"\240\0\0\0\0e\
	GY\M^P\0\0\0\0e\M-m\M^D\240\0\0\0\0g';\M^P\0\0\0\0g\M-Mf\240\0\0\0\0i\
	\a\^]\M^P\0\0\0\0i\M--H\240\0\0\0\0j\M-f\M^?\M^P\0\0\0\0k\M^Ve \0\0\0\
	\0l\M-P\^\\^P\0\0\0\0mvG \0\0\0\0n\M-/\M-~\^P\0\0\0\0oV) \0\0\0\0p\
	\M^O\M-`\^P\0\0\0\0q6\v \0\0\0\0ro\M-B\^P\0\0\0\0s\^U\M-m \0\0\0\0tO\
	\M-$\^P\0\0\0\0t\M^?  \240\0\0\0\0v8\M-@\M^P\0\0\0\0v\M-^\M-k\240\0\
	\0\0\0x\^X\M-"\M^P\0\0\0\0x\M->\M-M\240\0\0\0\0y\M-x\M^D\M^P\0\0\0\0z\
	\M^^\M-/\240\0\0\0\0{\M-Xf\M^P\0\0\0\0|~\M^Q\240\0\0\0\0}\M-8H\M^P\0\
	\0\0\0~^s\240\0\0\0\0\^?\M^X*\M^P\^E\^A\^B\^A\^B\^C\^D\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\
	\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\
	\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\^A\^B\M^?\M^?\M^Q&\0\0\M^?\M^?\M^]\
	\M^P\^A\^D\M^?\M^?\M^O\M^@\0\b\M^?\M^?\M^]\M^P\^A\f\M^?\M^?\M^]\M^P\
	\^A\^P\M^?\M^?\M^O\M^@\0\bLMT\0PDT\0PST\0PWT\0PPT\0\0\0\0\0\^A\^A\0\0\
	\0\0\^A\^A
	PST8PDT,M3.2.0,M11.1.0
       "
  3025 tipideed RET read 2835/0xb13
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL kbind(0x7a901c796af8,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL writev(2,0x7a901c796c00,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812be2, len=111 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 111 bytes
       "tipideed: pid 3025: info: sending regular file localhost:80/empty (0 \
	bytes) with type application/octet-stream
       "
  3025 tipideed RET writev 111/0x6f
  3025 tipideed CALL open(0x7a901c796e80,0x4<O_RDONLY|O_NONBLOCK>)
  3025 tipideed NAMI "localhost:80/empty"
  3025 tipideed RET open 3
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL readv(0,0x7a901c796e80,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb75, len=8155 } {
  base=0x6850c80eb50, len=36 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796f60,1,0x7a901c796eb0,0)
  3025 tipideed STRU struct timespec { 2305843009213693952 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e80,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb75, len=8155 } {
  base=0x6850c80eb50, len=36 }
  3025 tipideed GIO fd 0 read 19 bytes
       "GET /asdf HTTP/1.1
       "
  3025 tipideed RET readv 19/0x13
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb88, len=8136 } {
  base=0x6850c80eb50, len=55 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796ed0,1,0x7a901c796e20,0)
  3025 tipideed STRU struct timespec { 2305843009213693945.167809813 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb88, len=8136 } {
  base=0x6850c80eb50, len=55 }
  3025 tipideed GIO fd 0 read 16 bytes
       "host: localhost
       "
  3025 tipideed RET readv 16/0x10
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb98, len=8120 } {
  base=0x6850c80eb50, len=71 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796ed0,1,0x7a901c796e20,0)
  3025 tipideed STRU struct timespec { 2305843009213693941.417824790 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80eb98, len=8120 } {
  base=0x6850c80eb50, len=71 }
  3025 tipideed GIO fd 0 read 18 bytes
       "connection: close
       "
  3025 tipideed RET readv 18/0x12
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80ebaa, len=8102 } {
  base=0x6850c80eb50, len=89 }
  3025 tipideed RET readv -1 errno 35 Resource temporarily unavailable
  3025 tipideed CALL ppoll(0x7a901c796ed0,1,0x7a901c796e20,0)
  3025 tipideed STRU struct timespec { 2305843009213693938.803768941 }
  3025 tipideed STRU struct pollfd { fd=0, events=0x11<POLLIN|POLLHUP>,
  revents=0x1<POLLIN> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL readv(0,0x7a901c796e30,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c80ebaa, len=8102 } {
  base=0x6850c80eb50, len=89 }
  3025 tipideed GIO fd 0 read 1 bytes
       "
       "
  3025 tipideed RET readv 1
  3025 tipideed CALL writev(2,0x7a901c796ef0,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812c51, len=68 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 68 bytes
       "tipideed: pid 3025: info: request GET for host localhost path /asdf
       "
  3025 tipideed RET writev 68/0x44
  3025 tipideed CALL stat(0x7a901c796e80,0x7a901c796f60)
  3025 tipideed NAMI "localhost:80/asdf"
  3025 tipideed STRU struct stat { dev=1036, ino=52612, mode=-rw-r--r-- , nlink=1,
  uid=1000<"humm">, gid=1000<"humm">, rdev=267538,
  atime=1695330108<"Sep 21 23:01:48 2023">.579662818,
  mtime=1695329543<"Sep 21 22:52:23 2023">.459656525,
  ctime=1695329829<"Sep 21 22:57:09 2023">.219611208, size=5, blocks=4,
  blksize=16384, flags=0x0, gen=0x0 }
  3025 tipideed RET stat 0
  3025 tipideed CALL kbind(0x7a901c796c08,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL __realpath(0x7a901c796e80,0x7a901c796900)
  3025 tipideed NAMI "localhost:80/asdf"
  3025 tipideed NAMI "/home/humm/www/localhost:80/asdf"
  3025 tipideed RET __realpath 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL issetugid()
  3025 tipideed RET issetugid 0
  3025 tipideed CALL writev(2,0x7a901c796c00,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812c95, len=110 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 110 bytes
       "tipideed: pid 3025: info: sending regular file localhost:80/asdf (5 b\
	ytes) with type application/octet-stream
       "
  3025 tipideed RET writev 110/0x6e
  3025 tipideed CALL open(0x7a901c796e80,0x4<O_RDONLY|O_NONBLOCK>)
  3025 tipideed NAMI "localhost:80/asdf"
  3025 tipideed RET open 3
  3025 tipideed CALL readv(3,0x7a901c796be0,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c810b50, len=955 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 3 read 5 bytes
       "asdf
       "
  3025 tipideed RET readv 5
  3025 tipideed CALL readv(3,0x7a901c796be0,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c810b55, len=950 } { base=0x0,
  len=0 }
  3025 tipideed RET readv 0
  3025 tipideed CALL ppoll(0x7a901c796bf0,1,0x7a901c796b40,0)
  3025 tipideed STRU struct timespec { 2305843009213693952 }
  3025 tipideed STRU struct pollfd { fd=1, events=0x4<POLLOUT>,
  revents=0x4<POLLOUT> }
  3025 tipideed RET ppoll 1
  3025 tipideed CALL writev(1,0x7a901c796ba0,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c810b55, len=950 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 1 wrote 950 bytes
       "1.1 200 OK\r
	Date: Thu, 21 Sep 2023 21:06:57 GMT\r
	Accept-Ranges: none\r
	Cache-Control: private\r
	Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe\
	-inline';\r
	Referrer-Policy: no-referrer-when-downgrade\r
	Server: tipidee/0.0.1.0\r
	Vary: Accept-Encoding\r
	X-Content-Type-Options: nosniff\r
	X-Frame-Options: DENY\r
	X-XSS-Protection: 1; mode=block\r
	Last-Modified: Thu, 21 Sep 2023 20:56:08 GMT\r
	Content-Type: application/octet-stream\r
	Content-Length: 0\r
	\r
	HTTP/1.1 200 OK\r
	Date: Thu, 21 Sep 2023 21:07:10 GMT\r
	Accept-Ranges: none\r
	Cache-Control: private\r
	Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe\
	-inline';\r
	Referrer-Policy: no-referrer-when-downgrade\r
	Server: tipidee/0.0.1.0\r
	Vary: Accept-Encoding\r
	X-Content-Type-Options: nosniff\r
	X-Frame-Options: DENY\r
	X-XSS-Protection: 1; mode=block\r
	Connection: close\r
	Last-Modified: Thu, 21 Sep 2023 20:51:46 GMT\r
	Content-Type: application/octet-stream\r
	Content-Length: 5\r
	\r
       "
  3025 tipideed RET writev 950/0x3b6
  3025 tipideed CALL close(3)
  3025 tipideed RET close 0
  3025 tipideed CALL writev(2,0x7a901c796f90,2)
  3025 tipideed STRU struct iovec [2] { base=0x6850c812d03, len=36 } { base=0x0,
  len=0 }
  3025 tipideed GIO fd 2 wrote 36 bytes
       "tipideed: pid 3025: info: exiting 0
       "
  3025 tipideed RET writev 36/0x24
  3025 tipideed CALL kbind(0x7a901c796f78,24,0xc03c4396e5423669)
  3025 tipideed RET kbind 0
  3025 tipideed CALL exit(0)


Thu Sep 21 17:09:41 EDT 2023
/*
 * bcm2835 i2c controller
 *
 * Only i2c1 is supported.
 * i2c2 is reserved for HDMI.
 * i2c0 SDA0/SCL0 pins are not routed to P1 connector (except for early Rev 0
 boards)
 *
 * maybe hardware problems lurking, see:
 https://github.com/raspberrypi/linux/issues/254
 *
 * modified by adventuresin9@gmail.com to work with 9Front's port/devi2c
 */

#include "u.h"
#include "../port/lib.h"
#include "../port/error.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
#include "../port/i2c.h"

#define I2CREGS (VIRTIO+0x804000)


typedef struct Ctlr Ctlr;
typedef struct Bsc Bsc;

/*
 * Registers for Broadcom Serial Controller (i2c compatible)
 */
struct Bsc {
	u32int ctrl;
	u32int stat;
	u32int dlen;
	u32int addr;
	u32int fifo;
	u32int clkdiv; /* default 1500 => 100 KHz assuming 150Mhz input clock
	*/
	u32int delay; /* default (48<<16)|48 falling:rising edge */
	u32int clktimeout; /* default 64 */
};

/*
 * Per-controller info
 */
struct Ctlr {
	QLock qlock;
	Bsc *regs;
	Rendez r;
	Lock ilock;
};

static Ctlr ctlr;

enum {
	/* ctrl */
	I2cen = 1<<15, /* I2c enable */
	Intr = 1<<10, /* interrupt on reception */
	Intt = 1<<9, /* interrupt on transmission */
	Intd = 1<<8, /* interrupt on done */
	Start = 1<<7, /* aka ST, start a transfer */
	Clear = 1<<4, /* clear fifo */
	Read = 1<<0, /* read transfer */
	Write = 0<<0, /* write transfer */

	/* stat */
	Clkt = 1<<9, /* clock stretch timeout */
	Err = 1<<8, /* NAK */
	Rxf = 1<<7, /* RX fifo full */
	Txe = 1<<6, /* TX fifo full */
	Rxd = 1<<5, /* RX fifo has data */
	Txd = 1<<4, /* TX fifo has space */
	Rxr = 1<<3, /* RX fiio needs reading */
	Txw = 1<<2, /* TX fifo needs writing */
	Done = 1<<1, /* transfer done */
	Ta = 1<<0, /* Transfer active */

	/* pin settings */
	SDA0Pin = 2,
	SCL0Pin = 3,
};

static void
i2cinterrupt(Ureg*, void*)
{
	Bsc *r;
	int st;

	ilock(&ctlr.ilock);
	r = ctlr.regs;
	st = 0;
	if((r->ctrl & Intr) && (r->stat & Rxd))
		st |= Intr;
	if((r->ctrl & Intt) && (r->stat & Txd))
		st |= Intt;
	if(r->stat & Done)
		st |= Intd;
	if(st){
		r->ctrl &= ~st;
		wakeup(&ctlr.r);
	}
	iunlock(&ctlr.ilock);
}

static int
i2cready(void *st)
{
	return (ctlr.regs->stat & (uintptr)st);
}

static int
i2cinit(I2Cbus*)
{
	ctlr.regs = (Bsc*)I2CREGS;
	ctlr.regs->clkdiv = 2500;

	gpiosel(SDA0Pin, Alt0);
	gpiosel(SCL0Pin, Alt0);
	gpiopullup(SDA0Pin);
	gpiopullup(SCL0Pin);

	intrenable(IRQi2c, i2cinterrupt, nil, BUSUNKNOWN, "i2c");

	return 0;
}

/*
 * Basic I²C driver for Raspberry Pi
 * subaddressing wasn't reliable, so it is just not allowed
 *
 * 10 bit addressing is also disabled.
 */
static int
i2cio(I2Cdev *dev, uchar *pkt, int olen, int ilen)
{
	Bsc *r;
	uchar *p;
	int st;
	int o;
	int rw, len;
	uint addr;
	o = 0;

	if(dev->subaddr > 0){ /* subaddressing in not implemented */
		return -1;
	}

	if((pkt[0] & 0xF8) == 0xF0){ /* b11110xxx reserved for 10bit addressing*/
		r->ctrl = 0;
		return -1;
	}

	rw = pkt[0] & 1; /* rw bit is first bit of pkt[0], read == 1 */
	addr = dev->addr;
	pkt++; /* move past device addr packet */
	o++; /* have to at least return processing the dev addr */

	/*
	 * If 9Front is just running a probe
	 * return 1,
	 * else the controller throws an NAK error
	 * when doing a write with just the dev addr
	 */

	if((olen == 1) && (ilen == 0)){
		return 1;
	}

	qlock(&ctlr.qlock);
	r = ctlr.regs;
	r->ctrl = I2cen | Clear;
	r->addr = addr;
	r->stat = Clkt|Err|Done;

	len = (olen - 1) + ilen;
	r->dlen = len;
	r->ctrl = I2cen | Start | Intd | rw;

	p = pkt;
	st = rw == Read?  Rxd : Txd;
	while(len > 0){
		while((r->stat & (st|Done)) == 0){
			r->ctrl |= rw == Read?  Intr : Intt;
			sleep(&ctlr.r, i2cready, (void*)(st|Done));
		}
		if(r->stat & (Err|Clkt)){
			r->ctrl = 0;
			qunlock(&ctlr.qlock);
			return -1;
		}
		if(rw == Read){
			do{
				*p++ = r->fifo;
				len--;
				o++;
			}while ((r->stat & Rxd) && len > 0);
		}else{
			do{
				r->fifo = *p++;
				len--;
				o++;
			}while((r->stat & Txd) && len > 0);
		}
	}

	while((r->stat & Done) == 0)
		sleep(&ctlr.r, i2cready, (void*)Done);
	if(r->stat & (Err|Clkt)){
		r->ctrl = 0;
		qunlock(&ctlr.qlock);
		return -1;
	}
	r->ctrl = 0;
	qunlock(&ctlr.qlock);
	return o;
}


void
i2cbcmlink(void)
{
	static I2Cbus i2c = {"i2c1", 400000, &ctlr, i2cinit, i2cio};
	addi2cbus(&i2c);
}


Thu Sep 21 16:31:05 EDT 2023
/*
 * bcm2835 i2c controller
 *
 * Only i2c1 is supported.
 * i2c2 is reserved for HDMI.
 * i2c0 SDA0/SCL0 pins are not routed to P1 connector (except for early Rev 0
 boards)
 *
 * maybe hardware problems lurking, see:
 https://github.com/raspberrypi/linux/issues/254
 *
 * modified by adventuresin9@gmail.com to work with 9Front's port/devi2c
 */

#include "u.h"
#include "../port/lib.h"
#include "../port/error.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
#include "../port/i2c.h"

#define I2CREGS (VIRTIO+0x804000)


typedef struct Ctlr Ctlr;
typedef struct Bsc Bsc;

/*
 * Registers for Broadcom Serial Controller (i2c compatible)
 */
struct Bsc {
	u32int ctrl;
	u32int stat;
	u32int dlen;
	u32int addr;
	u32int fifo;
	u32int clkdiv; /* default 1500 => 100 KHz assuming 150Mhz input clock
	*/
	u32int delay; /* default (48<<16)|48 falling:rising edge */
	u32int clktimeout; /* default 64 */
};

/*
 * Per-controller info
 */
struct Ctlr {
	QLock lock;
	Bsc *regs;
	Rendez r;
};

static Ctlr ctlr;

enum {
	/* ctrl */
	I2cen = 1<<15, /* I2c enable */
	Intr = 1<<10, /* interrupt on reception */
	Intt = 1<<9, /* interrupt on transmission */
	Intd = 1<<8, /* interrupt on done */
	Start = 1<<7, /* aka ST, start a transfer */
	Clear = 1<<4, /* clear fifo */
	Read = 1<<0, /* read transfer */
	Write = 0<<0, /* write transfer */

	/* stat */
	Clkt = 1<<9, /* clock stretch timeout */
	Err = 1<<8, /* NAK */
	Rxf = 1<<7, /* RX fifo full */
	Txe = 1<<6, /* TX fifo full */
	Rxd = 1<<5, /* RX fifo has data */
	Txd = 1<<4, /* TX fifo has space */
	Rxr = 1<<3, /* RX fiio needs reading */
	Txw = 1<<2, /* TX fifo needs writing */
	Done = 1<<1, /* transfer done */
	Ta = 1<<0, /* Transfer active */

	/* pin settings */
	SDA0Pin = 2,
	SCL0Pin = 3,
};

static void
i2cinterrupt(Ureg*, void*)
{
	Bsc *r;
	int st;

	r = ctlr.regs;
	st = 0;
	if((r->ctrl & Intr) && (r->stat & Rxd))
		st |= Intr;
	if((r->ctrl & Intt) && (r->stat & Txd))
		st |= Intt;
	if(r->stat & Done)
		st |= Intd;
	if(st){
		r->ctrl &= ~st;
		wakeup(&ctlr.r);
	}
}

static int
i2cready(void *st)
{
	return (ctlr.regs->stat & (uintptr)st);
}

static int
i2cinit(I2Cbus*)
{
	ctlr.regs = (Bsc*)I2CREGS;
	ctlr.regs->clkdiv = 2500;

	gpiosel(SDA0Pin, Alt0);
	gpiosel(SCL0Pin, Alt0);
	gpiopullup(SDA0Pin);
	gpiopullup(SCL0Pin);

	intrenable(IRQi2c, i2cinterrupt, nil, BUSUNKNOWN, "i2c");

	return 0;
}

/*
 * Basic I²C driver for Raspberry Pi
 * subaddressing wasn't reliable, so it is just not allowed
 *
 * 10 bit addressing is also disabled.
 */
static int
i2cio(I2Cdev *dev, uchar *pkt, int olen, int ilen)
{
	Bsc *r;
	uchar *p;
	int st;
	int o;
	int rw, len;
	uint addr;
	o = 0;

	if(dev->subaddr > 0){ /* subaddressing in not implemented */
		return -1;
	}

	if((pkt[0] & 0xF8) == 0xF0){ /* b11110xxx reserved for 10bit addressing*/
		r->ctrl = 0;
		return -1;
	}

	rw = pkt[0] & 1; /* rw bit is first bit of pkt[0], read == 1 */
	addr = dev->addr;
	pkt++; /* move past device addr packet */
	o++; /* have to at least return processing the dev addr */

	/*
	 * If 9Front is just running a probe
	 * return 1,
	 * else the controller throws an NAK error
	 * when doing a write with just the dev addr
	 */

	if((olen == 1) && (ilen == 0)){
		return 1;
	}

	qlock(&ctlr.lock);
	r = ctlr.regs;
	r->ctrl = I2cen | Clear;
	r->addr = addr;
	r->stat = Clkt|Err|Done;

	len = (olen - 1) + ilen;
	r->dlen = len;
	r->ctrl = I2cen | Start | Intd | rw;

	p = pkt;
	st = rw == Read?  Rxd : Txd;
	while(len > 0){
		while((r->stat & (st|Done)) == 0){
			r->ctrl |= rw == Read?  Intr : Intt;
			sleep(&ctlr.r, i2cready, (void*)(st|Done));
		}
		if(r->stat & (Err|Clkt)){
			qunlock(&ctlr.lock);
			r->ctrl = 0;
			return -1;
		}
		if(rw == Read){
			do{
				*p++ = r->fifo;
				len--;
				o++;
			}while ((r->stat & Rxd) && len > 0);
		}else{
			do{
				r->fifo = *p++;
				len--;
				o++;
			}while((r->stat & Txd) && len > 0);
		}
	}

	while((r->stat & Done) == 0)
		sleep(&ctlr.r, i2cready, (void*)Done);
	if(r->stat & (Err|Clkt)){
		qunlock(&ctlr.lock);
		r->ctrl = 0;
		return -1;
	}
	r->ctrl = 0;
	qunlock(&ctlr.lock);
	return o;
}


void
i2cbcmlink(void)
{
	static I2Cbus i2c = {"i2c1", 400000, &ctlr, i2cinit, i2cio};
	addi2cbus(&i2c);
}


Thu Sep 21 16:19:38 EDT 2023
/*
 * bcm2835 i2c controller
 *
 * Only i2c1 is supported.
 * i2c2 is reserved for HDMI.
 * i2c0 SDA0/SCL0 pins are not routed to P1 connector (except for early Rev 0
 boards)
 *
 * maybe hardware problems lurking, see:
 https://github.com/raspberrypi/linux/issues/254
 *
 * modified by adventuresin9@gmail.com to work with 9Front's port/devi2c
 */

#include "u.h"
#include "../port/lib.h"
#include "../port/error.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
#include "../port/i2c.h"

#define I2CREGS (VIRTIO+0x804000)


typedef struct Ctlr Ctlr;
typedef struct Bsc Bsc;

/*
 * Registers for Broadcom Serial Controller (i2c compatible)
 */
struct Bsc {
	u32int ctrl;
	u32int stat;
	u32int dlen;
	u32int addr;
	u32int fifo;
	u32int clkdiv; /* default 1500 => 100 KHz assuming 150Mhz input clock
	*/
	u32int delay; /* default (48<<16)|48 falling:rising edge */
	u32int clktimeout; /* default 64 */
};

/*
 * Per-controller info
 */
struct Ctlr {
	QLock lock;
	Bsc *regs;
	Rendez r;
};

static Ctlr ctlr;

enum {
	/* ctrl */
	I2cen = 1<<15, /* I2c enable */
	Intr = 1<<10, /* interrupt on reception */
	Intt = 1<<9, /* interrupt on transmission */
	Intd = 1<<8, /* interrupt on done */
	Start = 1<<7, /* aka ST, start a transfer */
	Clear = 1<<4, /* clear fifo */
	Read = 1<<0, /* read transfer */
	Write = 0<<0, /* write transfer */

	/* stat */
	Clkt = 1<<9, /* clock stretch timeout */
	Err = 1<<8, /* NAK */
	Rxf = 1<<7, /* RX fifo full */
	Txe = 1<<6, /* TX fifo full */
	Rxd = 1<<5, /* RX fifo has data */
	Txd = 1<<4, /* TX fifo has space */
	Rxr = 1<<3, /* RX fiio needs reading */
	Txw = 1<<2, /* TX fifo needs writing */
	Done = 1<<1, /* transfer done */
	Ta = 1<<0, /* Transfer active */

	/* pin settings */
	SDA0Pin = 2,
	SCL0Pin = 3,
};

static void
i2cinterrupt(Ureg*, void*)
{
	Bsc *r;
	int st;

	r = ctlr.regs;
	st = 0;
	if((r->ctrl & Intr) && (r->stat & Rxd))
		st |= Intr;
	if((r->ctrl & Intt) && (r->stat & Txd))
		st |= Intt;
	if(r->stat & Done)
		st |= Intd;
	if(st){
		r->ctrl &= ~st;
		wakeup(&ctlr.r);
	}
}

static int
i2cready(void *st)
{
	return (ctlr.regs->stat & (uintptr)st);
}

static int
i2cinit(I2Cbus*)
{
	ctlr.regs = (Bsc*)I2CREGS;
	ctlr.regs->clkdiv = 2500;

	gpiosel(SDA0Pin, Alt0);
	gpiosel(SCL0Pin, Alt0);
	gpiopullup(SDA0Pin);
	gpiopullup(SCL0Pin);

	intrenable(IRQi2c, i2cinterrupt, nil, BUSUNKNOWN, "i2c");

	return 0;
}

/*
 * Basic I²C driver for Raspberry Pi
 * subaddressing wasn't reliable, so it is just not allowed
 *
 * 10 bit addressing is also disabled.
 * No subaddressing, since it wouldn't work consistently
 */
static int
i2cio(I2Cdev *dev, uchar *pkt, int olen, int ilen)
{
	Bsc *r;
	uchar *p;
	int st;
	int o;


/* arguements from Miller's i2cio() */
	int rw, len;
	uint addr;
	o = 0;

	if(dev->subaddr > 0){ /* subaddressing in not implemented */
		return -1;
	}

	if((pkt[0] & 0xF8) == 0xF0){ /* b11110xxx reserved for 10bit addressing*/
		r->ctrl = 0;
		return -1;
	}

	rw = pkt[0] & 1; /* rw bit is first bit of pkt[0], read == 1 */
	addr = dev->addr;
	pkt++; /* move past device addr packet */
	o++; /* have to at least return processing the dev addr */

//print("addr=%ux rw=%d olen=%d ilen=%d\n", addr, rw, olen, ilen);
/*
 * If 9Front is just running a probe
 * return 1,
 * else the controller throws an NAK error
 * when doing a write with just the dev addr
 */

	if((olen == 1) && (ilen == 0)){
		return 1;
	}

	qlock(&ctlr.lock);
	r = ctlr.regs;
	r->ctrl = I2cen | Clear;
	r->addr = addr;
	r->stat = Clkt|Err|Done;

	len = (olen - 1) + ilen;
	r->dlen = len;
	r->ctrl = I2cen | Start | Intd | rw;

	p = pkt;
	st = rw == Read?  Rxd : Txd;
	while(len > 0){
		while((r->stat & (st|Done)) == 0){
			r->ctrl |= rw == Read?  Intr : Intt;
			sleep(&ctlr.r, i2cready, (void*)(st|Done));
		}
		if(r->stat & (Err|Clkt)){
			qunlock(&ctlr.lock);
			r->ctrl = 0;
			return -1;
		}
		if(rw == Read){
			do{
				*p++ = r->fifo;
				len--;
				o++;
			}while ((r->stat & Rxd) && len > 0);
		}else{
			do{
				r->fifo = *p++;
				len--;
				o++;
			}while((r->stat & Txd) && len > 0);
		}
	}

	while((r->stat & Done) == 0)
		sleep(&ctlr.r, i2cready, (void*)Done);
	if(r->stat & (Err|Clkt)){
		qunlock(&ctlr.lock);
		r->ctrl = 0;
		return -1;
	}
	r->ctrl = 0;
	qunlock(&ctlr.lock);
	return o;
}


void
i2cbcmlink(void)
{
	static I2Cbus i2c = {"i2c1", 400000, &ctlr, i2cinit, i2cio};
	addi2cbus(&i2c);
}


prev | next