| 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  | ................................ |