summaryrefslogtreecommitdiff
path: root/localrepo/simple-httpd-20230821.1458.tar
blob: 002188344fd3103e9995e6ff68db134c9effd873 (plain)
ofshex dumpascii
0000 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 00 00 00 00 00 simple-httpd-20230821.1458/.....
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0060 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000755.0000000.0000000.0000
0080 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 33 34 32 36 00 20 35 00 00 00 0000000.00000000000.013426..5...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0120 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 73 69 6d 70 6c simple-httpd-20230821.1458/simpl
0220 65 2d 68 74 74 70 64 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e-httpd.el......................
0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
0280 30 31 30 30 37 34 33 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 36 33 36 37 00 20 30 00 00 00 0100743.00000000000.016367..0...
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0320 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0400 3b 3b 3b 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 2e 65 6c 20 2d 2d 2d 20 70 75 72 65 20 65 6c 69 ;;;.simple-httpd.el.---.pure.eli
0420 73 70 20 48 54 54 50 20 73 65 72 76 65 72 0a 0a 3b 3b 20 54 68 69 73 20 69 73 20 66 72 65 65 20 sp.HTTP.server..;;.This.is.free.
0440 61 6e 64 20 75 6e 65 6e 63 75 6d 62 65 72 65 64 20 73 6f 66 74 77 61 72 65 20 72 65 6c 65 61 73 and.unencumbered.software.releas
0460 65 64 20 69 6e 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2e 0a 0a 3b 3b 20 41 ed.into.the.public.domain...;;.A
0480 75 74 68 6f 72 3a 20 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 20 3c 77 65 6c 6c uthor:.Christopher.Wellons.<well
04a0 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 3e 0a 3b 3b 20 55 52 4c 3a 20 68 74 74 ons@nullprogram.com>.;;.URL:.htt
04c0 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 6f 2f 65 6d 61 63 73 2d 68 74 74 ps://github.com/skeeto/emacs-htt
04e0 70 2d 73 65 72 76 65 72 0a 3b 3b 20 56 65 72 73 69 6f 6e 3a 20 31 2e 35 2e 31 0a 3b 3b 20 50 61 p-server.;;.Version:.1.5.1.;;.Pa
0500 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 3a 20 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 ckage-Requires:.((cl-lib."0.3"))
0520 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 55 73 65 20 60 68 74 74 70 64 ..;;;.Commentary:..;;.Use.`httpd
0540 2d 73 74 61 72 74 27 20 74 6f 20 73 74 61 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 2e -start'.to.start.the.web.server.
0560 20 46 69 6c 65 73 20 61 72 65 20 73 65 72 76 65 64 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 70 64 .Files.are.served.from.;;.`httpd
0580 2d 72 6f 6f 74 27 20 6f 6e 20 70 6f 72 74 20 60 68 74 74 70 64 2d 70 6f 72 74 27 20 75 73 69 6e -root'.on.port.`httpd-port'.usin
05a0 67 20 60 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 27 20 61 74 20 68 6f 73 74 0a 3b 3b 20 60 g.`httpd-ip-family'.at.host.;;.`
05c0 68 74 74 70 64 2d 68 6f 73 74 27 2e 20 57 68 69 6c 65 20 74 68 65 20 72 6f 6f 74 20 63 61 6e 20 httpd-host'..While.the.root.can.
05e0 62 65 20 63 68 61 6e 67 65 64 20 61 74 20 61 6e 79 20 74 69 6d 65 2c 20 74 68 65 20 73 65 72 76 be.changed.at.any.time,.the.serv
0600 65 72 0a 3b 3b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 61 72 74 65 64 20 69 6e 20 6f er.;;.needs.to.be.restarted.in.o
0620 72 64 65 72 20 66 6f 72 20 61 20 70 6f 72 74 20 63 68 61 6e 67 65 20 74 6f 20 74 61 6b 65 20 65 rder.for.a.port.change.to.take.e
0640 66 66 65 63 74 2e 0a 0a 3b 3b 20 45 76 65 72 79 74 68 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d ffect...;;.Everything.is.perform
0660 65 64 20 62 79 20 73 65 72 76 6c 65 74 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 65 72 76 69 6e ed.by.servlets,.including.servin
0680 67 0a 3b 3b 20 66 69 6c 65 73 2e 20 53 65 72 76 6c 65 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 g.;;.files..Servlets.are.enabled
06a0 20 62 79 20 73 65 74 74 69 6e 67 20 60 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 27 20 74 6f 20 .by.setting.`httpd-servlets'.to.
06c0 74 72 75 65 0a 3b 3b 20 28 64 65 66 61 75 6c 74 29 2e 20 53 65 72 76 6c 65 74 73 20 61 72 65 20 true.;;.(default)..Servlets.are.
06e0 66 6f 75 72 2d 70 61 72 61 6d 65 74 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 62 65 four-parameter.functions.that.be
0700 67 69 6e 20 77 69 74 68 0a 3b 3b 20 22 68 74 74 70 64 2f 22 20 77 68 65 72 65 20 74 68 65 20 74 gin.with.;;."httpd/".where.the.t
0720 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 railing.component.specifies.the.
0740 69 6e 69 74 69 61 6c 20 70 61 74 68 20 6f 6e 0a 3b 3b 20 74 68 65 20 73 65 72 76 65 72 2e 20 46 initial.path.on.;;.the.server..F
0760 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 68 74 74 70 64 2f or.example,.the.function.`httpd/
0780 68 65 6c 6c 6f 2d 77 6f 72 6c 64 27 20 77 69 6c 6c 20 62 65 0a 3b 3b 20 63 61 6c 6c 65 64 20 66 hello-world'.will.be.;;.called.f
07a0 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 22 20 61 6e or.the.request."/hello-world".an
07c0 64 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 2f 66 6f 6f 22 2e 0a 0a 3b 3b 20 54 68 65 20 64 65 d."/hello-world/foo"...;;.The.de
07e0 66 61 75 6c 74 20 73 65 72 76 6c 65 74 20 60 68 74 74 70 64 2f 27 20 69 73 20 74 68 65 20 6f 6e fault.servlet.`httpd/'.is.the.on
0800 65 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 e.that.serves.files.from.;;.`htt
0820 70 64 2d 72 6f 6f 74 27 20 61 6e 64 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 74 pd-root'.and.can.be.turned.off.t
0840 68 72 6f 75 67 68 20 72 65 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 20 73 65 74 74 69 6e 67 0a 3b hrough.redefinition.or.setting.;
0860 3b 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 27 20 74 6f 20 6e 69 6c 2e 20 49 74 ;.`httpd-serve-files'.to.nil..It
0880 20 69 73 20 75 73 65 64 20 65 76 65 6e 20 77 68 65 6e 20 60 68 74 74 70 64 2d 73 65 72 76 6c 65 .is.used.even.when.`httpd-servle
08a0 74 73 27 0a 3b 3b 20 69 73 20 6e 69 6c 2e 0a 0a 3b 3b 20 54 68 65 20 66 6f 75 72 20 70 61 72 61 ts'.;;.is.nil...;;.The.four.para
08c0 6d 65 74 65 72 73 20 66 6f 72 20 61 20 73 65 72 76 6c 65 74 20 61 72 65 20 70 72 6f 63 65 73 73 meters.for.a.servlet.are.process
08e0 2c 20 55 52 49 20 70 61 74 68 2c 20 47 45 54 2f 50 4f 53 54 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 ,.URI.path,.GET/POST.;;.argument
0900 73 20 28 61 6c 69 73 74 29 2c 20 61 6e 64 20 74 68 65 20 66 75 6c 6c 20 72 65 71 75 65 73 74 20 s.(alist),.and.the.full.request.
0920 6f 62 6a 65 63 74 20 28 68 65 61 64 65 72 0a 3b 3b 20 61 6c 69 73 74 29 2e 20 54 68 65 73 65 20 object.(header.;;.alist)..These.
0940 61 72 65 20 6f 72 64 65 72 65 64 20 62 79 20 67 65 6e 65 72 61 6c 20 69 6d 70 6f 72 74 61 6e 63 are.ordered.by.general.importanc
0960 65 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 63 61 6e 20 62 65 0a 3b 3b 20 69 67 6e 6f 72 65 64 e.so.that.some.can.be.;;.ignored
0980 2e 20 54 77 6f 20 6d 61 63 72 6f 73 20 61 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65 6c ..Two.macros.are.provided.to.hel
09a0 70 20 77 69 74 68 20 77 72 69 74 69 6e 67 20 73 65 72 76 6c 65 74 73 2e 0a 0a 3b 3b 20 20 2a 20 p.with.writing.servlets...;;..*.
09c0 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 20 2d 2d 20 43 72 65 61 74 65 73 20 61 `with-httpd-buffer'.--.Creates.a
09e0 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 65 72 20 74 68 61 74 20 69 73 0a 3b 3b 20 20 20 20 .temporary.buffer.that.is.;;....
0a00 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72 76 65 64 20 74 6f 20 74 68 65 20 63 6c 69 65 automatically.served.to.the.clie
0a20 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 6f 64 79 2e 0a 3b 3b 20 20 20 nt.at.the.end.of.the.body..;;...
0a40 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 .Additionally,.`standard-output'
0a60 20 69 73 20 73 65 74 20 74 6f 20 74 68 69 73 20 6f 75 74 70 75 74 0a 3b 3b 20 20 20 20 62 75 66 .is.set.to.this.output.;;....buf
0a80 66 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 69 73 20 73 65 72 76 6c 65 74 20 73 fer..For.example,.this.servlet.s
0aa0 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 75 6e 20 68 74 74 70 64 2f ays.hello,..;;.....(defun.httpd/
0ac0 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 28 70 72 6f 63 20 70 61 74 68 20 26 72 65 73 74 20 61 72 67 hello-world.(proc.path.&rest.arg
0ae0 73 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 20 70 s).;;.......(with-httpd-buffer.p
0b00 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 0a 3b 3b 20 20 20 20 20 20 20 20 20 28 69 6e 73 roc."text/plain".;;.........(ins
0b20 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e 64 69 72 65 ert."hello,.".(file-name-nondire
0b40 63 74 6f 72 79 20 70 61 74 68 29 29 29 29 0a 0a 3b 3b 20 54 68 69 73 20 73 65 72 76 6c 65 74 20 ctory.path))))..;;.This.servlet.
0b60 62 65 20 76 69 65 77 65 64 20 61 74 20 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 38 30 be.viewed.at.http://localhost:80
0b80 38 30 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 2f 45 6d 61 63 73 0a 0a 3b 3b 20 2a 20 60 64 65 66 73 80/hello-world/Emacs..;;.*.`defs
0ba0 65 72 76 6c 65 74 27 20 2d 2d 20 53 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 61 62 6f 76 65 20 ervlet'.--.Similar.to.the.above.
0bc0 6d 61 63 72 6f 20 62 75 74 20 74 6f 74 61 6c 6c 79 20 68 69 64 65 73 20 74 68 65 0a 3b 3b 20 20 macro.but.totally.hides.the.;;..
0be0 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 6c 65 74 .process.object.from.the.servlet
0c00 20 69 74 73 65 6c 66 2e 20 54 68 65 20 61 62 6f 76 65 20 73 65 72 76 6c 65 74 20 63 61 6e 20 62 .itself..The.above.servlet.can.b
0c20 65 0a 3b 3b 20 20 20 72 65 2d 77 72 69 74 74 65 6e 20 69 64 65 6e 74 69 63 61 6c 6c 79 20 6c 69 e.;;...re-written.identically.li
0c40 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 65 6c 6c 6f ke.so,..;;.....(defservlet.hello
0c60 2d 77 6f 72 6c 64 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 70 61 74 68 29 0a 3b 3b 20 20 20 20 20 -world.text/plain.(path).;;.....
0c80 20 20 28 69 6e 73 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e ..(insert."hello,.".(file-name-n
0ca0 6f 6e 64 69 72 65 63 74 6f 72 79 20 70 61 74 68 29 29 29 0a 0a 3b 3b 20 4e 6f 74 65 20 74 68 61 ondirectory.path)))..;;.Note.tha
0cc0 74 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 t.`defservlet'.automatically.set
0ce0 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 20 53 65 65 0a 3b 3b 20 62 s.`httpd-current-proc'..See.;;.b
0d00 65 6c 6f 77 2e 0a 0a 3b 3b 20 54 68 65 20 22 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 elow...;;.The."function.paramete
0d20 72 73 22 20 70 61 72 74 20 63 61 6e 20 62 65 20 6c 65 66 74 20 65 6d 70 74 79 20 6f 72 20 63 6f rs".part.can.be.left.empty.or.co
0d40 6e 74 61 69 6e 20 75 70 20 74 6f 0a 3b 3b 20 74 68 72 65 65 20 70 61 72 61 6d 65 74 65 72 73 20 ntain.up.to.;;.three.parameters.
0d60 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 74 68 72 65 65 corresponding.to.the.final.three
0d80 20 73 65 72 76 6c 65 74 0a 3b 3b 20 70 61 72 61 6d 65 74 65 72 73 2e 20 46 6f 72 20 65 78 61 6d .servlet.;;.parameters..For.exam
0da0 70 6c 65 2c 20 61 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 68 6f 77 73 20 2a 73 63 72 61 74 ple,.a.servlet.that.shows.*scrat
0dc0 63 68 2a 20 61 6e 64 20 64 6f 65 73 6e 27 74 0a 3b 3b 20 6e 65 65 64 20 70 61 72 61 6d 65 74 65 ch*.and.doesn't.;;.need.paramete
0de0 72 73 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 20 rs,..;;.....(defservlet.scratch.
0e00 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 3b 3b 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 2d 62 text/plain.().;;.......(insert-b
0e20 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 uffer-substring.(get-buffer-crea
0e40 74 65 20 22 2a 73 63 72 61 74 63 68 2a 22 29 29 29 0a 0a 3b 3b 20 41 20 68 69 67 68 65 72 20 6c te."*scratch*")))..;;.A.higher.l
0e60 65 76 65 6c 20 6d 61 63 72 6f 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 20 77 72 61 70 73 20 74 evel.macro.`defservlet*'.wraps.t
0e80 68 69 73 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 0a 3b 3b 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 his.lower-level.;;.`defservlet'.
0ea0 6d 61 63 72 6f 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 69 6e 67 20 76 61 72 macro,.automatically.binding.var
0ec0 69 61 62 6c 65 73 20 74 6f 20 63 6f 6d 70 6f 6e 65 6e 74 73 0a 3b 3b 20 6f 66 20 74 68 65 20 72 iables.to.components.;;.of.the.r
0ee0 65 71 75 65 73 74 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 69 73 20 62 69 6e 64 73 20 equest..For.example,.this.binds.
0f00 70 61 72 74 73 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 20 70 61 74 68 0a 3b 3b 20 61 6e 64 parts.of.the.request.path.;;.and
0f20 20 6f 6e 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 20 52 65 71 75 65 73 74 20 63 6f .one.query.parameter..Request.co
0f40 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 0a 3b 3b 20 mponents.not.provided.by.the.;;.
0f60 63 6c 69 65 6e 74 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20 6e 69 6c 2e 0a 0a 3b 3b 20 20 20 20 client.are.bound.to.nil...;;....
0f80 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 73 2f 3a 70 61 63 6b 61 67 65 2f .(defservlet*.packages/:package/
0fa0 3a 76 65 72 73 69 6f 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a 3b 3b :version.text/plain.(verbose).;;
0fc0 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25 73 5c 6e 25 73 5c 6e .......(insert.(format."%s\n%s\n
0fe0 22 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 70 72 ".package.version)).;;.......(pr
1000 69 6e 63 20 28 67 65 74 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 63 6b 61 67 65 20 76 65 72 inc.(get-description.package.ver
1020 73 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a 3b 3b sion)).;;.......(when.verbose.;;
1040 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 28 67 .........(insert.(format."%S".(g
1060 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 et-dependencies.package.version)
1080 29 29 29 29 0a 0a 3b 3b 20 49 74 20 77 6f 75 6c 64 20 62 65 20 61 63 63 65 73 73 65 64 20 6c 69 ))))..;;.It.would.be.accessed.li
10a0 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 20 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f ke.so,..;;.....http://example.co
10c0 6d 2f 70 61 63 6b 61 67 65 73 2f 66 6f 6f 62 61 72 2f 31 2e 30 3f 76 65 72 62 6f 73 65 3d 31 0a m/packages/foobar/1.0?verbose=1.
10e0 0a 3b 3b 20 53 6f 6d 65 20 73 75 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 .;;.Some.support.functions.are.a
1100 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 65 72 76 6c 65 74 73 20 66 6f 72 20 6d 6f 72 65 0a 3b vailable.for.servlets.for.more.;
1120 3b 20 63 75 73 74 6f 6d 69 7a 65 64 20 72 65 73 70 6f 6e 73 65 73 2e 0a 0a 3b 3b 20 20 20 2a 20 ;.customized.responses...;;...*.
1140 60 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 27 20 20 20 2d 2d 20 73 65 72 76 65 20 61 20 66 `httpd-send-file'...--.serve.a.f
1160 69 6c 65 20 77 69 74 68 20 70 72 6f 70 65 72 20 63 61 63 68 69 6e 67 0a 3b 3b 20 20 20 2a 20 60 ile.with.proper.caching.;;...*.`
1180 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 27 20 20 20 20 2d 2d 20 72 65 64 69 72 65 63 74 20 74 httpd-redirect'....--.redirect.t
11a0 68 65 20 62 72 6f 77 73 65 72 20 74 6f 20 61 6e 6f 74 68 65 72 20 75 72 6c 0a 3b 3b 20 20 20 2a he.browser.to.another.url.;;...*
11c0 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 27 20 2d 2d 20 73 65 6e 64 20 63 75 73 .`httpd-send-header'.--.send.cus
11e0 74 6f 6d 20 68 65 61 64 65 72 73 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 65 72 72 6f 72 27 tom.headers.;;...*.`httpd-error'
1200 20 20 20 20 20 20 20 2d 2d 20 72 65 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 .......--.report.an.error.to.the
1220 20 63 6c 69 65 6e 74 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 6c 6f 67 27 20 20 20 20 20 20 .client.;;...*.`httpd-log'......
1240 20 20 20 2d 2d 20 6c 6f 67 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 2a 68 74 74 70 64 2a 0a 0a ...--.log.an.object.to.*httpd*..
1260 3b 3b 20 53 6f 6d 65 20 6f 66 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 71 75 69 ;;.Some.of.these.functions.requi
1280 72 65 20 61 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 6e 27 74 re.a.process.object,.which.isn't
12a0 0a 3b 3b 20 70 61 73 73 65 64 20 74 6f 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 73 65 72 76 6c .;;.passed.to.`defservlet'.servl
12c0 65 74 73 2e 20 55 73 65 20 74 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65 ets..Use.t.in.place.of.the.proce
12e0 73 73 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 73 65 20 60 68 74 74 70 64 2d 63 75 72 ss.;;.argument.to.use.`httpd-cur
1300 72 65 6e 74 2d 70 72 6f 63 27 20 28 6c 69 6b 65 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 rent-proc'.(like.`standard-outpu
1320 74 27 29 2e 0a 0a 3b 3b 20 49 66 20 79 6f 75 20 6a 75 73 74 20 6e 65 65 64 20 74 6f 20 73 65 72 t')...;;.If.you.just.need.to.ser
1340 76 65 20 73 74 61 74 69 63 20 66 72 6f 6d 20 73 6f 6d 65 20 6c 6f 63 61 74 69 6f 6e 20 75 6e 64 ve.static.from.some.location.und
1360 65 72 20 73 6f 6d 65 0a 3b 3b 20 72 6f 75 74 65 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 2c 20 er.some.;;.route.on.the.server,.
1380 75 73 65 20 60 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 27 2e 20 49 74 use.`httpd-def-file-servlet'..It
13a0 20 65 78 70 61 6e 64 73 20 69 6e 74 6f 0a 3b 3b 20 61 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 .expands.into.;;.a.`defservlet'.
13c0 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 2e 0a 0a 3b 3b 3b 20 48 69 73 74 6f 72 79 3a that.serves.files...;;;.History:
13e0 0a 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 35 2e 31 3a 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 ..;;.Version.1.5.1:.improvements
1400 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 27 0a 3b 3b .;;...*.Add.`httpd-running-p'.;;
1420 20 20 20 2a 20 50 72 6f 70 65 72 6c 79 20 68 61 6e 64 6c 65 20 22 43 6f 6e 6e 65 63 74 69 6f 6e ...*.Properly.handle."Connection
1440 3a 20 63 6c 6f 73 65 22 20 61 6e 64 20 48 54 54 50 2f 31 2e 30 0a 3b 3b 20 56 65 72 73 69 6f 6e :.close".and.HTTP/1.0.;;.Version
1460 20 31 2e 35 2e 30 3a 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 0a 3b 3b 20 20 20 2a 20 44 72 61 73 .1.5.0:.improvements.;;...*.Dras
1480 74 69 63 61 6c 6c 79 20 69 6d 70 72 6f 76 65 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66 6f 72 tically.improved.performance.for
14a0 20 6c 61 72 67 65 20 72 65 71 75 65 73 74 73 0a 3b 3b 20 20 20 2a 20 4d 6f 72 65 20 48 54 54 50 .large.requests.;;...*.More.HTTP
14c0 20 73 74 61 74 75 73 20 63 6f 64 65 73 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 36 3a 20 .status.codes.;;.Version.1.4.6:.
14e0 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 41 64 64 65 64 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 fixes.;;...*.Added.httpd-serve-d
1500 69 72 65 63 74 6f 72 79 0a 3b 3b 20 20 20 2a 20 46 69 78 20 73 6f 6d 65 20 65 6e 63 6f 64 69 6e irectory.;;...*.Fix.some.encodin
1520 67 20 69 73 73 75 65 73 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 35 3a 20 66 69 78 65 73 g.issues.;;.Version.1.4.5:.fixes
1540 0a 3b 3b 20 20 20 2a 20 55 70 64 61 74 65 20 74 6f 20 63 6c 2d 6c 69 62 20 66 72 6f 6d 20 63 6c .;;...*.Update.to.cl-lib.from.cl
1560 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 34 3a 20 66 65 61 74 75 72 65 73 0a 3b 3b 20 20 .;;.Version.1.4.4:.features.;;..
1580 20 2a 20 43 6f 6d 6d 6f 6e 20 4c 69 73 70 20 26 6b 65 79 2d 6c 69 6b 65 20 64 65 66 73 65 72 76 .*.Common.Lisp.&key-like.defserv
15a0 6c 65 74 2a 20 61 72 67 75 6d 65 6e 74 20 73 75 70 70 6f 72 74 0a 3b 3b 20 20 20 2a 20 46 69 78 let*.argument.support.;;...*.Fix
15c0 20 75 70 20 73 6f 6d 65 20 64 65 66 73 65 72 76 6c 65 74 2a 20 75 73 61 67 65 20 77 61 72 6e 69 .up.some.defservlet*.usage.warni
15e0 6e 67 73 2e 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 33 3a 20 66 65 61 74 75 72 65 73 0a ngs..;;.Version.1.4.3:.features.
1600 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 ;;...*.Add.`httpd-discard-buffer
1620 27 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 '.;;...*.Add.`httpd-def-file-ser
1640 76 6c 65 74 27 0a 3b 3b 20 20 20 2a 20 42 65 20 6d 6f 72 65 20 63 61 72 65 66 75 6c 20 61 62 6f vlet'.;;...*.Be.more.careful.abo
1660 75 74 20 6e 6f 74 20 73 65 6e 64 69 6e 67 20 65 78 74 72 61 20 68 65 61 64 65 72 73 0a 3b 3b 20 ut.not.sending.extra.headers.;;.
1680 56 65 72 73 69 6f 6e 20 31 2e 34 2e 32 3a 20 66 65 61 74 75 72 65 73 2c 20 66 69 78 65 73 0a 3b Version.1.4.2:.features,.fixes.;
16a0 3b 20 20 20 2a 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 20 6d 61 63 72 6f 0a 3b 3b 20 56 65 72 ;...*.`defservlet*'.macro.;;.Ver
16c0 73 69 6f 6e 20 31 2e 34 2e 31 3a 20 73 6d 61 6c 6c 20 62 75 67 20 66 69 78 65 73 2c 20 6f 6e 65 sion.1.4.1:.small.bug.fixes,.one
16e0 20 66 65 61 74 75 72 65 0a 3b 3b 20 20 20 2a 20 41 6c 6c 20 6d 69 6d 65 2d 74 79 70 65 20 70 61 .feature.;;...*.All.mime-type.pa
1700 72 61 6d 65 74 65 72 73 20 6e 6f 77 20 61 63 63 65 70 74 20 73 74 72 69 6e 67 20 64 65 73 69 67 rameters.now.accept.string.desig
1720 6e 61 74 6f 72 73 0a 3b 3b 20 20 20 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 75 70 64 61 nators.;;...*.Documentation.upda
1740 74 65 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 30 3a 20 66 65 61 74 75 72 65 73 2c 20 41 te.;;.Version.1.4.0:.features,.A
1760 50 49 20 63 68 61 6e 67 65 2c 20 61 6e 64 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 52 65 6d 6f PI.change,.and.fixes.;;...*.Remo
1780 76 65 64 20 68 74 74 70 64 2d 73 65 6e 64 2d 62 75 66 66 65 72 3b 20 68 74 74 70 64 2d 73 65 6e ved.httpd-send-buffer;.httpd-sen
17a0 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20 69 6d 70 6c 69 63 69 74 6c d-header.now.does.this.implicitl
17c0 79 0a 3b 3b 20 20 20 2a 20 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 61 y.;;...*.httpd-send-header.now.a
17e0 63 63 65 70 74 73 20 6b 65 79 77 6f 72 64 73 20 69 6e 73 74 65 61 64 0a 3b 3b 20 20 20 2a 20 46 ccepts.keywords.instead.;;...*.F
1800 69 78 20 68 74 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 69 6e 20 57 69 6e 64 6f 77 73 0a 3b ix.httpd-clean-path.in.Windows.;
1820 3b 20 20 20 2a 20 46 69 78 20 61 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 62 75 67 0a 3b ;...*.Fix.a.content-length.bug.;
1840 3b 20 20 20 2a 20 64 65 66 73 65 72 76 6c 65 74 20 66 6f 6e 74 69 66 69 63 61 74 69 6f 6e 0a 3b ;...*.defservlet.fontification.;
1860 3b 20 56 65 72 73 69 6f 6e 20 31 2e 33 2e 31 3a 20 66 65 61 74 75 72 65 73 20 61 6e 64 20 66 69 ;.Version.1.3.1:.features.and.fi
1880 78 65 73 0a 3b 3b 20 20 20 2a 20 53 65 74 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 xes.;;...*.Set.`standard-output'
18a0 20 69 6e 20 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 0a 3b 3b 20 56 65 72 73 69 .in.`with-httpd-buffer'.;;.Versi
18c0 6f 6e 20 31 2e 33 2e 30 3a 20 73 65 63 75 72 69 74 79 20 66 69 78 0a 3b 3b 20 20 20 2a 20 46 69 on.1.3.0:.security.fix.;;...*.Fi
18e0 78 20 70 61 74 68 20 65 78 70 61 6e 73 69 6f 6e 20 73 65 63 75 72 69 74 79 20 69 73 73 75 65 0a x.path.expansion.security.issue.
1900 3b 3b 20 20 20 2a 20 46 69 78 20 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 20 28 64 6f 6e 27 74 20 ;;...*.Fix.coding.system.(don't.
1920 64 65 66 61 75 6c 74 29 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 32 2e 34 3a 20 66 69 78 65 73 default).;;.Version.1.2.4:.fixes
1940 0a 3b 3b 20 20 20 2a 20 48 61 6e 64 6c 65 20 6c 61 72 67 65 20 50 4f 53 54 73 0a 3b 3b 20 20 20 .;;...*.Handle.large.POSTs.;;...
1960 2a 20 46 69 78 20 64 61 74 65 20 73 74 72 69 6e 67 73 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a 28 *.Fix.date.strings..;;;.Code:..(
1980 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29 0a 28 72 65 71 75 69 72 65 20 27 70 70 29 0a 28 require.'cl-lib).(require.'pp).(
19a0 72 65 71 75 69 72 65 20 27 75 72 6c 2d 75 74 69 6c 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 73 69 require.'url-util)..(defgroup.si
19c0 6d 70 6c 65 2d 68 74 74 70 64 20 6e 69 6c 0a 20 20 22 41 20 73 69 6d 70 6c 65 20 77 65 62 20 73 mple-httpd.nil..."A.simple.web.s
19e0 65 72 76 65 72 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 63 6f 6d 6d 29 0a 0a 28 64 65 66 63 75 73 erver."...:group.'comm)..(defcus
1a00 74 6f 6d 20 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 20 27 69 70 76 34 0a 20 20 22 57 65 62 tom.httpd-ip-family.'ipv4..."Web
1a20 20 73 65 72 76 65 72 20 49 50 20 66 61 6d 69 6c 79 20 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d .server.IP.family.used.by.`make-
1a40 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d network-process'."...:group.'sim
1a60 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 73 79 6d 62 6f 6c 29 0a 0a 28 64 65 66 ple-httpd...:type.'symbol)..(def
1a80 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 68 6f 73 74 20 6e 69 6c 0a 20 20 22 57 65 62 20 73 65 72 custom.httpd-host.nil..."Web.ser
1aa0 76 65 72 20 68 6f 73 74 20 6e 61 6d 65 20 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d 6e 65 74 77 ver.host.name.used.by.`make-netw
1ac0 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d ork-process'."...:group.'simple-
1ae0 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73 74 20 6e 69 httpd...:type.'(choice.(const.ni
1b00 6c 29 20 28 63 6f 6e 73 74 20 6c 6f 63 61 6c 29 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 63 l).(const.local).string))..(defc
1b20 75 73 74 6f 6d 20 68 74 74 70 64 2d 70 6f 72 74 20 38 30 38 30 0a 20 20 22 57 65 62 20 73 65 72 ustom.httpd-port.8080..."Web.ser
1b40 76 65 72 20 70 6f 72 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 ver.port."...:group.'simple-http
1b60 64 0a 20 20 3a 74 79 70 65 20 27 69 6e 74 65 67 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 d...:type.'integer)..(defcustom.
1b80 68 74 74 70 64 2d 72 6f 6f 74 20 22 7e 2f 70 75 62 6c 69 63 5f 68 74 6d 6c 22 0a 20 20 22 57 65 httpd-root."~/public_html"..."We
1ba0 62 20 73 65 72 76 65 72 20 66 69 6c 65 20 72 6f 6f 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 b.server.file.root."...:group.'s
1bc0 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 64 69 72 65 63 74 6f 72 79 29 0a imple-httpd...:type.'directory).
1be0 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 74 0a .(defcustom.httpd-serve-files.t.
1c00 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 69 6e 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 60 68 74 .."Enable.serving.files.from.`ht
1c20 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 tpd-root'."...:group.'simple-htt
1c40 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d pd...:type.'boolean)..(defcustom
1c60 20 68 74 74 70 64 2d 6c 69 73 74 69 6e 67 73 20 74 0a 20 20 22 49 66 20 74 72 75 65 2c 20 73 65 .httpd-listings.t..."If.true,.se
1c80 72 76 65 20 64 69 72 65 63 74 6f 72 79 20 6c 69 73 74 69 6e 67 73 2e 22 0a 20 20 3a 67 72 6f 75 rve.directory.listings."...:grou
1ca0 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e p.'simple-httpd...:type.'boolean
1cc0 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 20 74 0a 20 )..(defcustom.httpd-servlets.t..
1ce0 20 22 45 6e 61 62 6c 65 20 73 65 72 76 6c 65 74 73 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 ."Enable.servlets."...:group.'si
1d00 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 mple-httpd...:type.'boolean)..(d
1d20 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b 74 72 61 63 65 2d 77 68 efcustom.httpd-show-backtrace-wh
1d40 65 6e 2d 65 72 72 6f 72 20 6e 69 6c 0a 20 20 22 49 66 20 74 72 75 65 2c 20 73 68 6f 77 20 62 61 en-error.nil..."If.true,.show.ba
1d60 63 6b 74 72 61 63 65 20 6f 6e 20 65 72 72 6f 72 20 70 61 67 65 2e 22 0a 20 20 3a 67 72 6f 75 70 cktrace.on.error.page."...:group
1d80 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 .'simple-httpd...:type.'boolean)
1da0 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 20 6e 69 ..(defcustom.httpd-start-hook.ni
1dc0 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 72 75 6e 20 77 68 65 6e 20 74 68 65 20 73 65 72 76 65 72 l..."Hook.to.run.when.the.server
1de0 20 68 61 73 20 73 74 61 72 74 65 64 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d .has.started."...:group.'simple-
1e00 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d httpd...:type.'hook)..(defcustom
1e20 20 68 74 74 70 64 2d 73 74 6f 70 2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 .httpd-stop-hook.nil..."Hook.to.
1e40 72 75 6e 20 77 68 65 6e 20 74 68 65 20 73 65 72 76 65 72 20 68 61 73 20 73 74 6f 70 70 65 64 2e run.when.the.server.has.stopped.
1e60 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 "...:group.'simple-httpd...:type
1e80 20 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 .'hook)..(defvar.httpd-server-na
1ea0 6d 65 20 28 66 6f 72 6d 61 74 20 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 28 45 6d 61 63 73 20 me.(format."simple-httpd.(Emacs.
1ec0 25 73 29 22 20 65 6d 61 63 73 2d 76 65 72 73 69 6f 6e 29 0a 20 20 22 53 74 72 69 6e 67 20 74 6f %s)".emacs-version)..."String.to
1ee0 20 75 73 65 20 69 6e 20 74 68 65 20 53 65 72 76 65 72 20 68 65 61 64 65 72 2e 22 29 0a 0a 28 64 .use.in.the.Server.header.")..(d
1f00 65 66 76 61 72 20 68 74 74 70 64 2d 6d 69 6d 65 2d 74 79 70 65 73 0a 20 20 27 28 28 22 70 6e 67 efvar.httpd-mime-types...'(("png
1f20 22 20 20 2e 20 22 69 6d 61 67 65 2f 70 6e 67 22 29 0a 20 20 20 20 28 22 67 69 66 22 20 20 2e 20 "...."image/png").....("gif"....
1f40 22 69 6d 61 67 65 2f 67 69 66 22 29 0a 20 20 20 20 28 22 6a 70 67 22 20 20 2e 20 22 69 6d 61 67 "image/gif").....("jpg"...."imag
1f60 65 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 22 6a 70 65 67 22 20 2e 20 22 69 6d 61 67 65 2f 6a 70 e/jpeg").....("jpeg"..."image/jp
1f80 65 67 22 29 0a 20 20 20 20 28 22 74 69 66 22 20 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 22 29 0a eg").....("tif"...."image/tif").
1fa0 20 20 20 20 28 22 74 69 66 66 22 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 66 22 29 0a 20 20 20 20 ....("tiff"..."image/tiff").....
1fc0 28 22 69 63 6f 22 20 20 2e 20 22 69 6d 61 67 65 2f 78 2d 69 63 6f 6e 22 29 0a 20 20 20 20 28 22 ("ico"...."image/x-icon").....("
1fe0 73 76 67 22 20 20 2e 20 22 69 6d 61 67 65 2f 73 76 67 2b 78 6d 6c 22 29 0a 20 20 20 20 28 22 63 svg"...."image/svg+xml").....("c
2000 73 73 22 20 20 2e 20 22 74 65 78 74 2f 63 73 73 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 ss"...."text/css;.charset=utf-8"
2020 29 0a 20 20 20 20 28 22 68 74 6d 22 20 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 ).....("htm"...."text/html;.char
2040 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 68 74 6d 6c 22 20 2e 20 22 74 65 78 74 2f set=utf-8").....("html"..."text/
2060 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 78 6d 6c 22 html;.charset=utf-8").....("xml"
2080 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 ...."text/xml;.charset=utf-8")..
20a0 20 20 20 28 22 72 73 73 22 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 3d ...("rss"...."text/xml;.charset=
20c0 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 61 74 6f 6d 22 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b utf-8").....("atom"..."text/xml;
20e0 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 74 78 74 22 20 20 2e 20 22 .charset=utf-8").....("txt"...."
2100 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 text/plain;.charset=utf-8").....
2120 28 22 65 6c 22 20 20 20 2e 20 22 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 ("el"....."text/plain;.charset=u
2140 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6a 73 22 20 20 20 2e 20 22 74 65 78 74 2f 6a 61 76 61 73 tf-8").....("js"....."text/javas
2160 63 72 69 70 74 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6d 64 22 cript;.charset=utf-8").....("md"
2180 20 20 20 2e 20 22 74 65 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 3b 20 63 68 61 72 73 65 74 3d 75 ....."text/x-markdown;.charset=u
21a0 74 66 2d 38 22 29 0a 20 20 20 20 28 22 67 7a 22 20 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f tf-8").....("gz"....."applicatio
21c0 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d 22 29 0a 20 20 20 20 28 22 70 73 22 20 20 20 2e 20 22 n/octet-stream").....("ps"....."
21e0 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f 73 74 73 63 72 69 70 74 22 29 0a 20 20 20 20 28 22 65 application/postscript").....("e
2200 70 73 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f 73 74 73 63 72 69 70 74 22 29 ps"...."application/postscript")
2220 0a 20 20 20 20 28 22 70 64 66 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 64 66 22 .....("pdf"...."application/pdf"
2240 29 0a 20 20 20 20 28 22 74 61 72 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 ).....("tar"...."application/x-t
2260 61 72 22 29 0a 20 20 20 20 28 22 7a 69 70 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f ar").....("zip"...."application/
2280 7a 69 70 22 29 0a 20 20 20 20 28 22 77 61 73 6d 22 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e zip").....("wasm"..."application
22a0 2f 77 61 73 6d 22 29 0a 20 20 20 20 28 22 6d 70 33 22 20 20 2e 20 22 61 75 64 69 6f 2f 6d 70 65 /wasm").....("mp3"...."audio/mpe
22c0 67 22 29 0a 20 20 20 20 28 22 77 61 76 22 20 20 2e 20 22 61 75 64 69 6f 2f 78 2d 77 61 76 22 29 g").....("wav"...."audio/x-wav")
22e0 0a 20 20 20 20 28 22 66 6c 61 63 22 20 2e 20 22 61 75 64 69 6f 2f 66 6c 61 63 22 29 0a 20 20 20 .....("flac"..."audio/flac")....
2300 20 28 22 73 70 78 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 .("spx"...."audio/ogg").....("og
2320 61 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 67 22 20 20 2e a"...."audio/ogg").....("ogg"...
2340 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 76 22 20 20 2e 20 22 76 69 64 ."audio/ogg").....("ogv"...."vid
2360 65 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6d 70 34 22 20 20 2e 20 22 76 69 64 65 6f 2f 6d 70 eo/ogg").....("mp4"...."video/mp
2380 34 22 29 0a 20 20 20 20 28 22 6d 6b 76 22 20 20 2e 20 22 76 69 64 65 6f 2f 78 2d 6d 61 74 72 6f 4").....("mkv"...."video/x-matro
23a0 73 6b 61 22 29 0a 20 20 20 20 28 22 77 65 62 6d 22 20 2e 20 22 76 69 64 65 6f 2f 77 65 62 6d 22 ska").....("webm"..."video/webm"
23c0 29 29 0a 20 20 22 4d 49 4d 45 20 74 79 70 65 73 20 66 6f 72 20 68 65 61 64 65 72 73 2e 22 29 0a ))..."MIME.types.for.headers.").
23e0 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 69 6e 64 65 78 65 73 0a 20 20 27 28 22 69 6e 64 65 .(defvar.httpd-indexes...'("inde
2400 78 2e 68 74 6d 6c 22 0a 20 20 20 20 22 69 6e 64 65 78 2e 68 74 6d 22 0a 20 20 20 20 22 69 6e 64 x.html"....."index.htm"....."ind
2420 65 78 2e 78 6d 6c 22 29 0a 20 20 22 46 69 6c 65 20 73 65 72 76 65 64 20 62 79 20 64 65 66 61 75 ex.xml")..."File.served.by.defau
2440 6c 74 20 77 68 65 6e 20 61 63 63 65 73 73 69 6e 67 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 29 lt.when.accessing.a.directory.")
2460 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 0a 20 20 27 ..(defvar.httpd-status-codes...'
2480 28 28 31 30 30 20 2e 20 22 43 6f 6e 74 69 6e 75 65 22 29 0a 20 20 20 20 28 31 30 31 20 2e 20 22 ((100..."Continue").....(101..."
24a0 53 77 69 74 63 68 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 22 29 0a 20 20 20 20 28 31 30 32 20 2e Switching.Protocols").....(102..
24c0 20 22 50 72 6f 63 65 73 73 69 6e 67 22 29 0a 20 20 20 20 28 32 30 30 20 2e 20 22 4f 4b 22 29 0a ."Processing").....(200..."OK").
24e0 20 20 20 20 28 32 30 31 20 2e 20 22 43 72 65 61 74 65 64 22 29 0a 20 20 20 20 28 32 30 32 20 2e ....(201..."Created").....(202..
2500 20 22 41 63 63 65 70 74 65 64 22 29 0a 20 20 20 20 28 32 30 33 20 2e 20 22 4e 6f 6e 2d 61 75 74 ."Accepted").....(203..."Non-aut
2520 68 6f 72 69 74 61 74 69 76 65 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 0a 20 20 20 20 28 32 30 horitative.Information").....(20
2540 34 20 2e 20 22 4e 6f 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 35 20 2e 20 22 52 65 4..."No.Content").....(205..."Re
2560 73 65 74 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 36 20 2e 20 22 50 61 72 74 69 61 set.Content").....(206..."Partia
2580 6c 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 37 20 2e 20 22 4d 75 6c 74 69 2d 53 74 l.Content").....(207..."Multi-St
25a0 61 74 75 73 22 29 0a 20 20 20 20 28 32 30 38 20 2e 20 22 41 6c 72 65 61 64 79 20 52 65 70 6f 72 atus").....(208..."Already.Repor
25c0 74 65 64 22 29 0a 20 20 20 20 28 32 32 36 20 2e 20 22 49 4d 20 55 73 65 64 22 29 0a 20 20 20 20 ted").....(226..."IM.Used").....
25e0 28 33 30 30 20 2e 20 22 4d 75 6c 74 69 70 6c 65 20 43 68 6f 69 63 65 73 22 29 0a 20 20 20 20 28 (300..."Multiple.Choices").....(
2600 33 30 31 20 2e 20 22 4d 6f 76 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 22 29 0a 20 20 20 20 28 301..."Moved.Permanently").....(
2620 33 30 32 20 2e 20 22 46 6f 75 6e 64 22 29 0a 20 20 20 20 28 33 30 33 20 2e 20 22 53 65 65 20 4f 302..."Found").....(303..."See.O
2640 74 68 65 72 22 29 0a 20 20 20 20 28 33 30 34 20 2e 20 22 4e 6f 74 20 4d 6f 64 69 66 69 65 64 22 ther").....(304..."Not.Modified"
2660 29 0a 20 20 20 20 28 33 30 35 20 2e 20 22 55 73 65 20 50 72 6f 78 79 22 29 0a 20 20 20 20 28 33 ).....(305..."Use.Proxy").....(3
2680 30 37 20 2e 20 22 54 65 6d 70 6f 72 61 72 79 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 28 07..."Temporary.Redirect").....(
26a0 33 30 38 20 2e 20 22 50 65 72 6d 61 6e 65 6e 74 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 308..."Permanent.Redirect").....
26c0 28 34 30 30 20 2e 20 22 42 61 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 30 31 20 2e (400..."Bad.Request").....(401..
26e0 20 22 55 6e 61 75 74 68 6f 72 69 7a 65 64 22 29 0a 20 20 20 20 28 34 30 32 20 2e 20 22 50 61 79 ."Unauthorized").....(402..."Pay
2700 6d 65 6e 74 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 30 33 20 2e 20 22 46 6f 72 62 ment.Required").....(403..."Forb
2720 69 64 64 65 6e 22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 4e 6f 74 20 46 6f 75 6e 64 22 29 0a idden").....(404..."Not.Found").
2740 20 20 20 20 28 34 30 35 20 2e 20 22 4d 65 74 68 6f 64 20 4e 6f 74 20 41 6c 6c 6f 77 65 64 22 29 ....(405..."Method.Not.Allowed")
2760 0a 20 20 20 20 28 34 30 36 20 2e 20 22 4e 6f 74 20 41 63 63 65 70 74 61 62 6c 65 22 29 0a 20 20 .....(406..."Not.Acceptable")...
2780 20 20 28 34 30 37 20 2e 20 22 50 72 6f 78 79 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 52 ..(407..."Proxy.Authentication.R
27a0 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 30 38 20 2e 20 22 52 65 71 75 65 73 74 20 54 69 equired").....(408..."Request.Ti
27c0 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 34 30 39 20 2e 20 22 43 6f 6e 66 6c 69 63 74 22 29 0a 20 meout").....(409..."Conflict")..
27e0 20 20 20 28 34 31 30 20 2e 20 22 47 6f 6e 65 22 29 0a 20 20 20 20 28 34 31 31 20 2e 20 22 4c 65 ...(410..."Gone").....(411..."Le
2800 6e 67 74 68 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 31 32 20 2e 20 22 50 72 65 63 ngth.Required").....(412..."Prec
2820 6f 6e 64 69 74 69 6f 6e 20 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 34 31 33 20 2e 20 22 50 61 ondition.Failed").....(413..."Pa
2840 79 6c 6f 61 64 20 54 6f 6f 20 4c 61 72 67 65 22 29 0a 20 20 20 20 28 34 31 34 20 2e 20 22 52 65 yload.Too.Large").....(414..."Re
2860 71 75 65 73 74 2d 55 52 49 20 54 6f 6f 20 4c 6f 6e 67 22 29 0a 20 20 20 20 28 34 31 35 20 2e 20 quest-URI.Too.Long").....(415...
2880 22 55 6e 73 75 70 70 6f 72 74 65 64 20 4d 65 64 69 61 20 54 79 70 65 22 29 0a 20 20 20 20 28 34 "Unsupported.Media.Type").....(4
28a0 31 36 20 2e 20 22 52 65 71 75 65 73 74 65 64 20 52 61 6e 67 65 20 4e 6f 74 20 53 61 74 69 73 66 16..."Requested.Range.Not.Satisf
28c0 69 61 62 6c 65 22 29 0a 20 20 20 20 28 34 31 37 20 2e 20 22 45 78 70 65 63 74 61 74 69 6f 6e 20 iable").....(417..."Expectation.
28e0 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 34 31 38 20 2e 20 22 49 27 6d 20 61 20 74 65 61 70 6f Failed").....(418..."I'm.a.teapo
2900 74 22 29 0a 20 20 20 20 28 34 32 31 20 2e 20 22 4d 69 73 64 69 72 65 63 74 65 64 20 52 65 71 75 t").....(421..."Misdirected.Requ
2920 65 73 74 22 29 0a 20 20 20 20 28 34 32 32 20 2e 20 22 55 6e 70 72 6f 63 65 73 73 61 62 6c 65 20 est").....(422..."Unprocessable.
2940 45 6e 74 69 74 79 22 29 0a 20 20 20 20 28 34 32 33 20 2e 20 22 4c 6f 63 6b 65 64 22 29 0a 20 20 Entity").....(423..."Locked")...
2960 20 20 28 34 32 34 20 2e 20 22 46 61 69 6c 65 64 20 44 65 70 65 6e 64 65 6e 63 79 22 29 0a 20 20 ..(424..."Failed.Dependency")...
2980 20 20 28 34 32 36 20 2e 20 22 55 70 67 72 61 64 65 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 ..(426..."Upgrade.Required")....
29a0 20 28 34 32 38 20 2e 20 22 50 72 65 63 6f 6e 64 69 74 69 6f 6e 20 52 65 71 75 69 72 65 64 22 29 .(428..."Precondition.Required")
29c0 0a 20 20 20 20 28 34 32 39 20 2e 20 22 54 6f 6f 20 4d 61 6e 79 20 52 65 71 75 65 73 74 73 22 29 .....(429..."Too.Many.Requests")
29e0 0a 20 20 20 20 28 34 33 31 20 2e 20 22 52 65 71 75 65 73 74 20 48 65 61 64 65 72 20 46 69 65 6c .....(431..."Request.Header.Fiel
2a00 64 73 20 54 6f 6f 20 4c 61 72 67 65 22 29 0a 20 20 20 20 28 34 34 34 20 2e 20 22 43 6f 6e 6e 65 ds.Too.Large").....(444..."Conne
2a20 63 74 69 6f 6e 20 43 6c 6f 73 65 64 20 57 69 74 68 6f 75 74 20 52 65 73 70 6f 6e 73 65 22 29 0a ction.Closed.Without.Response").
2a40 20 20 20 20 28 34 35 31 20 2e 20 22 55 6e 61 76 61 69 6c 61 62 6c 65 20 46 6f 72 20 4c 65 67 61 ....(451..."Unavailable.For.Lega
2a60 6c 20 52 65 61 73 6f 6e 73 22 29 0a 20 20 20 20 28 34 39 39 20 2e 20 22 43 6c 69 65 6e 74 20 43 l.Reasons").....(499..."Client.C
2a80 6c 6f 73 65 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 49 6e 74 65 losed.Request").....(500..."Inte
2aa0 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 72 6f 72 22 29 0a 20 20 20 20 28 35 30 31 20 2e 20 22 rnal.Server.Error").....(501..."
2ac0 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 64 22 29 0a 20 20 20 20 28 35 30 32 20 2e 20 22 42 61 Not.Implemented").....(502..."Ba
2ae0 64 20 47 61 74 65 77 61 79 22 29 0a 20 20 20 20 28 35 30 33 20 2e 20 22 53 65 72 76 69 63 65 20 d.Gateway").....(503..."Service.
2b00 55 6e 61 76 61 69 6c 61 62 6c 65 22 29 0a 20 20 20 20 28 35 30 34 20 2e 20 22 47 61 74 65 77 61 Unavailable").....(504..."Gatewa
2b20 79 20 54 69 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 35 30 35 20 2e 20 22 48 54 54 50 20 56 65 72 y.Timeout").....(505..."HTTP.Ver
2b40 73 69 6f 6e 20 4e 6f 74 20 53 75 70 70 6f 72 74 65 64 22 29 0a 20 20 20 20 28 35 30 36 20 2e 20 sion.Not.Supported").....(506...
2b60 22 56 61 72 69 61 6e 74 20 41 6c 73 6f 20 4e 65 67 6f 74 69 61 74 65 73 22 29 0a 20 20 20 20 28 "Variant.Also.Negotiates").....(
2b80 35 30 37 20 2e 20 22 49 6e 73 75 66 66 69 63 69 65 6e 74 20 53 74 6f 72 61 67 65 22 29 0a 20 20 507..."Insufficient.Storage")...
2ba0 20 20 28 35 30 38 20 2e 20 22 4c 6f 6f 70 20 44 65 74 65 63 74 65 64 22 29 0a 20 20 20 20 28 35 ..(508..."Loop.Detected").....(5
2bc0 31 30 20 2e 20 22 4e 6f 74 20 45 78 74 65 6e 64 65 64 22 29 0a 20 20 20 20 28 35 31 31 20 2e 20 10..."Not.Extended").....(511...
2be0 22 4e 65 74 77 6f 72 6b 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 52 65 71 75 69 72 65 64 "Network.Authentication.Required
2c00 22 29 0a 20 20 20 20 28 35 39 39 20 2e 20 22 4e 65 74 77 6f 72 6b 20 43 6f 6e 6e 65 63 74 20 54 ").....(599..."Network.Connect.T
2c20 69 6d 65 6f 75 74 20 45 72 72 6f 72 22 29 29 0a 20 20 22 48 54 54 50 20 73 74 61 74 75 73 20 63 imeout.Error"))..."HTTP.status.c
2c40 6f 64 65 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 68 74 6d 6c 0a 20 20 27 28 odes.")..(defvar.httpd-html...'(
2c60 28 34 30 33 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 3e 3c 68 (403..."<!DOCTYPE.html>.<html><h
2c80 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 33 20 46 6f 72 62 69 64 64 65 6e 3c 2f 74 69 74 6c 65 ead>.<title>403.Forbidden</title
2ca0 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 3e 46 6f 72 62 69 64 64 65 6e 3c 2f 68 >.</head><body>.<h1>Forbidden</h
2cc0 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74 65 64 20 55 52 4c 20 69 73 20 66 6f 72 62 69 1>.<p>The.requested.URL.is.forbi
2ce0 64 64 65 6e 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c dden.</p>.<pre>%s</pre>.</body><
2d00 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 /html>").....(404..."<!DOCTYPE.h
2d20 74 6d 6c 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 34 20 4e 6f 74 tml>.<html><head>.<title>404.Not
2d40 20 46 6f 75 6e 64 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 .Found</title>.</head><body>.<h1
2d60 3e 4e 6f 74 20 46 6f 75 6e 64 3c 2f 68 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74 65 64 >Not.Found</h1>.<p>The.requested
2d80 20 55 52 4c 20 77 61 73 20 6e 6f 74 20 66 6f 75 6e 64 20 6f 6e 20 74 68 69 73 20 73 65 72 76 65 .URL.was.not.found.on.this.serve
2da0 72 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f 68 74 r.</p>.<pre>%s</pre>.</body></ht
2dc0 6d 6c 3e 22 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c ml>").....(500..."<!DOCTYPE.html
2de0 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 35 30 30 20 49 6e 74 65 72 6e >.<html><head>.<title>500.Intern
2e00 61 6c 20 45 72 72 6f 72 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c al.Error</title>.</head><body>.<
2e20 68 31 3e 35 30 30 20 49 6e 74 65 72 6e 61 6c 20 45 72 72 6f 72 3c 2f 68 31 3e 0a 3c 70 3e 49 6e h1>500.Internal.Error</h1>.<p>In
2e40 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 77 68 65 6e 20 68 61 6e 64 6c 69 6e 67 20 74 68 69 73 20 ternal.error.when.handling.this.
2e60 72 65 71 75 65 73 74 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 request.</p>.<pre>%s</pre>.</bod
2e80 79 3e 3c 2f 68 74 6d 6c 3e 22 29 29 0a 20 20 22 48 54 4d 4c 20 66 6f 72 20 76 61 72 69 6f 75 73 y></html>"))..."HTML.for.various
2ea0 20 65 72 72 6f 72 73 2e 22 29 0a 0a 3b 3b 20 55 73 65 72 20 69 6e 74 65 72 66 61 63 65 0a 0a 3b .errors.")..;;.User.interface..;
2ec0 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 61 72 74 ;;###autoload.(defun.httpd-start
2ee0 20 28 29 0a 20 20 22 53 74 61 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 20 70 72 6f 63 .()..."Start.the.web.server.proc
2f00 65 73 73 2e 20 49 66 20 74 68 65 20 73 65 72 76 65 72 20 69 73 20 61 6c 72 65 61 64 79 0a 72 75 ess..If.the.server.is.already.ru
2f20 6e 6e 69 6e 67 2c 20 74 68 69 73 20 77 69 6c 6c 20 72 65 73 74 61 72 74 20 74 68 65 20 73 65 72 nning,.this.will.restart.the.ser
2f40 76 65 72 2e 20 54 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 65 72 76 65 72 0a 69 6e ver..There.is.only.one.server.in
2f60 73 74 61 6e 63 65 20 70 65 72 20 45 6d 61 63 73 20 69 6e 73 74 61 6e 63 65 2e 22 0a 20 20 28 69 stance.per.Emacs.instance."...(i
2f80 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 68 74 74 70 64 2d 73 74 6f 70 29 0a 20 20 28 68 74 nteractive)...(httpd-stop)...(ht
2fa0 74 70 64 2d 6c 6f 67 20 60 28 73 74 61 72 74 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d 73 tpd-log.`(start.,(current-time-s
2fc0 74 72 69 6e 67 29 29 29 0a 20 20 28 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 tring)))...(make-network-process
2fe0 0a 20 20 20 3a 6e 61 6d 65 20 20 20 20 20 22 68 74 74 70 64 22 0a 20 20 20 3a 73 65 72 76 69 63 ....:name....."httpd"....:servic
3000 65 20 20 68 74 74 70 64 2d 70 6f 72 74 0a 20 20 20 3a 73 65 72 76 65 72 20 20 20 74 0a 20 20 20 e..httpd-port....:server...t....
3020 3a 68 6f 73 74 20 20 20 20 20 68 74 74 70 64 2d 68 6f 73 74 0a 20 20 20 3a 66 61 6d 69 6c 79 20 :host.....httpd-host....:family.
3040 20 20 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 0a 20 20 20 3a 66 69 6c 74 65 72 20 20 20 27 ..httpd-ip-family....:filter...'
3060 68 74 74 70 64 2d 2d 66 69 6c 74 65 72 0a 20 20 20 3a 63 6f 64 69 6e 67 20 20 20 27 62 69 6e 61 httpd--filter....:coding...'bina
3080 72 79 0a 20 20 20 3a 6c 6f 67 20 20 20 20 20 20 27 68 74 74 70 64 2d 2d 6c 6f 67 29 0a 20 20 28 ry....:log......'httpd--log)...(
30a0 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 29 29 0a 0a 3b run-hooks.'httpd-start-hook))..;
30c0 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 6f 70 20 ;;###autoload.(defun.httpd-stop.
30e0 28 29 0a 20 20 22 53 74 6f 70 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 20 69 66 20 69 74 20 ()..."Stop.the.web.server.if.it.
3100 69 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 6f 74 68 65 72 77 69 73 65 20 is.currently.running,.otherwise.
3120 64 6f 20 6e 6f 74 68 69 6e 67 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 do.nothing."...(interactive)...(
3140 77 68 65 6e 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 0a 20 20 when.(process-status."httpd")...
3160 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 22 68 74 74 70 64 22 29 0a 20 20 20 20 28 ..(delete-process."httpd").....(
3180 68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 6f 70 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d httpd-log.`(stop.,(current-time-
31a0 73 74 72 69 6e 67 29 29 29 0a 20 20 20 20 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70 64 2d string))).....(run-hooks.'httpd-
31c0 73 74 6f 70 2d 68 6f 6f 6b 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 stop-hook)))..;;;###autoload.(de
31e0 66 75 6e 20 68 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 20 28 29 0a 20 20 22 52 65 74 75 72 6e fun.httpd-running-p.()..."Return
3200 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 65 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 73 65 72 .non-nil.if.the.simple-httpd.ser
3220 76 65 72 20 69 73 20 72 75 6e 6e 69 6e 67 2e 22 0a 20 20 28 6e 6f 74 20 28 6e 75 6c 6c 20 28 70 ver.is.running."...(not.(null.(p
3240 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 29 29 29 0a 0a 3b 3b 3b 23 23 rocess-status."httpd"))))..;;;##
3260 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 69 72 #autoload.(defun.httpd-serve-dir
3280 65 63 74 6f 72 79 20 28 64 69 72 65 63 74 6f 72 79 29 0a 20 20 22 53 74 61 72 74 20 74 68 65 20 ectory.(directory)..."Start.the.
32a0 77 65 62 20 73 65 72 76 65 72 20 77 69 74 68 20 67 69 76 65 6e 20 60 64 69 72 65 63 74 6f 72 79 web.server.with.given.`directory
32c0 27 20 61 73 20 60 68 74 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 '.as.`httpd-root'."...(interacti
32e0 76 65 20 22 44 53 65 72 76 65 20 64 69 72 65 63 74 6f 72 79 3a 20 5c 6e 22 29 0a 20 20 28 73 65 ve."DServe.directory:.\n")...(se
3300 74 66 20 68 74 74 70 64 2d 72 6f 6f 74 20 64 69 72 65 63 74 6f 72 79 29 0a 20 20 28 68 74 74 70 tf.httpd-root.directory)...(http
3320 64 2d 73 74 61 72 74 29 0a 20 20 28 6d 65 73 73 61 67 65 20 22 53 74 61 72 74 65 64 20 73 69 6d d-start)...(message."Started.sim
3340 70 6c 65 2d 68 74 74 70 64 20 6f 6e 20 25 73 3a 25 64 2c 20 73 65 72 76 69 6e 67 3a 20 25 73 22 ple-httpd.on.%s:%d,.serving:.%s"
3360 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 63 61 73 65 20 68 74 74 70 64 2d 68 6f 73 74 0a ............(cl-case.httpd-host.
3380 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6e 69 6c 29 20 22 30 2e 30 2e 30 2e 30 22 29 0a 20 .............((nil)."0.0.0.0")..
33a0 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c 6f 63 61 6c 29 20 22 6c 6f 63 61 6c 68 6f 73 74 22 ............((local)."localhost"
33c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 74 68 65 72 77 69 73 65 20 68 74 74 70 64 2d )..............(otherwise.httpd-
33e0 68 6f 73 74 29 29 20 68 74 74 70 64 2d 70 6f 72 74 20 64 69 72 65 63 74 6f 72 79 29 29 0a 0a 28 host)).httpd-port.directory))..(
3400 64 65 66 75 6e 20 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 20 28 29 0a 20 20 22 4e 65 defun.httpd-batch-start.()..."Ne
3420 76 65 72 20 72 65 74 75 72 6e 73 2c 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 20 ver.returns,.holding.the.server.
3440 6f 70 65 6e 20 69 6e 64 65 66 69 6e 69 74 65 6c 79 20 66 6f 72 20 62 61 74 63 68 20 6d 6f 64 65 open.indefinitely.for.batch.mode
3460 2e 0a 4c 6f 67 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 74 6f 20 73 74 64 6f 75 74 2e ..Logs.are.redirected.to.stdout.
3480 20 54 6f 20 75 73 65 2c 20 69 6e 76 6f 6b 65 20 45 6d 61 63 73 20 6c 69 6b 65 20 74 68 69 73 3a .To.use,.invoke.Emacs.like.this:
34a0 0a 65 6d 61 63 73 20 2d 51 20 2d 62 61 74 63 68 20 2d 6c 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 .emacs.-Q.-batch.-l.simple-httpd
34c0 2e 65 6c 63 20 2d 66 20 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 22 0a 20 20 28 69 66 .elc.-f.httpd-batch-start"...(if
34e0 20 28 6e 6f 74 20 6e 6f 6e 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 20 20 20 20 28 65 72 72 .(not.noninteractive).......(err
3500 6f 72 20 22 4f 6e 6c 79 20 75 73 65 20 60 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 27 or."Only.use.`httpd-batch-start'
3520 20 69 6e 20 62 61 74 63 68 20 6d 6f 64 65 21 22 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73 74 61 .in.batch.mode!").....(httpd-sta
3540 72 74 29 0a 20 20 20 20 28 64 65 66 61 6c 69 61 73 20 27 68 74 74 70 64 2d 6c 6f 67 20 27 70 70 rt).....(defalias.'httpd-log.'pp
3560 29 0a 20 20 20 20 28 77 68 69 6c 65 20 74 20 28 73 6c 65 65 70 2d 66 6f 72 20 36 30 29 29 29 29 ).....(while.t.(sleep-for.60))))
3580 0a 0a 3b 3b 20 55 74 69 6c 69 74 79 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 64 61 74 65 2d ..;;.Utility..(defun.httpd-date-
35a0 73 74 72 69 6e 67 20 28 26 6f 70 74 69 6f 6e 61 6c 20 64 61 74 65 29 0a 20 20 22 52 65 74 75 72 string.(&optional.date)..."Retur
35c0 6e 20 61 6e 20 48 54 54 50 20 64 61 74 65 20 73 74 72 69 6e 67 20 28 52 46 43 20 31 31 32 33 29 n.an.HTTP.date.string.(RFC.1123)
35e0 2e 22 0a 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 22 25 61 2c 20 25 65 ."...(format-time-string."%a,.%e
3600 20 25 62 20 25 59 20 25 54 20 47 4d 54 22 20 64 61 74 65 20 74 29 29 0a 0a 28 64 65 66 75 6e 20 .%b.%Y.%T.GMT".date.t))..(defun.
3620 68 74 74 70 64 2d 65 74 61 67 20 28 66 69 6c 65 29 0a 20 20 22 43 6f 6d 70 75 74 65 20 74 68 65 httpd-etag.(file)..."Compute.the
3640 20 45 54 61 67 20 66 6f 72 20 46 49 4c 45 2e 22 0a 20 20 28 63 6f 6e 63 61 74 20 22 5c 22 22 20 .ETag.for.FILE."...(concat."\"".
3660 28 73 75 62 73 74 72 69 6e 67 20 28 73 68 61 31 20 28 70 72 69 6e 31 2d 74 6f 2d 73 74 72 69 6e (substring.(sha1.(prin1-to-strin
3680 67 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 74 65 73 20 66 69 6c 65 29 29 29 20 2d 31 36 29 0a g.(file-attributes.file))).-16).
36a0 20 20 20 20 20 20 20 20 20 20 22 5c 22 22 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d .........."\""))..(defun.httpd--
36c0 73 74 72 69 6e 67 69 66 79 20 28 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 22 54 75 72 6e 20 61 stringify.(designator)..."Turn.a
36e0 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 61 74 6f 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 .string.designator.into.a.string
3700 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 74 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 ."...(let.((string.(format."%s".
3720 64 65 73 69 67 6e 61 74 6f 72 29 29 29 0a 20 20 20 20 28 69 66 20 28 6b 65 79 77 6f 72 64 70 20 designator))).....(if.(keywordp.
3740 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 73 designator).........(substring.s
3760 74 72 69 6e 67 20 31 29 0a 20 20 20 20 20 20 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 4e 65 74 tring.1).......string)))..;;.Net
3780 77 6f 72 6b 69 6e 67 20 63 6f 64 65 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 63 6f 6e 6e working.code..(defun.httpd--conn
37a0 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 20 28 72 65 71 75 65 73 74 29 0a 20 20 22 52 65 74 75 ection-close-p.(request)..."Retu
37c0 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65 73 74 rn.non-nil.if.the.client.request
37e0 65 64 20 5c 22 63 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c 6f 73 65 5c 22 2e 22 0a 20 20 28 6f 72 ed.\"connection:.close\"."...(or
3800 20 28 65 71 75 61 6c 20 27 28 22 63 6c 6f 73 65 22 29 20 28 63 64 72 20 28 61 73 73 6f 63 20 22 .(equal.'("close").(cdr.(assoc."
3820 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 65 71 Connection".request))).......(eq
3840 75 61 6c 20 27 28 22 48 54 54 50 2f 31 2e 30 22 29 20 28 63 64 64 72 20 28 61 73 73 6f 63 20 22 ual.'("HTTP/1.0").(cddr.(assoc."
3860 47 45 54 22 20 72 65 71 75 65 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d GET".request)))))..(defun.httpd-
3880 2d 66 69 6c 74 65 72 20 28 70 72 6f 63 20 63 68 75 6e 6b 29 0a 20 20 22 52 75 6e 73 20 65 61 63 -filter.(proc.chunk)..."Runs.eac
38a0 68 20 74 69 6d 65 20 63 6c 69 65 6e 74 20 6d 61 6b 65 73 20 61 20 72 65 71 75 65 73 74 2e 22 0a h.time.client.makes.a.request.".
38c0 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d ..(with-current-buffer.(process-
38e0 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 28 67 get.proc.:request-buffer).....(g
3900 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 69 6e 73 65 72 oto-char.(point-max)).....(inser
3920 74 20 63 68 75 6e 6b 29 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 71 75 65 73 74 20 28 70 72 6f t.chunk).....(let.((request.(pro
3940 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 cess-get.proc.:request))).......
3960 28 75 6e 6c 65 73 73 20 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 (unless.request.........(when.(s
3980 65 74 66 20 72 65 71 75 65 73 74 20 28 68 74 74 70 64 2d 70 61 72 73 65 29 29 0a 20 20 20 20 20 etf.request.(httpd-parse))......
39a0 20 20 20 20 20 28 64 65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 .....(delete-region.(point-min).
39c0 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 (point))...........(process-put.
39e0 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 proc.:request.request))).......(
3a00 77 68 65 6e 20 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 6f 6e 74 when.request.........(let.((cont
3a20 65 6e 74 2d 6c 65 6e 67 74 68 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 22 43 6f 6e 74 65 6e 74 ent-length.(cadr.(assoc."Content
3a40 2d 4c 65 6e 67 74 68 22 20 72 65 71 75 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 -Length".request))))...........(
3a60 77 68 65 6e 20 28 6f 72 20 28 6e 75 6c 6c 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 29 0a 20 when.(or.(null.content-length)..
3a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d 20 28 62 75 66 66 65 72 2d 73 69 ...................(=.(buffer-si
3aa0 7a 65 29 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 72 20 63 6f 6e 74 65 6e 74 2d 6c 65 ze).(string-to-number.content-le
3ac0 6e 67 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 74 ngth))).............(let*.((cont
3ae0 65 6e 74 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ent.(buffer-string))............
3b00 20 20 20 20 20 20 20 20 28 75 72 69 20 28 63 6c 2d 63 61 64 61 72 20 72 65 71 75 65 73 74 29 29 ........(uri.(cl-cadar.request))
3b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 61 72 73 65 64 2d 75 72 69 20 ....................(parsed-uri.
3b40 28 68 74 74 70 64 2d 70 61 72 73 65 2d 75 72 69 20 28 63 6f 6e 63 61 74 20 75 72 69 29 29 29 0a (httpd-parse-uri.(concat.uri))).
3b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 69 2d 70 61 74 68 20 28 68 74 ...................(uri-path.(ht
3b80 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 20 30 20 70 61 72 73 65 64 2d 75 72 69 29 29 29 0a 20 tpd-unhex.(nth.0.parsed-uri)))..
3ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 69 2d 71 75 65 72 79 20 28 61 70 ..................(uri-query.(ap
3bc0 70 65 6e 64 20 28 6e 74 68 20 31 20 70 61 72 73 65 64 2d 75 72 69 29 0a 20 20 20 20 20 20 20 20 pend.(nth.1.parsed-uri).........
3be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 ..............................(h
3c00 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 73 20 63 6f 6e 74 65 6e 74 29 29 29 0a 20 20 20 20 20 ttpd-parse-args.content)))......
3c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 72 76 6c 65 74 20 28 68 74 74 70 64 2d 67 65 ..............(servlet.(httpd-ge
3c40 74 2d 73 65 72 76 6c 65 74 20 75 72 69 2d 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 t-servlet.uri-path)))...........
3c60 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(erase-buffer)..............
3c80 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 6e 69 6c 29 .(process-put.proc.:request.nil)
3ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 72 65 71 75 65 73 74 20 28 6e 72 ...............(setf.request.(nr
3cc0 65 76 65 72 73 65 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 22 43 6f 6e 74 65 6e 74 22 20 63 6f 6e everse.(cons.(list."Content".con
3ce0 74 65 6e 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tent)...........................
3d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 72 65 76 65 72 73 65 20 72 65 71 75 ..................(nreverse.requ
3d20 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 est))))...............(httpd-log
3d40 20 60 28 72 65 71 75 65 73 74 20 28 64 61 74 65 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 .`(request.(date.,(httpd-date-st
3d60 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ring))..........................
3d80 20 20 20 20 20 20 20 20 20 20 28 61 64 64 72 65 73 73 20 2c 28 63 61 72 20 28 70 72 6f 63 65 73 ..........(address.,(car.(proces
3da0 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s-contact.proc)))...............
3dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 20 2c 75 72 69 2d 70 .....................(get.,uri-p
3de0 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ath)............................
3e00 20 20 20 20 20 20 20 20 2c 28 63 6f 6e 73 20 27 68 65 61 64 65 72 73 20 72 65 71 75 65 73 74 29 ........,(cons.'headers.request)
3e20 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 20 73 65 72 76 6c ))...............(if.(null.servl
3e40 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 2d 65 72 et)...................(httpd--er
3e60 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ror-safe.proc.404)..............
3e80 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a 20 20 ...(condition-case.error-case...
3ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 72 76 6c ..................(funcall.servl
3ec0 65 74 20 70 72 6f 63 20 75 72 69 2d 70 61 74 68 20 75 72 69 2d 71 75 65 72 79 20 72 65 71 75 65 et.proc.uri-path.uri-query.reque
3ee0 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 20 28 68 74 st)...................(error.(ht
3f00 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 35 30 30 20 65 72 72 6f 72 2d 63 tpd--error-safe.proc.500.error-c
3f20 61 73 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 68 74 74 ase))))...............(when.(htt
3f40 70 64 2d 2d 63 6f 6e 6e 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 20 72 65 71 75 65 73 74 29 0a pd--connection-close-p.request).
3f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f ................(process-send-eo
3f80 66 20 70 72 6f 63 29 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 6c f.proc)))))))))..(defun.httpd--l
3fa0 6f 67 20 28 73 65 72 76 65 72 20 70 72 6f 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75 6e 73 og.(server.proc.message)..."Runs
3fc0 20 65 61 63 68 20 74 69 6d 65 20 61 20 6e 65 77 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63 74 73 .each.time.a.new.client.connects
3fe0 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 6e 65 72 ."...(with-current-buffer.(gener
4000 61 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 20 22 20 2a 68 74 74 70 64 2d 63 6c 69 65 6e 74 2a 22 ate-new-buffer.".*httpd-client*"
4020 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 ).....(process-put.proc.:request
4040 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 28 73 65 -buffer.(current-buffer)))...(se
4060 74 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 20 70 72 6f 63 20 23 27 68 74 74 70 64 2d t-process-sentinel.proc.#'httpd-
4080 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20 27 63 -sentinel)...(httpd-log.(list.'c
40a0 6f 6e 6e 65 63 74 69 6f 6e 20 28 63 61 72 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 onnection.(car.(process-contact.
40c0 70 72 6f 63 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 73 65 6e 74 69 6e 65 proc)))))..(defun.httpd--sentine
40e0 6c 20 28 70 72 6f 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75 6e 73 20 77 68 65 6e 20 61 20 l.(proc.message)..."Runs.when.a.
4100 63 6c 69 65 6e 74 20 63 6c 6f 73 65 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 client.closes.the.connection."..
4120 20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 2d 70 20 22 5e 6f 70 65 6e 20 .(unless.(string-match-p."^open.
4140 22 20 6d 65 73 73 61 67 65 29 0a 20 20 20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 20 28 70 72 ".message).....(let.((buffer.(pr
4160 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 29 29 ocess-get.proc.:request-buffer))
4180 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 6b 69 ).......(when.buffer.........(ki
41a0 6c 6c 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 29 29 29 29 29 0a 0a 3b 3b 20 4c 6f 67 67 69 6e ll-buffer.buffer)))))..;;.Loggin
41c0 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 6c 6f 67 20 28 69 74 65 6d 29 0a 20 20 22 50 72 g..(defun.httpd-log.(item)..."Pr
41e0 65 74 74 79 20 70 72 69 6e 74 20 61 20 6c 69 73 70 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 etty.print.a.lisp.object.to.the.
4200 6c 6f 67 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 log."...(with-current-buffer.(ge
4220 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 68 74 74 70 64 2a 22 29 0a 20 20 20 20 28 t-buffer-create."*httpd*").....(
4240 73 65 74 66 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 0a 20 20 20 20 28 setf.buffer-read-only.nil).....(
4260 6c 65 74 20 28 28 66 6f 6c 6c 6f 77 20 28 3d 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74 2d 6d let.((follow.(=.(point).(point-m
4280 61 78 29 29 29 29 0a 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 ax)))).......(save-excursion....
42a0 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 .....(goto-char.(point-max))....
42c0 20 20 20 20 20 28 70 70 20 69 74 65 6d 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 .....(pp.item.(current-buffer)))
42e0 0a 20 20 20 20 20 20 28 69 66 20 66 6f 6c 6c 6f 77 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f .......(if.follow.(goto-char.(po
4300 69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 20 20 28 73 65 74 66 20 74 72 75 6e 63 61 74 65 2d 6c int-max)))).....(setf.truncate-l
4320 69 6e 65 73 20 74 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c ines.t...........buffer-read-onl
4340 79 20 74 29 0a 20 20 20 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d 70 20 y.t).....(set-buffer-modified-p.
4360 6e 69 6c 29 29 29 0a 0a 3b 3b 20 53 65 72 76 6c 65 74 73 0a 0a 28 64 65 66 76 61 72 20 68 74 74 nil)))..;;.Servlets..(defvar.htt
4380 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 20 6e 69 6c 0a 20 20 22 54 68 65 20 70 72 6f 63 65 pd-current-proc.nil..."The.proce
43a0 73 73 20 6f 62 6a 65 63 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 22 29 0a 0a 28 ss.object.currently.in.use.")..(
43c0 64 65 66 76 61 72 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 6e 69 6c 0a 20 20 defvar.httpd--header-sent.nil...
43e0 22 42 75 66 66 65 72 2d 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20 69 6e 64 69 63 61 74 69 6e "Buffer-local.variable.indicatin
4400 67 20 69 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20 73 65 6e 74 2e 22 29 g.if.the.header.has.been.sent.")
4420 0a 28 6d 61 6b 65 2d 76 61 72 69 61 62 6c 65 2d 62 75 66 66 65 72 2d 6c 6f 63 61 6c 20 27 68 74 .(make-variable-buffer-local.'ht
4440 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d tpd--header-sent)..(defun.httpd-
4460 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 28 70 72 6f 63 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 resolve-proc.(proc)..."Return.th
4480 65 20 63 6f 72 72 65 63 74 20 70 72 6f 63 65 73 73 20 74 6f 20 75 73 65 2e 20 54 68 69 73 20 68 e.correct.process.to.use..This.h
44a0 61 6e 64 6c 65 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 22 0a 20 20 andles.`httpd-current-proc'."...
44c0 28 69 66 20 28 65 71 20 74 20 70 72 6f 63 29 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 (if.(eq.t.proc).httpd-current-pr
44e0 6f 63 20 70 72 6f 63 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 77 69 74 68 2d 68 74 74 70 64 2d oc.proc))..(defmacro.with-httpd-
4500 62 75 66 66 65 72 20 28 70 72 6f 63 20 6d 69 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 buffer.(proc.mime.&rest.body)...
4520 22 43 72 65 61 74 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 65 72 2c 20 73 65 74 20 "Create.a.temporary.buffer,.set.
4540 69 74 20 61 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2c 20 61 6e 64 2c 0a 61 it.as.the.current.buffer,.and,.a
4560 74 20 74 68 65 20 65 6e 64 20 6f 66 20 62 6f 64 79 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 t.the.end.of.body,.automatically
4580 20 73 65 72 76 65 20 69 74 20 74 6f 20 61 6e 20 48 54 54 50 20 63 6c 69 65 6e 74 20 77 69 74 68 .serve.it.to.an.HTTP.client.with
45a0 0a 61 6e 20 48 54 54 50 20 68 65 61 64 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 73 .an.HTTP.header.indicating.the.s
45c0 70 65 63 69 66 69 65 64 20 4d 49 4d 45 20 74 79 70 65 2e 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 pecified.MIME.type..Additionally
45e0 2c 0a 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 20 69 73 20 73 65 74 20 74 6f 20 74 68 ,.`standard-output'.is.set.to.th
4600 69 73 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 61 6e 64 0a 60 68 74 74 70 64 2d 63 75 72 72 is.output.buffer.and.`httpd-curr
4620 65 6e 74 2d 70 72 6f 63 27 20 69 73 20 73 65 74 20 74 6f 20 50 52 4f 43 2e 22 0a 20 20 28 64 65 ent-proc'.is.set.to.PROC."...(de
4640 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28 6c 65 74 20 28 28 70 clare.(indent.defun))...(let.((p
4660 72 6f 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 2d 2d 70 72 6f 63 2d 2d 22 29 roc-sym.(make-symbol."--proc--")
4680 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 2c 70 72 6f 63 2d 73 79 6d 20 2c 70 72 6f 63 29 29 )).....`(let.((,proc-sym.,proc))
46a0 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 ........(with-temp-buffer.......
46c0 20 20 20 28 73 65 74 66 20 6d 61 6a 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 66 65 ...(setf.major-mode.'httpd-buffe
46e0 72 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 r)..........(let.((standard-outp
4700 75 74 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ut.(current-buffer))............
4720 20 20 20 20 28 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 20 2c 70 72 6f 63 2d 73 79 ....(httpd-current-proc.,proc-sy
4740 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 m))............,@body)..........
4760 28 75 6e 6c 65 73 73 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20 20 20 (unless.httpd--header-sent......
4780 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 2c 70 72 6f 63 2d 73 ......(httpd-send-header.,proc-s
47a0 79 6d 20 2c 6d 69 6d 65 20 32 30 30 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 ym.,mime.200))))))..(defun.httpd
47c0 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 44 6f 6e 27 74 20 72 65 73 70 -discard-buffer.()..."Don't.resp
47e0 6f 6e 64 20 75 73 69 6e 67 20 63 75 72 72 65 6e 74 20 73 65 72 76 65 72 20 62 75 66 66 65 72 20 ond.using.current.server.buffer.
4800 28 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 29 2e 0a 52 65 74 75 72 6e 73 20 61 (`with-httpd-buffer')..Returns.a
4820 20 70 72 6f 63 65 73 73 20 66 6f 72 20 66 75 74 75 72 65 20 72 65 73 70 6f 6e 73 65 2e 22 0a 20 .process.for.future.response."..
4840 20 28 77 68 65 6e 20 28 65 71 20 6d 61 6a 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 .(when.(eq.major-mode.'httpd-buf
4860 66 65 72 29 20 28 73 65 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 fer).(setf.httpd--header-sent.t)
4880 29 0a 20 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 29 0a 0a 28 64 65 66 6d 61 63 )...httpd-current-proc)..(defmac
48a0 72 6f 20 64 65 66 73 65 72 76 6c 65 74 20 28 6e 61 6d 65 20 6d 69 6d 65 20 70 61 74 68 2d 71 75 ro.defservlet.(name.mime.path-qu
48c0 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 44 65 66 69 6e ery-request.&rest.body)..."Defin
48e0 65 73 20 61 20 73 69 6d 70 6c 65 20 68 74 74 70 64 20 73 65 72 76 65 6c 65 74 2e 20 54 68 65 20 es.a.simple.httpd.servelet..The.
4900 73 65 72 76 6c 65 74 20 72 75 6e 73 20 69 6e 20 61 0a 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 servlet.runs.in.a.temporary.buff
4920 65 72 20 77 68 69 63 68 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72 76 65 64 er.which.is.automatically.served
4940 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 0a 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 68 65 61 64 .to.the.client.along.with.a.head
4960 65 72 2e 0a 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 65 72 76 65 73 20 74 68 65 20 63 er...A.servlet.that.serves.the.c
4980 6f 6e 74 65 6e 74 73 20 6f 66 20 2a 73 63 72 61 74 63 68 2a 2c 0a 0a 20 20 20 20 28 64 65 66 73 ontents.of.*scratch*,......(defs
49a0 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 20 20 20 ervlet.scratch.text/plain.()....
49c0 20 20 20 28 69 6e 73 65 72 74 2d 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 67 65 74 ...(insert-buffer-substring.(get
49e0 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 5c 22 2a 73 63 72 61 74 63 68 2a 5c 22 29 29 29 0a -buffer-create.\"*scratch*\"))).
4a00 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 20 20 20 .A.servlet.that.says.hello,.....
4a20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 74 65 78 74 2f 70 6c .(defservlet.hello-world.text/pl
4a40 61 69 6e 20 28 70 61 74 68 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 5c 22 68 65 6c 6c 6f ain.(path).......(insert.\"hello
4a60 2c 20 5c 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e 64 69 72 65 63 74 6f 72 79 20 70 61 74 ,.\".(file-name-nondirectory.pat
4a80 68 29 29 29 29 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 h))))"...(declare.(indent.defun)
4aa0 29 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c )...(let.((proc-sym.(make-symbol
4ac0 20 22 70 72 6f 63 22 29 29 0a 20 20 20 20 20 20 20 20 28 66 6e 61 6d 65 20 28 69 6e 74 65 72 6e ."proc")).........(fname.(intern
4ae0 20 28 63 6f 6e 63 61 74 20 22 68 74 74 70 64 2f 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e .(concat."httpd/".(symbol-name.n
4b00 61 6d 65 29 29 29 29 29 0a 20 20 20 20 60 28 64 65 66 75 6e 20 2c 66 6e 61 6d 65 20 28 2c 70 72 ame))))).....`(defun.,fname.(,pr
4b20 6f 63 2d 73 79 6d 20 2c 40 70 61 74 68 2d 71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 65 73 oc-sym.,@path-query-request.&res
4b40 74 20 2c 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d 68 74 74 t.,(cl-gensym))........(with-htt
4b60 70 64 2d 62 75 66 66 65 72 20 2c 70 72 6f 63 2d 73 79 6d 20 2c 28 68 74 74 70 64 2d 2d 73 74 72 pd-buffer.,proc-sym.,(httpd--str
4b80 69 6e 67 69 66 79 20 6d 69 6d 65 29 0a 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 29 ingify.mime)..........,@body))))
4ba0 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20 28 73 ..(defun.httpd-parse-endpoint.(s
4bc0 79 6d 62 6f 6c 29 0a 20 20 22 50 61 72 73 65 20 61 6e 20 65 6e 64 70 6f 69 6e 74 20 64 65 66 69 ymbol)..."Parse.an.endpoint.defi
4be0 6e 69 74 69 6f 6e 20 74 65 6d 70 6c 61 74 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 60 64 65 nition.template.for.use.with.`de
4c00 66 73 65 72 76 6c 65 74 2a 27 2e 22 0a 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 69 74 65 6d fservlet*'."...(cl-loop.for.item
4c20 20 69 6e 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 73 .in.(split-string.(symbol-name.s
4c40 79 6d 62 6f 6c 29 20 22 2f 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 75 70 66 ymbol)."/")............for.n.upf
4c60 72 6f 6d 20 30 0a 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 28 61 6e 64 20 28 3e 20 28 6c rom.0............when.(and.(>.(l
4c80 65 6e 67 74 68 20 69 74 65 6d 29 20 30 29 20 28 65 71 6c 20 28 61 72 65 66 20 69 74 65 6d 20 30 ength.item).0).(eql.(aref.item.0
4ca0 29 20 3f 3a 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 63 6f 6e 73 20 ).?:))............collect.(cons.
4cc0 28 69 6e 74 65 72 6e 20 28 73 75 62 73 74 72 69 6e 67 20 69 74 65 6d 20 31 29 29 20 6e 29 20 69 (intern.(substring.item.1)).n).i
4ce0 6e 74 6f 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65 63 74 nto.vars............else.collect
4d00 20 69 74 65 6d 20 69 6e 74 6f 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c .item.into.path............final
4d20 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 ly............(cl-return........
4d40 20 20 20 20 20 28 63 6c 2d 76 61 6c 75 65 73 20 28 69 6e 74 65 72 6e 20 28 6d 61 70 63 6f 6e 63 .....(cl-values.(intern.(mapconc
4d60 61 74 20 23 27 69 64 65 6e 74 69 74 79 20 70 61 74 68 20 22 2f 22 29 29 20 76 61 72 73 29 29 29 at.#'identity.path."/")).vars)))
4d80 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 70 61 74 68 20 6e 69 6c 0a 20 20 22 41 6e 61 )..(defvar.httpd-path.nil..."Ana
4da0 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 6c 65 74 2a phoric.variable.for.`defservlet*
4dc0 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 71 75 65 72 79 20 6e 69 6c 0a 20 20 '.")..(defvar.httpd-query.nil...
4de0 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 "Anaphoric.variable.for.`defserv
4e00 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 72 65 71 75 65 73 74 20 let*'.")..(defvar.httpd-request.
4e20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 nil..."Anaphoric.variable.for.`d
4e40 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 70 efservlet*'.")..(defvar.httpd-sp
4e60 6c 69 74 2d 70 61 74 68 20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 lit-path.nil..."Anaphoric.variab
4e80 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 6d 61 63 le.for.`defservlet*'.")..(defmac
4ea0 72 6f 20 64 65 66 73 65 72 76 6c 65 74 2a 20 28 65 6e 64 70 6f 69 6e 74 20 6d 69 6d 65 20 61 72 ro.defservlet*.(endpoint.mime.ar
4ec0 67 73 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 4c 69 6b 65 20 60 64 65 66 73 65 72 76 6c gs.&rest.body)..."Like.`defservl
4ee0 65 74 27 2c 20 62 75 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 20 76 61 72 69 et',.but.automatically.bind.vari
4f00 61 62 6c 65 73 2f 61 72 67 75 6d 65 6e 74 73 0a 74 6f 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 ables/arguments.to.the.request..
4f20 54 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 45 4e 44 50 4f Trailing.components.of.the.ENDPO
4f40 49 4e 54 20 63 61 6e 20 62 65 20 62 6f 75 6e 64 0a 62 79 20 70 72 65 66 69 78 69 6e 67 20 74 68 INT.can.be.bound.by.prefixing.th
4f60 65 73 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 77 69 74 68 20 61 20 63 6f 6c 6f 6e 2c 20 61 63 74 ese.components.with.a.colon,.act
4f80 69 6e 67 20 6c 69 6b 65 20 61 20 74 65 6d 70 6c 61 74 65 2e 0a 0a 20 20 20 20 28 64 65 66 73 65 ing.like.a.template.......(defse
4fa0 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 73 2f 3a 70 61 63 6b 61 67 65 2f 3a 76 65 72 73 69 6f rvlet*.packages/:package/:versio
4fc0 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a 20 20 20 20 20 20 28 69 6e n.text/plain.(verbose).......(in
4fe0 73 65 72 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 73 5c 5c 6e 25 73 5c 5c 6e 5c 22 20 70 61 63 6b sert.(format.\"%s\\n%s\\n\".pack
5000 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 67 65 74 2d age.version)).......(princ.(get-
5020 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 20 20 description.package.version))...
5040 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 ....(when.verbose.........(inser
5060 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 53 5c 22 20 28 67 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 t.(format.\"%S\".(get-dependenci
5080 65 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 29 29 29 0a 0a 57 68 65 6e 20 61 63 es.package.version)))))..When.ac
50a0 63 65 73 73 65 64 20 66 72 6f 6d 20 74 68 69 73 20 55 52 4c 2c 0a 0a 20 20 20 20 68 74 74 70 3a cessed.from.this.URL,......http:
50c0 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 70 61 63 6b 61 67 65 73 2f 66 6f 6f 62 61 72 2f 31 2e //example.com/packages/foobar/1.
50e0 30 3f 76 65 72 62 6f 73 65 3d 31 0a 0a 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 70 61 63 6b 61 0?verbose=1..the.variables.packa
5100 67 65 2c 20 76 65 72 73 69 6f 6e 2c 20 61 6e 64 20 76 65 72 62 6f 73 65 20 77 69 6c 6c 20 62 65 ge,.version,.and.verbose.will.be
5120 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6d 70 6f 6e 65 .bound.to.the.associated.compone
5140 6e 74 73 20 6f 66 20 74 68 65 20 55 52 4c 2e 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 nts.of.the.URL..Components.not.p
5160 72 6f 76 69 64 65 64 20 61 72 65 0a 62 6f 75 6e 64 20 74 6f 20 6e 69 6c 2e 20 54 68 65 20 71 75 rovided.are.bound.to.nil..The.qu
5180 65 72 79 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 6f 6d 6d 6f 6e ery.arguments.can.use.the.Common
51a0 20 4c 69 73 70 20 26 6b 65 79 0a 66 6f 72 6d 20 28 76 61 72 69 61 62 6c 65 20 64 65 66 61 75 6c .Lisp.&key.form.(variable.defaul
51c0 74 20 70 72 6f 76 69 64 65 64 2d 70 29 2e 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a t.provided-p).......(defservlet*
51e0 20 67 72 65 65 74 69 6e 67 2f 3a 6e 61 6d 65 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 28 67 72 65 .greeting/:name.text/plain.((gre
5200 65 74 69 6e 67 20 5c 22 68 69 5c 22 20 67 72 65 65 74 69 6e 67 2d 70 29 29 0a 20 20 20 20 20 20 eting.\"hi\".greeting-p)).......
5220 28 70 72 69 6e 63 20 28 66 6f 72 6d 61 74 20 5c 22 25 73 2c 20 25 73 20 28 70 72 6f 76 69 64 65 (princ.(format.\"%s,.%s.(provide
5240 64 3a 20 25 73 29 5c 22 20 67 72 65 65 74 69 6e 67 20 6e 61 6d 65 20 67 72 65 65 74 69 6e 67 2d d:.%s)\".greeting.name.greeting-
5260 70 29 29 29 0a 0a 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 61 74 68 2c 20 71 75 65 72 79 2c 20 p)))..The.original.path,.query,.
5280 61 6e 64 20 72 65 71 75 65 73 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 and.request.can.be.accessed.by.t
52a0 68 65 0a 61 6e 61 70 68 6f 72 69 63 20 73 70 65 63 69 61 6c 20 76 61 72 69 61 62 6c 65 73 20 60 he.anaphoric.special.variables.`
52c0 68 74 74 70 64 2d 70 61 74 68 27 2c 20 60 68 74 74 70 64 2d 71 75 65 72 79 27 2c 20 61 6e 64 0a httpd-path',.`httpd-query',.and.
52e0 60 68 74 74 70 64 2d 72 65 71 75 65 73 74 27 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e `httpd-request'."...(declare.(in
5300 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28 6c 65 74 20 28 28 70 61 74 68 2d 6c 65 78 69 63 dent.defun))...(let.((path-lexic
5320 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 71 75 65 72 79 2d 6c al.(cl-gensym)).........(query-l
5340 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 71 exical.(cl-gensym)).........(req
5360 75 65 73 74 2d 6c 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 29 0a 20 20 20 20 28 uest-lexical.(cl-gensym))).....(
5380 63 6c 2d 6d 75 6c 74 69 70 6c 65 2d 76 61 6c 75 65 2d 62 69 6e 64 20 28 70 61 74 68 20 76 61 72 cl-multiple-value-bind.(path.var
53a0 73 29 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70 6f 69 6e s).(httpd-parse-endpoint.endpoin
53c0 74 29 0a 20 20 20 20 20 20 60 28 64 65 66 73 65 72 76 6c 65 74 20 2c 70 61 74 68 20 2c 6d 69 6d t).......`(defservlet.,path.,mim
53e0 65 20 28 2c 70 61 74 68 2d 6c 65 78 69 63 61 6c 20 2c 71 75 65 72 79 2d 6c 65 78 69 63 61 6c 20 e.(,path-lexical.,query-lexical.
5400 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 ,request-lexical)..........(let.
5420 28 28 68 74 74 70 64 2d 70 61 74 68 20 2c 70 61 74 68 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 ((httpd-path.,path-lexical).....
5440 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 71 75 65 72 79 20 2c 71 75 65 72 79 2d 6c ...........(httpd-query.,query-l
5460 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 exical)................(httpd-re
5480 71 75 65 73 74 20 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 quest.,request-lexical).........
54a0 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 70 6c 69 74 2d 70 61 74 68 20 28 73 70 6c 69 74 2d .......(httpd-split-path.(split-
54c0 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 string..........................
54e0 20 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 2c 70 61 74 68 2d 6c 65 78 69 63 61 .........(substring.,path-lexica
5500 6c 20 31 29 20 22 2f 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 2c 28 63 6c l.1)."/")))............(let.,(cl
5520 2d 6c 6f 6f 70 20 66 6f 72 20 28 76 61 72 20 2e 20 70 6f 73 29 20 69 6e 20 76 61 72 73 0a 20 20 -loop.for.(var...pos).in.vars...
5540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 65 78 74 72 ........................for.extr
5560 61 63 74 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 act.=...........................
5580 60 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 20 2c 70 6f 73 20 68 74 74 70 64 2d 73 70 `(httpd-unhex.(nth.,pos.httpd-sp
55a0 6c 69 74 2d 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lit-path))......................
55c0 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 6c 69 73 74 20 76 61 72 20 65 78 74 72 61 63 74 29 29 .....collect.(list.var.extract))
55e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 2c 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 ..............(let.,(cl-loop.for
5600 20 61 72 67 20 69 6e 20 61 72 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .arg.in.args....................
5620 20 20 20 20 20 20 20 20 20 66 6f 72 20 68 61 73 2d 64 65 66 61 75 6c 74 20 3d 20 28 6c 69 73 74 .........for.has-default.=.(list
5640 70 20 61 72 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.arg)..........................
5660 20 20 20 66 6f 72 20 68 61 73 2d 64 65 66 61 75 6c 74 2d 70 20 3d 20 28 61 6e 64 20 68 61 73 2d ...for.has-default-p.=.(and.has-
5680 64 65 66 61 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 default.........................
56a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d 20 .............................(=.
56c0 33 20 28 6c 65 6e 67 74 68 20 61 72 67 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3.(length.arg)))................
56e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 61 72 67 2d 6e 61 6d 65 20 3d 20 28 73 79 6d .............for.arg-name.=.(sym
5700 62 6f 6c 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bol-name........................
5720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 68 61 73 2d 64 65 66 .....................(if.has-def
5740 61 75 6c 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67 29 20 61 72 67 29 29 0a 20 20 20 20 20 20 ault.(cl-first.arg).arg)).......
5760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 ......................when.has-d
5780 65 66 61 75 6c 74 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 efault.collect..................
57a0 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67 29 0a ...........(list.(cl-first.arg).
57c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
57e0 20 20 60 28 6c 65 74 20 28 28 76 61 6c 75 65 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 ..`(let.((value.(assoc.,arg-name
5800 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .httpd-query))).................
5820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 76 61 6c 75 65 0a 20 .....................(if.value..
5840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5860 20 20 20 20 20 20 20 20 28 63 6c 2d 73 65 63 6f 6e 64 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 ........(cl-second.value).......
5880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
58a0 20 2c 28 63 6c 2d 73 65 63 6f 6e 64 20 61 72 67 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 .,(cl-second.arg))))............
58c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65 63 74 0a 20 20 .................else.collect...
58e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 ..........................(list.
5900 61 72 67 20 60 28 63 6c 2d 73 65 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 arg.`(cl-second.................
5920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 20 2c ........................(assoc.,
5940 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 arg-name.httpd-query))).........
5960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 65 66 ....................when.has-def
5980 61 75 6c 74 2d 70 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ault-p.collect..................
59a0 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 63 6c 2d 74 68 69 72 64 20 61 72 67 29 0a ...........(list.(cl-third.arg).
59c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
59e0 20 20 60 28 6e 6f 74 20 28 6e 75 6c 6c 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 20 68 ..`(not.(null.(assoc.,arg-name.h
5a00 74 74 70 64 2d 71 75 65 72 79 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c ttpd-query)))))................,
5a20 40 62 6f 64 79 29 29 29 29 29 29 29 0a 0a 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 61 64 64 2d 6b 65 79 @body)))))))..(font-lock-add-key
5a40 77 6f 72 64 73 0a 20 27 65 6d 61 63 73 2d 6c 69 73 70 2d 6d 6f 64 65 0a 20 27 28 28 22 28 5c 5c words..'emacs-lisp-mode..'(("(\\
5a60 3c 5c 5c 28 64 65 66 73 65 72 76 6c 65 74 5c 5c 2a 3f 5c 5c 29 5c 5c 3e 20 2b 5c 5c 28 5b 5e 20 <\\(defservlet\\*?\\)\\>.+\\([^.
5a80 28 29 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 28 29 5d 2b 5c 5c 29 22 0a 20 20 20 20 28 31 20 27 ()]+\\).+\\([^.()]+\\)".....(1.'
5aa0 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77 6f 72 64 2d 66 61 63 65 29 0a 20 20 20 20 28 32 20 27 font-lock-keyword-face).....(2.'
5ac0 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65 29 0a 20 20 font-lock-function-name-face)...
5ae0 20 20 28 33 20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 74 79 70 65 2d 66 61 63 65 29 29 29 29 0a 0a 28 ..(3.'font-lock-type-face))))..(
5b00 64 65 66 6d 61 63 72 6f 20 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 20 defmacro.httpd-def-file-servlet.
5b20 28 6e 61 6d 65 20 72 6f 6f 74 29 0a 20 20 22 44 65 66 69 6e 65 73 20 61 20 73 65 72 76 6c 65 74 (name.root)..."Defines.a.servlet
5b40 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 66 72 6f 6d 20 52 4f 4f 54 20 75 6e 64 .that.serves.files.from.ROOT.und
5b60 65 72 20 74 68 65 20 72 6f 75 74 65 20 4e 41 4d 45 2e 0a 0a 20 20 20 20 28 68 74 74 70 64 2d 64 er.the.route.NAME.......(httpd-d
5b80 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 20 6d 79 2f 77 77 77 20 5c 22 2f 76 61 72 2f 77 77 ef-file-servlet.my/www.\"/var/ww
5ba0 77 2f 5c 22 29 0a 0a 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 68 61 6e 64 6c 65 73 20 72 65 64 w/\")..Automatically.handles.red
5bc0 69 72 65 63 74 73 20 61 6e 64 20 75 73 65 73 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f irects.and.uses.`httpd-serve-roo
5be0 74 27 20 74 6f 0a 61 63 74 75 61 6c 6c 79 20 73 65 72 76 65 20 75 70 20 66 69 6c 65 73 2e 22 0a t'.to.actually.serve.up.files.".
5c00 20 20 28 6c 65 74 2a 20 28 28 73 68 6f 72 74 2d 72 6f 6f 74 20 28 64 69 72 65 63 74 6f 72 79 2d ..(let*.((short-root.(directory-
5c20 66 69 6c 65 2d 6e 61 6d 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 29 29 0a 20 file-name.(symbol-name.name)))..
5c40 20 20 20 20 20 20 20 20 28 70 61 74 68 2d 72 6f 6f 74 20 28 63 6f 6e 63 61 74 20 73 68 6f 72 74 ........(path-root.(concat.short
5c60 2d 72 6f 6f 74 20 22 2f 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 68 6f 70 20 28 6c 65 6e 67 -root."/"))..........(chop.(leng
5c80 74 68 20 70 61 74 68 2d 72 6f 6f 74 29 29 29 0a 20 20 20 20 60 28 64 65 66 73 65 72 76 6c 65 74 th.path-root))).....`(defservlet
5ca0 20 2c 6e 61 6d 65 20 6e 69 6c 20 28 75 72 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71 75 65 .,name.nil.(uri-path.query.reque
5cc0 73 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 st)........(setf.httpd--header-s
5ce0 65 6e 74 20 74 29 20 3b 20 44 6f 6e 27 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 20 74 68 69 73 ent.t).;.Don't.actually.use.this
5d00 20 74 65 6d 70 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 6c 65 6e 67 .temp.buffer........(if.(=.(leng
5d20 74 68 20 75 72 69 2d 70 61 74 68 29 20 2c 63 68 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 th.uri-path).,chop)............(
5d40 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 74 20 2c 70 61 74 68 2d 72 6f 6f 74 29 0a 20 20 20 httpd-redirect.t.,path-root)....
5d60 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 74 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 ......(let.((path.(substring.uri
5d80 2d 70 61 74 68 20 2c 63 68 6f 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 -path.,chop)))............(httpd
5da0 2d 73 65 72 76 65 2d 72 6f 6f 74 20 74 20 2c 72 6f 6f 74 20 70 61 74 68 20 72 65 71 75 65 73 74 -serve-root.t.,root.path.request
5dc0 29 29 29 29 29 29 0a 0a 3b 3b 20 52 65 71 75 65 73 74 20 70 61 72 73 69 6e 67 0a 0a 28 64 65 66 ))))))..;;.Request.parsing..(def
5de0 75 6e 20 68 74 74 70 64 2d 2d 6e 6f 72 6d 61 6c 69 7a 65 2d 68 65 61 64 65 72 20 28 68 65 61 64 un.httpd--normalize-header.(head
5e00 65 72 29 0a 20 20 22 44 65 73 74 72 75 63 74 69 76 65 6c 79 20 63 61 70 69 74 61 6c 69 7a 65 20 er)..."Destructively.capitalize.
5e20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 48 45 41 44 45 52 2e 22 0a 20 20 28 6d 61 the.components.of.HEADER."...(ma
5e40 70 63 6f 6e 63 61 74 20 23 27 63 61 70 69 74 61 6c 69 7a 65 20 28 73 70 6c 69 74 2d 73 74 72 69 pconcat.#'capitalize.(split-stri
5e60 6e 67 20 68 65 61 64 65 72 20 22 2d 22 29 20 22 2d 22 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 ng.header."-")."-"))..(defun.htt
5e80 70 64 2d 70 61 72 73 65 20 28 29 0a 20 20 22 50 61 72 73 65 20 48 54 54 50 20 68 65 61 64 65 72 pd-parse.()..."Parse.HTTP.header
5ea0 20 69 6e 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 69 6e 74 6f 20 61 73 73 6f 63 69 61 74 .in.current.buffer.into.associat
5ec0 69 6f 6e 20 6c 69 73 74 2e 0a 4c 65 61 76 65 73 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 74 68 ion.list..Leaves.the.point.at.th
5ee0 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 20 63 6f 6e 74 65 6e 74 2e 20 e.start.of.the.request.content..
5f00 52 65 74 75 72 6e 73 20 6e 69 6c 0a 69 66 20 69 74 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73 Returns.nil.if.it.failed.to.pars
5f20 65 20 61 20 63 6f 6d 70 6c 65 74 65 20 48 54 54 50 20 68 65 61 64 65 72 2e 22 0a 20 20 28 67 6f e.a.complete.HTTP.header."...(go
5f40 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 28 77 68 65 6e 20 28 6c 6f to-char.(point-min))...(when.(lo
5f60 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 5e 20 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 5d 2b 5c oking-at."\\([^.]+\\).+\\([^.]+\
5f80 5c 29 20 2b 5c 5c 28 5b 5e 5c 72 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 28 6c 65 74 20 \).+\\([^\r]+\\)\r\n").....(let.
5fa0 28 28 6d 65 74 68 6f 64 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20 20 20 ((method.(match-string.1))......
5fc0 20 20 20 20 20 28 70 61 74 68 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 .....(path.(decode-coding-string
5fe0 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 32 29 20 27 69 73 6f 2d 38 38 35 39 2d 31 29 29 0a .(match-string.2).'iso-8859-1)).
6000 20 20 20 20 20 20 20 20 20 20 28 76 65 72 73 69 6f 6e 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 ..........(version.(match-string
6020 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 73 20 28 29 29 29 0a 20 20 20 .3))...........(headers.()))....
6040 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 ...(goto-char.(match-end.0))....
6060 20 20 20 28 77 68 69 6c 65 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 2d 21 23 2d 27 ...(while.(looking-at."\\([-!#-'
6080 2a 2b 2e 30 2d 39 41 2d 5a 5e 5f 60 61 2d 7a 7c 7e 5d 2b 5c 5c 29 3a 20 2a 5c 5c 28 5b 5e 5c 72 *+.0-9A-Z^_`a-z|~]+\\):.*\\([^\r
60a0 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 ]+\\)\r\n").........(goto-char.(
60c0 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e 61 6d match-end.0)).........(let.((nam
60e0 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 e.(match-string.1)).............
6100 20 20 28 76 61 6c 75 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 32 29 29 29 0a 20 20 20 20 ..(value.(match-string.2))).....
6120 20 20 20 20 20 20 28 70 75 73 68 20 28 6c 69 73 74 20 28 68 74 74 70 64 2d 2d 6e 6f 72 6d 61 6c ......(push.(list.(httpd--normal
6140 69 7a 65 2d 68 65 61 64 65 72 20 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ize-header.name)................
6160 20 20 20 20 20 20 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 20 76 61 6c .......(decode-coding-string.val
6180 75 65 20 27 69 73 6f 2d 38 38 35 39 2d 31 29 29 20 68 65 61 64 65 72 73 29 29 29 0a 20 20 20 20 ue.'iso-8859-1)).headers))).....
61a0 20 20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 ..(when.(looking-at."\r\n").....
61c0 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 ....(goto-char.(match-end.0))...
61e0 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 6d 65 74 68 6f 64 20 70 61 74 68 20 76 65 ......(cons.(list.method.path.ve
6200 72 73 69 6f 6e 29 20 28 6e 72 65 76 65 72 73 65 20 68 65 61 64 65 72 73 29 29 29 29 29 29 0a 0a rsion).(nreverse.headers))))))..
6220 28 64 65 66 75 6e 20 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 74 72 29 0a 20 20 22 46 75 6c 6c (defun.httpd-unhex.(str)..."Full
6240 79 20 64 65 63 6f 64 65 20 74 68 65 20 55 52 4c 20 65 6e 63 6f 64 69 6e 67 20 69 6e 20 53 54 52 y.decode.the.URL.encoding.in.STR
6260 20 28 69 6e 63 6c 75 64 69 6e 67 20 2b 27 73 29 2e 22 0a 20 20 28 77 68 65 6e 20 73 74 72 0a 20 .(including.+'s)."...(when.str..
6280 20 20 20 28 6c 65 74 20 28 28 6e 6f 6e 70 6c 75 73 73 65 64 20 28 72 65 70 6c 61 63 65 2d 72 65 ...(let.((nonplussed.(replace-re
62a0 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 2b 22 gexp-in-string.(regexp-quote."+"
62c0 29 20 22 20 22 20 73 74 72 29 29 29 0a 20 20 20 20 20 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e ).".".str))).......(decode-codin
62e0 67 2d 73 74 72 69 6e 67 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 6e 6f 6e 70 6c g-string.(url-unhex-string.nonpl
6300 75 73 73 65 64 20 74 29 20 27 75 74 66 2d 38 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 ussed.t).'utf-8))))..(defun.http
6320 64 2d 70 61 72 73 65 2d 61 72 67 73 20 28 61 72 67 73 74 72 29 0a 20 20 22 50 61 72 73 65 20 61 d-parse-args.(argstr)..."Parse.a
6340 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 55 52 4c 20 65 6e 63 6f 64 65 64 20 61 .string.containing.URL.encoded.a
6360 72 67 75 6d 65 6e 74 73 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 7a 65 72 6f 70 20 28 6c 65 6e rguments."...(unless.(zerop.(len
6380 67 74 68 20 61 72 67 73 74 72 29 29 0a 20 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 6d 62 64 61 gth.argstr)).....(mapcar.(lambda
63a0 20 28 73 74 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27 68 74 .(str)...............(mapcar.'ht
63c0 74 70 64 2d 75 6e 68 65 78 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 73 74 72 20 22 3d 22 29 tpd-unhex.(split-string.str."=")
63e0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 61 72 67 )).............(split-string.arg
6400 73 74 72 20 22 26 22 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 2d str."&"))))..(defun.httpd-parse-
6420 75 72 69 20 28 75 72 69 29 0a 20 20 22 53 70 6c 69 74 20 61 20 55 52 49 20 69 6e 74 6f 20 69 74 uri.(uri)..."Split.a.URI.into.it
6440 73 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0a 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 s.components..The.first.element.
6460 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 63 72 69 70 of.the.return.value.is.the.scrip
6480 74 20 70 61 74 68 2c 20 74 68 65 0a 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 69 73 20 61 6e t.path,.the.second.element.is.an
64a0 20 61 6c 69 73 74 20 6f 66 20 76 61 72 69 61 62 6c 65 2f 76 61 6c 75 65 20 70 61 69 72 73 2c 20 .alist.of.variable/value.pairs,.
64c0 61 6e 64 20 74 68 65 20 74 68 69 72 64 0a 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 66 72 61 and.the.third.element.is.the.fra
64e0 67 6d 65 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 70 31 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 gment."...(let.((p1.(string-matc
6500 68 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 3f 22 29 20 75 72 69 29 29 0a 20 20 20 20 20 h.(regexp-quote."?").uri))......
6520 20 20 20 28 70 32 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 2d 71 75 6f ...(p2.(string-match.(regexp-quo
6540 74 65 20 22 23 22 29 20 75 72 69 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 76 61 6c 29 0a 20 20 te."#").uri)).........retval)...
6560 20 20 28 70 75 73 68 20 28 69 66 20 70 32 20 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 75 62 ..(push.(if.p2.(httpd-unhex.(sub
6580 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b 20 70 32 29 29 29 29 20 72 65 74 76 61 6c 29 0a 20 20 string.uri.(1+.p2)))).retval)...
65a0 20 20 28 70 75 73 68 20 28 69 66 20 70 31 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 73 ..(push.(if.p1.(httpd-parse-args
65c0 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b 20 70 31 29 20 70 32 29 29 29 20 72 65 .(substring.uri.(1+.p1).p2))).re
65e0 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 30 tval).....(push.(substring.uri.0
6600 20 28 6f 72 20 70 31 20 70 32 29 29 20 72 65 74 76 61 6c 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 .(or.p1.p2)).retval)))..(defun.h
6620 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 45 73 ttpd-escape-html-buffer.()..."Es
6640 63 61 70 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 cape.current.buffer.contents.to.
6660 62 65 20 73 61 66 65 20 66 6f 72 20 69 6e 73 65 72 74 69 6e 67 20 69 6e 74 6f 20 48 54 4d 4c 2e be.safe.for.inserting.into.HTML.
6680 22 0a 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 28 77 "...(goto-char.(point-min))...(w
66a0 68 69 6c 65 20 28 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22 5b 3c 3e hile.(search-forward-regexp."[<>
66c0 26 5d 22 20 6e 69 6c 20 74 29 0a 20 20 20 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 0a 20 20 &]".nil.t).....(replace-match...
66e0 20 20 20 28 63 6c 2d 63 61 73 65 20 28 61 72 65 66 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 ...(cl-case.(aref.(match-string.
6700 30 29 20 30 29 0a 20 20 20 20 20 20 20 28 3f 3c 20 22 26 6c 74 3b 22 29 0a 20 20 20 20 20 20 20 0).0)........(?<."&lt;")........
6720 28 3f 3e 20 22 26 67 74 3b 22 29 0a 20 20 20 20 20 20 20 28 3f 26 20 22 26 61 6d 70 3b 22 29 29 (?>."&gt;")........(?&."&amp;"))
6740 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 20 28 73 )))..(defun.httpd-escape-html.(s
6760 74 72 69 6e 67 29 0a 20 20 22 45 73 63 61 70 65 20 53 54 52 49 4e 47 20 73 6f 20 74 68 61 74 20 tring)..."Escape.STRING.so.that.
6780 69 74 27 73 20 73 61 66 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 61 6e 20 48 54 4d 4c it's.safe.to.insert.into.an.HTML
67a0 20 64 6f 63 75 6d 65 6e 74 2e 22 0a 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a .document."...(with-temp-buffer.
67c0 20 20 20 20 28 69 6e 73 65 72 74 20 73 74 72 69 6e 67 29 0a 20 20 20 20 28 68 74 74 70 64 2d 65 ....(insert.string).....(httpd-e
67e0 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a 20 20 20 20 28 62 75 66 66 65 72 2d 73 scape-html-buffer).....(buffer-s
6800 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 50 61 74 68 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 64 65 66 tring)))..;;.Path.handling..(def
6820 75 6e 20 68 74 74 70 64 2d 73 74 61 74 75 73 20 28 70 61 74 68 29 0a 20 20 22 44 65 74 65 72 6d un.httpd-status.(path)..."Determ
6840 69 6e 65 20 73 74 61 74 75 73 20 63 6f 64 65 20 66 6f 72 20 50 41 54 48 2e 22 0a 20 20 28 63 6f ine.status.code.for.PATH."...(co
6860 6e 64 0a 20 20 20 28 28 6e 6f 74 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 70 61 74 68 29 nd....((not.(file-exists-p.path)
6880 29 20 20 20 34 30 34 29 0a 20 20 20 28 28 6e 6f 74 20 28 66 69 6c 65 2d 72 65 61 64 61 62 6c 65 )...404)....((not.(file-readable
68a0 2d 70 20 70 61 74 68 29 29 20 34 30 33 29 0a 20 20 20 28 28 61 6e 64 20 28 66 69 6c 65 2d 64 69 -p.path)).403)....((and.(file-di
68c0 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 29 20 28 6e 6f 74 20 68 74 74 70 64 2d 6c 69 73 74 69 rectory-p.path).(not.httpd-listi
68e0 6e 67 73 29 29 20 34 30 33 29 0a 20 20 20 28 32 30 30 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 ngs)).403)....(200)))..(defun.ht
6900 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 28 70 61 74 68 29 0a 20 20 22 43 6c 65 61 6e 20 64 tpd-clean-path.(path)..."Clean.d
6920 61 6e 67 65 72 6f 75 73 20 2e 2e 20 66 72 6f 6d 20 50 41 54 48 20 61 6e 64 20 72 65 6d 6f 76 65 angerous....from.PATH.and.remove
6940 20 74 68 65 20 6c 65 61 64 69 6e 67 20 73 6c 61 73 68 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 73 .the.leading.slash."...(let*.((s
6960 65 70 20 28 69 66 20 28 6d 65 6d 62 65 72 20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 28 77 69 6e ep.(if.(member.system-type.'(win
6980 64 6f 77 73 2d 6e 74 20 6d 73 2d 64 6f 73 29 29 20 22 5b 2f 5c 5c 5d 22 20 22 2f 22 29 29 0a 20 dows-nt.ms-dos))."[/\\]"."/"))..
69a0 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 20 28 64 65 6c 65 74 65 20 22 2e 2e 22 20 28 73 70 6c ........(split.(delete."..".(spl
69c0 69 74 2d 73 74 72 69 6e 67 20 70 61 74 68 20 73 65 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 it-string.path.sep)))..........(
69e0 75 6e 73 70 6c 69 74 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 64 65 unsplit.(mapconcat.'identity.(de
6a00 6c 65 74 65 20 22 22 20 73 70 6c 69 74 29 20 22 2f 22 29 29 29 0a 20 20 20 20 28 63 6f 6e 63 61 lete."".split)."/"))).....(conca
6a20 74 20 22 2e 2f 22 20 75 6e 73 70 6c 69 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d t."./".unsplit)))..(defun.httpd-
6a40 67 65 6e 2d 70 61 74 68 20 28 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 72 6f 6f 74 29 0a 20 gen-path.(path.&optional.root)..
6a60 20 22 54 72 61 6e 73 6c 61 74 65 20 47 45 54 20 74 6f 20 73 65 63 75 72 65 20 70 61 74 68 20 69 ."Translate.GET.to.secure.path.i
6a80 6e 20 52 4f 4f 54 20 28 60 68 74 74 70 64 2d 72 6f 6f 74 27 29 2e 22 0a 20 20 28 6c 65 74 20 28 n.ROOT.(`httpd-root')."...(let.(
6aa0 28 63 6c 65 61 6e 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 68 74 74 70 64 2d (clean.(expand-file-name.(httpd-
6ac0 63 6c 65 61 6e 2d 70 61 74 68 20 70 61 74 68 29 20 28 6f 72 20 72 6f 6f 74 20 68 74 74 70 64 2d clean-path.path).(or.root.httpd-
6ae0 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 root)))).....(if.(file-directory
6b00 2d 70 20 63 6c 65 61 6e 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 64 69 72 20 28 66 -p.clean).........(let*.((dir.(f
6b20 69 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 72 65 63 74 6f 72 79 20 63 6c 65 61 6e 29 29 0a 20 20 ile-name-as-directory.clean))...
6b40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 65 73 20 28 63 6c 2d 6d 61 70 63 61 72 .............(indexes.(cl-mapcar
6b60 20 28 61 70 70 6c 79 2d 70 61 72 74 69 61 6c 6c 79 20 27 63 6f 6e 63 61 74 20 64 69 72 29 20 68 .(apply-partially.'concat.dir).h
6b80 74 74 70 64 2d 69 6e 64 65 78 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ttpd-indexes))................(e
6ba0 78 69 73 74 69 6e 67 20 28 63 6c 2d 72 65 6d 6f 76 65 2d 69 66 2d 6e 6f 74 20 27 66 69 6c 65 2d xisting.(cl-remove-if-not.'file-
6bc0 65 78 69 73 74 73 2d 70 20 69 6e 64 65 78 65 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6f exists-p.indexes)))...........(o
6be0 72 20 28 63 61 72 20 65 78 69 73 74 69 6e 67 29 20 64 69 72 29 29 0a 20 20 20 20 20 20 63 6c 65 r.(car.existing).dir)).......cle
6c00 61 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 74 2d 73 65 72 76 6c 65 74 20 an)))..(defun.httpd-get-servlet.
6c20 28 75 72 69 2d 70 61 74 68 29 0a 20 20 22 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 65 72 76 (uri-path)..."Determine.the.serv
6c40 6c 65 74 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 55 52 49 2d 50 41 54 48 2e let.to.be.executed.for.URI-PATH.
6c60 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 29 0a 20 20 20 "...(if.(not.httpd-servlets)....
6c80 20 20 20 27 68 74 74 70 64 2f 0a 20 20 20 20 28 63 6c 2d 6c 61 62 65 6c 73 20 28 28 63 61 74 20 ...'httpd/.....(cl-labels.((cat.
6ca0 28 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 22 68 (x)...................(concat."h
6cc0 74 74 70 64 2f 22 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 72 65 76 ttpd/".(mapconcat.'identity.(rev
6ce0 65 72 73 65 20 78 29 20 22 2f 22 29 29 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 72 erse.x)."/")))).......(let.((par
6d00 74 73 20 28 63 64 72 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 28 64 69 72 65 63 74 6f 72 79 ts.(cdr.(split-string.(directory
6d20 2d 66 69 6c 65 2d 6e 61 6d 65 20 75 72 69 2d 70 61 74 68 29 20 22 2f 22 29 29 29 29 0a 20 20 20 -file-name.uri-path)."/"))))....
6d40 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 69 66 20 27 66 .....(or..........(cl-find-if.'f
6d60 62 6f 75 6e 64 70 20 28 6d 61 70 63 61 72 20 27 69 6e 74 65 72 6e 2d 73 6f 66 74 0a 20 20 20 20 boundp.(mapcar.'intern-soft.....
6d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
6da0 20 20 28 63 6c 2d 6d 61 70 6c 69 73 74 20 23 27 63 61 74 20 28 72 65 76 65 72 73 65 20 70 61 72 ..(cl-maplist.#'cat.(reverse.par
6dc0 74 73 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 27 68 74 74 70 64 2f 29 29 29 29 29 0a 0a 28 64 ts))))..........'httpd/)))))..(d
6de0 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 28 70 72 6f 63 20 72 6f 6f 74 efun.httpd-serve-root.(proc.root
6e00 20 75 72 69 2d 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 71 75 65 73 74 29 0a 20 20 22 .uri-path.&optional.request)..."
6e20 53 65 63 75 72 65 6c 79 20 73 65 72 76 65 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 52 4f 4f 54 20 Securely.serve.a.file.from.ROOT.
6e40 66 72 6f 6d 20 75 6e 64 65 72 20 50 41 54 48 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 74 68 from.under.PATH."...(let*.((path
6e60 20 28 68 74 74 70 64 2d 67 65 6e 2d 70 61 74 68 20 75 72 69 2d 70 61 74 68 20 72 6f 6f 74 29 29 .(httpd-gen-path.uri-path.root))
6e80 0a 20 20 20 20 20 20 20 20 20 28 73 74 61 74 75 73 20 28 68 74 74 70 64 2d 73 74 61 74 75 73 20 ..........(status.(httpd-status.
6ea0 70 61 74 68 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 28 28 6e 6f 74 20 28 3d 20 path))).....(cond......((not.(=.
6ec0 73 74 61 74 75 73 20 32 30 30 29 29 20 20 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 20 20 20 status.200))....(httpd-error....
6ee0 20 20 20 20 20 20 70 72 6f 63 20 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 28 28 66 69 6c 65 2d ......proc.status))......((file-
6f00 64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 29 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 64 69 directory-p.path).(httpd-send-di
6f20 72 65 63 74 6f 72 79 20 70 72 6f 63 20 70 61 74 68 20 75 72 69 2d 70 61 74 68 29 29 0a 20 20 20 rectory.proc.path.uri-path))....
6f40 20 20 28 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 ..(t.......................(http
6f60 64 2d 73 65 6e 64 2d 66 69 6c 65 20 20 20 20 20 20 70 72 6f 63 20 70 61 74 68 20 72 65 71 75 65 d-send-file......proc.path.reque
6f80 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2f 20 28 70 72 6f 63 20 75 72 69 st)))))..(defun.httpd/.(proc.uri
6fa0 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71 75 65 73 74 29 0a 20 20 22 44 65 66 61 75 6c 74 20 -path.query.request)..."Default.
6fc0 72 6f 6f 74 20 73 65 72 76 6c 65 74 20 77 68 69 63 68 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 root.servlet.which.serves.files.
6fe0 77 68 65 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 69 73 20 54 2e 22 0a 20 20 when.httpd-serve-files.is.T."...
7000 28 69 66 20 28 61 6e 64 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 68 74 74 70 64 (if.(and.httpd-serve-files.httpd
7020 2d 72 6f 6f 74 29 0a 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 70 -root).......(httpd-serve-root.p
7040 72 6f 63 20 68 74 74 70 64 2d 72 6f 6f 74 20 75 72 69 2d 70 61 74 68 20 72 65 71 75 65 73 74 29 roc.httpd-root.uri-path.request)
7060 0a 20 20 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 70 72 6f 63 20 34 30 33 29 29 29 0a 0a 28 .....(httpd-error.proc.403)))..(
7080 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 74 2d 6d 69 6d 65 20 28 65 78 74 29 0a 20 20 22 46 65 defun.httpd-get-mime.(ext)..."Fe
70a0 74 63 68 20 4d 49 4d 45 20 74 79 70 65 20 67 69 76 65 6e 20 74 68 65 20 66 69 6c 65 20 65 78 74 tch.MIME.type.given.the.file.ext
70c0 65 6e 74 69 6f 6e 2e 22 0a 20 20 28 6f 72 20 28 61 6e 64 20 65 78 74 20 28 63 64 72 20 28 61 73 ention."...(or.(and.ext.(cdr.(as
70e0 73 6f 63 20 28 64 6f 77 6e 63 61 73 65 20 65 78 74 29 20 68 74 74 70 64 2d 6d 69 6d 65 2d 74 79 soc.(downcase.ext).httpd-mime-ty
7100 70 65 73 29 29 29 0a 20 20 20 20 20 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d pes)))......."application/octet-
7120 73 74 72 65 61 6d 22 29 29 0a 0a 3b 3b 20 44 61 74 61 20 73 65 6e 64 69 6e 67 20 66 75 6e 63 74 stream"))..;;.Data.sending.funct
7140 69 6f 6e 73 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 28 ions..(defun.httpd-send-header.(
7160 70 72 6f 63 20 6d 69 6d 65 20 73 74 61 74 75 73 20 26 72 65 73 74 20 68 65 61 64 65 72 2d 6b 65 proc.mime.status.&rest.header-ke
7180 79 73 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 48 54 54 50 20 68 65 61 64 65 72 20 77 69 74 68 20 ys)..."Send.an.HTTP.header.with.
71a0 67 69 76 65 6e 20 4d 49 4d 45 20 74 79 70 65 20 61 6e 64 20 53 54 41 54 55 53 2c 20 66 6f 6c 6c given.MIME.type.and.STATUS,.foll
71c0 6f 77 65 64 0a 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2e 20 49 66 20 50 owed.by.the.current.buffer..If.P
71e0 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d ROC.is.T.use.the.`httpd-current-
7200 70 72 6f 63 27 0a 61 73 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0a 0a 45 78 74 72 61 20 68 65 61 proc'.as.the.process...Extra.hea
7220 64 65 72 73 20 63 61 6e 20 62 65 20 73 65 6e 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20 74 68 ders.can.be.sent.by.supplying.th
7240 65 6d 20 6c 69 6b 65 20 6b 65 79 77 6f 72 64 73 2c 20 69 2e 65 2e 0a 0a 20 28 68 74 74 70 64 2d em.like.keywords,.i.e....(httpd-
7260 73 65 6e 64 2d 68 65 61 64 65 72 20 74 20 5c 22 74 65 78 74 2f 70 6c 61 69 6e 5c 22 20 32 30 30 send-header.t.\"text/plain\".200
7280 20 3a 58 2d 50 6f 77 65 72 65 64 2d 42 79 20 5c 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 5c 22 29 .:X-Powered-By.\"simple-httpd\")
72a0 22 0a 20 20 28 6c 65 74 20 28 28 73 74 61 74 75 73 2d 73 74 72 20 28 63 64 72 20 28 61 73 73 71 "...(let.((status-str.(cdr.(assq
72c0 20 73 74 61 74 75 73 20 68 74 74 70 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 29 29 29 0a 20 20 .status.httpd-status-codes)))...
72e0 20 20 20 20 20 20 28 68 65 61 64 65 72 73 20 60 28 28 22 53 65 72 76 65 72 22 20 2e 20 2c 68 74 ......(headers.`(("Server"...,ht
7300 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tpd-server-name)................
7320 20 20 20 20 28 22 44 61 74 65 22 20 2e 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e ....("Date"...,(httpd-date-strin
7340 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 22 43 6f 6e 6e 65 63 74 g))....................("Connect
7360 69 6f 6e 22 20 2e 20 22 6b 65 65 70 2d 61 6c 69 76 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 ion"..."keep-alive")............
7380 20 20 20 20 20 20 20 20 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 20 2e 20 2c 28 68 74 74 70 ........("Content-Type"...,(http
73a0 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 6d 69 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 d--stringify.mime)).............
73c0 20 20 20 20 20 20 20 28 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 22 20 2e 20 2c 28 68 74 74 .......("Content-Length"...,(htt
73e0 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a 65 29 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65 73 73 pd--buffer-size))))).....(unless
7400 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20 20 20 20 28 73 65 74 66 20 .httpd--header-sent.......(setf.
7420 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 0a 20 20 20 20 20 20 28 77 69 74 httpd--header-sent.t).......(wit
7440 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 h-temp-buffer.........(insert.(f
7460 6f 72 6d 61 74 20 22 48 54 54 50 2f 31 2e 31 20 25 64 20 25 73 5c 72 5c 6e 22 20 73 74 61 74 75 ormat."HTTP/1.1.%d.%s\r\n".statu
7480 73 20 73 74 61 74 75 73 2d 73 74 72 29 29 0a 20 20 20 20 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 s.status-str)).........(cl-loop.
74a0 66 6f 72 20 28 68 65 61 64 65 72 20 76 61 6c 75 65 29 20 6f 6e 20 68 65 61 64 65 72 2d 6b 65 79 for.(header.value).on.header-key
74c0 73 20 62 79 20 23 27 63 64 64 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 s.by.#'cddr..................for
74e0 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 3d 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 79 6d 62 6f .header-name.=.(substring.(symbo
7500 6c 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 l-name.header).1)...............
7520 20 20 20 66 6f 72 20 76 61 6c 75 65 2d 6e 61 6d 65 20 3d 20 28 66 6f 72 6d 61 74 20 22 25 73 22 ...for.value-name.=.(format."%s"
7540 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 .value)..................collect
7560 20 28 63 6f 6e 73 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 76 61 6c 75 65 2d 6e 61 6d 65 29 20 69 .(cons.header-name.value-name).i
7580 6e 74 6f 20 65 78 74 72 61 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 nto.extras..................fina
75a0 6c 6c 79 20 28 73 65 74 66 20 68 65 61 64 65 72 73 20 28 6e 63 6f 6e 63 20 68 65 61 64 65 72 73 lly.(setf.headers.(nconc.headers
75c0 20 65 78 74 72 61 73 29 29 29 0a 20 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 68 65 61 64 .extras))).........(dolist.(head
75e0 65 72 20 68 65 61 64 65 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 er.headers)...........(insert.(f
7600 6f 72 6d 61 74 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22 20 28 63 61 72 20 68 65 61 64 65 72 29 20 ormat."%s:.%s\r\n".(car.header).
7620 28 63 64 72 20 68 65 61 64 65 72 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 (cdr.header)))).........(insert.
7640 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 72 65 "\r\n").........(process-send-re
7660 67 69 6f 6e 20 28 68 74 74 70 64 2d 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 70 72 6f 63 29 0a 20 gion.(httpd-resolve-proc.proc)..
7680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6f 69 ............................(poi
76a0 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f nt-min).(point-max))).......(pro
76c0 63 65 73 73 2d 73 65 6e 64 2d 72 65 67 69 6f 6e 20 28 68 74 74 70 64 2d 72 65 73 6f 6c 76 65 2d cess-send-region.(httpd-resolve-
76e0 70 72 6f 63 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 proc.proc)......................
7700 20 20 20 20 20 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 ......(point-min).(point-max))))
7720 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 28 70 72 6f 63 20 70 )..(defun.httpd-redirect.(proc.p
7740 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 63 6f 64 65 29 0a 20 20 22 52 65 64 69 72 65 63 74 20 ath.&optional.code)..."Redirect.
7760 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 50 41 54 48 20 28 64 65 66 61 75 6c 74 20 33 30 31 29 the.client.to.PATH.(default.301)
7780 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 0a 74 68 65 20 60 68 74 74 70 64 2d 63 75 ..If.PROC.is.T.use.the.`httpd-cu
77a0 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f 63 65 73 73 2e 22 0a 20 20 28 rrent-proc'.as.the.process."...(
77c0 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20 27 72 65 64 69 72 65 63 74 20 70 61 74 68 29 29 httpd-log.(list.'redirect.path))
77e0 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 77 69 74 ...(httpd-discard-buffer)...(wit
7800 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 h-temp-buffer.....(httpd-send-he
7820 61 64 65 72 20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 28 6f 72 20 63 6f 64 65 20 ader.proc."text/plain".(or.code.
7840 33 30 31 29 20 3a 4c 6f 63 61 74 69 6f 6e 20 70 61 74 68 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 301).:Location.path)))..(defun.h
7860 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 20 28 70 72 6f 63 20 70 61 74 68 20 26 6f 70 74 69 6f ttpd-send-file.(proc.path.&optio
7880 6e 61 6c 20 72 65 71 29 0a 20 20 22 53 65 72 76 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 67 69 nal.req)..."Serve.file.to.the.gi
78a0 76 65 6e 20 63 6c 69 65 6e 74 2e 20 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 ven.client...If.PROC.is.T.use.th
78c0 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 e.`httpd-current-proc'.as.the.pr
78e0 6f 63 65 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 ocess."...(httpd-discard-buffer)
7900 0a 20 20 28 6c 65 74 20 28 28 72 65 71 2d 65 74 61 67 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 ...(let.((req-etag.(cadr.(assoc.
7920 22 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 22 20 72 65 71 29 29 29 0a 20 20 20 20 20 20 20 20 28 "If-None-Match".req))).........(
7940 65 74 61 67 20 28 68 74 74 70 64 2d 65 74 61 67 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 etag.(httpd-etag.path)).........
7960 28 6d 74 69 6d 65 20 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e 67 20 28 6e 74 68 20 34 (mtime.(httpd-date-string.(nth.4
7980 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 74 65 73 20 70 61 74 68 29 29 29 29 29 0a 20 20 20 20 .(file-attributes.path))))).....
79a0 28 69 66 20 28 65 71 75 61 6c 20 72 65 71 2d 65 74 61 67 20 65 74 61 67 29 0a 20 20 20 20 20 20 (if.(equal.req-etag.etag).......
79c0 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 68 ..(with-temp-buffer...........(h
79e0 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c 65 20 2c 70 61 74 68 20 6e 6f 74 2d 6d 6f 64 69 66 69 ttpd-log.`(file.,path.not-modifi
7a00 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 ed))...........(httpd-send-heade
7a20 72 20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 33 30 34 29 29 0a 20 20 20 20 20 20 r.proc."text/plain".304)).......
7a40 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c 65 20 2c 70 61 74 68 29 29 0a 20 20 20 20 20 20 (httpd-log.`(file.,path)).......
7a60 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 73 65 74 2d 62 (with-temp-buffer.........(set-b
7a80 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 28 69 6e uffer-multibyte.nil).........(in
7aa0 73 65 72 74 2d 66 69 6c 65 2d 63 6f 6e 74 65 6e 74 73 2d 6c 69 74 65 72 61 6c 6c 79 20 70 61 74 sert-file-contents-literally.pat
7ac0 68 29 0a 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 h).........(httpd-send-header.pr
7ae0 6f 63 20 28 68 74 74 70 64 2d 67 65 74 2d 6d 69 6d 65 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 65 78 oc.(httpd-get-mime.(file-name-ex
7b00 74 65 6e 73 69 6f 6e 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tension.path))..................
7b20 20 20 20 20 20 20 20 20 20 20 32 30 30 20 3a 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 20 6d 74 69 ..........200.:Last-Modified.mti
7b40 6d 65 20 3a 45 54 61 67 20 65 74 61 67 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 me.:ETag.etag)))))..(defun.httpd
7b60 2d 73 65 6e 64 2d 64 69 72 65 63 74 6f 72 79 20 28 70 72 6f 63 20 70 61 74 68 20 75 72 69 2d 70 -send-directory.(proc.path.uri-p
7b80 61 74 68 29 0a 20 20 22 53 65 72 76 65 20 61 20 66 69 6c 65 20 6c 69 73 74 69 6e 67 20 74 6f 20 ath)..."Serve.a.file.listing.to.
7ba0 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 the.client..If.PROC.is.T.use.the
7bc0 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f .`httpd-current-proc'.as.the.pro
7be0 63 65 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a cess."...(httpd-discard-buffer).
7c00 20 20 28 6c 65 74 20 28 28 74 69 74 6c 65 20 28 63 6f 6e 63 61 74 20 22 44 69 72 65 63 74 6f 72 ..(let.((title.(concat."Director
7c20 79 20 6c 69 73 74 69 6e 67 20 66 6f 72 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 y.listing.for.".................
7c40 20 20 20 20 20 20 20 28 75 72 6c 2d 69 6e 73 65 72 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e 2d 73 .......(url-insert-entities-in-s
7c60 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 tring.uri-path)))).....(if.(equa
7c80 6c 20 22 2f 22 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 20 2d 31 29 29 0a 20 l."/".(substring.uri-path.-1))..
7ca0 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 .......(with-temp-buffer........
7cc0 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 64 69 72 65 63 74 6f 72 79 20 2c 70 61 74 68 29 ...(httpd-log.`(directory.,path)
7ce0 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 21 44 4f 43 54 59 50 45 20 68 )...........(insert."<!DOCTYPE.h
7d00 74 6d 6c 3e 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 68 74 6d tml>\n")...........(insert."<htm
7d20 6c 3e 5c 6e 3c 68 65 61 64 3e 3c 74 69 74 6c 65 3e 22 20 74 69 74 6c 65 20 22 3c 2f 74 69 74 6c l>\n<head><title>".title."</titl
7d40 65 3e 3c 2f 68 65 61 64 3e 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 e></head>\n")...........(insert.
7d60 22 3c 62 6f 64 79 3e 5c 6e 3c 68 32 3e 22 20 74 69 74 6c 65 20 22 3c 2f 68 32 3e 5c 6e 3c 68 72 "<body>\n<h2>".title."</h2>\n<hr
7d80 2f 3e 5c 6e 3c 75 6c 3e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 66 69 />\n<ul>")...........(dolist.(fi
7da0 6c 65 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 73 20 70 61 74 68 29 29 0a 20 20 20 20 20 le.(directory-files.path))......
7dc0 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 65 71 20 3f 2e 20 28 61 72 65 66 20 66 69 6c 65 .......(unless.(eq.?..(aref.file
7de0 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 66 75 6c 6c 20 .0))...............(let*.((full.
7e00 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 66 69 6c 65 20 70 61 74 68 29 29 0a 20 20 (expand-file-name.file.path))...
7e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 61 69 6c 20 28 69 66 20 28 66 69 ...................(tail.(if.(fi
7e40 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 66 75 6c 6c 29 20 22 2f 22 20 22 22 29 29 0a 20 20 le-directory-p.full)."/".""))...
7e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 20 28 75 72 6c 2d 69 6e 73 65 72 ...................(f.(url-inser
7e80 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e 2d 73 74 72 69 6e 67 20 66 69 6c 65 29 29 0a 20 20 20 20 t-entities-in-string.file)).....
7ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 20 28 75 72 6c 2d 68 65 78 69 66 79 2d .................(l.(url-hexify-
7ec0 73 74 72 69 6e 67 20 66 69 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 string.file))).................(
7ee0 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 25 73 insert.(format."<li><a.href=\"%s
7f00 25 73 5c 22 3e 25 73 25 73 3c 2f 61 3e 3c 2f 6c 69 3e 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 %s\">%s%s</a></li>\n"...........
7f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 20 74 61 69 6c 20 66 20 74 ......................l.tail.f.t
7f40 61 69 6c 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 2f 75 6c ail)))))...........(insert."</ul
7f60 3e 5c 6e 3c 68 72 2f 3e 5c 6e 3c 2f 62 6f 64 79 3e 5c 6e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 >\n<hr/>\n</body>\n</html>")....
7f80 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 6f 63 20 22 .......(httpd-send-header.proc."
7fa0 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 20 32 30 30 29 29 0a text/html;.charset=utf-8".200)).
7fc0 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 70 72 6f 63 20 28 63 6f 6e 63 ......(httpd-redirect.proc.(conc
7fe0 61 74 20 75 72 69 2d 70 61 74 68 20 22 2f 22 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 at.uri-path."/")))))..(defun.htt
8000 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a 65 20 28 26 6f 70 74 69 6f 6e 61 6c 20 62 75 66 66 65 pd--buffer-size.(&optional.buffe
8020 72 29 0a 20 20 22 47 65 74 20 74 68 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 69 6e 20 62 79 74 r)..."Get.the.buffer.size.in.byt
8040 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 6f 72 69 67 20 65 6e 61 62 6c 65 2d 6d 75 6c 74 69 62 es."...(let.((orig.enable-multib
8060 79 74 65 2d 63 68 61 72 61 63 74 65 72 73 29 0a 20 20 20 20 20 20 20 20 28 73 69 7a 65 20 30 29 yte-characters).........(size.0)
8080 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 6f 72 20 62 ).....(with-current-buffer.(or.b
80a0 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 28 73 uffer.(current-buffer)).......(s
80c0 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 28 et-buffer-multibyte.nil).......(
80e0 73 65 74 66 20 73 69 7a 65 20 28 62 75 66 66 65 72 2d 73 69 7a 65 29 29 0a 20 20 20 20 20 20 28 setf.size.(buffer-size)).......(
8100 69 66 20 6f 72 69 67 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6f 72 if.orig.(set-buffer-multibyte.or
8120 69 67 29 29 29 0a 20 20 20 20 73 69 7a 65 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 ig))).....size))..(defun.httpd-e
8140 72 72 6f 72 20 28 70 72 6f 63 20 73 74 61 74 75 73 20 26 6f 70 74 69 6f 6e 61 6c 20 69 6e 66 6f rror.(proc.status.&optional.info
8160 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 65 72 72 6f 72 20 70 61 67 65 20 61 70 70 72 6f 70 72 69 )..."Send.an.error.page.appropri
8180 61 74 65 20 66 6f 72 20 53 54 41 54 55 53 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2c 0a 6f 70 ate.for.STATUS.to.the.client,.op
81a0 74 69 6f 6e 61 6c 6c 79 20 69 6e 73 65 72 74 69 6e 67 20 6f 62 6a 65 63 74 20 49 4e 46 4f 20 69 tionally.inserting.object.INFO.i
81c0 6e 74 6f 20 70 61 67 65 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 0a 60 nto.page..If.PROC.is.T.use.the.`
81e0 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f 63 65 httpd-current-proc'.as.the.proce
8200 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 ss."...(httpd-discard-buffer)...
8220 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 65 72 72 6f 72 20 2c 73 74 61 74 75 73 20 2c 69 6e 66 6f (httpd-log.`(error.,status.,info
8240 29 29 0a 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 6c 65 74 20 ))...(with-temp-buffer.....(let.
8260 28 28 68 74 6d 6c 20 28 6f 72 20 28 63 64 72 20 28 61 73 73 71 20 73 74 61 74 75 73 20 68 74 74 ((html.(or.(cdr.(assq.status.htt
8280 70 64 2d 68 74 6d 6c 29 29 20 22 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e pd-html)).""))...........(conten
82a0 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 69 6e 66 6f 29 0a 20 20 20 ts............(if.(not.info)....
82c0 20 20 20 20 20 20 20 20 20 20 20 20 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 ............""..............(wit
82e0 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 h-temp-buffer................(le
8300 74 20 28 28 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d 62 75 66 t.((standard-output.(current-buf
8320 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 fer)))..................(insert.
8340 22 65 72 72 6f 72 3a 20 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 "error:.")..................(pri
8360 6e 63 20 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 nc.info)..................(inser
8380 74 20 22 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 68 t."\n")..................(when.h
83a0 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b 74 72 61 63 65 2d 77 68 65 6e 2d 65 72 72 6f 72 0a 20 ttpd-show-backtrace-when-error..
83c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 62 61 63 6b 74 ..................(insert."backt
83e0 72 61 63 65 3a 20 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 race:.")....................(pri
8400 6e 63 20 28 62 61 63 6b 74 72 61 63 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nc.(backtrace)).................
8420 20 20 20 28 69 6e 73 65 72 74 20 22 5c 6e 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...(insert."\n"))...............
8440 20 20 20 28 68 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a 20 20 ...(httpd-escape-html-buffer)...
8460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 29 ...............(buffer-string)))
8480 29 29 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 68 74 6d 6c 20 63 ))).......(insert.(format.html.c
84a0 6f 6e 74 65 6e 74 73 29 29 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 ontents))).....(httpd-send-heade
84c0 72 20 70 72 6f 63 20 22 74 65 78 74 2f 68 74 6d 6c 22 20 73 74 61 74 75 73 29 29 29 0a 0a 28 64 r.proc."text/html".status)))..(d
84e0 65 66 75 6e 20 68 74 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 65 20 28 26 72 65 73 74 20 61 72 efun.httpd--error-safe.(&rest.ar
8500 67 73 29 0a 20 20 22 43 61 6c 6c 20 68 74 74 70 64 2d 65 72 72 6f 72 20 61 6e 64 20 72 65 70 6f gs)..."Call.httpd-error.and.repo
8520 72 74 20 66 61 69 6c 75 72 65 73 20 74 6f 20 2a 68 74 74 70 64 2a 2e 22 0a 20 20 28 63 6f 6e 64 rt.failures.to.*httpd*."...(cond
8540 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a 20 20 20 20 20 20 28 61 70 70 ition-case.error-case.......(app
8560 6c 79 20 23 27 68 74 74 70 64 2d 65 72 72 6f 72 20 61 72 67 73 29 0a 20 20 20 20 28 65 72 72 6f ly.#'httpd-error.args).....(erro
8580 72 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 68 61 72 64 2d 65 72 72 6f 72 20 2c 65 72 72 6f 72 r.(httpd-log.`(hard-error.,error
85a0 2d 63 61 73 65 29 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 73 69 6d 70 6c 65 2d 68 74 74 -case)))))..(provide.'simple-htt
85c0 70 64 29 0a 0a 3b 3b 3b 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 2e 65 6c 20 65 6e 64 73 20 68 65 pd)..;;;.simple-httpd.el.ends.he
85e0 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 re..............................
8600 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 73 69 6d 70 6c simple-httpd-20230821.1458/simpl
8620 65 2d 68 74 74 70 64 2d 70 6b 67 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e-httpd-pkg.el..................
8640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8660 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
8680 30 30 30 30 37 31 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 31 33 37 00 20 30 00 00 00 0000710.00000000000.017137..0...
86a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
86c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
86e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8700 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
8720 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
8740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
87a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
87c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
87e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8800 28 64 65 66 69 6e 65 2d 70 61 63 6b 61 67 65 20 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 22 20 22 (define-package."simple-httpd"."
8820 32 30 32 33 30 38 32 31 2e 31 34 35 38 22 20 22 70 75 72 65 20 65 6c 69 73 70 20 48 54 54 50 20 20230821.1458"."pure.elisp.HTTP.
8840 73 65 72 76 65 72 22 0a 20 20 27 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 0a 20 20 3a 63 server"...'((cl-lib."0.3"))...:c
8860 6f 6d 6d 69 74 20 22 33 34 37 63 33 30 34 39 34 64 33 62 63 66 63 37 39 64 65 33 35 65 35 34 35 ommit."347c30494d3bcfc79de35e545
8880 33 38 66 39 32 66 34 65 34 61 34 36 65 63 64 22 20 3a 61 75 74 68 6f 72 73 0a 20 20 27 28 28 22 38f92f4e4a46ecd".:authors...'(("
88a0 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 Christopher.Wellons"..."wellons@
88c0 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 29 0a 20 20 3a 6d 61 69 6e 74 61 69 6e 65 72 nullprogram.com"))...:maintainer
88e0 73 0a 20 20 27 28 28 22 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 s...'(("Christopher.Wellons"..."
8900 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 29 0a 20 20 3a 6d 61 wellons@nullprogram.com"))...:ma
8920 69 6e 74 61 69 6e 65 72 0a 20 20 27 28 22 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e intainer...'("Christopher.Wellon
8940 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 0a s"..."wellons@nullprogram.com").
8960 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 ..:url."https://github.com/skeet
8980 6f 2f 65 6d 61 63 73 2d 68 74 74 70 2d 73 65 72 76 65 72 22 29 0a 3b 3b 20 4c 6f 63 61 6c 20 56 o/emacs-http-server").;;.Local.V
89a0 61 72 69 61 62 6c 65 73 3a 0a 3b 3b 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70 69 6c 65 3a 20 74 0a ariables:.;;.no-byte-compile:.t.
89c0 3b 3b 20 45 6e 64 3a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;;.End:.........................
89e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................