| ofs | hex dump | ascii | 
|---|
| 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 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.................. | 
| 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 30 30 30 36 34 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 37 31 34 31 00 20 30 00 00 00 | 0000640.00000000000.017141..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 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63    6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 | ;;.-*-.no-byte-compile:.t;.lexic | 
| 0420 | 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20    2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b | al-binding:.nil.-*-.(define-pack | 
| 0440 | 61 67 65 20 22 73 69 6d 70 6c 65 2d 68 74 74 70    64 22 20 22 32 30 32 33 30 38 32 31 2e 31 34 35 | age."simple-httpd"."20230821.145 | 
| 0460 | 38 22 0a 20 20 22 50 75 72 65 20 65 6c 69 73 70    20 48 54 54 50 20 73 65 72 76 65 72 2e 22 0a 20 | 8"..."Pure.elisp.HTTP.server.".. | 
| 0480 | 20 27 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22    29 29 0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 | .'((cl-lib."0.3"))...:url."https | 
| 04a0 | 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 70 2d | ://github.com/skeeto/emacs-http- | 
| 04c0 | 73 65 72 76 65 72 22 0a 20 20 3a 63 6f 6d 6d 69    74 20 22 33 34 37 63 33 30 34 39 34 64 33 62 63 | server"...:commit."347c30494d3bc | 
| 04e0 | 66 63 37 39 64 65 33 35 65 35 34 35 33 38 66 39    32 66 34 65 34 61 34 36 65 63 64 22 0a 20 20 3a | fc79de35e54538f92f4e4a46ecd"...: | 
| 0500 | 72 65 76 64 65 73 63 20 22 33 34 37 63 33 30 34    39 34 64 33 62 22 0a 20 20 3a 61 75 74 68 6f 72 | revdesc."347c30494d3b"...:author | 
| 0520 | 73 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 77 65 | s.'(("Christopher.Wellons"..."we | 
| 0540 | 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 69 6e | llons@nullprogram.com"))...:main | 
| 0560 | 74 61 69 6e 65 72 73 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 | tainers.'(("Christopher.Wellons" | 
| 0580 | 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 29 29 0a | ..."wellons@nullprogram.com"))). | 
| 05a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 05c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 05e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0600 | 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 | 
| 0620 | 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...................... | 
| 0640 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0660 | 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 | 
| 0680 | 30 31 30 31 30 32 35 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 36 33 36 31 00 20 30 00 00 00 | 0101025.00000000000.016361..0... | 
| 06a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0700 | 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................... | 
| 0720 | 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................... | 
| 0740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0800 | 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 | 
| 0820 | 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. | 
| 0840 | 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 | 
| 0860 | 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 | 
| 0880 | 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 | 
| 08a0 | 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 | 
| 08c0 | 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 | 
| 08e0 | 70 2d 73 65 72 76 65 72 0a 3b 3b 20 50 61 63 6b    61 67 65 2d 56 65 72 73 69 6f 6e 3a 20 32 30 32 | p-server.;;.Package-Version:.202 | 
| 0900 | 33 30 38 32 31 2e 31 34 35 38 0a 3b 3b 20 50 61    63 6b 61 67 65 2d 52 65 76 69 73 69 6f 6e 3a 20 | 30821.1458.;;.Package-Revision:. | 
| 0920 | 33 34 37 63 33 30 34 39 34 64 33 62 0a 3b 3b 20    50 61 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 | 347c30494d3b.;;.Package-Requires | 
| 0940 | 3a 20 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22    29 29 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 | :.((cl-lib."0.3"))..;;;.Commenta | 
| 0960 | 72 79 3a 0a 0a 3b 3b 20 55 73 65 20 60 68 74 74    70 64 2d 73 74 61 72 74 27 20 74 6f 20 73 74 61 | ry:..;;.Use.`httpd-start'.to.sta | 
| 0980 | 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65    72 2e 20 46 69 6c 65 73 20 61 72 65 20 73 65 72 | rt.the.web.server..Files.are.ser | 
| 09a0 | 76 65 64 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74    70 64 2d 72 6f 6f 74 27 20 6f 6e 20 70 6f 72 74 | ved.from.;;.`httpd-root'.on.port | 
| 09c0 | 20 60 68 74 74 70 64 2d 70 6f 72 74 27 20 75 73    69 6e 67 20 60 68 74 74 70 64 2d 69 70 2d 66 61 | .`httpd-port'.using.`httpd-ip-fa | 
| 09e0 | 6d 69 6c 79 27 20 61 74 20 68 6f 73 74 0a 3b 3b    20 60 68 74 74 70 64 2d 68 6f 73 74 27 2e 20 57 | mily'.at.host.;;.`httpd-host'..W | 
| 0a00 | 68 69 6c 65 20 74 68 65 20 72 6f 6f 74 20 63 61    6e 20 62 65 20 63 68 61 6e 67 65 64 20 61 74 20 | hile.the.root.can.be.changed.at. | 
| 0a20 | 61 6e 79 20 74 69 6d 65 2c 20 74 68 65 20 73 65    72 76 65 72 0a 3b 3b 20 6e 65 65 64 73 20 74 6f | any.time,.the.server.;;.needs.to | 
| 0a40 | 20 62 65 20 72 65 73 74 61 72 74 65 64 20 69 6e    20 6f 72 64 65 72 20 66 6f 72 20 61 20 70 6f 72 | .be.restarted.in.order.for.a.por | 
| 0a60 | 74 20 63 68 61 6e 67 65 20 74 6f 20 74 61 6b 65    20 65 66 66 65 63 74 2e 0a 0a 3b 3b 20 45 76 65 | t.change.to.take.effect...;;.Eve | 
| 0a80 | 72 79 74 68 69 6e 67 20 69 73 20 70 65 72 66 6f    72 6d 65 64 20 62 79 20 73 65 72 76 6c 65 74 73 | rything.is.performed.by.servlets | 
| 0aa0 | 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 65 72 76    69 6e 67 0a 3b 3b 20 66 69 6c 65 73 2e 20 53 65 | ,.including.serving.;;.files..Se | 
| 0ac0 | 72 76 6c 65 74 73 20 61 72 65 20 65 6e 61 62 6c    65 64 20 62 79 20 73 65 74 74 69 6e 67 20 60 68 | rvlets.are.enabled.by.setting.`h | 
| 0ae0 | 74 74 70 64 2d 73 65 72 76 6c 65 74 73 27 20 74    6f 20 74 72 75 65 0a 3b 3b 20 28 64 65 66 61 75 | ttpd-servlets'.to.true.;;.(defau | 
| 0b00 | 6c 74 29 2e 20 53 65 72 76 6c 65 74 73 20 61 72    65 20 66 6f 75 72 2d 70 61 72 61 6d 65 74 65 72 | lt)..Servlets.are.four-parameter | 
| 0b20 | 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20    62 65 67 69 6e 20 77 69 74 68 0a 3b 3b 20 22 68 | .functions.that.begin.with.;;."h | 
| 0b40 | 74 74 70 64 2f 22 20 77 68 65 72 65 20 74 68 65    20 74 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e | ttpd/".where.the.trailing.compon | 
| 0b60 | 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 74 68    65 20 69 6e 69 74 69 61 6c 20 70 61 74 68 20 6f | ent.specifies.the.initial.path.o | 
| 0b80 | 6e 0a 3b 3b 20 74 68 65 20 73 65 72 76 65 72 2e    20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 | n.;;.the.server..For.example,.th | 
| 0ba0 | 65 20 66 75 6e 63 74 69 6f 6e 20 60 68 74 74 70    64 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 27 20 77 | e.function.`httpd/hello-world'.w | 
| 0bc0 | 69 6c 6c 20 62 65 0a 3b 3b 20 63 61 6c 6c 65 64    20 66 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 | ill.be.;;.called.for.the.request | 
| 0be0 | 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 22 20    61 6e 64 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c | ."/hello-world".and."/hello-worl | 
| 0c00 | 64 2f 66 6f 6f 22 2e 0a 0a 3b 3b 20 54 68 65 20    64 65 66 61 75 6c 74 20 73 65 72 76 6c 65 74 20 | d/foo"...;;.The.default.servlet. | 
| 0c20 | 60 68 74 74 70 64 2f 27 20 69 73 20 74 68 65 20    6f 6e 65 20 74 68 61 74 20 73 65 72 76 65 73 20 | `httpd/'.is.the.one.that.serves. | 
| 0c40 | 66 69 6c 65 73 20 66 72 6f 6d 0a 3b 3b 20 60 68    74 74 70 64 2d 72 6f 6f 74 27 20 61 6e 64 20 63 | files.from.;;.`httpd-root'.and.c | 
| 0c60 | 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66    20 74 68 72 6f 75 67 68 20 72 65 64 65 66 69 6e | an.be.turned.off.through.redefin | 
| 0c80 | 69 74 69 6f 6e 20 6f 72 20 73 65 74 74 69 6e 67    0a 3b 3b 20 60 68 74 74 70 64 2d 73 65 72 76 65 | ition.or.setting.;;.`httpd-serve | 
| 0ca0 | 2d 66 69 6c 65 73 27 20 74 6f 20 6e 69 6c 2e 20    49 74 20 69 73 20 75 73 65 64 20 65 76 65 6e 20 | -files'.to.nil..It.is.used.even. | 
| 0cc0 | 77 68 65 6e 20 60 68 74 74 70 64 2d 73 65 72 76    6c 65 74 73 27 0a 3b 3b 20 69 73 20 6e 69 6c 2e | when.`httpd-servlets'.;;.is.nil. | 
| 0ce0 | 0a 0a 3b 3b 20 54 68 65 20 66 6f 75 72 20 70 61    72 61 6d 65 74 65 72 73 20 66 6f 72 20 61 20 73 | ..;;.The.four.parameters.for.a.s | 
| 0d00 | 65 72 76 6c 65 74 20 61 72 65 20 70 72 6f 63 65    73 73 2c 20 55 52 49 20 70 61 74 68 2c 20 47 45 | ervlet.are.process,.URI.path,.GE | 
| 0d20 | 54 2f 50 4f 53 54 0a 3b 3b 20 61 72 67 75 6d 65    6e 74 73 20 28 61 6c 69 73 74 29 2c 20 61 6e 64 | T/POST.;;.arguments.(alist),.and | 
| 0d40 | 20 74 68 65 20 66 75 6c 6c 20 72 65 71 75 65 73    74 20 6f 62 6a 65 63 74 20 28 68 65 61 64 65 72 | .the.full.request.object.(header | 
| 0d60 | 0a 3b 3b 20 61 6c 69 73 74 29 2e 20 54 68 65 73    65 20 61 72 65 20 6f 72 64 65 72 65 64 20 62 79 | .;;.alist)..These.are.ordered.by | 
| 0d80 | 20 67 65 6e 65 72 61 6c 20 69 6d 70 6f 72 74 61    6e 63 65 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 | .general.importance.so.that.some | 
| 0da0 | 20 63 61 6e 20 62 65 0a 3b 3b 20 69 67 6e 6f 72    65 64 2e 20 54 77 6f 20 6d 61 63 72 6f 73 20 61 | .can.be.;;.ignored..Two.macros.a | 
| 0dc0 | 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68    65 6c 70 20 77 69 74 68 20 77 72 69 74 69 6e 67 | re.provided.to.help.with.writing | 
| 0de0 | 20 73 65 72 76 6c 65 74 73 2e 0a 0a 3b 3b 20 20    2a 20 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 | .servlets...;;..*.`with-httpd-bu | 
| 0e00 | 66 66 65 72 27 20 2d 2d 20 43 72 65 61 74 65 73    20 61 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 | ffer'.--.Creates.a.temporary.buf | 
| 0e20 | 66 65 72 20 74 68 61 74 20 69 73 0a 3b 3b 20 20    20 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 | fer.that.is.;;....automatically. | 
| 0e40 | 73 65 72 76 65 64 20 74 6f 20 74 68 65 20 63 6c    69 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 | served.to.the.client.at.the.end. | 
| 0e60 | 6f 66 20 74 68 65 20 62 6f 64 79 2e 0a 3b 3b 20    20 20 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c | of.the.body..;;....Additionally, | 
| 0e80 | 20 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 69 | .`standard-output'.is.set.to.thi | 
| 0ea0 | 73 20 6f 75 74 70 75 74 0a 3b 3b 20 20 20 20 62    75 66 66 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 | s.output.;;....buffer..For.examp | 
| 0ec0 | 6c 65 2c 20 74 68 69 73 20 73 65 72 76 6c 65 74    20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 3b 3b | le,.this.servlet.says.hello,..;; | 
| 0ee0 | 20 20 20 20 20 28 64 65 66 75 6e 20 68 74 74 70    64 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 28 70 | .....(defun.httpd/hello-world.(p | 
| 0f00 | 72 6f 63 20 70 61 74 68 20 26 72 65 73 74 20 61    72 67 73 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 | roc.path.&rest.args).;;.......(w | 
| 0f20 | 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72    20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 | ith-httpd-buffer.proc."text/plai | 
| 0f40 | 6e 22 0a 3b 3b 20 20 20 20 20 20 20 20 20 28 69    6e 73 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 | n".;;.........(insert."hello,.". | 
| 0f60 | 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 68 29 29 29 29 | (file-name-nondirectory.path)))) | 
| 0f80 | 0a 0a 3b 3b 20 54 68 69 73 20 73 65 72 76 6c 65    74 20 62 65 20 76 69 65 77 65 64 20 61 74 20 68 | ..;;.This.servlet.be.viewed.at.h | 
| 0fa0 | 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a    38 30 38 30 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 | ttp://localhost:8080/hello-world | 
| 0fc0 | 2f 45 6d 61 63 73 0a 0a 3b 3b 20 2a 20 60 64 65    66 73 65 72 76 6c 65 74 27 20 2d 2d 20 53 69 6d | /Emacs..;;.*.`defservlet'.--.Sim | 
| 0fe0 | 69 6c 61 72 20 74 6f 20 74 68 65 20 61 62 6f 76    65 20 6d 61 63 72 6f 20 62 75 74 20 74 6f 74 61 | ilar.to.the.above.macro.but.tota | 
| 1000 | 6c 6c 79 20 68 69 64 65 73 20 74 68 65 0a 3b 3b    20 20 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 | lly.hides.the.;;...process.objec | 
| 1020 | 74 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 6c    65 74 20 69 74 73 65 6c 66 2e 20 54 68 65 20 61 | t.from.the.servlet.itself..The.a | 
| 1040 | 62 6f 76 65 20 73 65 72 76 6c 65 74 20 63 61 6e    20 62 65 0a 3b 3b 20 20 20 72 65 2d 77 72 69 74 | bove.servlet.can.be.;;...re-writ | 
| 1060 | 74 65 6e 20 69 64 65 6e 74 69 63 61 6c 6c 79 20    6c 69 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 | ten.identically.like.so,..;;.... | 
| 1080 | 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 | 
| 10a0 | 61 69 6e 20 28 70 61 74 68 29 0a 3b 3b 20 20 20    20 20 20 20 28 69 6e 73 65 72 74 20 22 68 65 6c | ain.(path).;;.......(insert."hel | 
| 10c0 | 6c 6f 2c 20 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 | lo,.".(file-name-nondirectory.pa | 
| 10e0 | 74 68 29 29 29 0a 0a 3b 3b 20 4e 6f 74 65 20 74    68 61 74 20 60 64 65 66 73 65 72 76 6c 65 74 27 | th)))..;;.Note.that.`defservlet' | 
| 1100 | 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73    65 74 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 | .automatically.sets.`httpd-curre | 
| 1120 | 6e 74 2d 70 72 6f 63 27 2e 20 53 65 65 0a 3b 3b    20 62 65 6c 6f 77 2e 0a 0a 3b 3b 20 54 68 65 20 | nt-proc'..See.;;.below...;;.The. | 
| 1140 | 22 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65    74 65 72 73 22 20 70 61 72 74 20 63 61 6e 20 62 | "function.parameters".part.can.b | 
| 1160 | 65 20 6c 65 66 74 20 65 6d 70 74 79 20 6f 72 20    63 6f 6e 74 61 69 6e 20 75 70 20 74 6f 0a 3b 3b | e.left.empty.or.contain.up.to.;; | 
| 1180 | 20 74 68 72 65 65 20 70 61 72 61 6d 65 74 65 72    73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 | .three.parameters.corresponding. | 
| 11a0 | 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 74 68 72    65 65 20 73 65 72 76 6c 65 74 0a 3b 3b 20 70 61 | to.the.final.three.servlet.;;.pa | 
| 11c0 | 72 61 6d 65 74 65 72 73 2e 20 46 6f 72 20 65 78    61 6d 70 6c 65 2c 20 61 20 73 65 72 76 6c 65 74 | rameters..For.example,.a.servlet | 
| 11e0 | 20 74 68 61 74 20 73 68 6f 77 73 20 2a 73 63 72    61 74 63 68 2a 20 61 6e 64 20 64 6f 65 73 6e 27 | .that.shows.*scratch*.and.doesn' | 
| 1200 | 74 0a 3b 3b 20 6e 65 65 64 20 70 61 72 61 6d 65    74 65 72 73 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 | t.;;.need.parameters,..;;.....(d | 
| 1220 | 65 66 73 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 | efservlet.scratch.text/plain.(). | 
| 1240 | 3b 3b 20 20 20 20 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 | ;;.......(insert-buffer-substrin | 
| 1260 | 67 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72    65 61 74 65 20 22 2a 73 63 72 61 74 63 68 2a 22 | g.(get-buffer-create."*scratch*" | 
| 1280 | 29 29 29 0a 0a 3b 3b 20 41 20 68 69 67 68 65 72    20 6c 65 76 65 6c 20 6d 61 63 72 6f 20 60 64 65 | )))..;;.A.higher.level.macro.`de | 
| 12a0 | 66 73 65 72 76 6c 65 74 2a 27 20 77 72 61 70 73    20 74 68 69 73 20 6c 6f 77 65 72 2d 6c 65 76 65 | fservlet*'.wraps.this.lower-leve | 
| 12c0 | 6c 0a 3b 3b 20 60 64 65 66 73 65 72 76 6c 65 74    27 20 6d 61 63 72 6f 2c 20 61 75 74 6f 6d 61 74 | l.;;.`defservlet'.macro,.automat | 
| 12e0 | 69 63 61 6c 6c 79 20 62 69 6e 64 69 6e 67 20 76    61 72 69 61 62 6c 65 73 20 74 6f 20 63 6f 6d 70 | ically.binding.variables.to.comp | 
| 1300 | 6f 6e 65 6e 74 73 0a 3b 3b 20 6f 66 20 74 68 65    20 72 65 71 75 65 73 74 2e 20 46 6f 72 20 65 78 | onents.;;.of.the.request..For.ex | 
| 1320 | 61 6d 70 6c 65 2c 20 74 68 69 73 20 62 69 6e 64    73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 72 | ample,.this.binds.parts.of.the.r | 
| 1340 | 65 71 75 65 73 74 20 70 61 74 68 0a 3b 3b 20 61    6e 64 20 6f 6e 65 20 71 75 65 72 79 20 70 61 72 | equest.path.;;.and.one.query.par | 
| 1360 | 61 6d 65 74 65 72 2e 20 52 65 71 75 65 73 74 20    63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 | ameter..Request.components.not.p | 
| 1380 | 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 0a 3b    3b 20 63 6c 69 65 6e 74 20 61 72 65 20 62 6f 75 | rovided.by.the.;;.client.are.bou | 
| 13a0 | 6e 64 20 74 6f 20 6e 69 6c 2e 0a 0a 3b 3b 20 20    20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 | nd.to.nil...;;.....(defservlet*. | 
| 13c0 | 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 6e 20 74 65 78 74 2f | packages/:package/:version.text/ | 
| 13e0 | 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a    3b 3b 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 | plain.(verbose).;;.......(insert | 
| 1400 | 20 28 66 6f 72 6d 61 74 20 22 25 73 5c 6e 25 73    5c 6e 22 20 70 61 63 6b 61 67 65 20 76 65 72 73 | .(format."%s\n%s\n".package.vers | 
| 1420 | 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28    70 72 69 6e 63 20 28 67 65 74 2d 64 65 73 63 72 | ion)).;;.......(princ.(get-descr | 
| 1440 | 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 3b 3b 20 20 20 20 20 | iption.package.version)).;;..... | 
| 1460 | 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a    3b 3b 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 | ..(when.verbose.;;.........(inse | 
| 1480 | 72 74 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20    28 67 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 65 | rt.(format."%S".(get-dependencie | 
| 14a0 | 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f    6e 29 29 29 29 29 0a 0a 3b 3b 20 49 74 20 77 6f | s.package.version)))))..;;.It.wo | 
| 14c0 | 75 6c 64 20 62 65 20 61 63 63 65 73 73 65 64 20    6c 69 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 | uld.be.accessed.like.so,..;;.... | 
| 14e0 | 20 68 74 74 70 3a 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 | .http://example.com/packages/foo | 
| 1500 | 62 61 72 2f 31 2e 30 3f 76 65 72 62 6f 73 65 3d    31 0a 0a 3b 3b 20 53 6f 6d 65 20 73 75 70 70 6f | bar/1.0?verbose=1..;;.Some.suppo | 
| 1520 | 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65    20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 | rt.functions.are.available.for.s | 
| 1540 | 65 72 76 6c 65 74 73 20 66 6f 72 20 6d 6f 72 65    0a 3b 3b 20 63 75 73 74 6f 6d 69 7a 65 64 20 72 | ervlets.for.more.;;.customized.r | 
| 1560 | 65 73 70 6f 6e 73 65 73 2e 0a 0a 3b 3b 20 20 20    2a 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 | esponses...;;...*.`httpd-send-fi | 
| 1580 | 6c 65 27 20 20 20 2d 2d 20 73 65 72 76 65 20 61    20 66 69 6c 65 20 77 69 74 68 20 70 72 6f 70 65 | le'...--.serve.a.file.with.prope | 
| 15a0 | 72 20 63 61 63 68 69 6e 67 0a 3b 3b 20 20 20 2a    20 60 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 | r.caching.;;...*.`httpd-redirect | 
| 15c0 | 27 20 20 20 20 2d 2d 20 72 65 64 69 72 65 63 74    20 74 68 65 20 62 72 6f 77 73 65 72 20 74 6f 20 | '....--.redirect.the.browser.to. | 
| 15e0 | 61 6e 6f 74 68 65 72 20 75 72 6c 0a 3b 3b 20 20    20 2a 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 68 | another.url.;;...*.`httpd-send-h | 
| 1600 | 65 61 64 65 72 27 20 2d 2d 20 73 65 6e 64 20 63    75 73 74 6f 6d 20 68 65 61 64 65 72 73 0a 3b 3b | eader'.--.send.custom.headers.;; | 
| 1620 | 20 20 20 2a 20 60 68 74 74 70 64 2d 65 72 72 6f    72 27 20 20 20 20 20 20 20 2d 2d 20 72 65 70 6f | ...*.`httpd-error'.......--.repo | 
| 1640 | 72 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74    68 65 20 63 6c 69 65 6e 74 0a 3b 3b 20 20 20 2a | rt.an.error.to.the.client.;;...* | 
| 1660 | 20 60 68 74 74 70 64 2d 6c 6f 67 27 20 20 20 20    20 20 20 20 20 2d 2d 20 6c 6f 67 20 61 6e 20 6f | .`httpd-log'.........--.log.an.o | 
| 1680 | 62 6a 65 63 74 20 74 6f 20 2a 68 74 74 70 64 2a    0a 0a 3b 3b 20 53 6f 6d 65 20 6f 66 20 74 68 65 | bject.to.*httpd*..;;.Some.of.the | 
| 16a0 | 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 71    75 69 72 65 20 61 20 70 72 6f 63 65 73 73 20 6f | se.functions.require.a.process.o | 
| 16c0 | 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 6e    27 74 0a 3b 3b 20 70 61 73 73 65 64 20 74 6f 20 | bject,.which.isn't.;;.passed.to. | 
| 16e0 | 60 64 65 66 73 65 72 76 6c 65 74 27 20 73 65 72    76 6c 65 74 73 2e 20 55 73 65 20 74 20 69 6e 20 | `defservlet'.servlets..Use.t.in. | 
| 1700 | 70 6c 61 63 65 20 6f 66 20 74 68 65 20 70 72 6f    63 65 73 73 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 | place.of.the.process.;;.argument | 
| 1720 | 20 74 6f 20 75 73 65 20 60 68 74 74 70 64 2d 63    75 72 72 65 6e 74 2d 70 72 6f 63 27 20 28 6c 69 | .to.use.`httpd-current-proc'.(li | 
| 1740 | 6b 65 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74    70 75 74 27 29 2e 0a 0a 3b 3b 20 49 66 20 79 6f | ke.`standard-output')...;;.If.yo | 
| 1760 | 75 20 6a 75 73 74 20 6e 65 65 64 20 74 6f 20 73    65 72 76 65 20 73 74 61 74 69 63 20 66 72 6f 6d | u.just.need.to.serve.static.from | 
| 1780 | 20 73 6f 6d 65 20 6c 6f 63 61 74 69 6f 6e 20 75    6e 64 65 72 20 73 6f 6d 65 0a 3b 3b 20 72 6f 75 | .some.location.under.some.;;.rou | 
| 17a0 | 74 65 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72    2c 20 75 73 65 20 60 68 74 74 70 64 2d 64 65 66 | te.on.the.server,.use.`httpd-def | 
| 17c0 | 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 27 2e 20    49 74 20 65 78 70 61 6e 64 73 20 69 6e 74 6f 0a | -file-servlet'..It.expands.into. | 
| 17e0 | 3b 3b 20 61 20 60 64 65 66 73 65 72 76 6c 65 74    27 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 | ;;.a.`defservlet'.that.serves.fi | 
| 1800 | 6c 65 73 2e 0a 0a 3b 3b 3b 20 48 69 73 74 6f 72    79 3a 0a 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 | les...;;;.History:..;;.Version.1 | 
| 1820 | 2e 35 2e 31 3a 20 69 6d 70 72 6f 76 65 6d 65 6e    74 73 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 | .5.1:.improvements.;;...*.Add.`h | 
| 1840 | 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 27 0a    3b 3b 20 20 20 2a 20 50 72 6f 70 65 72 6c 79 20 | ttpd-running-p'.;;...*.Properly. | 
| 1860 | 68 61 6e 64 6c 65 20 22 43 6f 6e 6e 65 63 74 69    6f 6e 3a 20 63 6c 6f 73 65 22 20 61 6e 64 20 48 | handle."Connection:.close".and.H | 
| 1880 | 54 54 50 2f 31 2e 30 0a 3b 3b 20 56 65 72 73 69    6f 6e 20 31 2e 35 2e 30 3a 20 69 6d 70 72 6f 76 | TTP/1.0.;;.Version.1.5.0:.improv | 
| 18a0 | 65 6d 65 6e 74 73 0a 3b 3b 20 20 20 2a 20 44 72    61 73 74 69 63 61 6c 6c 79 20 69 6d 70 72 6f 76 | ements.;;...*.Drastically.improv | 
| 18c0 | 65 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66    6f 72 20 6c 61 72 67 65 20 72 65 71 75 65 73 74 | ed.performance.for.large.request | 
| 18e0 | 73 0a 3b 3b 20 20 20 2a 20 4d 6f 72 65 20 48 54    54 50 20 73 74 61 74 75 73 20 63 6f 64 65 73 0a | s.;;...*.More.HTTP.status.codes. | 
| 1900 | 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 36    3a 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 41 | ;;.Version.1.4.6:.fixes.;;...*.A | 
| 1920 | 64 64 65 64 20 68 74 74 70 64 2d 73 65 72 76 65    2d 64 69 72 65 63 74 6f 72 79 0a 3b 3b 20 20 20 | dded.httpd-serve-directory.;;... | 
| 1940 | 2a 20 46 69 78 20 73 6f 6d 65 20 65 6e 63 6f 64    69 6e 67 20 69 73 73 75 65 73 0a 3b 3b 20 56 65 | *.Fix.some.encoding.issues.;;.Ve | 
| 1960 | 72 73 69 6f 6e 20 31 2e 34 2e 35 3a 20 66 69 78    65 73 0a 3b 3b 20 20 20 2a 20 55 70 64 61 74 65 | rsion.1.4.5:.fixes.;;...*.Update | 
| 1980 | 20 74 6f 20 63 6c 2d 6c 69 62 20 66 72 6f 6d 20    63 6c 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e | .to.cl-lib.from.cl.;;.Version.1. | 
| 19a0 | 34 2e 34 3a 20 66 65 61 74 75 72 65 73 0a 3b 3b    20 20 20 2a 20 43 6f 6d 6d 6f 6e 20 4c 69 73 70 | 4.4:.features.;;...*.Common.Lisp | 
| 19c0 | 20 26 6b 65 79 2d 6c 69 6b 65 20 64 65 66 73 65    72 76 6c 65 74 2a 20 61 72 67 75 6d 65 6e 74 20 | .&key-like.defservlet*.argument. | 
| 19e0 | 73 75 70 70 6f 72 74 0a 3b 3b 20 20 20 2a 20 46    69 78 20 75 70 20 73 6f 6d 65 20 64 65 66 73 65 | support.;;...*.Fix.up.some.defse | 
| 1a00 | 72 76 6c 65 74 2a 20 75 73 61 67 65 20 77 61 72    6e 69 6e 67 73 2e 0a 3b 3b 20 56 65 72 73 69 6f | rvlet*.usage.warnings..;;.Versio | 
| 1a20 | 6e 20 31 2e 34 2e 33 3a 20 66 65 61 74 75 72 65    73 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 | n.1.4.3:.features.;;...*.Add.`ht | 
| 1a40 | 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66    65 72 27 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 | tpd-discard-buffer'.;;...*.Add.` | 
| 1a60 | 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73    65 72 76 6c 65 74 27 0a 3b 3b 20 20 20 2a 20 42 | httpd-def-file-servlet'.;;...*.B | 
| 1a80 | 65 20 6d 6f 72 65 20 63 61 72 65 66 75 6c 20 61    62 6f 75 74 20 6e 6f 74 20 73 65 6e 64 69 6e 67 | e.more.careful.about.not.sending | 
| 1aa0 | 20 65 78 74 72 61 20 68 65 61 64 65 72 73 0a 3b    3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 32 3a | .extra.headers.;;.Version.1.4.2: | 
| 1ac0 | 20 66 65 61 74 75 72 65 73 2c 20 66 69 78 65 73    0a 3b 3b 20 20 20 2a 20 60 64 65 66 73 65 72 76 | .features,.fixes.;;...*.`defserv | 
| 1ae0 | 6c 65 74 2a 27 20 6d 61 63 72 6f 0a 3b 3b 20 56    65 72 73 69 6f 6e 20 31 2e 34 2e 31 3a 20 73 6d | let*'.macro.;;.Version.1.4.1:.sm | 
| 1b00 | 61 6c 6c 20 62 75 67 20 66 69 78 65 73 2c 20 6f    6e 65 20 66 65 61 74 75 72 65 0a 3b 3b 20 20 20 | all.bug.fixes,.one.feature.;;... | 
| 1b20 | 2a 20 41 6c 6c 20 6d 69 6d 65 2d 74 79 70 65 20    70 61 72 61 6d 65 74 65 72 73 20 6e 6f 77 20 61 | *.All.mime-type.parameters.now.a | 
| 1b40 | 63 63 65 70 74 20 73 74 72 69 6e 67 20 64 65 73    69 67 6e 61 74 6f 72 73 0a 3b 3b 20 20 20 2a 20 | ccept.string.designators.;;...*. | 
| 1b60 | 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 75 70    64 61 74 65 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 | Documentation.update.;;.Version. | 
| 1b80 | 31 2e 34 2e 30 3a 20 66 65 61 74 75 72 65 73 2c    20 41 50 49 20 63 68 61 6e 67 65 2c 20 61 6e 64 | 1.4.0:.features,.API.change,.and | 
| 1ba0 | 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 52 65    6d 6f 76 65 64 20 68 74 74 70 64 2d 73 65 6e 64 | .fixes.;;...*.Removed.httpd-send | 
| 1bc0 | 2d 62 75 66 66 65 72 3b 20 68 74 74 70 64 2d 73    65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 64 | -buffer;.httpd-send-header.now.d | 
| 1be0 | 6f 65 73 20 74 68 69 73 20 69 6d 70 6c 69 63 69    74 6c 79 0a 3b 3b 20 20 20 2a 20 68 74 74 70 64 | oes.this.implicitly.;;...*.httpd | 
| 1c00 | 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77    20 61 63 63 65 70 74 73 20 6b 65 79 77 6f 72 64 | -send-header.now.accepts.keyword | 
| 1c20 | 73 20 69 6e 73 74 65 61 64 0a 3b 3b 20 20 20 2a    20 46 69 78 20 68 74 74 70 64 2d 63 6c 65 61 6e | s.instead.;;...*.Fix.httpd-clean | 
| 1c40 | 2d 70 61 74 68 20 69 6e 20 57 69 6e 64 6f 77 73    0a 3b 3b 20 20 20 2a 20 46 69 78 20 61 20 63 6f | -path.in.Windows.;;...*.Fix.a.co | 
| 1c60 | 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 62 75 67    0a 3b 3b 20 20 20 2a 20 64 65 66 73 65 72 76 6c | ntent-length.bug.;;...*.defservl | 
| 1c80 | 65 74 20 66 6f 6e 74 69 66 69 63 61 74 69 6f 6e    0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 33 2e | et.fontification.;;.Version.1.3. | 
| 1ca0 | 31 3a 20 66 65 61 74 75 72 65 73 20 61 6e 64 20    66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 53 65 74 | 1:.features.and.fixes.;;...*.Set | 
| 1cc0 | 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75    74 27 20 69 6e 20 60 77 69 74 68 2d 68 74 74 70 | .`standard-output'.in.`with-http | 
| 1ce0 | 64 2d 62 75 66 66 65 72 27 0a 3b 3b 20 56 65 72    73 69 6f 6e 20 31 2e 33 2e 30 3a 20 73 65 63 75 | d-buffer'.;;.Version.1.3.0:.secu | 
| 1d00 | 72 69 74 79 20 66 69 78 0a 3b 3b 20 20 20 2a 20    46 69 78 20 70 61 74 68 20 65 78 70 61 6e 73 69 | rity.fix.;;...*.Fix.path.expansi | 
| 1d20 | 6f 6e 20 73 65 63 75 72 69 74 79 20 69 73 73 75    65 0a 3b 3b 20 20 20 2a 20 46 69 78 20 63 6f 64 | on.security.issue.;;...*.Fix.cod | 
| 1d40 | 69 6e 67 20 73 79 73 74 65 6d 20 28 64 6f 6e 27    74 20 64 65 66 61 75 6c 74 29 0a 3b 3b 20 56 65 | ing.system.(don't.default).;;.Ve | 
| 1d60 | 72 73 69 6f 6e 20 31 2e 32 2e 34 3a 20 66 69 78    65 73 0a 3b 3b 20 20 20 2a 20 48 61 6e 64 6c 65 | rsion.1.2.4:.fixes.;;...*.Handle | 
| 1d80 | 20 6c 61 72 67 65 20 50 4f 53 54 73 0a 3b 3b 20    20 20 2a 20 46 69 78 20 64 61 74 65 20 73 74 72 | .large.POSTs.;;...*.Fix.date.str | 
| 1da0 | 69 6e 67 73 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a    0a 28 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 | ings..;;;.Code:..(require.'cl-li | 
| 1dc0 | 62 29 0a 28 72 65 71 75 69 72 65 20 27 70 70 29    0a 28 72 65 71 75 69 72 65 20 27 75 72 6c 2d 75 | b).(require.'pp).(require.'url-u | 
| 1de0 | 74 69 6c 29 0a 0a 28 64 65 66 67 72 6f 75 70 20    73 69 6d 70 6c 65 2d 68 74 74 70 64 20 6e 69 6c | til)..(defgroup.simple-httpd.nil | 
| 1e00 | 0a 20 20 22 41 20 73 69 6d 70 6c 65 20 77 65 62    20 73 65 72 76 65 72 2e 22 0a 20 20 3a 67 72 6f | ..."A.simple.web.server."...:gro | 
| 1e20 | 75 70 20 27 63 6f 6d 6d 29 0a 0a 28 64 65 66 63    75 73 74 6f 6d 20 68 74 74 70 64 2d 69 70 2d 66 | up.'comm)..(defcustom.httpd-ip-f | 
| 1e40 | 61 6d 69 6c 79 20 27 69 70 76 34 0a 20 20 22 57    65 62 20 73 65 72 76 65 72 20 49 50 20 66 61 6d | amily.'ipv4..."Web.server.IP.fam | 
| 1e60 | 69 6c 79 20 75 73 65 64 20 62 79 20 60 6d 61 6b    65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 | ily.used.by.`make-network-proces | 
| 1e80 | 73 27 2e 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 | s'."...:group.'simple-httpd...:t | 
| 1ea0 | 79 70 65 20 27 73 79 6d 62 6f 6c 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 68 | ype.'symbol)..(defcustom.httpd-h | 
| 1ec0 | 6f 73 74 20 6e 69 6c 0a 20 20 22 57 65 62 20 73    65 72 76 65 72 20 68 6f 73 74 20 6e 61 6d 65 20 | ost.nil..."Web.server.host.name. | 
| 1ee0 | 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d 6e 65    74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 | used.by.`make-network-process'." | 
| 1f00 | 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 20 | ...:group.'simple-httpd...:type. | 
| 1f20 | 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73 74 20    6e 69 6c 29 20 28 63 6f 6e 73 74 20 6c 6f 63 61 | '(choice.(const.nil).(const.loca | 
| 1f40 | 6c 29 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65    66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 70 6f | l).string))..(defcustom.httpd-po | 
| 1f60 | 72 74 20 38 30 38 30 0a 20 20 22 57 65 62 20 73    65 72 76 65 72 20 70 6f 72 74 2e 22 0a 20 20 3a | rt.8080..."Web.server.port."...: | 
| 1f80 | 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 20 27 69 6e 74 | group.'simple-httpd...:type.'int | 
| 1fa0 | 65 67 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f    6d 20 68 74 74 70 64 2d 72 6f 6f 74 20 22 7e 2f | eger)..(defcustom.httpd-root."~/ | 
| 1fc0 | 70 75 62 6c 69 63 5f 68 74 6d 6c 22 0a 20 20 22    57 65 62 20 73 65 72 76 65 72 20 66 69 6c 65 20 | public_html"..."Web.server.file. | 
| 1fe0 | 72 6f 6f 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 64 0a 20 20 | root."...:group.'simple-httpd... | 
| 2000 | 3a 74 79 70 65 20 27 64 69 72 65 63 74 6f 72 79    29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 | :type.'directory)..(defcustom.ht | 
| 2020 | 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20    74 0a 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 | tpd-serve-files.t..."Enable.serv | 
| 2040 | 69 6e 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 60    68 74 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 | ing.files.from.`httpd-root'."... | 
| 2060 | 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 20 27 62 6f | :group.'simple-httpd...:type.'bo | 
| 2080 | 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 63 75 73 74    6f 6d 20 68 74 74 70 64 2d 6c 69 73 74 69 6e 67 | olean)..(defcustom.httpd-listing | 
| 20a0 | 73 20 74 0a 20 20 22 49 66 20 74 72 75 65 2c 20    73 65 72 76 65 20 64 69 72 65 63 74 6f 72 79 20 | s.t..."If.true,.serve.directory. | 
| 20c0 | 6c 69 73 74 69 6e 67 73 2e 22 0a 20 20 3a 67 72    6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 | listings."...:group.'simple-http | 
| 20e0 | 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 20 | d...:type.'boolean)..(defcustom. | 
| 2100 | 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 20 74    0a 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 6c | httpd-servlets.t..."Enable.servl | 
| 2120 | 65 74 73 2e 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 | ets."...:group.'simple-httpd...: | 
| 2140 | 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 20 68 74 74 70 64 | type.'boolean)..(defcustom.httpd | 
| 2160 | 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 20 6e 69 6c 0a 20 | -show-backtrace-when-error.nil.. | 
| 2180 | 20 22 49 66 20 74 72 75 65 2c 20 73 68 6f 77 20    62 61 63 6b 74 72 61 63 65 20 6f 6e 20 65 72 72 | ."If.true,.show.backtrace.on.err | 
| 21a0 | 6f 72 20 70 61 67 65 2e 22 0a 20 20 3a 67 72 6f    75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 | or.page."...:group.'simple-httpd | 
| 21c0 | 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 20 68 | ...:type.'boolean)..(defcustom.h | 
| 21e0 | 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 20    6e 69 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 72 | ttpd-start-hook.nil..."Hook.to.r | 
| 2200 | 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 61 72 74 65 64 2e 22 | un.when.the.server.has.started." | 
| 2220 | 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 20 | ...:group.'simple-httpd...:type. | 
| 2240 | 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63 75 73 74    6f 6d 20 68 74 74 70 64 2d 73 74 6f 70 2d 68 6f | 'hook)..(defcustom.httpd-stop-ho | 
| 2260 | 6f 6b 20 6e 69 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 | ok.nil..."Hook.to.run.when.the.s | 
| 2280 | 65 72 76 65 72 20 68 61 73 20 73 74 6f 70 70 65    64 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 | erver.has.stopped."...:group.'si | 
| 22a0 | 6d 70 6c 65 2d 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 76 | mple-httpd...:type.'hook)..(defv | 
| 22c0 | 61 72 20 68 74 74 70 64 2d 73 65 72 76 65 72 2d    6e 61 6d 65 20 28 66 6f 72 6d 61 74 20 22 73 69 | ar.httpd-server-name.(format."si | 
| 22e0 | 6d 70 6c 65 2d 68 74 74 70 64 20 28 45 6d 61 63    73 20 25 73 29 22 20 65 6d 61 63 73 2d 76 65 72 | mple-httpd.(Emacs.%s)".emacs-ver | 
| 2300 | 73 69 6f 6e 29 0a 20 20 22 53 74 72 69 6e 67 20    74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 53 65 | sion)..."String.to.use.in.the.Se | 
| 2320 | 72 76 65 72 20 68 65 61 64 65 72 2e 22 29 0a 0a    28 64 65 66 76 61 72 20 68 74 74 70 64 2d 6d 69 | rver.header.")..(defvar.httpd-mi | 
| 2340 | 6d 65 2d 74 79 70 65 73 0a 20 20 27 28 28 22 70    6e 67 22 20 20 2e 20 22 69 6d 61 67 65 2f 70 6e | me-types...'(("png"...."image/pn | 
| 2360 | 67 22 29 0a 20 20 20 20 28 22 67 69 66 22 20 20    2e 20 22 69 6d 61 67 65 2f 67 69 66 22 29 0a 20 | g").....("gif"...."image/gif").. | 
| 2380 | 20 20 20 28 22 6a 70 67 22 20 20 2e 20 22 69 6d    61 67 65 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 | ...("jpg"...."image/jpeg").....( | 
| 23a0 | 22 6a 70 65 67 22 20 2e 20 22 69 6d 61 67 65 2f    6a 70 65 67 22 29 0a 20 20 20 20 28 22 74 69 66 | "jpeg"..."image/jpeg").....("tif | 
| 23c0 | 22 20 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 22    29 0a 20 20 20 20 28 22 74 69 66 66 22 20 2e 20 | "...."image/tif").....("tiff"... | 
| 23e0 | 22 69 6d 61 67 65 2f 74 69 66 66 22 29 0a 20 20    20 20 28 22 69 63 6f 22 20 20 2e 20 22 69 6d 61 | "image/tiff").....("ico"...."ima | 
| 2400 | 67 65 2f 78 2d 69 63 6f 6e 22 29 0a 20 20 20 20    28 22 73 76 67 22 20 20 2e 20 22 69 6d 61 67 65 | ge/x-icon").....("svg"...."image | 
| 2420 | 2f 73 76 67 2b 78 6d 6c 22 29 0a 20 20 20 20 28    22 63 73 73 22 20 20 2e 20 22 74 65 78 74 2f 63 | /svg+xml").....("css"...."text/c | 
| 2440 | 73 73 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d    38 22 29 0a 20 20 20 20 28 22 68 74 6d 22 20 20 | ss;.charset=utf-8").....("htm".. | 
| 2460 | 2e 20 22 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 29 0a 20 20 | .."text/html;.charset=utf-8")... | 
| 2480 | 20 20 28 22 68 74 6d 6c 22 20 2e 20 22 74 65 78    74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d | ..("html"..."text/html;.charset= | 
| 24a0 | 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 78 6d    6c 22 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b | utf-8").....("xml"...."text/xml; | 
| 24c0 | 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29    0a 20 20 20 20 28 22 72 73 73 22 20 20 2e 20 22 | .charset=utf-8").....("rss"...." | 
| 24e0 | 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 20 20 20 28 22 | text/xml;.charset=utf-8").....(" | 
| 2500 | 61 74 6f 6d 22 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 | atom"..."text/xml;.charset=utf-8 | 
| 2520 | 22 29 0a 20 20 20 20 28 22 74 78 74 22 20 20 2e    20 22 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 | ").....("txt"...."text/plain;.ch | 
| 2540 | 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20    20 20 28 22 65 6c 22 20 20 20 2e 20 22 74 65 78 | arset=utf-8").....("el"....."tex | 
| 2560 | 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 28 22 6a | t/plain;.charset=utf-8").....("j | 
| 2580 | 73 22 20 20 20 2e 20 22 74 65 78 74 2f 6a 61 76    61 73 63 72 69 70 74 3b 20 63 68 61 72 73 65 74 | s"....."text/javascript;.charset | 
| 25a0 | 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6d    64 22 20 20 20 2e 20 22 74 65 78 74 2f 78 2d 6d | =utf-8").....("md"....."text/x-m | 
| 25c0 | 61 72 6b 64 6f 77 6e 3b 20 63 68 61 72 73 65 74    3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 67 | arkdown;.charset=utf-8").....("g | 
| 25e0 | 7a 22 20 20 20 2e 20 22 61 70 70 6c 69 63 61 74    69 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d | z"....."application/octet-stream | 
| 2600 | 22 29 0a 20 20 20 20 28 22 70 73 22 20 20 20 2e    20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f | ").....("ps"....."application/po | 
| 2620 | 73 74 73 63 72 69 70 74 22 29 0a 20 20 20 20 28    22 65 70 73 22 20 20 2e 20 22 61 70 70 6c 69 63 | stscript").....("eps"...."applic | 
| 2640 | 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 70 64 66 22 20 20 2e | ation/postscript").....("pdf"... | 
| 2660 | 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 64    66 22 29 0a 20 20 20 20 28 22 74 61 72 22 20 20 | ."application/pdf").....("tar".. | 
| 2680 | 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78    2d 74 61 72 22 29 0a 20 20 20 20 28 22 7a 69 70 | .."application/x-tar").....("zip | 
| 26a0 | 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f    6e 2f 7a 69 70 22 29 0a 20 20 20 20 28 22 77 61 | "...."application/zip").....("wa | 
| 26c0 | 73 6d 22 20 2e 20 22 61 70 70 6c 69 63 61 74 69    6f 6e 2f 77 61 73 6d 22 29 0a 20 20 20 20 28 22 | sm"..."application/wasm").....(" | 
| 26e0 | 6d 70 33 22 20 20 2e 20 22 61 75 64 69 6f 2f 6d    70 65 67 22 29 0a 20 20 20 20 28 22 77 61 76 22 | mp3"...."audio/mpeg").....("wav" | 
| 2700 | 20 20 2e 20 22 61 75 64 69 6f 2f 78 2d 77 61 76    22 29 0a 20 20 20 20 28 22 66 6c 61 63 22 20 2e | ...."audio/x-wav").....("flac".. | 
| 2720 | 20 22 61 75 64 69 6f 2f 66 6c 61 63 22 29 0a 20    20 20 20 28 22 73 70 78 22 20 20 2e 20 22 61 75 | ."audio/flac").....("spx"...."au | 
| 2740 | 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22    6f 67 61 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f | dio/ogg").....("oga"...."audio/o | 
| 2760 | 67 67 22 29 0a 20 20 20 20 28 22 6f 67 67 22 20    20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a | gg").....("ogg"...."audio/ogg"). | 
| 2780 | 20 20 20 20 28 22 6f 67 76 22 20 20 2e 20 22 76    69 64 65 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 | ....("ogv"...."video/ogg").....( | 
| 27a0 | 22 6d 70 34 22 20 20 2e 20 22 76 69 64 65 6f 2f    6d 70 34 22 29 0a 20 20 20 20 28 22 6d 6b 76 22 | "mp4"...."video/mp4").....("mkv" | 
| 27c0 | 20 20 2e 20 22 76 69 64 65 6f 2f 78 2d 6d 61 74    72 6f 73 6b 61 22 29 0a 20 20 20 20 28 22 77 65 | ...."video/x-matroska").....("we | 
| 27e0 | 62 6d 22 20 2e 20 22 76 69 64 65 6f 2f 77 65 62    6d 22 29 29 0a 20 20 22 4d 49 4d 45 20 74 79 70 | bm"..."video/webm"))..."MIME.typ | 
| 2800 | 65 73 20 66 6f 72 20 68 65 61 64 65 72 73 2e 22    29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 | es.for.headers.")..(defvar.httpd | 
| 2820 | 2d 69 6e 64 65 78 65 73 0a 20 20 27 28 22 69 6e    64 65 78 2e 68 74 6d 6c 22 0a 20 20 20 20 22 69 | -indexes...'("index.html"....."i | 
| 2840 | 6e 64 65 78 2e 68 74 6d 22 0a 20 20 20 20 22 69    6e 64 65 78 2e 78 6d 6c 22 29 0a 20 20 22 46 69 | ndex.htm"....."index.xml")..."Fi | 
| 2860 | 6c 65 20 73 65 72 76 65 64 20 62 79 20 64 65 66    61 75 6c 74 20 77 68 65 6e 20 61 63 63 65 73 73 | le.served.by.default.when.access | 
| 2880 | 69 6e 67 20 61 20 64 69 72 65 63 74 6f 72 79 2e    22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 | ing.a.directory.")..(defvar.http | 
| 28a0 | 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 0a 20    20 27 28 28 31 30 30 20 2e 20 22 43 6f 6e 74 69 | d-status-codes...'((100..."Conti | 
| 28c0 | 6e 75 65 22 29 0a 20 20 20 20 28 31 30 31 20 2e    20 22 53 77 69 74 63 68 69 6e 67 20 50 72 6f 74 | nue").....(101..."Switching.Prot | 
| 28e0 | 6f 63 6f 6c 73 22 29 0a 20 20 20 20 28 31 30 32    20 2e 20 22 50 72 6f 63 65 73 73 69 6e 67 22 29 | ocols").....(102..."Processing") | 
| 2900 | 0a 20 20 20 20 28 32 30 30 20 2e 20 22 4f 4b 22    29 0a 20 20 20 20 28 32 30 31 20 2e 20 22 43 72 | .....(200..."OK").....(201..."Cr | 
| 2920 | 65 61 74 65 64 22 29 0a 20 20 20 20 28 32 30 32    20 2e 20 22 41 63 63 65 70 74 65 64 22 29 0a 20 | eated").....(202..."Accepted").. | 
| 2940 | 20 20 20 28 32 30 33 20 2e 20 22 4e 6f 6e 2d 61    75 74 68 6f 72 69 74 61 74 69 76 65 20 49 6e 66 | ...(203..."Non-authoritative.Inf | 
| 2960 | 6f 72 6d 61 74 69 6f 6e 22 29 0a 20 20 20 20 28    32 30 34 20 2e 20 22 4e 6f 20 43 6f 6e 74 65 6e | ormation").....(204..."No.Conten | 
| 2980 | 74 22 29 0a 20 20 20 20 28 32 30 35 20 2e 20 22    52 65 73 65 74 20 43 6f 6e 74 65 6e 74 22 29 0a | t").....(205..."Reset.Content"). | 
| 29a0 | 20 20 20 20 28 32 30 36 20 2e 20 22 50 61 72 74    69 61 6c 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 | ....(206..."Partial.Content")... | 
| 29c0 | 20 20 28 32 30 37 20 2e 20 22 4d 75 6c 74 69 2d    53 74 61 74 75 73 22 29 0a 20 20 20 20 28 32 30 | ..(207..."Multi-Status").....(20 | 
| 29e0 | 38 20 2e 20 22 41 6c 72 65 61 64 79 20 52 65 70    6f 72 74 65 64 22 29 0a 20 20 20 20 28 32 32 36 | 8..."Already.Reported").....(226 | 
| 2a00 | 20 2e 20 22 49 4d 20 55 73 65 64 22 29 0a 20 20    20 20 28 33 30 30 20 2e 20 22 4d 75 6c 74 69 70 | ..."IM.Used").....(300..."Multip | 
| 2a20 | 6c 65 20 43 68 6f 69 63 65 73 22 29 0a 20 20 20    20 28 33 30 31 20 2e 20 22 4d 6f 76 65 64 20 50 | le.Choices").....(301..."Moved.P | 
| 2a40 | 65 72 6d 61 6e 65 6e 74 6c 79 22 29 0a 20 20 20    20 28 33 30 32 20 2e 20 22 46 6f 75 6e 64 22 29 | ermanently").....(302..."Found") | 
| 2a60 | 0a 20 20 20 20 28 33 30 33 20 2e 20 22 53 65 65    20 4f 74 68 65 72 22 29 0a 20 20 20 20 28 33 30 | .....(303..."See.Other").....(30 | 
| 2a80 | 34 20 2e 20 22 4e 6f 74 20 4d 6f 64 69 66 69 65    64 22 29 0a 20 20 20 20 28 33 30 35 20 2e 20 22 | 4..."Not.Modified").....(305..." | 
| 2aa0 | 55 73 65 20 50 72 6f 78 79 22 29 0a 20 20 20 20    28 33 30 37 20 2e 20 22 54 65 6d 70 6f 72 61 72 | Use.Proxy").....(307..."Temporar | 
| 2ac0 | 79 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20    20 28 33 30 38 20 2e 20 22 50 65 72 6d 61 6e 65 | y.Redirect").....(308..."Permane | 
| 2ae0 | 6e 74 20 52 65 64 69 72 65 63 74 22 29 0a 20 20    20 20 28 34 30 30 20 2e 20 22 42 61 64 20 52 65 | nt.Redirect").....(400..."Bad.Re | 
| 2b00 | 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 30 31    20 2e 20 22 55 6e 61 75 74 68 6f 72 69 7a 65 64 | quest").....(401..."Unauthorized | 
| 2b20 | 22 29 0a 20 20 20 20 28 34 30 32 20 2e 20 22 50    61 79 6d 65 6e 74 20 52 65 71 75 69 72 65 64 22 | ").....(402..."Payment.Required" | 
| 2b40 | 29 0a 20 20 20 20 28 34 30 33 20 2e 20 22 46 6f    72 62 69 64 64 65 6e 22 29 0a 20 20 20 20 28 34 | ).....(403..."Forbidden").....(4 | 
| 2b60 | 30 34 20 2e 20 22 4e 6f 74 20 46 6f 75 6e 64 22    29 0a 20 20 20 20 28 34 30 35 20 2e 20 22 4d 65 | 04..."Not.Found").....(405..."Me | 
| 2b80 | 74 68 6f 64 20 4e 6f 74 20 41 6c 6c 6f 77 65 64    22 29 0a 20 20 20 20 28 34 30 36 20 2e 20 22 4e | thod.Not.Allowed").....(406..."N | 
| 2ba0 | 6f 74 20 41 63 63 65 70 74 61 62 6c 65 22 29 0a    20 20 20 20 28 34 30 37 20 2e 20 22 50 72 6f 78 | ot.Acceptable").....(407..."Prox | 
| 2bc0 | 79 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e    20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 | y.Authentication.Required")..... | 
| 2be0 | 28 34 30 38 20 2e 20 22 52 65 71 75 65 73 74 20    54 69 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 34 | (408..."Request.Timeout").....(4 | 
| 2c00 | 30 39 20 2e 20 22 43 6f 6e 66 6c 69 63 74 22 29    0a 20 20 20 20 28 34 31 30 20 2e 20 22 47 6f 6e | 09..."Conflict").....(410..."Gon | 
| 2c20 | 65 22 29 0a 20 20 20 20 28 34 31 31 20 2e 20 22    4c 65 6e 67 74 68 20 52 65 71 75 69 72 65 64 22 | e").....(411..."Length.Required" | 
| 2c40 | 29 0a 20 20 20 20 28 34 31 32 20 2e 20 22 50 72    65 63 6f 6e 64 69 74 69 6f 6e 20 46 61 69 6c 65 | ).....(412..."Precondition.Faile | 
| 2c60 | 64 22 29 0a 20 20 20 20 28 34 31 33 20 2e 20 22    50 61 79 6c 6f 61 64 20 54 6f 6f 20 4c 61 72 67 | d").....(413..."Payload.Too.Larg | 
| 2c80 | 65 22 29 0a 20 20 20 20 28 34 31 34 20 2e 20 22    52 65 71 75 65 73 74 2d 55 52 49 20 54 6f 6f 20 | e").....(414..."Request-URI.Too. | 
| 2ca0 | 4c 6f 6e 67 22 29 0a 20 20 20 20 28 34 31 35 20    2e 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 4d | Long").....(415..."Unsupported.M | 
| 2cc0 | 65 64 69 61 20 54 79 70 65 22 29 0a 20 20 20 20    28 34 31 36 20 2e 20 22 52 65 71 75 65 73 74 65 | edia.Type").....(416..."Requeste | 
| 2ce0 | 64 20 52 61 6e 67 65 20 4e 6f 74 20 53 61 74 69    73 66 69 61 62 6c 65 22 29 0a 20 20 20 20 28 34 | d.Range.Not.Satisfiable").....(4 | 
| 2d00 | 31 37 20 2e 20 22 45 78 70 65 63 74 61 74 69 6f    6e 20 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 | 17..."Expectation.Failed").....( | 
| 2d20 | 34 31 38 20 2e 20 22 49 27 6d 20 61 20 74 65 61    70 6f 74 22 29 0a 20 20 20 20 28 34 32 31 20 2e | 418..."I'm.a.teapot").....(421.. | 
| 2d40 | 20 22 4d 69 73 64 69 72 65 63 74 65 64 20 52 65    71 75 65 73 74 22 29 0a 20 20 20 20 28 34 32 32 | ."Misdirected.Request").....(422 | 
| 2d60 | 20 2e 20 22 55 6e 70 72 6f 63 65 73 73 61 62 6c    65 20 45 6e 74 69 74 79 22 29 0a 20 20 20 20 28 | ..."Unprocessable.Entity").....( | 
| 2d80 | 34 32 33 20 2e 20 22 4c 6f 63 6b 65 64 22 29 0a    20 20 20 20 28 34 32 34 20 2e 20 22 46 61 69 6c | 423..."Locked").....(424..."Fail | 
| 2da0 | 65 64 20 44 65 70 65 6e 64 65 6e 63 79 22 29 0a    20 20 20 20 28 34 32 36 20 2e 20 22 55 70 67 72 | ed.Dependency").....(426..."Upgr | 
| 2dc0 | 61 64 65 20 52 65 71 75 69 72 65 64 22 29 0a 20    20 20 20 28 34 32 38 20 2e 20 22 50 72 65 63 6f | ade.Required").....(428..."Preco | 
| 2de0 | 6e 64 69 74 69 6f 6e 20 52 65 71 75 69 72 65 64    22 29 0a 20 20 20 20 28 34 32 39 20 2e 20 22 54 | ndition.Required").....(429..."T | 
| 2e00 | 6f 6f 20 4d 61 6e 79 20 52 65 71 75 65 73 74 73    22 29 0a 20 20 20 20 28 34 33 31 20 2e 20 22 52 | oo.Many.Requests").....(431..."R | 
| 2e20 | 65 71 75 65 73 74 20 48 65 61 64 65 72 20 46 69    65 6c 64 73 20 54 6f 6f 20 4c 61 72 67 65 22 29 | equest.Header.Fields.Too.Large") | 
| 2e40 | 0a 20 20 20 20 28 34 34 34 20 2e 20 22 43 6f 6e    6e 65 63 74 69 6f 6e 20 43 6c 6f 73 65 64 20 57 | .....(444..."Connection.Closed.W | 
| 2e60 | 69 74 68 6f 75 74 20 52 65 73 70 6f 6e 73 65 22    29 0a 20 20 20 20 28 34 35 31 20 2e 20 22 55 6e | ithout.Response").....(451..."Un | 
| 2e80 | 61 76 61 69 6c 61 62 6c 65 20 46 6f 72 20 4c 65    67 61 6c 20 52 65 61 73 6f 6e 73 22 29 0a 20 20 | available.For.Legal.Reasons")... | 
| 2ea0 | 20 20 28 34 39 39 20 2e 20 22 43 6c 69 65 6e 74    20 43 6c 6f 73 65 64 20 52 65 71 75 65 73 74 22 | ..(499..."Client.Closed.Request" | 
| 2ec0 | 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 49 6e    74 65 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 | ).....(500..."Internal.Server.Er | 
| 2ee0 | 72 6f 72 22 29 0a 20 20 20 20 28 35 30 31 20 2e    20 22 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 | ror").....(501..."Not.Implemente | 
| 2f00 | 64 22 29 0a 20 20 20 20 28 35 30 32 20 2e 20 22    42 61 64 20 47 61 74 65 77 61 79 22 29 0a 20 20 | d").....(502..."Bad.Gateway")... | 
| 2f20 | 20 20 28 35 30 33 20 2e 20 22 53 65 72 76 69 63    65 20 55 6e 61 76 61 69 6c 61 62 6c 65 22 29 0a | ..(503..."Service.Unavailable"). | 
| 2f40 | 20 20 20 20 28 35 30 34 20 2e 20 22 47 61 74 65    77 61 79 20 54 69 6d 65 6f 75 74 22 29 0a 20 20 | ....(504..."Gateway.Timeout")... | 
| 2f60 | 20 20 28 35 30 35 20 2e 20 22 48 54 54 50 20 56    65 72 73 69 6f 6e 20 4e 6f 74 20 53 75 70 70 6f | ..(505..."HTTP.Version.Not.Suppo | 
| 2f80 | 72 74 65 64 22 29 0a 20 20 20 20 28 35 30 36 20    2e 20 22 56 61 72 69 61 6e 74 20 41 6c 73 6f 20 | rted").....(506..."Variant.Also. | 
| 2fa0 | 4e 65 67 6f 74 69 61 74 65 73 22 29 0a 20 20 20    20 28 35 30 37 20 2e 20 22 49 6e 73 75 66 66 69 | Negotiates").....(507..."Insuffi | 
| 2fc0 | 63 69 65 6e 74 20 53 74 6f 72 61 67 65 22 29 0a    20 20 20 20 28 35 30 38 20 2e 20 22 4c 6f 6f 70 | cient.Storage").....(508..."Loop | 
| 2fe0 | 20 44 65 74 65 63 74 65 64 22 29 0a 20 20 20 20    28 35 31 30 20 2e 20 22 4e 6f 74 20 45 78 74 65 | .Detected").....(510..."Not.Exte | 
| 3000 | 6e 64 65 64 22 29 0a 20 20 20 20 28 35 31 31 20    2e 20 22 4e 65 74 77 6f 72 6b 20 41 75 74 68 65 | nded").....(511..."Network.Authe | 
| 3020 | 6e 74 69 63 61 74 69 6f 6e 20 52 65 71 75 69 72    65 64 22 29 0a 20 20 20 20 28 35 39 39 20 2e 20 | ntication.Required").....(599... | 
| 3040 | 22 4e 65 74 77 6f 72 6b 20 43 6f 6e 6e 65 63 74    20 54 69 6d 65 6f 75 74 20 45 72 72 6f 72 22 29 | "Network.Connect.Timeout.Error") | 
| 3060 | 29 0a 20 20 22 48 54 54 50 20 73 74 61 74 75 73    20 63 6f 64 65 73 2e 22 29 0a 0a 28 64 65 66 76 | )..."HTTP.status.codes.")..(defv | 
| 3080 | 61 72 20 68 74 74 70 64 2d 68 74 6d 6c 0a 20 20    27 28 28 34 30 33 20 2e 20 22 3c 21 44 4f 43 54 | ar.httpd-html...'((403..."<!DOCT | 
| 30a0 | 59 50 45 20 68 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 | YPE.html>.<html><head>.<title>40 | 
| 30c0 | 33 20 46 6f 72 62 69 64 64 65 6e 3c 2f 74 69 74    6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 | 3.Forbidden</title>.</head><body | 
| 30e0 | 3e 0a 3c 68 31 3e 46 6f 72 62 69 64 64 65 6e 3c    2f 68 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 | >.<h1>Forbidden</h1>.<p>The.requ | 
| 3100 | 65 73 74 65 64 20 55 52 4c 20 69 73 20 66 6f 72    62 69 64 64 65 6e 2e 3c 2f 70 3e 0a 3c 70 72 65 | ested.URL.is.forbidden.</p>.<pre | 
| 3120 | 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79    3e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 | >%s</pre>.</body></html>").....( | 
| 3140 | 34 30 34 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 65 | 404..."<!DOCTYPE.html>.<html><he | 
| 3160 | 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 34 20 4e    6f 74 20 46 6f 75 6e 64 3c 2f 74 69 74 6c 65 3e | ad>.<title>404.Not.Found</title> | 
| 3180 | 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c    68 31 3e 4e 6f 74 20 46 6f 75 6e 64 3c 2f 68 31 | .</head><body>.<h1>Not.Found</h1 | 
| 31a0 | 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74    65 64 20 55 52 4c 20 77 61 73 20 6e 6f 74 20 66 | >.<p>The.requested.URL.was.not.f | 
| 31c0 | 6f 75 6e 64 20 6f 6e 20 74 68 69 73 20 73 65 72    76 65 72 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 | ound.on.this.server.</p>.<pre>%s | 
| 31e0 | 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f    68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 35 30 30 | </pre>.</body></html>").....(500 | 
| 3200 | 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 65 61 64 3e | ..."<!DOCTYPE.html>.<html><head> | 
| 3220 | 0a 3c 74 69 74 6c 65 3e 35 30 30 20 49 6e 74 65    72 6e 61 6c 20 45 72 72 6f 72 3c 2f 74 69 74 6c | .<title>500.Internal.Error</titl | 
| 3240 | 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e    0a 3c 68 31 3e 35 30 30 20 49 6e 74 65 72 6e 61 | e>.</head><body>.<h1>500.Interna | 
| 3260 | 6c 20 45 72 72 6f 72 3c 2f 68 31 3e 0a 3c 70 3e    49 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 77 | l.Error</h1>.<p>Internal.error.w | 
| 3280 | 68 65 6e 20 68 61 6e 64 6c 69 6e 67 20 74 68 69    73 20 72 65 71 75 65 73 74 2e 3c 2f 70 3e 0a 3c | hen.handling.this.request.</p>.< | 
| 32a0 | 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62    6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 29 29 0a 20 | pre>%s</pre>.</body></html>")).. | 
| 32c0 | 20 22 48 54 4d 4c 20 66 6f 72 20 76 61 72 69 6f    75 73 20 65 72 72 6f 72 73 2e 22 29 0a 0a 3b 3b | ."HTML.for.various.errors.")..;; | 
| 32e0 | 20 55 73 65 72 20 69 6e 74 65 72 66 61 63 65 0a    0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a | .User.interface..;;;###autoload. | 
| 3300 | 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 61    72 74 20 28 29 0a 20 20 22 53 74 61 72 74 20 74 | (defun.httpd-start.()..."Start.t | 
| 3320 | 68 65 20 77 65 62 20 73 65 72 76 65 72 20 70 72    6f 63 65 73 73 2e 20 49 66 20 74 68 65 20 73 65 | he.web.server.process..If.the.se | 
| 3340 | 72 76 65 72 20 69 73 20 61 6c 72 65 61 64 79 0a    72 75 6e 6e 69 6e 67 2c 20 74 68 69 73 20 77 69 | rver.is.already.running,.this.wi | 
| 3360 | 6c 6c 20 72 65 73 74 61 72 74 20 74 68 65 20 73    65 72 76 65 72 2e 20 54 68 65 72 65 20 69 73 20 | ll.restart.the.server..There.is. | 
| 3380 | 6f 6e 6c 79 20 6f 6e 65 20 73 65 72 76 65 72 0a    69 6e 73 74 61 6e 63 65 20 70 65 72 20 45 6d 61 | only.one.server.instance.per.Ema | 
| 33a0 | 63 73 20 69 6e 73 74 61 6e 63 65 2e 22 0a 20 20    28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 | cs.instance."...(interactive)... | 
| 33c0 | 28 68 74 74 70 64 2d 73 74 6f 70 29 0a 20 20 28    68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 61 72 | (httpd-stop)...(httpd-log.`(star | 
| 33e0 | 74 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65    2d 73 74 72 69 6e 67 29 29 29 0a 20 20 28 6d 61 | t.,(current-time-string)))...(ma | 
| 3400 | 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65    73 73 0a 20 20 20 3a 6e 61 6d 65 20 20 20 20 20 | ke-network-process....:name..... | 
| 3420 | 22 68 74 74 70 64 22 0a 20 20 20 3a 73 65 72 76    69 63 65 20 20 68 74 74 70 64 2d 70 6f 72 74 0a | "httpd"....:service..httpd-port. | 
| 3440 | 20 20 20 3a 73 65 72 76 65 72 20 20 20 74 0a 20    20 20 3a 68 6f 73 74 20 20 20 20 20 68 74 74 70 | ...:server...t....:host.....http | 
| 3460 | 64 2d 68 6f 73 74 0a 20 20 20 3a 66 61 6d 69 6c    79 20 20 20 68 74 74 70 64 2d 69 70 2d 66 61 6d | d-host....:family...httpd-ip-fam | 
| 3480 | 69 6c 79 0a 20 20 20 3a 66 69 6c 74 65 72 20 20    20 27 68 74 74 70 64 2d 2d 66 69 6c 74 65 72 0a | ily....:filter...'httpd--filter. | 
| 34a0 | 20 20 20 3a 63 6f 64 69 6e 67 20 20 20 27 62 69    6e 61 72 79 0a 20 20 20 3a 6c 6f 67 20 20 20 20 | ...:coding...'binary....:log.... | 
| 34c0 | 20 20 27 68 74 74 70 64 2d 2d 6c 6f 67 29 0a 20    20 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 | ..'httpd--log)...(run-hooks.'htt | 
| 34e0 | 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 29 29 0a    0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a | pd-start-hook))..;;;###autoload. | 
| 3500 | 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 6f    70 20 28 29 0a 20 20 22 53 74 6f 70 20 74 68 65 | (defun.httpd-stop.()..."Stop.the | 
| 3520 | 20 77 65 62 20 73 65 72 76 65 72 20 69 66 20 69    74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 72 | .web.server.if.it.is.currently.r | 
| 3540 | 75 6e 6e 69 6e 67 2c 20 6f 74 68 65 72 77 69 73    65 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 22 0a 20 | unning,.otherwise.do.nothing.".. | 
| 3560 | 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20    20 28 77 68 65 6e 20 28 70 72 6f 63 65 73 73 2d | .(interactive)...(when.(process- | 
| 3580 | 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 0a    20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 | status."httpd").....(delete-proc | 
| 35a0 | 65 73 73 20 22 68 74 74 70 64 22 29 0a 20 20 20    20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 | ess."httpd").....(httpd-log.`(st | 
| 35c0 | 6f 70 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d    65 2d 73 74 72 69 6e 67 29 29 29 0a 20 20 20 20 | op.,(current-time-string)))..... | 
| 35e0 | 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70    64 2d 73 74 6f 70 2d 68 6f 6f 6b 29 29 29 0a 0a | (run-hooks.'httpd-stop-hook))).. | 
| 3600 | 3b 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 72 75 6e 6e | ;;;###autoload.(defun.httpd-runn | 
| 3620 | 69 6e 67 2d 70 20 28 29 0a 20 20 22 52 65 74 75    72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 | ing-p.()..."Return.non-nil.if.th | 
| 3640 | 65 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 73    65 72 76 65 72 20 69 73 20 72 75 6e 6e 69 6e 67 | e.simple-httpd.server.is.running | 
| 3660 | 2e 22 0a 20 20 28 6e 6f 74 20 28 6e 75 6c 6c 20    28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 | ."...(not.(null.(process-status. | 
| 3680 | 22 68 74 74 70 64 22 29 29 29 29 0a 0a 3b 3b 3b    23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 | "httpd"))))..;;;###autoload.(def | 
| 36a0 | 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64    69 72 65 63 74 6f 72 79 20 28 64 69 72 65 63 74 | un.httpd-serve-directory.(direct | 
| 36c0 | 6f 72 79 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 77 69 74 | ory)..."Start.the.web.server.wit | 
| 36e0 | 68 20 67 69 76 65 6e 20 60 64 69 72 65 63 74 6f    72 79 27 20 61 73 20 60 68 74 74 70 64 2d 72 6f | h.given.`directory'.as.`httpd-ro | 
| 3700 | 6f 74 27 2e 22 0a 20 20 28 69 6e 74 65 72 61 63    74 69 76 65 20 22 44 53 65 72 76 65 20 64 69 72 | ot'."...(interactive."DServe.dir | 
| 3720 | 65 63 74 6f 72 79 3a 20 5c 6e 22 29 0a 20 20 28    73 65 74 66 20 68 74 74 70 64 2d 72 6f 6f 74 20 | ectory:.\n")...(setf.httpd-root. | 
| 3740 | 64 69 72 65 63 74 6f 72 79 29 0a 20 20 28 68 74    74 70 64 2d 73 74 61 72 74 29 0a 20 20 28 6d 65 | directory)...(httpd-start)...(me | 
| 3760 | 73 73 61 67 65 20 22 53 74 61 72 74 65 64 20 73    69 6d 70 6c 65 2d 68 74 74 70 64 20 6f 6e 20 25 | ssage."Started.simple-httpd.on.% | 
| 3780 | 73 3a 25 64 2c 20 73 65 72 76 69 6e 67 3a 20 25    73 22 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 | s:%d,.serving:.%s"............(c | 
| 37a0 | 6c 2d 63 61 73 65 20 68 74 74 70 64 2d 68 6f 73    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | l-case.httpd-host..............( | 
| 37c0 | 28 6e 69 6c 29 20 22 30 2e 30 2e 30 2e 30 22 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 | (nil)."0.0.0.0")..............(( | 
| 37e0 | 6c 6f 63 61 6c 29 20 22 6c 6f 63 61 6c 68 6f 73    74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | local)."localhost")............. | 
| 3800 | 20 28 6f 74 68 65 72 77 69 73 65 20 68 74 74 70    64 2d 68 6f 73 74 29 29 20 68 74 74 70 64 2d 70 | .(otherwise.httpd-host)).httpd-p | 
| 3820 | 6f 72 74 20 64 69 72 65 63 74 6f 72 79 29 29 0a    0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 62 61 | ort.directory))..(defun.httpd-ba | 
| 3840 | 74 63 68 2d 73 74 61 72 74 20 28 29 0a 20 20 22    4e 65 76 65 72 20 72 65 74 75 72 6e 73 2c 20 68 | tch-start.()..."Never.returns,.h | 
| 3860 | 6f 6c 64 69 6e 67 20 74 68 65 20 73 65 72 76 65    72 20 6f 70 65 6e 20 69 6e 64 65 66 69 6e 69 74 | olding.the.server.open.indefinit | 
| 3880 | 65 6c 79 20 66 6f 72 20 62 61 74 63 68 20 6d 6f    64 65 2e 0a 4c 6f 67 73 20 61 72 65 20 72 65 64 | ely.for.batch.mode..Logs.are.red | 
| 38a0 | 69 72 65 63 74 65 64 20 74 6f 20 73 74 64 6f 75    74 2e 20 54 6f 20 75 73 65 2c 20 69 6e 76 6f 6b | irected.to.stdout..To.use,.invok | 
| 38c0 | 65 20 45 6d 61 63 73 20 6c 69 6b 65 20 74 68 69    73 3a 0a 65 6d 61 63 73 20 2d 51 20 2d 62 61 74 | e.Emacs.like.this:.emacs.-Q.-bat | 
| 38e0 | 63 68 20 2d 6c 20 73 69 6d 70 6c 65 2d 68 74 74    70 64 2e 65 6c 63 20 2d 66 20 68 74 74 70 64 2d | ch.-l.simple-httpd.elc.-f.httpd- | 
| 3900 | 62 61 74 63 68 2d 73 74 61 72 74 22 0a 20 20 28    69 66 20 28 6e 6f 74 20 6e 6f 6e 69 6e 74 65 72 | batch-start"...(if.(not.noninter | 
| 3920 | 61 63 74 69 76 65 29 0a 20 20 20 20 20 20 28 65    72 72 6f 72 20 22 4f 6e 6c 79 20 75 73 65 20 60 | active).......(error."Only.use.` | 
| 3940 | 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72    74 27 20 69 6e 20 62 61 74 63 68 20 6d 6f 64 65 | httpd-batch-start'.in.batch.mode | 
| 3960 | 21 22 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73    74 61 72 74 29 0a 20 20 20 20 28 64 65 66 61 6c | !").....(httpd-start).....(defal | 
| 3980 | 69 61 73 20 27 68 74 74 70 64 2d 6c 6f 67 20 27    70 70 29 0a 20 20 20 20 28 77 68 69 6c 65 20 74 | ias.'httpd-log.'pp).....(while.t | 
| 39a0 | 20 28 73 6c 65 65 70 2d 66 6f 72 20 36 30 29 29    29 29 0a 0a 3b 3b 20 55 74 69 6c 69 74 79 0a 0a | .(sleep-for.60))))..;;.Utility.. | 
| 39c0 | 28 64 65 66 75 6e 20 68 74 74 70 64 2d 64 61 74    65 2d 73 74 72 69 6e 67 20 28 26 6f 70 74 69 6f | (defun.httpd-date-string.(&optio | 
| 39e0 | 6e 61 6c 20 64 61 74 65 29 0a 20 20 22 52 65 74    75 72 6e 20 61 6e 20 48 54 54 50 20 64 61 74 65 | nal.date)..."Return.an.HTTP.date | 
| 3a00 | 20 73 74 72 69 6e 67 20 28 52 46 43 20 31 31 32    33 29 2e 22 0a 20 20 28 66 6f 72 6d 61 74 2d 74 | .string.(RFC.1123)."...(format-t | 
| 3a20 | 69 6d 65 2d 73 74 72 69 6e 67 20 22 25 61 2c 20    25 65 20 25 62 20 25 59 20 25 54 20 47 4d 54 22 | ime-string."%a,.%e.%b.%Y.%T.GMT" | 
| 3a40 | 20 64 61 74 65 20 74 29 29 0a 0a 28 64 65 66 75    6e 20 68 74 74 70 64 2d 65 74 61 67 20 28 66 69 | .date.t))..(defun.httpd-etag.(fi | 
| 3a60 | 6c 65 29 0a 20 20 22 43 6f 6d 70 75 74 65 20 74    68 65 20 45 54 61 67 20 66 6f 72 20 46 49 4c 45 | le)..."Compute.the.ETag.for.FILE | 
| 3a80 | 2e 22 0a 20 20 28 63 6f 6e 63 61 74 20 22 5c 22    22 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 68 | ."...(concat."\"".(substring.(sh | 
| 3aa0 | 61 31 20 28 70 72 69 6e 31 2d 74 6f 2d 73 74 72    69 6e 67 20 28 66 69 6c 65 2d 61 74 74 72 69 62 | a1.(prin1-to-string.(file-attrib | 
| 3ac0 | 75 74 65 73 20 66 69 6c 65 29 29 29 20 2d 31 36    29 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 22 | utes.file))).-16)..........."\"" | 
| 3ae0 | 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64    2d 2d 73 74 72 69 6e 67 69 66 79 20 28 64 65 73 | ))..(defun.httpd--stringify.(des | 
| 3b00 | 69 67 6e 61 74 6f 72 29 0a 20 20 22 54 75 72 6e    20 61 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e | ignator)..."Turn.a.string.design | 
| 3b20 | 61 74 6f 72 20 69 6e 74 6f 20 61 20 73 74 72 69    6e 67 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 74 | ator.into.a.string."...(let.((st | 
| 3b40 | 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73    22 20 64 65 73 69 67 6e 61 74 6f 72 29 29 29 0a | ring.(format."%s".designator))). | 
| 3b60 | 20 20 20 20 28 69 66 20 28 6b 65 79 77 6f 72 64    70 20 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 | ....(if.(keywordp.designator)... | 
| 3b80 | 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67    20 73 74 72 69 6e 67 20 31 29 0a 20 20 20 20 20 | ......(substring.string.1)...... | 
| 3ba0 | 20 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 4e    65 74 77 6f 72 6b 69 6e 67 20 63 6f 64 65 0a 0a | .string)))..;;.Networking.code.. | 
| 3bc0 | 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 63 6f    6e 6e 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 | (defun.httpd--connection-close-p | 
| 3be0 | 20 28 72 65 71 75 65 73 74 29 0a 20 20 22 52 65    74 75 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 | .(request)..."Return.non-nil.if. | 
| 3c00 | 74 68 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65    73 74 65 64 20 5c 22 63 6f 6e 6e 65 63 74 69 6f | the.client.requested.\"connectio | 
| 3c20 | 6e 3a 20 63 6c 6f 73 65 5c 22 2e 22 0a 20 20 28    6f 72 20 28 65 71 75 61 6c 20 27 28 22 63 6c 6f | n:.close\"."...(or.(equal.'("clo | 
| 3c40 | 73 65 22 29 20 28 63 64 72 20 28 61 73 73 6f 63    20 22 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 72 65 | se").(cdr.(assoc."Connection".re | 
| 3c60 | 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28    65 71 75 61 6c 20 27 28 22 48 54 54 50 2f 31 2e | quest))).......(equal.'("HTTP/1. | 
| 3c80 | 30 22 29 20 28 63 64 64 72 20 28 61 73 73 6f 63    20 22 47 45 54 22 20 72 65 71 75 65 73 74 29 29 | 0").(cddr.(assoc."GET".request)) | 
| 3ca0 | 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70    64 2d 2d 66 69 6c 74 65 72 20 28 70 72 6f 63 20 | )))..(defun.httpd--filter.(proc. | 
| 3cc0 | 63 68 75 6e 6b 29 0a 20 20 22 52 75 6e 73 20 65    61 63 68 20 74 69 6d 65 20 63 6c 69 65 6e 74 20 | chunk)..."Runs.each.time.client. | 
| 3ce0 | 6d 61 6b 65 73 20 61 20 72 65 71 75 65 73 74 2e    22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e | makes.a.request."...(with-curren | 
| 3d00 | 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73    73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 | t-buffer.(process-get.proc.:requ | 
| 3d20 | 65 73 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20    28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e | est-buffer).....(goto-char.(poin | 
| 3d40 | 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 69 6e 73    65 72 74 20 63 68 75 6e 6b 29 0a 20 20 20 20 28 | t-max)).....(insert.chunk).....( | 
| 3d60 | 6c 65 74 20 28 28 72 65 71 75 65 73 74 20 28 70    72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 | let.((request.(process-get.proc. | 
| 3d80 | 3a 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20    20 20 28 75 6e 6c 65 73 73 20 72 65 71 75 65 73 | :request))).......(unless.reques | 
| 3da0 | 74 0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20    28 73 65 74 66 20 72 65 71 75 65 73 74 20 28 68 | t.........(when.(setf.request.(h | 
| 3dc0 | 74 74 70 64 2d 70 61 72 73 65 29 29 0a 20 20 20    20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 72 | ttpd-parse))...........(delete-r | 
| 3de0 | 65 67 69 6f 6e 20 28 70 6f 69 6e 74 2d 6d 69 6e    29 20 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 | egion.(point-min).(point))...... | 
| 3e00 | 20 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 20 | .....(process-put.proc.:request. | 
| 3e20 | 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20    20 28 77 68 65 6e 20 72 65 71 75 65 73 74 0a 20 | request))).......(when.request.. | 
| 3e40 | 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 6f    6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 28 63 61 | .......(let.((content-length.(ca | 
| 3e60 | 64 72 20 28 61 73 73 6f 63 20 22 43 6f 6e 74 65    6e 74 2d 4c 65 6e 67 74 68 22 20 72 65 71 75 65 | dr.(assoc."Content-Length".reque | 
| 3e80 | 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20    20 28 77 68 65 6e 20 28 6f 72 20 28 6e 75 6c 6c | st))))...........(when.(or.(null | 
| 3ea0 | 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .content-length)................ | 
| 3ec0 | 20 20 20 20 20 28 3d 20 28 62 75 66 66 65 72 2d    73 69 7a 65 29 20 28 73 74 72 69 6e 67 2d 74 6f | .....(=.(buffer-size).(string-to | 
| 3ee0 | 2d 6e 75 6d 62 65 72 20 63 6f 6e 74 65 6e 74 2d    6c 65 6e 67 74 68 29 29 29 0a 20 20 20 20 20 20 | -number.content-length)))....... | 
| 3f00 | 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 63 6f    6e 74 65 6e 74 20 28 62 75 66 66 65 72 2d 73 74 | ......(let*.((content.(buffer-st | 
| 3f20 | 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 28 75 72 69 20 28 | ring))....................(uri.( | 
| 3f40 | 63 6c 2d 63 61 64 61 72 20 72 65 71 75 65 73 74    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | cl-cadar.request)).............. | 
| 3f60 | 20 20 20 20 20 20 28 70 61 72 73 65 64 2d 75 72    69 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 75 | ......(parsed-uri.(httpd-parse-u | 
| 3f80 | 72 69 20 28 63 6f 6e 63 61 74 20 75 72 69 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ri.(concat.uri)))............... | 
| 3fa0 | 20 20 20 20 20 28 75 72 69 2d 70 61 74 68 20 28    68 74 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 | .....(uri-path.(httpd-unhex.(nth | 
| 3fc0 | 20 30 20 70 61 72 73 65 64 2d 75 72 69 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .0.parsed-uri)))................ | 
| 3fe0 | 20 20 20 20 28 75 72 69 2d 71 75 65 72 79 20 28    61 70 70 65 6e 64 20 28 6e 74 68 20 31 20 70 61 | ....(uri-query.(append.(nth.1.pa | 
| 4000 | 72 73 65 64 2d 75 72 69 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | rsed-uri)....................... | 
| 4020 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 | ................(httpd-parse-arg | 
| 4040 | 73 20 63 6f 6e 74 65 6e 74 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | s.content))).................... | 
| 4060 | 28 73 65 72 76 6c 65 74 20 28 68 74 74 70 64 2d    67 65 74 2d 73 65 72 76 6c 65 74 20 75 72 69 2d | (servlet.(httpd-get-servlet.uri- | 
| 4080 | 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 | path)))...............(erase-buf | 
| 40a0 | 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 | fer)...............(process-put. | 
| 40c0 | 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 6e 69    6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | proc.:request.nil).............. | 
| 40e0 | 20 28 73 65 74 66 20 72 65 71 75 65 73 74 20 28    6e 72 65 76 65 72 73 65 20 28 63 6f 6e 73 20 28 | .(setf.request.(nreverse.(cons.( | 
| 4100 | 6c 69 73 74 20 22 43 6f 6e 74 65 6e 74 22 20 63    6f 6e 74 65 6e 74 29 0a 20 20 20 20 20 20 20 20 | list."Content".content)......... | 
| 4120 | 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 | ................................ | 
| 4140 | 20 20 20 20 28 6e 72 65 76 65 72 73 65 20 72 65    71 75 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 | ....(nreverse.request))))....... | 
| 4160 | 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c    6f 67 20 60 28 72 65 71 75 65 73 74 20 28 64 61 | ........(httpd-log.`(request.(da | 
| 4180 | 74 65 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d    73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 | te.,(httpd-date-string))........ | 
| 41a0 | 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 61 64 64 | ............................(add | 
| 41c0 | 72 65 73 73 20 2c 28 63 61 72 20 28 70 72 6f 63    65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 | ress.,(car.(process-contact.proc | 
| 41e0 | 29 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 20 20 20 | )))............................. | 
| 4200 | 20 20 20 20 20 20 20 28 67 65 74 20 2c 75 72 69    2d 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 | .......(get.,uri-path).......... | 
| 4220 | 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 2c 28 63 6f 6e 73 | ..........................,(cons | 
| 4240 | 20 27 68 65 61 64 65 72 73 20 72 65 71 75 65 73    74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | .'headers.request)))............ | 
| 4260 | 20 20 20 28 69 66 20 28 6e 75 6c 6c 20 73 65 72    76 6c 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 | ...(if.(null.servlet)........... | 
| 4280 | 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 2d    65 72 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 | ........(httpd--error-safe.proc. | 
| 42a0 | 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d | 404).................(condition- | 
| 42c0 | 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | case.error-case................. | 
| 42e0 | 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 72    76 6c 65 74 20 70 72 6f 63 20 75 72 69 2d 70 61 | ....(funcall.servlet.proc.uri-pa | 
| 4300 | 74 68 20 75 72 69 2d 71 75 65 72 79 20 72 65 71    75 65 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 | th.uri-query.request)........... | 
| 4320 | 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 20 28    68 74 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 | ........(error.(httpd--error-saf | 
| 4340 | 65 20 70 72 6f 63 20 35 30 30 20 65 72 72 6f 72    2d 63 61 73 65 29 29 29 29 0a 20 20 20 20 20 20 | e.proc.500.error-case))))....... | 
| 4360 | 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 68    74 74 70 64 2d 2d 63 6f 6e 6e 65 63 74 69 6f 6e | ........(when.(httpd--connection | 
| 4380 | 2d 63 6c 6f 73 65 2d 70 20 72 65 71 75 65 73 74    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -close-p.request)............... | 
| 43a0 | 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d    65 6f 66 20 70 72 6f 63 29 29 29 29 29 29 29 29 | ..(process-send-eof.proc)))))))) | 
| 43c0 | 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d    2d 6c 6f 67 20 28 73 65 72 76 65 72 20 70 72 6f | )..(defun.httpd--log.(server.pro | 
| 43e0 | 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75    6e 73 20 65 61 63 68 20 74 69 6d 65 20 61 20 6e | c.message)..."Runs.each.time.a.n | 
| 4400 | 65 77 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63    74 73 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 | ew.client.connects."...(with-cur | 
| 4420 | 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 6e    65 72 61 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 | rent-buffer.(generate-new-buffer | 
| 4440 | 20 22 20 2a 68 74 74 70 64 2d 63 6c 69 65 6e 74    2a 22 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 | .".*httpd-client*").....(process | 
| 4460 | 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65    73 74 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 | -put.proc.:request-buffer.(curre | 
| 4480 | 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 28    73 65 74 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 | nt-buffer)))...(set-process-sent | 
| 44a0 | 69 6e 65 6c 20 70 72 6f 63 20 23 27 68 74 74 70    64 2d 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 28 | inel.proc.#'httpd--sentinel)...( | 
| 44c0 | 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20    27 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 63 61 72 | httpd-log.(list.'connection.(car | 
| 44e0 | 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63    74 20 70 72 6f 63 29 29 29 29 29 0a 0a 28 64 65 | .(process-contact.proc)))))..(de | 
| 4500 | 66 75 6e 20 68 74 74 70 64 2d 2d 73 65 6e 74 69    6e 65 6c 20 28 70 72 6f 63 20 6d 65 73 73 61 67 | fun.httpd--sentinel.(proc.messag | 
| 4520 | 65 29 0a 20 20 22 52 75 6e 73 20 77 68 65 6e 20    61 20 63 6c 69 65 6e 74 20 63 6c 6f 73 65 73 20 | e)..."Runs.when.a.client.closes. | 
| 4540 | 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22    0a 20 20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 | the.connection."...(unless.(stri | 
| 4560 | 6e 67 2d 6d 61 74 63 68 2d 70 20 22 5e 6f 70 65    6e 20 22 20 6d 65 73 73 61 67 65 29 0a 20 20 20 | ng-match-p."^open.".message).... | 
| 4580 | 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 20 28    70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 | .(let.((buffer.(process-get.proc | 
| 45a0 | 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72    29 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 | .:request-buffer))).......(when. | 
| 45c0 | 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28    6b 69 6c 6c 2d 62 75 66 66 65 72 20 62 75 66 66 | buffer.........(kill-buffer.buff | 
| 45e0 | 65 72 29 29 29 29 29 0a 0a 3b 3b 20 4c 6f 67 67    69 6e 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 | er)))))..;;.Logging..(defun.http | 
| 4600 | 64 2d 6c 6f 67 20 28 69 74 65 6d 29 0a 20 20 22    50 72 65 74 74 79 20 70 72 69 6e 74 20 61 20 6c | d-log.(item)..."Pretty.print.a.l | 
| 4620 | 69 73 70 20 6f 62 6a 65 63 74 20 74 6f 20 74 68    65 20 6c 6f 67 2e 22 0a 20 20 28 77 69 74 68 2d | isp.object.to.the.log."...(with- | 
| 4640 | 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28    67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 | current-buffer.(get-buffer-creat | 
| 4660 | 65 20 22 2a 68 74 74 70 64 2a 22 29 0a 20 20 20    20 28 73 65 74 66 20 62 75 66 66 65 72 2d 72 65 | e."*httpd*").....(setf.buffer-re | 
| 4680 | 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 0a 20 20 20    20 28 6c 65 74 20 28 28 66 6f 6c 6c 6f 77 20 28 | ad-only.nil).....(let.((follow.( | 
| 46a0 | 3d 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74    2d 6d 61 78 29 29 29 29 0a 20 20 20 20 20 20 28 | =.(point).(point-max)))).......( | 
| 46c0 | 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20    20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 | save-excursion.........(goto-cha | 
| 46e0 | 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20    20 20 20 20 20 20 20 28 70 70 20 69 74 65 6d 20 | r.(point-max)).........(pp.item. | 
| 4700 | 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29    29 29 0a 20 20 20 20 20 20 28 69 66 20 66 6f 6c | (current-buffer))).......(if.fol | 
| 4720 | 6c 6f 77 20 28 67 6f 74 6f 2d 63 68 61 72 20 28    70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 | low.(goto-char.(point-max))))... | 
| 4740 | 20 20 28 73 65 74 66 20 74 72 75 6e 63 61 74 65    2d 6c 69 6e 65 73 20 74 0a 20 20 20 20 20 20 20 | ..(setf.truncate-lines.t........ | 
| 4760 | 20 20 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f    6e 6c 79 20 74 29 0a 20 20 20 20 28 73 65 74 2d | ...buffer-read-only.t).....(set- | 
| 4780 | 62 75 66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d    70 20 6e 69 6c 29 29 29 0a 0a 3b 3b 20 53 65 72 | buffer-modified-p.nil)))..;;.Ser | 
| 47a0 | 76 6c 65 74 73 0a 0a 28 64 65 66 76 61 72 20 68    74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f | vlets..(defvar.httpd-current-pro | 
| 47c0 | 63 20 6e 69 6c 0a 20 20 22 54 68 65 20 70 72 6f    63 65 73 73 20 6f 62 6a 65 63 74 20 63 75 72 72 | c.nil..."The.process.object.curr | 
| 47e0 | 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 22 29 0a    0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 2d | ently.in.use.")..(defvar.httpd-- | 
| 4800 | 68 65 61 64 65 72 2d 73 65 6e 74 20 6e 69 6c 0a    20 20 22 42 75 66 66 65 72 2d 6c 6f 63 61 6c 20 | header-sent.nil..."Buffer-local. | 
| 4820 | 76 61 72 69 61 62 6c 65 20 69 6e 64 69 63 61 74    69 6e 67 20 69 66 20 74 68 65 20 68 65 61 64 65 | variable.indicating.if.the.heade | 
| 4840 | 72 20 68 61 73 20 62 65 65 6e 20 73 65 6e 74 2e    22 29 0a 28 6d 61 6b 65 2d 76 61 72 69 61 62 6c | r.has.been.sent.").(make-variabl | 
| 4860 | 65 2d 62 75 66 66 65 72 2d 6c 6f 63 61 6c 20 27    68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 | e-buffer-local.'httpd--header-se | 
| 4880 | 6e 74 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70    64 2d 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 28 | nt)..(defun.httpd-resolve-proc.( | 
| 48a0 | 70 72 6f 63 29 0a 20 20 22 52 65 74 75 72 6e 20    74 68 65 20 63 6f 72 72 65 63 74 20 70 72 6f 63 | proc)..."Return.the.correct.proc | 
| 48c0 | 65 73 73 20 74 6f 20 75 73 65 2e 20 54 68 69 73    20 68 61 6e 64 6c 65 73 20 60 68 74 74 70 64 2d | ess.to.use..This.handles.`httpd- | 
| 48e0 | 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 22 0a    20 20 28 69 66 20 28 65 71 20 74 20 70 72 6f 63 | current-proc'."...(if.(eq.t.proc | 
| 4900 | 29 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d    70 72 6f 63 20 70 72 6f 63 29 29 0a 0a 28 64 65 | ).httpd-current-proc.proc))..(de | 
| 4920 | 66 6d 61 63 72 6f 20 77 69 74 68 2d 68 74 74 70    64 2d 62 75 66 66 65 72 20 28 70 72 6f 63 20 6d | fmacro.with-httpd-buffer.(proc.m | 
| 4940 | 69 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a    20 20 22 43 72 65 61 74 65 20 61 20 74 65 6d 70 | ime.&rest.body)..."Create.a.temp | 
| 4960 | 6f 72 61 72 79 20 62 75 66 66 65 72 2c 20 73 65    74 20 69 74 20 61 73 20 74 68 65 20 63 75 72 72 | orary.buffer,.set.it.as.the.curr | 
| 4980 | 65 6e 74 20 62 75 66 66 65 72 2c 20 61 6e 64 2c    0a 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 62 | ent.buffer,.and,.at.the.end.of.b | 
| 49a0 | 6f 64 79 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c    6c 79 20 73 65 72 76 65 20 69 74 20 74 6f 20 61 | ody,.automatically.serve.it.to.a | 
| 49c0 | 6e 20 48 54 54 50 20 63 6c 69 65 6e 74 20 77 69    74 68 0a 61 6e 20 48 54 54 50 20 68 65 61 64 65 | n.HTTP.client.with.an.HTTP.heade | 
| 49e0 | 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65    20 73 70 65 63 69 66 69 65 64 20 4d 49 4d 45 20 | r.indicating.the.specified.MIME. | 
| 4a00 | 74 79 70 65 2e 20 41 64 64 69 74 69 6f 6e 61 6c    6c 79 2c 0a 60 73 74 61 6e 64 61 72 64 2d 6f 75 | type..Additionally,.`standard-ou | 
| 4a20 | 74 70 75 74 27 20 69 73 20 73 65 74 20 74 6f 20    74 68 69 73 20 6f 75 74 70 75 74 20 62 75 66 66 | tput'.is.set.to.this.output.buff | 
| 4a40 | 65 72 20 61 6e 64 0a 60 68 74 74 70 64 2d 63 75    72 72 65 6e 74 2d 70 72 6f 63 27 20 69 73 20 73 | er.and.`httpd-current-proc'.is.s | 
| 4a60 | 65 74 20 74 6f 20 50 52 4f 43 2e 22 0a 20 20 28    64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 | et.to.PROC."...(declare.(indent. | 
| 4a80 | 64 65 66 75 6e 29 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 | defun))...(let.((proc-sym.(make- | 
| 4aa0 | 73 79 6d 62 6f 6c 20 22 2d 2d 70 72 6f 63 2d 2d    22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 | symbol."--proc--"))).....`(let.( | 
| 4ac0 | 28 2c 70 72 6f 63 2d 73 79 6d 20 2c 70 72 6f 63    29 29 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d | (,proc-sym.,proc))........(with- | 
| 4ae0 | 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20    20 20 20 20 20 28 73 65 74 66 20 6d 61 6a 6f 72 | temp-buffer..........(setf.major | 
| 4b00 | 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66    66 65 72 29 0a 20 20 20 20 20 20 20 20 20 28 6c | -mode.'httpd-buffer)..........(l | 
| 4b20 | 65 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 | et.((standard-output.(current-bu | 
| 4b40 | 66 66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 68 74 74 70 64 2d 63 75 72 | ffer))................(httpd-cur | 
| 4b60 | 72 65 6e 74 2d 70 72 6f 63 20 2c 70 72 6f 63 2d    73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 | rent-proc.,proc-sym))........... | 
| 4b80 | 20 2c 40 62 6f 64 79 29 0a 20 20 20 20 20 20 20    20 20 28 75 6e 6c 65 73 73 20 68 74 74 70 64 2d | .,@body)..........(unless.httpd- | 
| 4ba0 | 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20    20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 | -header-sent............(httpd-s | 
| 4bc0 | 65 6e 64 2d 68 65 61 64 65 72 20 2c 70 72 6f 63    2d 73 79 6d 20 2c 6d 69 6d 65 20 32 30 30 29 29 | end-header.,proc-sym.,mime.200)) | 
| 4be0 | 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74    70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 | ))))..(defun.httpd-discard-buffe | 
| 4c00 | 72 20 28 29 0a 20 20 22 44 6f 6e 27 74 20 72 65    73 70 6f 6e 64 20 75 73 69 6e 67 20 63 75 72 72 | r.()..."Don't.respond.using.curr | 
| 4c20 | 65 6e 74 20 73 65 72 76 65 72 20 62 75 66 66 65    72 20 28 60 77 69 74 68 2d 68 74 74 70 64 2d 62 | ent.server.buffer.(`with-httpd-b | 
| 4c40 | 75 66 66 65 72 27 29 2e 0a 52 65 74 75 72 6e 73    20 61 20 70 72 6f 63 65 73 73 20 66 6f 72 20 66 | uffer')..Returns.a.process.for.f | 
| 4c60 | 75 74 75 72 65 20 72 65 73 70 6f 6e 73 65 2e 22    0a 20 20 28 77 68 65 6e 20 28 65 71 20 6d 61 6a | uture.response."...(when.(eq.maj | 
| 4c80 | 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62    75 66 66 65 72 29 20 28 73 65 74 66 20 68 74 74 | or-mode.'httpd-buffer).(setf.htt | 
| 4ca0 | 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20    74 29 29 0a 20 20 68 74 74 70 64 2d 63 75 72 72 | pd--header-sent.t))...httpd-curr | 
| 4cc0 | 65 6e 74 2d 70 72 6f 63 29 0a 0a 28 64 65 66 6d    61 63 72 6f 20 64 65 66 73 65 72 76 6c 65 74 20 | ent-proc)..(defmacro.defservlet. | 
| 4ce0 | 28 6e 61 6d 65 20 6d 69 6d 65 20 70 61 74 68 2d    71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 | (name.mime.path-query-request.&r | 
| 4d00 | 65 73 74 20 62 6f 64 79 29 0a 20 20 22 44 65 66    69 6e 65 73 20 61 20 73 69 6d 70 6c 65 20 68 74 | est.body)..."Defines.a.simple.ht | 
| 4d20 | 74 70 64 20 73 65 72 76 65 6c 65 74 2e 20 54 68    65 20 73 65 72 76 6c 65 74 20 72 75 6e 73 20 69 | tpd.servelet..The.servlet.runs.i | 
| 4d40 | 6e 20 61 0a 74 65 6d 70 6f 72 61 72 79 20 62 75    66 66 65 72 20 77 68 69 63 68 20 69 73 20 61 75 | n.a.temporary.buffer.which.is.au | 
| 4d60 | 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 6e 74 | tomatically.served.to.the.client | 
| 4d80 | 0a 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 68 65    61 64 65 72 2e 0a 0a 41 20 73 65 72 76 6c 65 74 | .along.with.a.header...A.servlet | 
| 4da0 | 20 74 68 61 74 20 73 65 72 76 65 73 20 74 68 65    20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 2a 73 63 | .that.serves.the.contents.of.*sc | 
| 4dc0 | 72 61 74 63 68 2a 2c 0a 0a 20 20 20 20 28 64 65    66 73 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 | ratch*,......(defservlet.scratch | 
| 4de0 | 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 20    20 20 20 20 20 28 69 6e 73 65 72 74 2d 62 75 66 | .text/plain.().......(insert-buf | 
| 4e00 | 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 74 65 | fer-substring.(get-buffer-create | 
| 4e20 | 20 5c 22 2a 73 63 72 61 74 63 68 2a 5c 22 29 29    29 0a 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 | .\"*scratch*\")))..A.servlet.tha | 
| 4e40 | 74 20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 20    20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 | t.says.hello,......(defservlet.h | 
| 4e60 | 65 6c 6c 6f 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 20 20 20 | ello-world.text/plain.(path).... | 
| 4e80 | 20 20 20 28 69 6e 73 65 72 74 20 5c 22 68 65 6c    6c 6f 2c 20 5c 22 20 28 66 69 6c 65 2d 6e 61 6d | ...(insert.\"hello,.\".(file-nam | 
| 4ea0 | 65 2d 6e 6f 6e 64 69 72 65 63 74 6f 72 79 20 70    61 74 68 29 29 29 29 22 0a 20 20 28 64 65 63 6c | e-nondirectory.path))))"...(decl | 
| 4ec0 | 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 72 6f | are.(indent.defun))...(let.((pro | 
| 4ee0 | 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62    6f 6c 20 22 70 72 6f 63 22 29 29 0a 20 20 20 20 | c-sym.(make-symbol."proc"))..... | 
| 4f00 | 20 20 20 20 28 66 6e 61 6d 65 20 28 69 6e 74 65    72 6e 20 28 63 6f 6e 63 61 74 20 22 68 74 74 70 | ....(fname.(intern.(concat."http | 
| 4f20 | 64 2f 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65    20 6e 61 6d 65 29 29 29 29 29 0a 20 20 20 20 60 | d/".(symbol-name.name))))).....` | 
| 4f40 | 28 64 65 66 75 6e 20 2c 66 6e 61 6d 65 20 28 2c    70 72 6f 63 2d 73 79 6d 20 2c 40 70 61 74 68 2d | (defun.,fname.(,proc-sym.,@path- | 
| 4f60 | 71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72    65 73 74 20 2c 28 63 6c 2d 67 65 6e 73 79 6d 29 | query-request.&rest.,(cl-gensym) | 
| 4f80 | 29 0a 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 2c 70 72 6f | )........(with-httpd-buffer.,pro | 
| 4fa0 | 63 2d 73 79 6d 20 2c 28 68 74 74 70 64 2d 2d 73    74 72 69 6e 67 69 66 79 20 6d 69 6d 65 29 0a 20 | c-sym.,(httpd--stringify.mime).. | 
| 4fc0 | 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29    29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 | ........,@body))))..(defun.httpd | 
| 4fe0 | 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20    28 73 79 6d 62 6f 6c 29 0a 20 20 22 50 61 72 73 | -parse-endpoint.(symbol)..."Pars | 
| 5000 | 65 20 61 6e 20 65 6e 64 70 6f 69 6e 74 20 64 65    66 69 6e 69 74 69 6f 6e 20 74 65 6d 70 6c 61 74 | e.an.endpoint.definition.templat | 
| 5020 | 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 60    64 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 0a 20 | e.for.use.with.`defservlet*'.".. | 
| 5040 | 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 69 74    65 6d 20 69 6e 20 28 73 70 6c 69 74 2d 73 74 72 | .(cl-loop.for.item.in.(split-str | 
| 5060 | 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65    20 73 79 6d 62 6f 6c 29 20 22 2f 22 29 0a 20 20 | ing.(symbol-name.symbol)."/")... | 
| 5080 | 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 75    70 66 72 6f 6d 20 30 0a 20 20 20 20 20 20 20 20 | .........for.n.upfrom.0......... | 
| 50a0 | 20 20 20 77 68 65 6e 20 28 61 6e 64 20 28 3e 20    28 6c 65 6e 67 74 68 20 69 74 65 6d 29 20 30 29 | ...when.(and.(>.(length.item).0) | 
| 50c0 | 20 28 65 71 6c 20 28 61 72 65 66 20 69 74 65 6d    20 30 29 20 3f 3a 29 29 0a 20 20 20 20 20 20 20 | .(eql.(aref.item.0).?:))........ | 
| 50e0 | 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 63 6f 6e    73 20 28 69 6e 74 65 72 6e 20 28 73 75 62 73 74 | ....collect.(cons.(intern.(subst | 
| 5100 | 72 69 6e 67 20 69 74 65 6d 20 31 29 29 20 6e 29    20 69 6e 74 6f 20 76 61 72 73 0a 20 20 20 20 20 | ring.item.1)).n).into.vars...... | 
| 5120 | 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65    63 74 20 69 74 65 6d 20 69 6e 74 6f 20 70 61 74 | ......else.collect.item.into.pat | 
| 5140 | 68 0a 20 20 20 20 20 20 20 20 20 20 20 66 69 6e    61 6c 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 | h............finally............ | 
| 5160 | 28 63 6c 2d 72 65 74 75 72 6e 0a 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6c 2d 76 61 6c 75 65 | (cl-return.............(cl-value | 
| 5180 | 73 20 28 69 6e 74 65 72 6e 20 28 6d 61 70 63 6f    6e 63 61 74 20 23 27 69 64 65 6e 74 69 74 79 20 | s.(intern.(mapconcat.#'identity. | 
| 51a0 | 70 61 74 68 20 22 2f 22 29 29 20 76 61 72 73 29    29 29 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 | path."/")).vars))))..(defvar.htt | 
| 51c0 | 70 64 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 6c | pd-path.nil..."Anaphoric.variabl | 
| 51e0 | 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 76 61 72 20 | e.for.`defservlet*'.")..(defvar. | 
| 5200 | 68 74 74 70 64 2d 71 75 65 72 79 20 6e 69 6c 0a    20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 | httpd-query.nil..."Anaphoric.var | 
| 5220 | 69 61 62 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 | iable.for.`defservlet*'.")..(def | 
| 5240 | 76 61 72 20 68 74 74 70 64 2d 72 65 71 75 65 73    74 20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 | var.httpd-request.nil..."Anaphor | 
| 5260 | 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 27 2e 22 29 | ic.variable.for.`defservlet*'.") | 
| 5280 | 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d    73 70 6c 69 74 2d 70 61 74 68 20 6e 69 6c 0a 20 | ..(defvar.httpd-split-path.nil.. | 
| 52a0 | 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 65 66 73 65 72 | ."Anaphoric.variable.for.`defser | 
| 52c0 | 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 6d    61 63 72 6f 20 64 65 66 73 65 72 76 6c 65 74 2a | vlet*'.")..(defmacro.defservlet* | 
| 52e0 | 20 28 65 6e 64 70 6f 69 6e 74 20 6d 69 6d 65 20    61 72 67 73 20 26 72 65 73 74 20 62 6f 64 79 29 | .(endpoint.mime.args.&rest.body) | 
| 5300 | 0a 20 20 22 4c 69 6b 65 20 60 64 65 66 73 65 72    76 6c 65 74 27 2c 20 62 75 74 20 61 75 74 6f 6d | ..."Like.`defservlet',.but.autom | 
| 5320 | 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 20 76 61    72 69 61 62 6c 65 73 2f 61 72 67 75 6d 65 6e 74 | atically.bind.variables/argument | 
| 5340 | 73 0a 74 6f 20 74 68 65 20 72 65 71 75 65 73 74    2e 20 54 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f | s.to.the.request..Trailing.compo | 
| 5360 | 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 45 4e 44    50 4f 49 4e 54 20 63 61 6e 20 62 65 20 62 6f 75 | nents.of.the.ENDPOINT.can.be.bou | 
| 5380 | 6e 64 0a 62 79 20 70 72 65 66 69 78 69 6e 67 20    74 68 65 73 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 | nd.by.prefixing.these.components | 
| 53a0 | 20 77 69 74 68 20 61 20 63 6f 6c 6f 6e 2c 20 61    63 74 69 6e 67 20 6c 69 6b 65 20 61 20 74 65 6d | .with.a.colon,.acting.like.a.tem | 
| 53c0 | 70 6c 61 74 65 2e 0a 0a 20 20 20 20 28 64 65 66    73 65 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 | plate.......(defservlet*.package | 
| 53e0 | 73 2f 3a 70 61 63 6b 61 67 65 2f 3a 76 65 72 73    69 6f 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 | s/:package/:version.text/plain.( | 
| 5400 | 76 65 72 62 6f 73 65 29 0a 20 20 20 20 20 20 28    69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 5c | verbose).......(insert.(format.\ | 
| 5420 | 22 25 73 5c 5c 6e 25 73 5c 5c 6e 5c 22 20 70 61    63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a | "%s\\n%s\\n\".package.version)). | 
| 5440 | 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 67 65    74 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 | ......(princ.(get-description.pa | 
| 5460 | 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a    20 20 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 | ckage.version)).......(when.verb | 
| 5480 | 6f 73 65 0a 20 20 20 20 20 20 20 20 28 69 6e 73    65 72 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 53 | ose.........(insert.(format.\"%S | 
| 54a0 | 5c 22 20 28 67 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 | \".(get-dependencies.package.ver | 
| 54c0 | 73 69 6f 6e 29 29 29 29 29 0a 0a 57 68 65 6e 20    61 63 63 65 73 73 65 64 20 66 72 6f 6d 20 74 68 | sion)))))..When.accessed.from.th | 
| 54e0 | 69 73 20 55 52 4c 2c 0a 0a 20 20 20 20 68 74 74    70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f | is.URL,......http://example.com/ | 
| 5500 | 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 0a 74 | packages/foobar/1.0?verbose=1..t | 
| 5520 | 68 65 20 76 61 72 69 61 62 6c 65 73 20 70 61 63    6b 61 67 65 2c 20 76 65 72 73 69 6f 6e 2c 20 61 | he.variables.package,.version,.a | 
| 5540 | 6e 64 20 76 65 72 62 6f 73 65 20 77 69 6c 6c 20    62 65 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 0a | nd.verbose.will.be.bound.to.the. | 
| 5560 | 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6d 70 6f    6e 65 6e 74 73 20 6f 66 20 74 68 65 20 55 52 4c | associated.components.of.the.URL | 
| 5580 | 2e 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74    20 70 72 6f 76 69 64 65 64 20 61 72 65 0a 62 6f | ..Components.not.provided.are.bo | 
| 55a0 | 75 6e 64 20 74 6f 20 6e 69 6c 2e 20 54 68 65 20    71 75 65 72 79 20 61 72 67 75 6d 65 6e 74 73 20 | und.to.nil..The.query.arguments. | 
| 55c0 | 63 61 6e 20 75 73 65 20 74 68 65 20 43 6f 6d 6d    6f 6e 20 4c 69 73 70 20 26 6b 65 79 0a 66 6f 72 | can.use.the.Common.Lisp.&key.for | 
| 55e0 | 6d 20 28 76 61 72 69 61 62 6c 65 20 64 65 66 61    75 6c 74 20 70 72 6f 76 69 64 65 64 2d 70 29 2e | m.(variable.default.provided-p). | 
| 5600 | 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65    74 2a 20 67 72 65 65 74 69 6e 67 2f 3a 6e 61 6d | ......(defservlet*.greeting/:nam | 
| 5620 | 65 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 28 67    72 65 65 74 69 6e 67 20 5c 22 68 69 5c 22 20 67 | e.text/plain.((greeting.\"hi\".g | 
| 5640 | 72 65 65 74 69 6e 67 2d 70 29 29 0a 20 20 20 20    20 20 28 70 72 69 6e 63 20 28 66 6f 72 6d 61 74 | reeting-p)).......(princ.(format | 
| 5660 | 20 5c 22 25 73 2c 20 25 73 20 28 70 72 6f 76 69    64 65 64 3a 20 25 73 29 5c 22 20 67 72 65 65 74 | .\"%s,.%s.(provided:.%s)\".greet | 
| 5680 | 69 6e 67 20 6e 61 6d 65 20 67 72 65 65 74 69 6e    67 2d 70 29 29 29 0a 0a 54 68 65 20 6f 72 69 67 | ing.name.greeting-p)))..The.orig | 
| 56a0 | 69 6e 61 6c 20 70 61 74 68 2c 20 71 75 65 72 79    2c 20 61 6e 64 20 72 65 71 75 65 73 74 20 63 61 | inal.path,.query,.and.request.ca | 
| 56c0 | 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79    20 74 68 65 0a 61 6e 61 70 68 6f 72 69 63 20 73 | n.be.accessed.by.the.anaphoric.s | 
| 56e0 | 70 65 63 69 61 6c 20 76 61 72 69 61 62 6c 65 73    20 60 68 74 74 70 64 2d 70 61 74 68 27 2c 20 60 | pecial.variables.`httpd-path',.` | 
| 5700 | 68 74 74 70 64 2d 71 75 65 72 79 27 2c 20 61 6e    64 0a 60 68 74 74 70 64 2d 72 65 71 75 65 73 74 | httpd-query',.and.`httpd-request | 
| 5720 | 27 2e 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 29 0a 20 | '."...(declare.(indent.defun)).. | 
| 5740 | 20 28 6c 65 74 20 28 28 70 61 74 68 2d 6c 65 78    69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 | .(let.((path-lexical.(cl-gensym) | 
| 5760 | 29 0a 20 20 20 20 20 20 20 20 28 71 75 65 72 79    2d 6c 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e | ).........(query-lexical.(cl-gen | 
| 5780 | 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 72    65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 20 28 | sym)).........(request-lexical.( | 
| 57a0 | 63 6c 2d 67 65 6e 73 79 6d 29 29 29 0a 20 20 20    20 28 63 6c 2d 6d 75 6c 74 69 70 6c 65 2d 76 61 | cl-gensym))).....(cl-multiple-va | 
| 57c0 | 6c 75 65 2d 62 69 6e 64 20 28 70 61 74 68 20 76    61 72 73 29 20 28 68 74 74 70 64 2d 70 61 72 73 | lue-bind.(path.vars).(httpd-pars | 
| 57e0 | 65 2d 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70 6f    69 6e 74 29 0a 20 20 20 20 20 20 60 28 64 65 66 | e-endpoint.endpoint).......`(def | 
| 5800 | 73 65 72 76 6c 65 74 20 2c 70 61 74 68 20 2c 6d    69 6d 65 20 28 2c 70 61 74 68 2d 6c 65 78 69 63 | servlet.,path.,mime.(,path-lexic | 
| 5820 | 61 6c 20 2c 71 75 65 72 79 2d 6c 65 78 69 63 61    6c 20 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 | al.,query-lexical.,request-lexic | 
| 5840 | 61 6c 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65    74 20 28 28 68 74 74 70 64 2d 70 61 74 68 20 2c | al)..........(let.((httpd-path., | 
| 5860 | 70 61 74 68 2d 6c 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 | path-lexical)................(ht | 
| 5880 | 74 70 64 2d 71 75 65 72 79 20 2c 71 75 65 72 79    2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 | tpd-query.,query-lexical)....... | 
| 58a0 | 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d    72 65 71 75 65 73 74 20 2c 72 65 71 75 65 73 74 | .........(httpd-request.,request | 
| 58c0 | 2d 6c 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 | -lexical)................(httpd- | 
| 58e0 | 73 70 6c 69 74 2d 70 61 74 68 20 28 73 70 6c 69    74 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 | split-path.(split-string........ | 
| 5900 | 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 73 75 62 73 | ...........................(subs | 
| 5920 | 74 72 69 6e 67 20 2c 70 61 74 68 2d 6c 65 78 69    63 61 6c 20 31 29 20 22 2f 22 29 29 29 0a 20 20 | tring.,path-lexical.1)."/")))... | 
| 5940 | 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 20 28 76 61 72 | .........(let.,(cl-loop.for.(var | 
| 5960 | 20 2e 20 70 6f 73 29 20 69 6e 20 76 61 72 73 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...pos).in.vars................. | 
| 5980 | 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 65 78    74 72 61 63 74 20 3d 0a 20 20 20 20 20 20 20 20 | ..........for.extract.=......... | 
| 59a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 60 28 68 74 74 70 64 2d 75 6e 68 65 78 20 | ..................`(httpd-unhex. | 
| 59c0 | 28 6e 74 68 20 2c 70 6f 73 20 68 74 74 70 64 2d    73 70 6c 69 74 2d 70 61 74 68 29 29 0a 20 20 20 | (nth.,pos.httpd-split-path)).... | 
| 59e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 | .......................collect.( | 
| 5a00 | 6c 69 73 74 20 76 61 72 20 65 78 74 72 61 63 74    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | list.var.extract)).............. | 
| 5a20 | 28 6c 65 74 20 2c 28 63 6c 2d 6c 6f 6f 70 20 66    6f 72 20 61 72 67 20 69 6e 20 61 72 67 73 0a 20 | (let.,(cl-loop.for.arg.in.args.. | 
| 5a40 | 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 66 6f 72 20 68 | ...........................for.h | 
| 5a60 | 61 73 2d 64 65 66 61 75 6c 74 20 3d 20 28 6c 69    73 74 70 20 61 72 67 29 0a 20 20 20 20 20 20 20 | as-default.=.(listp.arg)........ | 
| 5a80 | 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 68 61 73 2d 64 65 66 | .....................for.has-def | 
| 5aa0 | 61 75 6c 74 2d 70 20 3d 20 28 61 6e 64 20 68 61    73 2d 64 65 66 61 75 6c 74 0a 20 20 20 20 20 20 | ault-p.=.(and.has-default....... | 
| 5ac0 | 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 | ................................ | 
| 5ae0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    3d 20 33 20 28 6c 65 6e 67 74 68 20 61 72 67 29 | ...............(=.3.(length.arg) | 
| 5b00 | 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 20 20 20 66 | )).............................f | 
| 5b20 | 6f 72 20 61 72 67 2d 6e 61 6d 65 20 3d 20 28 73    79 6d 62 6f 6c 2d 6e 61 6d 65 0a 20 20 20 20 20 | or.arg-name.=.(symbol-name...... | 
| 5b40 | 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 | ................................ | 
| 5b60 | 20 20 20 20 20 20 20 28 69 66 20 68 61 73 2d 64    65 66 61 75 6c 74 20 28 63 6c 2d 66 69 72 73 74 | .......(if.has-default.(cl-first | 
| 5b80 | 20 61 72 67 29 20 61 72 67 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .arg).arg))..................... | 
| 5ba0 | 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73    2d 64 65 66 61 75 6c 74 20 63 6f 6c 6c 65 63 74 | ........when.has-default.collect | 
| 5bc0 | 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 20 28 6c 69 | .............................(li | 
| 5be0 | 73 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | st.(cl-first.arg)............... | 
| 5c00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 60 28 6c 65 74 20 28 28 76 61 6c 75 | ....................`(let.((valu | 
| 5c20 | 65 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61    6d 65 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 | e.(assoc.,arg-name.httpd-query)) | 
| 5c40 | 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 20 20 20 | )............................... | 
| 5c60 | 20 20 20 20 20 20 20 28 69 66 20 76 61 6c 75 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .......(if.value................ | 
| 5c80 | 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 63 6c 2d 73 65 | ..........................(cl-se | 
| 5ca0 | 63 6f 6e 64 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 20 20 20 | cond.value)..................... | 
| 5cc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 2c 28 63 6c 2d 73 65 63 6f 6e 64 20 61 | ...................,(cl-second.a | 
| 5ce0 | 72 67 29 29 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 | rg)))).......................... | 
| 5d00 | 20 20 20 65 6c 73 65 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 | ...else.collect................. | 
| 5d20 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 20 61 72 67 20 60 28 63 6c 2d 73 65 63 6f 6e | ............(list.arg.`(cl-secon | 
| 5d40 | 64 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 20 20 20 | d............................... | 
| 5d60 | 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63    20 2c 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 | ..........(assoc.,arg-name.httpd | 
| 5d80 | 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 20 20 20 20 20 20 | -query)))....................... | 
| 5da0 | 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64    65 66 61 75 6c 74 2d 70 20 63 6f 6c 6c 65 63 74 | ......when.has-default-p.collect | 
| 5dc0 | 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 20 28 6c 69 | .............................(li | 
| 5de0 | 73 74 20 28 63 6c 2d 74 68 69 72 64 20 61 72 67    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | st.(cl-third.arg)............... | 
| 5e00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 60 28 6e 6f 74 20 28 6e 75 6c 6c 20 | ....................`(not.(null. | 
| 5e20 | 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65    20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 29 | (assoc.,arg-name.httpd-query)))) | 
| 5e40 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 2c 40 62 6f 64 79 29 29 29 29 29 29 29 0a 0a | )................,@body))))))).. | 
| 5e60 | 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 61 64 64 2d 6b    65 79 77 6f 72 64 73 0a 20 27 65 6d 61 63 73 2d | (font-lock-add-keywords..'emacs- | 
| 5e80 | 6c 69 73 70 2d 6d 6f 64 65 0a 20 27 28 28 22 28    5c 5c 3c 5c 5c 28 64 65 66 73 65 72 76 6c 65 74 | lisp-mode..'(("(\\<\\(defservlet | 
| 5ea0 | 5c 5c 2a 3f 5c 5c 29 5c 5c 3e 20 2b 5c 5c 28 5b    5e 20 28 29 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e | \\*?\\)\\>.+\\([^.()]+\\).+\\([^ | 
| 5ec0 | 20 28 29 5d 2b 5c 5c 29 22 0a 20 20 20 20 28 31    20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77 | .()]+\\)".....(1.'font-lock-keyw | 
| 5ee0 | 6f 72 64 2d 66 61 63 65 29 0a 20 20 20 20 28 32    20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75 6e 63 | ord-face).....(2.'font-lock-func | 
| 5f00 | 74 69 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65 29 0a    20 20 20 20 28 33 20 27 66 6f 6e 74 2d 6c 6f 63 | tion-name-face).....(3.'font-loc | 
| 5f20 | 6b 2d 74 79 70 65 2d 66 61 63 65 29 29 29 29 0a    0a 28 64 65 66 6d 61 63 72 6f 20 68 74 74 70 64 | k-type-face))))..(defmacro.httpd | 
| 5f40 | 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65    74 20 28 6e 61 6d 65 20 72 6f 6f 74 29 0a 20 20 | -def-file-servlet.(name.root)... | 
| 5f60 | 22 44 65 66 69 6e 65 73 20 61 20 73 65 72 76 6c    65 74 20 74 68 61 74 20 73 65 72 76 65 73 20 66 | "Defines.a.servlet.that.serves.f | 
| 5f80 | 69 6c 65 73 20 66 72 6f 6d 20 52 4f 4f 54 20 75    6e 64 65 72 20 74 68 65 20 72 6f 75 74 65 20 4e | iles.from.ROOT.under.the.route.N | 
| 5fa0 | 41 4d 45 2e 0a 0a 20 20 20 20 28 68 74 74 70 64    2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 | AME.......(httpd-def-file-servle | 
| 5fc0 | 74 20 6d 79 2f 77 77 77 20 5c 22 2f 76 61 72 2f    77 77 77 2f 5c 22 29 0a 0a 41 75 74 6f 6d 61 74 | t.my/www.\"/var/www/\")..Automat | 
| 5fe0 | 69 63 61 6c 6c 79 20 68 61 6e 64 6c 65 73 20 72    65 64 69 72 65 63 74 73 20 61 6e 64 20 75 73 65 | ically.handles.redirects.and.use | 
| 6000 | 73 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 72    6f 6f 74 27 20 74 6f 0a 61 63 74 75 61 6c 6c 79 | s.`httpd-serve-root'.to.actually | 
| 6020 | 20 73 65 72 76 65 20 75 70 20 66 69 6c 65 73 2e    22 0a 20 20 28 6c 65 74 2a 20 28 28 73 68 6f 72 | .serve.up.files."...(let*.((shor | 
| 6040 | 74 2d 72 6f 6f 74 20 28 64 69 72 65 63 74 6f 72    79 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 73 79 6d | t-root.(directory-file-name.(sym | 
| 6060 | 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 29 29    0a 20 20 20 20 20 20 20 20 20 28 70 61 74 68 2d | bol-name.name)))..........(path- | 
| 6080 | 72 6f 6f 74 20 28 63 6f 6e 63 61 74 20 73 68 6f    72 74 2d 72 6f 6f 74 20 22 2f 22 29 29 0a 20 20 | root.(concat.short-root."/"))... | 
| 60a0 | 20 20 20 20 20 20 20 28 63 68 6f 70 20 28 6c 65    6e 67 74 68 20 70 61 74 68 2d 72 6f 6f 74 29 29 | .......(chop.(length.path-root)) | 
| 60c0 | 29 0a 20 20 20 20 60 28 64 65 66 73 65 72 76 6c    65 74 20 2c 6e 61 6d 65 20 6e 69 6c 20 28 75 72 | ).....`(defservlet.,name.nil.(ur | 
| 60e0 | 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71    75 65 73 74 29 0a 20 20 20 20 20 20 20 28 73 65 | i-path.query.request)........(se | 
| 6100 | 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72    2d 73 65 6e 74 20 74 29 20 3b 20 44 6f 6e 27 74 | tf.httpd--header-sent.t).;.Don't | 
| 6120 | 20 61 63 74 75 61 6c 6c 79 20 75 73 65 20 74 68    69 73 20 74 65 6d 70 20 62 75 66 66 65 72 0a 20 | .actually.use.this.temp.buffer.. | 
| 6140 | 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 6c 65    6e 67 74 68 20 75 72 69 2d 70 61 74 68 29 20 2c | ......(if.(=.(length.uri-path)., | 
| 6160 | 63 68 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20    20 28 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 | chop)............(httpd-redirect | 
| 6180 | 20 74 20 2c 70 61 74 68 2d 72 6f 6f 74 29 0a 20    20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 | .t.,path-root)..........(let.((p | 
| 61a0 | 61 74 68 20 28 73 75 62 73 74 72 69 6e 67 20 75    72 69 2d 70 61 74 68 20 2c 63 68 6f 70 29 29 29 | ath.(substring.uri-path.,chop))) | 
| 61c0 | 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74    70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 74 20 | ............(httpd-serve-root.t. | 
| 61e0 | 2c 72 6f 6f 74 20 70 61 74 68 20 72 65 71 75 65    73 74 29 29 29 29 29 29 0a 0a 3b 3b 20 52 65 71 | ,root.path.request))))))..;;.Req | 
| 6200 | 75 65 73 74 20 70 61 72 73 69 6e 67 0a 0a 28 64    65 66 75 6e 20 68 74 74 70 64 2d 2d 6e 6f 72 6d | uest.parsing..(defun.httpd--norm | 
| 6220 | 61 6c 69 7a 65 2d 68 65 61 64 65 72 20 28 68 65    61 64 65 72 29 0a 20 20 22 44 65 73 74 72 75 63 | alize-header.(header)..."Destruc | 
| 6240 | 74 69 76 65 6c 79 20 63 61 70 69 74 61 6c 69 7a    65 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 | tively.capitalize.the.components | 
| 6260 | 20 6f 66 20 48 45 41 44 45 52 2e 22 0a 20 20 28    6d 61 70 63 6f 6e 63 61 74 20 23 27 63 61 70 69 | .of.HEADER."...(mapconcat.#'capi | 
| 6280 | 74 61 6c 69 7a 65 20 28 73 70 6c 69 74 2d 73 74    72 69 6e 67 20 68 65 61 64 65 72 20 22 2d 22 29 | talize.(split-string.header."-") | 
| 62a0 | 20 22 2d 22 29 29 0a 0a 28 64 65 66 75 6e 20 68    74 74 70 64 2d 70 61 72 73 65 20 28 29 0a 20 20 | ."-"))..(defun.httpd-parse.()... | 
| 62c0 | 22 50 61 72 73 65 20 48 54 54 50 20 68 65 61 64    65 72 20 69 6e 20 63 75 72 72 65 6e 74 20 62 75 | "Parse.HTTP.header.in.current.bu | 
| 62e0 | 66 66 65 72 20 69 6e 74 6f 20 61 73 73 6f 63 69    61 74 69 6f 6e 20 6c 69 73 74 2e 0a 4c 65 61 76 | ffer.into.association.list..Leav | 
| 6300 | 65 73 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20    74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 | es.the.point.at.the.start.of.the | 
| 6320 | 20 72 65 71 75 65 73 74 20 63 6f 6e 74 65 6e 74    2e 20 52 65 74 75 72 6e 73 20 6e 69 6c 0a 69 66 | .request.content..Returns.nil.if | 
| 6340 | 20 69 74 20 66 61 69 6c 65 64 20 74 6f 20 70 61    72 73 65 20 61 20 63 6f 6d 70 6c 65 74 65 20 48 | .it.failed.to.parse.a.complete.H | 
| 6360 | 54 54 50 20 68 65 61 64 65 72 2e 22 0a 20 20 28    67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 | TTP.header."...(goto-char.(point | 
| 6380 | 2d 6d 69 6e 29 29 0a 20 20 28 77 68 65 6e 20 28    6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b | -min))...(when.(looking-at."\\([ | 
| 63a0 | 5e 20 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 5d    2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 5c 72 5d 2b 5c | ^.]+\\).+\\([^.]+\\).+\\([^\r]+\ | 
| 63c0 | 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 28 6c 65    74 20 28 28 6d 65 74 68 6f 64 20 28 6d 61 74 63 | \)\r\n").....(let.((method.(matc | 
| 63e0 | 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20    20 20 20 20 20 20 20 28 70 61 74 68 20 28 64 65 | h-string.1))...........(path.(de | 
| 6400 | 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69    6e 67 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 | code-coding-string.(match-string | 
| 6420 | 20 32 29 20 27 69 73 6f 2d 38 38 35 39 2d 31 29    29 0a 20 20 20 20 20 20 20 20 20 20 28 76 65 72 | .2).'iso-8859-1))...........(ver | 
| 6440 | 73 69 6f 6e 20 28 6d 61 74 63 68 2d 73 74 72 69    6e 67 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 | sion.(match-string.3)).......... | 
| 6460 | 20 28 68 65 61 64 65 72 73 20 28 29 29 29 0a 20    20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 | .(headers.())).......(goto-char. | 
| 6480 | 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20    20 20 20 20 20 28 77 68 69 6c 65 20 28 6c 6f 6f | (match-end.0)).......(while.(loo | 
| 64a0 | 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 2d 21 23    2d 27 2a 2b 2e 30 2d 39 41 2d 5a 5e 5f 60 61 2d | king-at."\\([-!#-'*+.0-9A-Z^_`a- | 
| 64c0 | 7a 7c 7e 5d 2b 5c 5c 29 3a 20 2a 5c 5c 28 5b 5e    5c 72 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 | z|~]+\\):.*\\([^\r]+\\)\r\n")... | 
| 64e0 | 20 20 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 | ......(goto-char.(match-end.0)). | 
| 6500 | 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e    61 6d 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e | ........(let.((name.(match-strin | 
| 6520 | 67 20 31 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 76 61 6c 75 65 20 28 6d 61 74 63 | g.1))...............(value.(matc | 
| 6540 | 68 2d 73 74 72 69 6e 67 20 32 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 28 70 75 73 68 20 28 6c | h-string.2)))...........(push.(l | 
| 6560 | 69 73 74 20 28 68 74 74 70 64 2d 2d 6e 6f 72 6d    61 6c 69 7a 65 2d 68 65 61 64 65 72 20 6e 61 6d | ist.(httpd--normalize-header.nam | 
| 6580 | 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 64 65 63 6f 64 65 | e).......................(decode | 
| 65a0 | 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 20 76    61 6c 75 65 20 27 69 73 6f 2d 38 38 35 39 2d 31 | -coding-string.value.'iso-8859-1 | 
| 65c0 | 29 29 20 68 65 61 64 65 72 73 29 29 29 0a 20 20    20 20 20 20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 | )).headers))).......(when.(looki | 
| 65e0 | 6e 67 2d 61 74 20 22 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 | ng-at."\r\n").........(goto-char | 
| 6600 | 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a    20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6c | .(match-end.0)).........(cons.(l | 
| 6620 | 69 73 74 20 6d 65 74 68 6f 64 20 70 61 74 68 20    76 65 72 73 69 6f 6e 29 20 28 6e 72 65 76 65 72 | ist.method.path.version).(nrever | 
| 6640 | 73 65 20 68 65 61 64 65 72 73 29 29 29 29 29 29    0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 75 | se.headers))))))..(defun.httpd-u | 
| 6660 | 6e 68 65 78 20 28 73 74 72 29 0a 20 20 22 46 75    6c 6c 79 20 64 65 63 6f 64 65 20 74 68 65 20 55 | nhex.(str)..."Fully.decode.the.U | 
| 6680 | 52 4c 20 65 6e 63 6f 64 69 6e 67 20 69 6e 20 53    54 52 20 28 69 6e 63 6c 75 64 69 6e 67 20 2b 27 | RL.encoding.in.STR.(including.+' | 
| 66a0 | 73 29 2e 22 0a 20 20 28 77 68 65 6e 20 73 74 72    0a 20 20 20 20 28 6c 65 74 20 28 28 6e 6f 6e 70 | s)."...(when.str.....(let.((nonp | 
| 66c0 | 6c 75 73 73 65 64 20 28 72 65 70 6c 61 63 65 2d    72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 | lussed.(replace-regexp-in-string | 
| 66e0 | 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22    2b 22 29 20 22 20 22 20 73 74 72 29 29 29 0a 20 | .(regexp-quote."+").".".str))).. | 
| 6700 | 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 28 75 72 6c 2d | .....(decode-coding-string.(url- | 
| 6720 | 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 6e 6f 6e    70 6c 75 73 73 65 64 20 74 29 20 27 75 74 66 2d | unhex-string.nonplussed.t).'utf- | 
| 6740 | 38 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 61 72 67 73 20 28 | 8))))..(defun.httpd-parse-args.( | 
| 6760 | 61 72 67 73 74 72 29 0a 20 20 22 50 61 72 73 65    20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 | argstr)..."Parse.a.string.contai | 
| 6780 | 6e 69 6e 67 20 55 52 4c 20 65 6e 63 6f 64 65 64    20 61 72 67 75 6d 65 6e 74 73 2e 22 0a 20 20 28 | ning.URL.encoded.arguments."...( | 
| 67a0 | 75 6e 6c 65 73 73 20 28 7a 65 72 6f 70 20 28 6c    65 6e 67 74 68 20 61 72 67 73 74 72 29 29 0a 20 | unless.(zerop.(length.argstr)).. | 
| 67c0 | 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 6d 62    64 61 20 28 73 74 72 29 0a 20 20 20 20 20 20 20 | ...(mapcar.(lambda.(str)........ | 
| 67e0 | 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27    68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 70 6c | .......(mapcar.'httpd-unhex.(spl | 
| 6800 | 69 74 2d 73 74 72 69 6e 67 20 73 74 72 20 22 3d    22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | it-string.str."=")))............ | 
| 6820 | 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 61    72 67 73 74 72 20 22 26 22 29 29 29 29 0a 0a 28 | .(split-string.argstr."&"))))..( | 
| 6840 | 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73    65 2d 75 72 69 20 28 75 72 69 29 0a 20 20 22 53 | defun.httpd-parse-uri.(uri)..."S | 
| 6860 | 70 6c 69 74 20 61 20 55 52 49 20 69 6e 74 6f 20    69 74 73 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0a | plit.a.URI.into.its.components.. | 
| 6880 | 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e    74 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20 | The.first.element.of.the.return. | 
| 68a0 | 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 63 72    69 70 74 20 70 61 74 68 2c 20 74 68 65 0a 73 65 | value.is.the.script.path,.the.se | 
| 68c0 | 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 69 73 20    61 6e 20 61 6c 69 73 74 20 6f 66 20 76 61 72 69 | cond.element.is.an.alist.of.vari | 
| 68e0 | 61 62 6c 65 2f 76 61 6c 75 65 20 70 61 69 72 73    2c 20 61 6e 64 20 74 68 65 20 74 68 69 72 64 0a | able/value.pairs,.and.the.third. | 
| 6900 | 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 66    72 61 67 6d 65 6e 74 2e 22 0a 20 20 28 6c 65 74 | element.is.the.fragment."...(let | 
| 6920 | 20 28 28 70 31 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 74 | .((p1.(string-match.(regexp-quot | 
| 6940 | 65 20 22 3f 22 29 20 75 72 69 29 29 0a 20 20 20    20 20 20 20 20 28 70 32 20 28 73 74 72 69 6e 67 | e."?").uri)).........(p2.(string | 
| 6960 | 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 2d 71    75 6f 74 65 20 22 23 22 29 20 75 72 69 29 29 0a | -match.(regexp-quote."#").uri)). | 
| 6980 | 20 20 20 20 20 20 20 20 72 65 74 76 61 6c 29 0a    20 20 20 20 28 70 75 73 68 20 28 69 66 20 70 32 | ........retval).....(push.(if.p2 | 
| 69a0 | 20 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73    75 62 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b | .(httpd-unhex.(substring.uri.(1+ | 
| 69c0 | 20 70 32 29 29 29 29 20 72 65 74 76 61 6c 29 0a    20 20 20 20 28 70 75 73 68 20 28 69 66 20 70 31 | .p2)))).retval).....(push.(if.p1 | 
| 69e0 | 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72    67 73 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 | .(httpd-parse-args.(substring.ur | 
| 6a00 | 69 20 28 31 2b 20 70 31 29 20 70 32 29 29 29 20    72 65 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 | i.(1+.p1).p2))).retval).....(pus | 
| 6a20 | 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69    20 30 20 28 6f 72 20 70 31 20 70 32 29 29 20 72 | h.(substring.uri.0.(or.p1.p2)).r | 
| 6a40 | 65 74 76 61 6c 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 | etval)))..(defun.httpd-escape-ht | 
| 6a60 | 6d 6c 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22    45 73 63 61 70 65 20 63 75 72 72 65 6e 74 20 62 | ml-buffer.()..."Escape.current.b | 
| 6a80 | 75 66 66 65 72 20 63 6f 6e 74 65 6e 74 73 20 74    6f 20 62 65 20 73 61 66 65 20 66 6f 72 20 69 6e | uffer.contents.to.be.safe.for.in | 
| 6aa0 | 73 65 72 74 69 6e 67 20 69 6e 74 6f 20 48 54 4d    4c 2e 22 0a 20 20 28 67 6f 74 6f 2d 63 68 61 72 | serting.into.HTML."...(goto-char | 
| 6ac0 | 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20    28 77 68 69 6c 65 20 28 73 65 61 72 63 68 2d 66 | .(point-min))...(while.(search-f | 
| 6ae0 | 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22 5b    3c 3e 26 5d 22 20 6e 69 6c 20 74 29 0a 20 20 20 | orward-regexp."[<>&]".nil.t).... | 
| 6b00 | 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 0a    20 20 20 20 20 28 63 6c 2d 63 61 73 65 20 28 61 | .(replace-match......(cl-case.(a | 
| 6b20 | 72 65 66 20 28 6d 61 74 63 68 2d 73 74 72 69 6e    67 20 30 29 20 30 29 0a 20 20 20 20 20 20 20 28 | ref.(match-string.0).0)........( | 
| 6b40 | 3f 3c 20 22 26 6c 74 3b 22 29 0a 20 20 20 20 20    20 20 28 3f 3e 20 22 26 67 74 3b 22 29 0a 20 20 | ?<."<")........(?>.">")... | 
| 6b60 | 20 20 20 20 20 28 3f 26 20 22 26 61 6d 70 3b 22    29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 | .....(?&."&")))))..(defun.ht | 
| 6b80 | 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 20    28 73 74 72 69 6e 67 29 0a 20 20 22 45 73 63 61 | tpd-escape-html.(string)..."Esca | 
| 6ba0 | 70 65 20 53 54 52 49 4e 47 20 73 6f 20 74 68 61    74 20 69 74 27 73 20 73 61 66 65 20 74 6f 20 69 | pe.STRING.so.that.it's.safe.to.i | 
| 6bc0 | 6e 73 65 72 74 20 69 6e 74 6f 20 61 6e 20 48 54    4d 4c 20 64 6f 63 75 6d 65 6e 74 2e 22 0a 20 20 | nsert.into.an.HTML.document."... | 
| 6be0 | 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65    72 0a 20 20 20 20 28 69 6e 73 65 72 74 20 73 74 | (with-temp-buffer.....(insert.st | 
| 6c00 | 72 69 6e 67 29 0a 20 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 | ring).....(httpd-escape-html-buf | 
| 6c20 | 66 65 72 29 0a 20 20 20 20 28 62 75 66 66 65 72    2d 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 50 | fer).....(buffer-string)))..;;.P | 
| 6c40 | 61 74 68 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 64    65 66 75 6e 20 68 74 74 70 64 2d 73 74 61 74 75 | ath.handling..(defun.httpd-statu | 
| 6c60 | 73 20 28 70 61 74 68 29 0a 20 20 22 44 65 74 65    72 6d 69 6e 65 20 73 74 61 74 75 73 20 63 6f 64 | s.(path)..."Determine.status.cod | 
| 6c80 | 65 20 66 6f 72 20 50 41 54 48 2e 22 0a 20 20 28    63 6f 6e 64 0a 20 20 20 28 28 6e 6f 74 20 28 66 | e.for.PATH."...(cond....((not.(f | 
| 6ca0 | 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 70 61 74    68 29 29 20 20 20 34 30 34 29 0a 20 20 20 28 28 | ile-exists-p.path))...404)....(( | 
| 6cc0 | 6e 6f 74 20 28 66 69 6c 65 2d 72 65 61 64 61 62    6c 65 2d 70 20 70 61 74 68 29 29 20 34 30 33 29 | not.(file-readable-p.path)).403) | 
| 6ce0 | 0a 20 20 20 28 28 61 6e 64 20 28 66 69 6c 65 2d    64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 | ....((and.(file-directory-p.path | 
| 6d00 | 29 20 28 6e 6f 74 20 68 74 74 70 64 2d 6c 69 73    74 69 6e 67 73 29 29 20 34 30 33 29 0a 20 20 20 | ).(not.httpd-listings)).403).... | 
| 6d20 | 28 32 30 30 29 29 29 0a 0a 28 64 65 66 75 6e 20    68 74 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 | (200)))..(defun.httpd-clean-path | 
| 6d40 | 20 28 70 61 74 68 29 0a 20 20 22 43 6c 65 61 6e    20 64 61 6e 67 65 72 6f 75 73 20 2e 2e 20 66 72 | .(path)..."Clean.dangerous....fr | 
| 6d60 | 6f 6d 20 50 41 54 48 20 61 6e 64 20 72 65 6d 6f    76 65 20 74 68 65 20 6c 65 61 64 69 6e 67 20 73 | om.PATH.and.remove.the.leading.s | 
| 6d80 | 6c 61 73 68 2e 22 0a 20 20 28 6c 65 74 2a 20 28    28 73 65 70 20 28 69 66 20 28 6d 65 6d 62 65 72 | lash."...(let*.((sep.(if.(member | 
| 6da0 | 20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 28 77    69 6e 64 6f 77 73 2d 6e 74 20 6d 73 2d 64 6f 73 | .system-type.'(windows-nt.ms-dos | 
| 6dc0 | 29 29 20 22 5b 2f 5c 5c 5d 22 20 22 2f 22 29 29    0a 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 | ))."[/\\]"."/"))..........(split | 
| 6de0 | 20 28 64 65 6c 65 74 65 20 22 2e 2e 22 20 28 73    70 6c 69 74 2d 73 74 72 69 6e 67 20 70 61 74 68 | .(delete."..".(split-string.path | 
| 6e00 | 20 73 65 70 29 29 29 0a 20 20 20 20 20 20 20 20    20 28 75 6e 73 70 6c 69 74 20 28 6d 61 70 63 6f | .sep)))..........(unsplit.(mapco | 
| 6e20 | 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28    64 65 6c 65 74 65 20 22 22 20 73 70 6c 69 74 29 | ncat.'identity.(delete."".split) | 
| 6e40 | 20 22 2f 22 29 29 29 0a 20 20 20 20 28 63 6f 6e    63 61 74 20 22 2e 2f 22 20 75 6e 73 70 6c 69 74 | ."/"))).....(concat."./".unsplit | 
| 6e60 | 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70    64 2d 67 65 6e 2d 70 61 74 68 20 28 70 61 74 68 | )))..(defun.httpd-gen-path.(path | 
| 6e80 | 20 26 6f 70 74 69 6f 6e 61 6c 20 72 6f 6f 74 29    0a 20 20 22 54 72 61 6e 73 6c 61 74 65 20 47 45 | .&optional.root)..."Translate.GE | 
| 6ea0 | 54 20 74 6f 20 73 65 63 75 72 65 20 70 61 74 68    20 69 6e 20 52 4f 4f 54 20 28 60 68 74 74 70 64 | T.to.secure.path.in.ROOT.(`httpd | 
| 6ec0 | 2d 72 6f 6f 74 27 29 2e 22 0a 20 20 28 6c 65 74    20 28 28 63 6c 65 61 6e 20 28 65 78 70 61 6e 64 | -root')."...(let.((clean.(expand | 
| 6ee0 | 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 68 74 74 70    64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 70 61 74 | -file-name.(httpd-clean-path.pat | 
| 6f00 | 68 29 20 28 6f 72 20 72 6f 6f 74 20 68 74 74 70    64 2d 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 | h).(or.root.httpd-root)))).....( | 
| 6f20 | 69 66 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f    72 79 2d 70 20 63 6c 65 61 6e 29 0a 20 20 20 20 | if.(file-directory-p.clean)..... | 
| 6f40 | 20 20 20 20 28 6c 65 74 2a 20 28 28 64 69 72 20    28 66 69 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 | ....(let*.((dir.(file-name-as-di | 
| 6f60 | 72 65 63 74 6f 72 79 20 63 6c 65 61 6e 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | rectory.clean))................( | 
| 6f80 | 69 6e 64 65 78 65 73 20 28 63 6c 2d 6d 61 70 63    61 72 20 28 61 70 70 6c 79 2d 70 61 72 74 69 61 | indexes.(cl-mapcar.(apply-partia | 
| 6fa0 | 6c 6c 79 20 27 63 6f 6e 63 61 74 20 64 69 72 29    20 68 74 74 70 64 2d 69 6e 64 65 78 65 73 29 29 | lly.'concat.dir).httpd-indexes)) | 
| 6fc0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 65 78 69 73 74 69 6e 67 20 28 63 6c 2d 72 65 | ................(existing.(cl-re | 
| 6fe0 | 6d 6f 76 65 2d 69 66 2d 6e 6f 74 20 27 66 69 6c    65 2d 65 78 69 73 74 73 2d 70 20 69 6e 64 65 78 | move-if-not.'file-exists-p.index | 
| 7000 | 65 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 6f 72 20 28 63 61 72 20 65 78 69 73 74 69 6e | es)))...........(or.(car.existin | 
| 7020 | 67 29 20 64 69 72 29 29 0a 20 20 20 20 20 20 63    6c 65 61 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20 | g).dir)).......clean)))..(defun. | 
| 7040 | 68 74 74 70 64 2d 67 65 74 2d 73 65 72 76 6c 65    74 20 28 75 72 69 2d 70 61 74 68 29 0a 20 20 22 | httpd-get-servlet.(uri-path)..." | 
| 7060 | 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 65    72 76 6c 65 74 20 74 6f 20 62 65 20 65 78 65 63 | Determine.the.servlet.to.be.exec | 
| 7080 | 75 74 65 64 20 66 6f 72 20 55 52 49 2d 50 41 54    48 2e 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 68 | uted.for.URI-PATH."...(if.(not.h | 
| 70a0 | 74 74 70 64 2d 73 65 72 76 6c 65 74 73 29 0a 20    20 20 20 20 20 27 68 74 74 70 64 2f 0a 20 20 20 | ttpd-servlets).......'httpd/.... | 
| 70c0 | 20 28 63 6c 2d 6c 61 62 65 6c 73 20 28 28 63 61    74 20 28 78 29 0a 20 20 20 20 20 20 20 20 20 20 | .(cl-labels.((cat.(x)........... | 
| 70e0 | 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20    22 68 74 74 70 64 2f 22 20 28 6d 61 70 63 6f 6e | ........(concat."httpd/".(mapcon | 
| 7100 | 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 72    65 76 65 72 73 65 20 78 29 20 22 2f 22 29 29 29 | cat.'identity.(reverse.x)."/"))) | 
| 7120 | 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70    61 72 74 73 20 28 63 64 72 20 28 73 70 6c 69 74 | ).......(let.((parts.(cdr.(split | 
| 7140 | 2d 73 74 72 69 6e 67 20 28 64 69 72 65 63 74 6f    72 79 2d 66 69 6c 65 2d 6e 61 6d 65 20 75 72 69 | -string.(directory-file-name.uri | 
| 7160 | 2d 70 61 74 68 29 20 22 2f 22 29 29 29 29 0a 20    20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 | -path)."/")))).........(or...... | 
| 7180 | 20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 69 66 20    27 66 62 6f 75 6e 64 70 20 28 6d 61 70 63 61 72 | ....(cl-find-if.'fboundp.(mapcar | 
| 71a0 | 20 27 69 6e 74 65 72 6e 2d 73 6f 66 74 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .'intern-soft................... | 
| 71c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6c 2d 6d 61 70 6c 69 73 74 20 | ....................(cl-maplist. | 
| 71e0 | 23 27 63 61 74 20 28 72 65 76 65 72 73 65 20 70    61 72 74 73 29 29 29 29 0a 20 20 20 20 20 20 20 | #'cat.(reverse.parts))))........ | 
| 7200 | 20 20 27 68 74 74 70 64 2f 29 29 29 29 29 0a 0a    28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 | ..'httpd/)))))..(defun.httpd-ser | 
| 7220 | 76 65 2d 72 6f 6f 74 20 28 70 72 6f 63 20 72 6f    6f 74 20 75 72 69 2d 70 61 74 68 20 26 6f 70 74 | ve-root.(proc.root.uri-path.&opt | 
| 7240 | 69 6f 6e 61 6c 20 72 65 71 75 65 73 74 29 0a 20    20 22 53 65 63 75 72 65 6c 79 20 73 65 72 76 65 | ional.request)..."Securely.serve | 
| 7260 | 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 52 4f 4f    54 20 66 72 6f 6d 20 75 6e 64 65 72 20 50 41 54 | .a.file.from.ROOT.from.under.PAT | 
| 7280 | 48 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61    74 68 20 28 68 74 74 70 64 2d 67 65 6e 2d 70 61 | H."...(let*.((path.(httpd-gen-pa | 
| 72a0 | 74 68 20 75 72 69 2d 70 61 74 68 20 72 6f 6f 74    29 29 0a 20 20 20 20 20 20 20 20 20 28 73 74 61 | th.uri-path.root))..........(sta | 
| 72c0 | 74 75 73 20 28 68 74 74 70 64 2d 73 74 61 74 75    73 20 70 61 74 68 29 29 29 0a 20 20 20 20 28 63 | tus.(httpd-status.path))).....(c | 
| 72e0 | 6f 6e 64 0a 20 20 20 20 20 28 28 6e 6f 74 20 28    3d 20 73 74 61 74 75 73 20 32 30 30 29 29 20 20 | ond......((not.(=.status.200)).. | 
| 7300 | 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 20    20 20 20 20 20 20 20 20 70 72 6f 63 20 73 74 61 | ..(httpd-error..........proc.sta | 
| 7320 | 74 75 73 29 29 0a 20 20 20 20 20 28 28 66 69 6c    65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 | tus))......((file-directory-p.pa | 
| 7340 | 74 68 29 20 28 68 74 74 70 64 2d 73 65 6e 64 2d    64 69 72 65 63 74 6f 72 79 20 70 72 6f 63 20 70 | th).(httpd-send-directory.proc.p | 
| 7360 | 61 74 68 20 75 72 69 2d 70 61 74 68 29 29 0a 20    20 20 20 20 28 74 20 20 20 20 20 20 20 20 20 20 | ath.uri-path))......(t.......... | 
| 7380 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74    74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 20 20 20 | .............(httpd-send-file... | 
| 73a0 | 20 20 20 70 72 6f 63 20 70 61 74 68 20 72 65 71    75 65 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 | ...proc.path.request)))))..(defu | 
| 73c0 | 6e 20 68 74 74 70 64 2f 20 28 70 72 6f 63 20 75    72 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 | n.httpd/.(proc.uri-path.query.re | 
| 73e0 | 71 75 65 73 74 29 0a 20 20 22 44 65 66 61 75 6c    74 20 72 6f 6f 74 20 73 65 72 76 6c 65 74 20 77 | quest)..."Default.root.servlet.w | 
| 7400 | 68 69 63 68 20 73 65 72 76 65 73 20 66 69 6c 65    73 20 77 68 65 6e 20 68 74 74 70 64 2d 73 65 72 | hich.serves.files.when.httpd-ser | 
| 7420 | 76 65 2d 66 69 6c 65 73 20 69 73 20 54 2e 22 0a    20 20 28 69 66 20 28 61 6e 64 20 68 74 74 70 64 | ve-files.is.T."...(if.(and.httpd | 
| 7440 | 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 68 74 74    70 64 2d 72 6f 6f 74 29 0a 20 20 20 20 20 20 28 | -serve-files.httpd-root).......( | 
| 7460 | 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74    20 70 72 6f 63 20 68 74 74 70 64 2d 72 6f 6f 74 | httpd-serve-root.proc.httpd-root | 
| 7480 | 20 75 72 69 2d 70 61 74 68 20 72 65 71 75 65 73    74 29 0a 20 20 20 20 28 68 74 74 70 64 2d 65 72 | .uri-path.request).....(httpd-er | 
| 74a0 | 72 6f 72 20 70 72 6f 63 20 34 30 33 29 29 29 0a    0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 | ror.proc.403)))..(defun.httpd-ge | 
| 74c0 | 74 2d 6d 69 6d 65 20 28 65 78 74 29 0a 20 20 22    46 65 74 63 68 20 4d 49 4d 45 20 74 79 70 65 20 | t-mime.(ext)..."Fetch.MIME.type. | 
| 74e0 | 67 69 76 65 6e 20 74 68 65 20 66 69 6c 65 20 65    78 74 65 6e 74 69 6f 6e 2e 22 0a 20 20 28 6f 72 | given.the.file.extention."...(or | 
| 7500 | 20 28 61 6e 64 20 65 78 74 20 28 63 64 72 20 28    61 73 73 6f 63 20 28 64 6f 77 6e 63 61 73 65 20 | .(and.ext.(cdr.(assoc.(downcase. | 
| 7520 | 65 78 74 29 20 68 74 74 70 64 2d 6d 69 6d 65 2d    74 79 70 65 73 29 29 29 0a 20 20 20 20 20 20 22 | ext).httpd-mime-types)))......." | 
| 7540 | 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65    74 2d 73 74 72 65 61 6d 22 29 29 0a 0a 3b 3b 20 | application/octet-stream"))..;;. | 
| 7560 | 44 61 74 61 20 73 65 6e 64 69 6e 67 20 66 75 6e    63 74 69 6f 6e 73 0a 0a 28 64 65 66 75 6e 20 68 | Data.sending.functions..(defun.h | 
| 7580 | 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72    20 28 70 72 6f 63 20 6d 69 6d 65 20 73 74 61 74 | ttpd-send-header.(proc.mime.stat | 
| 75a0 | 75 73 20 26 72 65 73 74 20 68 65 61 64 65 72 2d    6b 65 79 73 29 0a 20 20 22 53 65 6e 64 20 61 6e | us.&rest.header-keys)..."Send.an | 
| 75c0 | 20 48 54 54 50 20 68 65 61 64 65 72 20 77 69 74    68 20 67 69 76 65 6e 20 4d 49 4d 45 20 74 79 70 | .HTTP.header.with.given.MIME.typ | 
| 75e0 | 65 20 61 6e 64 20 53 54 41 54 55 53 2c 20 66 6f    6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 63 75 | e.and.STATUS,.followed.by.the.cu | 
| 7600 | 72 72 65 6e 74 20 62 75 66 66 65 72 2e 20 49 66    20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 | rrent.buffer..If.PROC.is.T.use.t | 
| 7620 | 68 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e    74 2d 70 72 6f 63 27 0a 61 73 20 74 68 65 20 70 | he.`httpd-current-proc'.as.the.p | 
| 7640 | 72 6f 63 65 73 73 2e 0a 0a 45 78 74 72 61 20 68    65 61 64 65 72 73 20 63 61 6e 20 62 65 20 73 65 | rocess...Extra.headers.can.be.se | 
| 7660 | 6e 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20    74 68 65 6d 20 6c 69 6b 65 20 6b 65 79 77 6f 72 | nt.by.supplying.them.like.keywor | 
| 7680 | 64 73 2c 20 69 2e 65 2e 0a 0a 20 28 68 74 74 70    64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 74 20 | ds,.i.e....(httpd-send-header.t. | 
| 76a0 | 5c 22 74 65 78 74 2f 70 6c 61 69 6e 5c 22 20 32    30 30 20 3a 58 2d 50 6f 77 65 72 65 64 2d 42 79 | \"text/plain\".200.:X-Powered-By | 
| 76c0 | 20 5c 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 5c    22 29 22 0a 20 20 28 6c 65 74 20 28 28 73 74 61 | .\"simple-httpd\")"...(let.((sta | 
| 76e0 | 74 75 73 2d 73 74 72 20 28 63 64 72 20 28 61 73    73 71 20 73 74 61 74 75 73 20 68 74 74 70 64 2d | tus-str.(cdr.(assq.status.httpd- | 
| 7700 | 73 74 61 74 75 73 2d 63 6f 64 65 73 29 29 29 0a    20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 73 | status-codes))).........(headers | 
| 7720 | 20 60 28 28 22 53 65 72 76 65 72 22 20 2e 20 2c    68 74 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 6d | .`(("Server"...,httpd-server-nam | 
| 7740 | 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 22 44 61 74 65 22 20 2e 20 | e)....................("Date"... | 
| 7760 | 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72    69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 | ,(httpd-date-string))........... | 
| 7780 | 20 20 20 20 20 20 20 20 20 28 22 43 6f 6e 6e 65    63 74 69 6f 6e 22 20 2e 20 22 6b 65 65 70 2d 61 | .........("Connection"..."keep-a | 
| 77a0 | 6c 69 76 65 22 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 74 | live")....................("Cont | 
| 77c0 | 65 6e 74 2d 54 79 70 65 22 20 2e 20 2c 28 68 74    74 70 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 6d | ent-Type"...,(httpd--stringify.m | 
| 77e0 | 69 6d 65 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 74 65 | ime))....................("Conte | 
| 7800 | 6e 74 2d 4c 65 6e 67 74 68 22 20 2e 20 2c 28 68    74 74 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a | nt-Length"...,(httpd--buffer-siz | 
| 7820 | 65 29 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65    73 73 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 | e))))).....(unless.httpd--header | 
| 7840 | 2d 73 65 6e 74 0a 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 | -sent.......(setf.httpd--header- | 
| 7860 | 73 65 6e 74 20 74 29 0a 20 20 20 20 20 20 28 77    69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a | sent.t).......(with-temp-buffer. | 
| 7880 | 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 48 54 54 50 2f 31 2e | ........(insert.(format."HTTP/1. | 
| 78a0 | 31 20 25 64 20 25 73 5c 72 5c 6e 22 20 73 74 61    74 75 73 20 73 74 61 74 75 73 2d 73 74 72 29 29 | 1.%d.%s\r\n".status.status-str)) | 
| 78c0 | 0a 20 20 20 20 20 20 20 20 28 63 6c 2d 6c 6f 6f    70 20 66 6f 72 20 28 68 65 61 64 65 72 20 76 61 | .........(cl-loop.for.(header.va | 
| 78e0 | 6c 75 65 29 20 6f 6e 20 68 65 61 64 65 72 2d 6b    65 79 73 20 62 79 20 23 27 63 64 64 72 0a 20 20 | lue).on.header-keys.by.#'cddr... | 
| 7900 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66    6f 72 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 3d | ...............for.header-name.= | 
| 7920 | 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 79 6d    62 6f 6c 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 | .(substring.(symbol-name.header) | 
| 7940 | 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 66 6f 72 20 76 61 6c 75 65 2d 6e | .1)..................for.value-n | 
| 7960 | 61 6d 65 20 3d 20 28 66 6f 72 6d 61 74 20 22 25    73 22 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 | ame.=.(format."%s".value)....... | 
| 7980 | 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 68 65 61 64 65 72 2d | ...........collect.(cons.header- | 
| 79a0 | 6e 61 6d 65 20 76 61 6c 75 65 2d 6e 61 6d 65 29    20 69 6e 74 6f 20 65 78 74 72 61 73 0a 20 20 20 | name.value-name).into.extras.... | 
| 79c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69    6e 61 6c 6c 79 20 28 73 65 74 66 20 68 65 61 64 | ..............finally.(setf.head | 
| 79e0 | 65 72 73 20 28 6e 63 6f 6e 63 20 68 65 61 64 65    72 73 20 65 78 74 72 61 73 29 29 29 0a 20 20 20 | ers.(nconc.headers.extras))).... | 
| 7a00 | 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 68 65    61 64 65 72 20 68 65 61 64 65 72 73 29 0a 20 20 | .....(dolist.(header.headers)... | 
| 7a20 | 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 73 3a 20 25 73 5c | ........(insert.(format."%s:.%s\ | 
| 7a40 | 72 5c 6e 22 20 28 63 61 72 20 68 65 61 64 65 72    29 20 28 63 64 72 20 68 65 61 64 65 72 29 29 29 | r\n".(car.header).(cdr.header))) | 
| 7a60 | 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 | ).........(insert."\r\n")....... | 
| 7a80 | 20 20 28 70 72 6f 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 | ..(process-send-region.(httpd-re | 
| 7aa0 | 73 6f 6c 76 65 2d 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 | solve-proc.proc)................ | 
| 7ac0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 | ..............(point-min).(point | 
| 7ae0 | 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 28 70    72 6f 63 65 73 73 2d 73 65 6e 64 2d 72 65 67 69 | -max))).......(process-send-regi | 
| 7b00 | 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 20 20 | on.(httpd-resolve-proc.proc).... | 
| 7b20 | 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 6e 74 2d 6d | ........................(point-m | 
| 7b40 | 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29    29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 | in).(point-max)))))..(defun.http | 
| 7b60 | 64 2d 72 65 64 69 72 65 63 74 20 28 70 72 6f 63    20 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 | d-redirect.(proc.path.&optional. | 
| 7b80 | 63 6f 64 65 29 0a 20 20 22 52 65 64 69 72 65 63    74 20 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 | code)..."Redirect.the.client.to. | 
| 7ba0 | 50 41 54 48 20 28 64 65 66 61 75 6c 74 20 33 30    31 29 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 | PATH.(default.301)..If.PROC.is.T | 
| 7bc0 | 20 75 73 65 0a 74 68 65 20 60 68 74 74 70 64 2d    63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 | .use.the.`httpd-current-proc'.as | 
| 7be0 | 20 74 68 65 20 70 72 6f 63 65 73 73 2e 22 0a 20    20 28 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 | .the.process."...(httpd-log.(lis | 
| 7c00 | 74 20 27 72 65 64 69 72 65 63 74 20 70 61 74 68    29 29 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 | t.'redirect.path))...(httpd-disc | 
| 7c20 | 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 77    69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a | ard-buffer)...(with-temp-buffer. | 
| 7c40 | 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 74 65 78 | ....(httpd-send-header.proc."tex | 
| 7c60 | 74 2f 70 6c 61 69 6e 22 20 28 6f 72 20 63 6f 64    65 20 33 30 31 29 20 3a 4c 6f 63 61 74 69 6f 6e | t/plain".(or.code.301).:Location | 
| 7c80 | 20 70 61 74 68 29 29 29 0a 0a 28 64 65 66 75 6e    20 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 | .path)))..(defun.httpd-send-file | 
| 7ca0 | 20 28 70 72 6f 63 20 70 61 74 68 20 26 6f 70 74    69 6f 6e 61 6c 20 72 65 71 29 0a 20 20 22 53 65 | .(proc.path.&optional.req)..."Se | 
| 7cc0 | 72 76 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20    67 69 76 65 6e 20 63 6c 69 65 6e 74 2e 20 20 49 | rve.file.to.the.given.client...I | 
| 7ce0 | 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20    74 68 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 | f.PROC.is.T.use.the.`httpd-curre | 
| 7d00 | 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 68 74 74 | nt-proc'.as.the.process."...(htt | 
| 7d20 | 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65    72 29 0a 20 20 28 6c 65 74 20 28 28 72 65 71 2d | pd-discard-buffer)...(let.((req- | 
| 7d40 | 65 74 61 67 20 28 63 61 64 72 20 28 61 73 73 6f    63 20 22 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 | etag.(cadr.(assoc."If-None-Match | 
| 7d60 | 22 20 72 65 71 29 29 29 0a 20 20 20 20 20 20 20    20 28 65 74 61 67 20 28 68 74 74 70 64 2d 65 74 | ".req))).........(etag.(httpd-et | 
| 7d80 | 61 67 20 70 61 74 68 29 29 0a 20 20 20 20 20 20    20 20 28 6d 74 69 6d 65 20 28 68 74 74 70 64 2d | ag.path)).........(mtime.(httpd- | 
| 7da0 | 64 61 74 65 2d 73 74 72 69 6e 67 20 28 6e 74 68    20 34 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 | date-string.(nth.4.(file-attribu | 
| 7dc0 | 74 65 73 20 70 61 74 68 29 29 29 29 29 0a 20 20    20 20 28 69 66 20 28 65 71 75 61 6c 20 72 65 71 | tes.path))))).....(if.(equal.req | 
| 7de0 | 2d 65 74 61 67 20 65 74 61 67 29 0a 20 20 20 20    20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 | -etag.etag).........(with-temp-b | 
| 7e00 | 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20    28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c | uffer...........(httpd-log.`(fil | 
| 7e20 | 65 20 2c 70 61 74 68 20 6e 6f 74 2d 6d 6f 64 69    66 69 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 | e.,path.not-modified)).......... | 
| 7e40 | 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 74 65 78 74 2f 70 | .(httpd-send-header.proc."text/p | 
| 7e60 | 6c 61 69 6e 22 20 33 30 34 29 29 0a 20 20 20 20    20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 | lain".304)).......(httpd-log.`(f | 
| 7e80 | 69 6c 65 20 2c 70 61 74 68 29 29 0a 20 20 20 20    20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 | ile.,path)).......(with-temp-buf | 
| 7ea0 | 66 65 72 0a 20 20 20 20 20 20 20 20 28 73 65 74    2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 | fer.........(set-buffer-multibyt | 
| 7ec0 | 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 28    69 6e 73 65 72 74 2d 66 69 6c 65 2d 63 6f 6e 74 | e.nil).........(insert-file-cont | 
| 7ee0 | 65 6e 74 73 2d 6c 69 74 65 72 61 6c 6c 79 20 70    61 74 68 29 0a 20 20 20 20 20 20 20 20 28 68 74 | ents-literally.path).........(ht | 
| 7f00 | 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20    70 72 6f 63 20 28 68 74 74 70 64 2d 67 65 74 2d | tpd-send-header.proc.(httpd-get- | 
| 7f20 | 6d 69 6d 65 20 28 66 69 6c 65 2d 6e 61 6d 65 2d    65 78 74 65 6e 73 69 6f 6e 20 70 61 74 68 29 29 | mime.(file-name-extension.path)) | 
| 7f40 | 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 32 30 30 20 | ............................200. | 
| 7f60 | 3a 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 20 6d    74 69 6d 65 20 3a 45 54 61 67 20 65 74 61 67 29 | :Last-Modified.mtime.:ETag.etag) | 
| 7f80 | 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74    70 64 2d 73 65 6e 64 2d 64 69 72 65 63 74 6f 72 | ))))..(defun.httpd-send-director | 
| 7fa0 | 79 20 28 70 72 6f 63 20 70 61 74 68 20 75 72 69    2d 70 61 74 68 29 0a 20 20 22 53 65 72 76 65 20 | y.(proc.path.uri-path)..."Serve. | 
| 7fc0 | 61 20 66 69 6c 65 20 6c 69 73 74 69 6e 67 20 74    6f 20 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 | a.file.listing.to.the.client..If | 
| 7fe0 | 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74    68 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e | .PROC.is.T.use.the.`httpd-curren | 
| 8000 | 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 68 74 74 70 | t-proc'.as.the.process."...(http | 
| 8020 | 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72    29 0a 20 20 28 6c 65 74 20 28 28 74 69 74 6c 65 | d-discard-buffer)...(let.((title | 
| 8040 | 20 28 63 6f 6e 63 61 74 20 22 44 69 72 65 63 74    6f 72 79 20 6c 69 73 74 69 6e 67 20 66 6f 72 20 | .(concat."Directory.listing.for. | 
| 8060 | 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 69 6e | "........................(url-in | 
| 8080 | 73 65 72 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e    2d 73 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 | sert-entities-in-string.uri-path | 
| 80a0 | 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71    75 61 6c 20 22 2f 22 20 28 73 75 62 73 74 72 69 | )))).....(if.(equal."/".(substri | 
| 80c0 | 6e 67 20 75 72 69 2d 70 61 74 68 20 2d 31 29 29    0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 | ng.uri-path.-1)).........(with-t | 
| 80e0 | 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20    20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 | emp-buffer...........(httpd-log. | 
| 8100 | 60 28 64 69 72 65 63 74 6f 72 79 20 2c 70 61 74    68 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 | `(directory.,path))...........(i | 
| 8120 | 6e 73 65 72 74 20 22 3c 21 44 4f 43 54 59 50 45    20 68 74 6d 6c 3e 5c 6e 22 29 0a 20 20 20 20 20 | nsert."<!DOCTYPE.html>\n")...... | 
| 8140 | 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 68    74 6d 6c 3e 5c 6e 3c 68 65 61 64 3e 3c 74 69 74 | .....(insert."<html>\n<head><tit | 
| 8160 | 6c 65 3e 22 20 74 69 74 6c 65 20 22 3c 2f 74 69    74 6c 65 3e 3c 2f 68 65 61 64 3e 5c 6e 22 29 0a | le>".title."</title></head>\n"). | 
| 8180 | 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 22 3c 62 6f 64 79 3e 5c 6e 3c 68 32 3e 22 | ..........(insert."<body>\n<h2>" | 
| 81a0 | 20 74 69 74 6c 65 20 22 3c 2f 68 32 3e 5c 6e 3c    68 72 2f 3e 5c 6e 3c 75 6c 3e 22 29 0a 20 20 20 | .title."</h2>\n<hr/>\n<ul>").... | 
| 81c0 | 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28    66 69 6c 65 20 28 64 69 72 65 63 74 6f 72 79 2d | .......(dolist.(file.(directory- | 
| 81e0 | 66 69 6c 65 73 20 70 61 74 68 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 | files.path)).............(unless | 
| 8200 | 20 28 65 71 20 3f 2e 20 28 61 72 65 66 20 66 69    6c 65 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 | .(eq.?..(aref.file.0)).......... | 
| 8220 | 20 20 20 20 20 28 6c 65 74 2a 20 28 28 66 75 6c    6c 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e | .....(let*.((full.(expand-file-n | 
| 8240 | 61 6d 65 20 66 69 6c 65 20 70 61 74 68 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ame.file.path))................. | 
| 8260 | 20 20 20 20 20 28 74 61 69 6c 20 28 69 66 20 28    66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 | .....(tail.(if.(file-directory-p | 
| 8280 | 20 66 75 6c 6c 29 20 22 2f 22 20 22 22 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .full)."/".""))................. | 
| 82a0 | 20 20 20 20 20 28 66 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 | .....(f.(url-insert-entities-in- | 
| 82c0 | 73 74 72 69 6e 67 20 66 69 6c 65 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | string.file))................... | 
| 82e0 | 20 20 20 28 6c 20 28 75 72 6c 2d 68 65 78 69 66    79 2d 73 74 72 69 6e 67 20 66 69 6c 65 29 29 29 | ...(l.(url-hexify-string.file))) | 
| 8300 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 | .................(insert.(format | 
| 8320 | 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22    25 73 25 73 5c 22 3e 25 73 25 73 3c 2f 61 3e 3c | ."<li><a.href=\"%s%s\">%s%s</a>< | 
| 8340 | 2f 6c 69 3e 5c 6e 22 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 | /li>\n"......................... | 
| 8360 | 20 20 20 20 20 20 20 20 6c 20 74 61 69 6c 20 66    20 74 61 69 6c 29 29 29 29 29 0a 20 20 20 20 20 | ........l.tail.f.tail)))))...... | 
| 8380 | 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 2f    75 6c 3e 5c 6e 3c 68 72 2f 3e 5c 6e 3c 2f 62 6f | .....(insert."</ul>\n<hr/>\n</bo | 
| 83a0 | 64 79 3e 5c 6e 3c 2f 68 74 6d 6c 3e 22 29 0a 20    20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d | dy>\n</html>")...........(httpd- | 
| 83c0 | 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 6f 63    20 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 | send-header.proc."text/html;.cha | 
| 83e0 | 72 73 65 74 3d 75 74 66 2d 38 22 20 32 30 30 29    29 0a 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 | rset=utf-8".200)).......(httpd-r | 
| 8400 | 65 64 69 72 65 63 74 20 70 72 6f 63 20 28 63 6f    6e 63 61 74 20 75 72 69 2d 70 61 74 68 20 22 2f | edirect.proc.(concat.uri-path."/ | 
| 8420 | 22 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68    74 74 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a | ")))))..(defun.httpd--buffer-siz | 
| 8440 | 65 20 28 26 6f 70 74 69 6f 6e 61 6c 20 62 75 66    66 65 72 29 0a 20 20 22 47 65 74 20 74 68 65 20 | e.(&optional.buffer)..."Get.the. | 
| 8460 | 62 75 66 66 65 72 20 73 69 7a 65 20 69 6e 20 62    79 74 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 | buffer.size.in.bytes."...(let.(( | 
| 8480 | 6f 72 69 67 20 65 6e 61 62 6c 65 2d 6d 75 6c 74    69 62 79 74 65 2d 63 68 61 72 61 63 74 65 72 73 | orig.enable-multibyte-characters | 
| 84a0 | 29 0a 20 20 20 20 20 20 20 20 28 73 69 7a 65 20    30 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 | ).........(size.0)).....(with-cu | 
| 84c0 | 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 6f 72    20 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 | rrent-buffer.(or.buffer.(current | 
| 84e0 | 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20    28 73 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 | -buffer)).......(set-buffer-mult | 
| 8500 | 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20    20 28 73 65 74 66 20 73 69 7a 65 20 28 62 75 66 | ibyte.nil).......(setf.size.(buf | 
| 8520 | 66 65 72 2d 73 69 7a 65 29 29 0a 20 20 20 20 20    20 28 69 66 20 6f 72 69 67 20 28 73 65 74 2d 62 | fer-size)).......(if.orig.(set-b | 
| 8540 | 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20    6f 72 69 67 29 29 29 0a 20 20 20 20 73 69 7a 65 | uffer-multibyte.orig))).....size | 
| 8560 | 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64    2d 65 72 72 6f 72 20 28 70 72 6f 63 20 73 74 61 | ))..(defun.httpd-error.(proc.sta | 
| 8580 | 74 75 73 20 26 6f 70 74 69 6f 6e 61 6c 20 69 6e    66 6f 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 65 | tus.&optional.info)..."Send.an.e | 
| 85a0 | 72 72 6f 72 20 70 61 67 65 20 61 70 70 72 6f 70    72 69 61 74 65 20 66 6f 72 20 53 54 41 54 55 53 | rror.page.appropriate.for.STATUS | 
| 85c0 | 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2c 0a    6f 70 74 69 6f 6e 61 6c 6c 79 20 69 6e 73 65 72 | .to.the.client,.optionally.inser | 
| 85e0 | 74 69 6e 67 20 6f 62 6a 65 63 74 20 49 4e 46 4f    20 69 6e 74 6f 20 70 61 67 65 2e 20 49 66 20 50 | ting.object.INFO.into.page..If.P | 
| 8600 | 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65    0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d | ROC.is.T.use.the.`httpd-current- | 
| 8620 | 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 68 74 74 70 64 2d | proc'.as.the.process."...(httpd- | 
| 8640 | 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a    20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 65 | discard-buffer)...(httpd-log.`(e | 
| 8660 | 72 72 6f 72 20 2c 73 74 61 74 75 73 20 2c 69 6e    66 6f 29 29 0a 20 20 28 77 69 74 68 2d 74 65 6d | rror.,status.,info))...(with-tem | 
| 8680 | 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 6c 65    74 20 28 28 68 74 6d 6c 20 28 6f 72 20 28 63 64 | p-buffer.....(let.((html.(or.(cd | 
| 86a0 | 72 20 28 61 73 73 71 20 73 74 61 74 75 73 20 68    74 74 70 64 2d 68 74 6d 6c 29 29 20 22 22 29 29 | r.(assq.status.httpd-html))."")) | 
| 86c0 | 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74    65 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 | ...........(contents............ | 
| 86e0 | 28 69 66 20 28 6e 6f 74 20 69 6e 66 6f 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 | (if.(not.info)................"" | 
| 8700 | 0a 20 20 20 20 20 20 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 | ..............(with-temp-buffer. | 
| 8720 | 20 20 20 20 20 20 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 | ...............(let.((standard-o | 
| 8740 | 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d 62    75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 | utput.(current-buffer)))........ | 
| 8760 | 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 22 65 72 72 6f 72 3a 20 22 29 0a 20 20 20 | ..........(insert."error:.").... | 
| 8780 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    72 69 6e 63 20 69 6e 66 6f 29 0a 20 20 20 20 20 | ..............(princ.info)...... | 
| 87a0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73    65 72 74 20 22 5c 6e 22 29 0a 20 20 20 20 20 20 | ............(insert."\n")....... | 
| 87c0 | 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e    20 68 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b | ...........(when.httpd-show-back | 
| 87e0 | 74 72 61 63 65 2d 77 68 65 6e 2d 65 72 72 6f 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | trace-when-error................ | 
| 8800 | 20 20 20 20 28 69 6e 73 65 72 74 20 22 62 61 63    6b 74 72 61 63 65 3a 20 22 29 0a 20 20 20 20 20 | ....(insert."backtrace:.")...... | 
| 8820 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    72 69 6e 63 20 28 62 61 63 6b 74 72 61 63 65 29 | ..............(princ.(backtrace) | 
| 8840 | 29 0a 20 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 5c 6e | )....................(insert."\n | 
| 8860 | 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 68 74 74 70 64 2d 65 73 63 61 | "))..................(httpd-esca | 
| 8880 | 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | pe-html-buffer)................. | 
| 88a0 | 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29    29 29 29 29 29 0a 20 20 20 20 20 20 28 69 6e 73 | .(buffer-string)))))).......(ins | 
| 88c0 | 65 72 74 20 28 66 6f 72 6d 61 74 20 68 74 6d 6c    20 63 6f 6e 74 65 6e 74 73 29 29 29 0a 20 20 20 | ert.(format.html.contents))).... | 
| 88e0 | 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 74 65 78 74 2f 68 | .(httpd-send-header.proc."text/h | 
| 8900 | 74 6d 6c 22 20 73 74 61 74 75 73 29 29 29 0a 0a    28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 65 72 | tml".status)))..(defun.httpd--er | 
| 8920 | 72 6f 72 2d 73 61 66 65 20 28 26 72 65 73 74 20    61 72 67 73 29 0a 20 20 22 43 61 6c 6c 20 68 74 | ror-safe.(&rest.args)..."Call.ht | 
| 8940 | 74 70 64 2d 65 72 72 6f 72 20 61 6e 64 20 72 65    70 6f 72 74 20 66 61 69 6c 75 72 65 73 20 74 6f | tpd-error.and.report.failures.to | 
| 8960 | 20 2a 68 74 74 70 64 2a 2e 22 0a 20 20 28 63 6f    6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 | .*httpd*."...(condition-case.err | 
| 8980 | 6f 72 2d 63 61 73 65 0a 20 20 20 20 20 20 28 61    70 70 6c 79 20 23 27 68 74 74 70 64 2d 65 72 72 | or-case.......(apply.#'httpd-err | 
| 89a0 | 6f 72 20 61 72 67 73 29 0a 20 20 20 20 28 65 72    72 6f 72 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 | or.args).....(error.(httpd-log.` | 
| 89c0 | 28 68 61 72 64 2d 65 72 72 6f 72 20 2c 65 72 72    6f 72 2d 63 61 73 65 29 29 29 29 29 0a 0a 28 70 | (hard-error.,error-case)))))..(p | 
| 89e0 | 72 6f 76 69 64 65 20 27 73 69 6d 70 6c 65 2d 68    74 74 70 64 29 0a 0a 3b 3b 3b 20 73 69 6d 70 6c | rovide.'simple-httpd)..;;;.simpl | 
| 8a00 | 65 2d 68 74 74 70 64 2e 65 6c 20 65 6e 64 73 20    68 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 | e-httpd.el.ends.here............ | 
| 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 | ................................ |